広告SDKにおける 新動画プレイヤーの実装 / Implementation of the new video player in the Advertising SDK

広告SDKにおける 新動画プレイヤーの実装 / Implementation of the new video player in the Advertising SDK

市川 和央 (LINE / 開発4センター / Ad Network & Performance室)
FiveSDK は Ad Network Dev チームで開発しているスマートフォンアプリ向け広告SDKで、ファイルを事前にキャッシュすることで動画広告の0秒ロードを実現しています。
このキャッシュによる0秒ロードを維持しつつ、事前にダウンロードしておくファイルサイズを小さくするために、我々は新しい動画プレイヤーを実装しました。
今回の発表では動画プレイヤー開発で得られた知見をお話しします。

53850955f15249a1a9dc49df6113e400?s=128

LINE Developers

July 29, 2020
Tweet

Transcript

  1. "E/FUXPSL%FWνʔϜ ,B[VIJSP*DIJLBXB ޿ࠂ4%,ʹ͓͚Δ ৽ಈըϓϨΠϠʔͷ࣮૷

  2. ࢢ઒࿨ԝ,B[VIJSP*DIJLBXB!QIFOBO w ౦ژ޻ۀେֶ ֶ࢜  ˠ౦ژ޻ۀେֶ म࢜  ˠ౦ژେֶ ത࢜

     ˠϑΝΠϒגࣜձࣾ ˠ-*/&גࣜձࣾ ٵऩ  w ത࢜՝ఔͰ͸ݴޠ಺%4-͓ΑͼߏจղੳΛઐ߈ w 4DBMB͕ॻ͚Δͱ͍͏͜ͱͰೖ͕ࣾͨ͠ ࠷ۙ͸0CKFDUJWF$΍+BWB ,PUMJO΍4XJGUΛॻ͘͜ͱ͕ଟ͍
  3. 'JWF4%, w εϚʔτϑΥϯΞϓϦ༻޿ࠂ4%, w ಈը޿ࠂઐ༻͔Βελʔτ͠ɺݱࡏ͸੩ࢭըʹ΋ରԠ $%/ "E4FSWFS #FBDPO4FSWFS "QQXJUI 'JWF4%,

    3FRVFTU"E 'FUDI 3FTPVSDF 3FQPSU
  4. Ωϟογϡ w 'JWF4%,ͷ͏͍ͨจ۟ͷ̍ͭ͸ඵϩʔυ w ಈըϑΝΠϧΛࣄલʹΩϟογϡ͓ͯ͘͠ w ಈը޿ࠂ͸࠷ॳͷ਺ඵͰޮՌ͕ܾ·ΔͷͰϩʔυ࣌ؒ͸௒ॏཁ w ಉҰ޿ࠂΛ܁Γฦ͠ݟΔ৔߹ʹ͸μ΢ϯϩʔυྔ΋ݮΔ w

    Ωϟογϡʹ͸༗ޮظ͕ؒ͋Δ w ݟΔ͔Ͳ͏͔Θ͔Βͳ͍ͷͰΩϟογϡαΠζ͸খ͓͖͍ͯͨ͘͞͠
  5. 1BSUJBM$BDIFϓϩδΣΫτ w ಈըͷ࠷ॳͷ෦෼͚ͩࣄલΩϟογϡ͢Δ w ϩʔυ͸Ұॠ w ࢒Γͷ෦෼͸μ΢ϯϩʔυ͠ͳ͕Β࠶ੜ w ೋ౓໨Ҏ߱ͷ͜ͱ΋ߟ͑ɺμ΢ϯϩʔυͨ͠σʔλ͸Ωϟογϡʹ௥Ճ w

    ࠶ੜ͕௥͍͍ͭͨΒετϦʔϛϯάʹ੾Γ͔ΘΔ w طଘͷಈըϓϨΠϠʔͩͱ్தͰσʔλιʔεΛม͑ΒΕͳ͍ w ৽ಈըϓϨΠϠʔΛ࣮૷͠Α͏ʂ
  6. ಈըϓϨΠϠʔͷجຊతͳߏ੒ w ಈըσʔλ͸αϯϓϧόοϑΝͱݺ͹ΕΔ΋ͷͷू߹ w ϏσΦͱΦʔσΟΦͷಉظ͕ඞཁ .1 ) 7JEFP4BNQMF#V⒎FST "VEJP4BNQMF#V⒎FST %FDPEF

    %FDPEF 7JEFP%BUB "VEJP%BUB 1MBZ7JEFP 1MBZ"VEJP 4ZOD5JNFS 1BSTF
  7. ৽ಈըϓϨΠϠʔͷجຊߏ੒ w ೖྗιʔε͕Ωϟογϡঢ়گʹΑΓμΠφϛοΫʹ੾ΓସΘΔ w ௨ৗͱҟͳΔͷ͸ೖྗଆͳͷͰɺσίʔμ౳͸04ͷ΋ͷΛར༻ 7JEFP4BNQMF#V⒎FST "VEJP4BNQMF#V⒎FST %FDPEF %FDPEF 7JEFP%BUB

    "VEJP%BUB 1MBZ7JEFP 1MBZ"VEJP 4ZOD5JNFS %BUB-PBE .FSHF 1BSTF $%/ $BDIF
  8. ৽ಈըϓϨΠϠʔͷجຊߏ੒ J04 w J04͸σίʔμ͔ΒϓϨΠϠʔ·Ͱ͕౷߹͞ΕͨΫϥεΛఏڙ͍ͯ͠Δ w ΍Δ΂͖͸αϯϓϧόοϑΝͷೖखɾ؅ཧͱϏσΦͱΦʔσΟΦͷಉظ 7JEFP4BNQMF#V⒎FST "VEJP4BNQMF#V⒎FST %FDPEF %FDPEF

    7JEFP%BUB "VEJP%BUB 1MBZ7JEFP 1MBZ"VEJP 4ZOD5JNFS "74BNQMF#V⒎FS%JTQMBZ-BZFS "VEJP2VFVF4FSWJDF $%/ $BDIF %BUB-PBE .FSHF 1BSTF
  9. ಈըϑΝΠϧಡΈࠐΈ w ϑΝΠϧஅยΛΩϟογϡ͔μ΢ϯϩʔμ͔Βऔಘ w ղੳͯ͠αϯϓϧόοϑΝΛ࡞ΓΩϡʔʹੵΉ w Ωϡʔʹे෼ͳྔ͕͋Ε͹ఀࢭ͠ɺ଍Γͳ͘ͳΕ͹࠶։͢Δ $%/ %PXOMPBEFS $BDIF

    -PBE'JMF'SBHNFOU 1BSTF #VJME4BNQMF#V⒎FS 7JEFP4BNQMF#V⒎FS2VFVF "VEJP4BNQMF#V⒎FS2VFVF %BUB.BOBHFS 8BUDI 1BDF$POUSPM
  10. αϯϓϧόοϑΝΩϡʔ w αϯϓϧόοϑΝ͸σʔλྔ͕େ͖͍ͷͰอ࣋ྔͷίϯτϩʔϧ͕ඞཁ w ͋Δఔ౓͸ͳ͍ͱ࠶ੜ͕ΧΫΧΫʹͳΔ͕ɺଟ͗͢ΔͱϝϞϦΛѹഭ͢Δ w ϏσΦͷαϯϓϧόοϑΝʹ͸ΩʔϑϨʔϜͱ͍͏֓೦͕͋Δ w Ұ౓ϙʔζ͢ΔͱσίʔυΛ࠶։͢Δʹ͸ΩʔϑϨʔϜ͔ΒೖΕ௚͢ඞཁ͕͋Δ ,FZ'SBNF

    $VSSFOU ,FZ'SBNF $VSSFOU (BSCBHF
  11. αϯϓϧόοϑΝΩϡʔͷσʔλߏ଄ w αϯϓϧόοϑΝ͸഑ྻͷ഑ྻΛ࡞ͬͯ؅ཧ͢Δ w ݱࡏҐஔΛؚΉ഑ྻΑΓ΋લͷ഑ྻ͸΋͏࢖Θͳ͍ͷͰ($Ͱ͖Δ w ݱࡏҐஔΑΓઌͷαϯϓϧόοϑΝ͕ৗʹ͋Δఔ౓ଘࡏ͢ΔΑ͏ʹ͢Ε͹ྑͦ͞͏ w ໰୊ݱࡏҐஔͱ͸ʁ ,FZ'SBNF

    ,FZ'SBNF $VSSFOU
  12. σίʔμ΁ͷαϯϓϧόοϑΝͷڙڅ w σίʔμ͸ೖྗόοϑΝΛ͓࣋ͬͯΓɺۭ͖͕ग़ͨΒใࠂͯ͘͠Δ w σίʔυதͷαϯϓϧͷҐஔͱ࠶ੜதͷαϯϓϧόοϑΝͷҐஔΛ྆ํ؅ཧ w ($͸࠶ੜҐஔϕʔεͰɺ௥ՃಡΈࠐΈ͸σίʔμͷҐஔϕʔεͰߦ͏ %FDPEFS 0VUQVU#V⒎FS 1MBZFS

    *OQVU#V⒎FS 1MBZFS1PT %FDPEFS1PT
  13. ಉظ؅ཧ w J04ͷ"74BNQMF#V⒎FS%JTQMBZ-BZFS͸$.5JNFCBTFͱಉظ࠶ੜ͞ΕΔ w ΦʔσΟΦͱ$.5JNFCBTFΛಉظͤ͞Ε͹ྑ͍ $.5JNFCBTF %FDPEF %FDPEF 7JEFP%BUB "VEJP%BUB

    1MBZ7JEFP 1MBZ"VEJP "74BNQMF#V⒎FS%JTQMBZ-BZFS "VEJP2VFVF4FSWJDF
  14. ΫϩοΫͱλΠϜϕʔε w ΫϩοΫ͸ৗʹਐΈଓ͚ΔλΠϚʔ w λΠϜϕʔε͸ΫϩοΫʹج४࣌ࠁΛઃఆͨ͠΋ͷ 5JNFCBTF .BTUFS$MPDL   

     4FU      
  15. ΦʔσΟΦͱͷಉظ w $."VEJP$MPDL͸ΦʔσΟΦͱಉҰϨʔτͰಈ࡞͢ΔΫϩοΫ w ج४࣌ࠁΛἧ͑Ε͹ಉظ͕࣮ݱͰ͖Δ $.5JNFCBTF $."VEJP$MPDL 4BNFSBUF 1MBZCBTFEPOUJNFCBTF .BTUFS

    $MPDL "EKVTUXIFO 1MBZCBDLTUBSUFE %FDPEF %FDPEF 7JEFP%BUB "VEJP%BUB 1MBZ7JEFP 1MBZ"VEJP "74BNQMF#V⒎FS%JTQMBZ-BZFS "VEJP2VFVF4FSWJDF
  16. ϛϡʔτ࣌ͷಈ࡞ w ϛϡʔτ࣌͸$."VEJP$MPDL͸σόΠεΫϩοΫͰಈ࡞͢Δ w $.5JNFCBTF͸ਖ਼ৗʹਐΈଓ͚ΔͨΊಈըͷ࠶ੜʹ͸ࢧো͕ͳ͍ $.5JNFCBTF $."VEJP$MPDL 1MBZCBTFEPOUJNFCBTF .BTUFS $MPDL

    %FDPEF 7JEFP%BUB 1MBZ7JEFP "74BNQMF#V⒎FS%JTQMBZ-BZFS %FWJDF$MPDL 4BNFSBUF
  17. ϛϡʔτղআ࣌ͷಈ࡞ w ϛϡʔτղআ࣌ʹ͸ج४࣌ࠁͷ࠶ઃఆ͕ඞཁ w ͜ΕΛ͢Δͱ࠶ੜ࣌ࠁ͕एׯ໭Δ͜ͱ͕͋Δ఺ʹ஫ҙ͕ඞཁ $.5JNFCBTF $."VEJP$MPDL 4BNFSBUF 1MBZCBTFEPOUJNFCBTF .BTUFS

    $MPDL "EKVTUXIFO 1MBZCBDLSFTUBSUFE %FDPEF %FDPEF 7JEFP%BUB "VEJP%BUB 1MBZ7JEFP 1MBZ"VEJP "74BNQMF#V⒎FS%JTQMBZ-BZFS "VEJP2VFVF4FSWJDF
  18. ·ͱΊ w αϯϓϧόοϑΝͷಡΈࠐΈͱ؅ཧ  ϑΝΠϧஅยΛΩϟογϡ͔μ΢ϯϩʔμ͔Βऔಘͯ͠ղੳ  αϯϓϧόοϑΝΛΩϡʔʹੵΉ  Ωϡʔ͸࠶ੜҐஔʹΑΓαϯϓϧόοϑΝΛ($͢Δ 

    σίʔμʹೖΕͨαϯϓϧͷҐஔʹΑΓ௥ՃϩʔυΛ͢Δ͔ΛܾΊΔ ͢ΔͳΒ΁  w ಉظ؅ཧ w ΦʔσΟΦͱಉҰϨʔτͰಈ࡞͢ΔΫϩοΫΛج४ͱ͢ΔλΠϜϕʔεΛར༻ w ΦʔσΟΦ࠶ੜ։࢝࣌ɾ࠶։࣌ʹλΠϜϕʔεΛิਖ਼͢Δ
  19. ॻ͖͖Εͳ͔ͬͨ࿩ w "OESPJEଆͷ࣮૷ w "OESPJEʹ͸σίʔμͱϓϨΠϠʔ͕౷߹͞ΕͨศརΫϥε͸ͳ͍ w σίʔυࡁΈͷσʔλͷ؅ཧ΋ඞཁʹͳΓɺΑΓෳࡶʹͳΔ w ϓϨΠϠʔશମͷঢ়ଶ؅ཧ w

    σʔλෆ଍ͷ৔߹ͷॲཧͱͦͷঢ়ଶ͔Βͷ෮ؼॲཧ w ࠶ੜ׬ྃ൑ఆͳͲ w ͦͷଞࡉ͔͍෦෼ͷৄࡉ w σʔλϩʔυͷϖʔείϯτϩʔϧͷৄࡉ w .1σʔλ͔ΒͲ͏΍ͬͯαϯϓϧόοϑΝΛߏங͢Δ͔
  20. .1ϑΝΠϧ w .1ϑΝΠϧ͸#PYͱ͍͏ߏ଄ͷू·Γ w #PY͸ωετ͢Δ w lNPPWzͷ#PYʹϝλσʔλ΍ଞͷ#PYͷղੳʹඞཁͳσʔλ͕֨ೲ͞Ε͍ͯΔ w Ͳ͔͜ΒͲ͜·Ͱ͕̍ͭͷαϯϓϧόοϑΝ͔ɺΩʔϑϨʔϜ͸Ͳ͔͜౳ lNEBUz#PY

    lNEBUz#PY lNEBUz#PY lNPPWz#PY lNWIEz #PY lUSBLz #PY
  21. .1ϑΝΠϧͷղੳ w σʔλ͕खʹೖΔ৔ॴͷ੾Ε໨͸#PYͷ੾Ε໨Ͱͳ͍Մೳੑ͕͋Δ w Ͳ͜ͰऴΘͬͯ΋࠶։Ͱ͖ΔΑ͏ʹܧଓΛอ࣋͢ΔܗͰύʔβΛߏங w ࣮σʔλͷೖΔlNEBUz͸ಛผѻ͍͢Δ w #PYશମΛղऍ͢Δલʹ෦෼σʔλ͔ΒαϯϓϧόοϑΝΛՄೳͳ͚ͩ࡞ͬͯฦ͢ lNEBUz#PY

    lNEBUz#PY lNEBUz#PY lNPPWz#PY lNWIEz #PY lUSBLz #PY