Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Features
Speaker Deck
PRO
Sign in
Sign up for free
Search
Search
AbemaTVを支えるアプリの優しさ / abematv_devcon_2017
Search
Masaki Ogata
October 21, 2017
Technology
6.9k
3
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
AbemaTVを支えるアプリの優しさ / abematv_devcon_2017
ネットワーク帯域などの限られたシステムリソースを節約するために、Androidアプリで取り組んでいる優しさをいくつか紹介します。
Masaki Ogata
October 21, 2017
More Decks by Masaki Ogata
See All by Masaki Ogata
Jetpack Composeで始めるServer Cache State
ogaclejapan
2
320
Architecture Components - Lifecycle library
ogaclejapan
3
2.9k
How to keep data between orientation changes
ogaclejapan
7
2.7k
Your app name
ogaclejapan
1
3k
Flux de Relax :)
ogaclejapan
13
62k
Dagger2 has been released!
ogaclejapan
3
3.4k
Other Decks in Technology
See All in Technology
AI-DLC実践録_フルサイクル開発への挑戦
miyuc
0
390
도구에서 동료까지: 10년차 AI 스타트업의 AI 적응기
inureyes
PRO
1
330
自宅NWにISR4331を導入してみた話
okaits
0
120
コーチングの奥義 何もしないテクニック
jinwatanabe
0
150
AI時代のアウトプット――変わったこと、変わらないこと / Devsumi 2026 Kansai #devsumi
jnchito
0
520
地震情報アプリを作ってみた
yama3133
1
110
2027年のMetricKit
kantacky
0
160
猫付きpingコマンドを自作
uyuki234
0
290
私がブラウザを自作したくなった理由
supurazako
1
280
Android skills に学ぶ
kokiko
0
160
:syncing_time:
sksat
2
520
医療の現場を変革に挑戦した半年間の軌跡 - PythonとAIで現場を変える / From Code to Care
soudai
PRO
1
580
Featured
See All Featured
From π to Pie charts
rasagy
0
320
New Earth Scene 8
popppiees
3
2.5k
Measuring & Analyzing Core Web Vitals
bluesmoon
9
970
Fight the Zombie Pattern Library - RWD Summit 2016
marcelosomers
234
17k
Statistics for Hackers
jakevdp
799
230k
Test your architecture with Archunit
thirion
2
2.4k
We Analyzed 250 Million AI Search Results: Here's What I Found
joshbly
1
1.8k
The Web Performance Landscape in 2024 [PerfNow 2024]
tammyeverts
12
1.3k
Game over? The fight for quality and originality in the time of robots
wayneb77
1
250
AI Search: Where Are We & What Can We Do About It?
aleyda
0
7.8k
Building a Scalable Design System with Sketch
lauravandoore
463
34k
AI: The stuff that nobody shows you
jnunemaker
PRO
9
940
Transcript
"CFNB57Λࢧ͑Δ ΞϓϦͷ༏͠͞
.BTBLJ0HBUB "OESPJE&OHJOFFS"CFNB57 *OD IUUQTHJUIVCDPNPHBDMFKBQBO !PHBDMFKBQBO
༏͠͞ͱʁ
Զࢯɿʮ͍ͨͩ·ʔʯ Շࢯɿʮ͓ؼΓʔɺ͝൧࡞ͬͯ͋ΔΑɻʯ ԶࢯɿʢʹҰͷحʜʣ༏͠͞ʂʂ
lࢥ͍Γ͕͋ͬͯz ग़య.BDࣙॻΞϓϦεʔύʔେࣙྛ
ΞϓϦͷ༏͠͞ͱ
ωοτϫʔΫ௨৴Λ͍ͩ͡ʹ ΞϓϦͷͤ͘͞ΜGPS6TFS όοςϦʔΛ͔ͭ͏ͳ ΨϯΨϯ͍͜͏ͥ Ξχϝʔγϣϯͤ͞Ζ
6*ʗ69Λ͍ͩ͡ʹ ΞϓϦͷͤ͘͞ΜGPS4ZTUFN ωοτϫʔΫଳҬΛ͏ͳ Ωϟογϡ͠Α͏ͥ ίετͰӡ༻ͤ͞Ζ
lωοτϫʔΫ௨৴ྔΛ͑Δz "CFNB57ΞϓϦͷ༏͠͞
"CFNB57Λࢧ͑Δ ΞϓϦͷ༏͠͞ ʙ"OESPJEΞϓϦͷऔΓΈʙ
͕ɺɺ
݄ɻ ⚡࣌ؒੜ์ૹಛ൪ܾఆ⚡
ෛՙରࡦΛਐΊͨ݁Ռɺ
༏͠͞ʹෆඋ͕͋Γ·ͨ͠
"CFNB57Λࢧ͑Δ ΞϓϦͷ༏͠͞
"CFNB57Λࢧ͑Δ ΞϓϦͷ༏͠͞ XJUI
ϓϨΠϦετऔಘ͠ա͗
)-4ʢ)551-JWF4USFBNJOHʣ QMBZMJTU@MJWFNV &95.6 &9597&34*0/ &9595"3(&5%63"5*0/ &959.&%*"4&26&/$& &95*/' UT &95*/'
UT &95*/' UT
)-4ʢ)551-JWF4USFBNJOHʣ QMBZMJTU@MJWFNV &95.6 &9597&34*0/ &9595"3(&5%63"5*0/ &959.&%*"4&26&/$& &95*/' UT &95*/'
UT &95*/' UT UT
)-4ʢ)551-JWF4USFBNJOHʣ QMBZMJTU@MJWFNV &95.6 &9597&34*0/ &9595"3(&5%63"5*0/ &959.&%*"4&26&/$& &95*/' UT &95*/'
UT &95*/' UT UT UT
)-4ʢ)551-JWF4USFBNJOHʣ QMBZMJTU@MJWFNV &95.6 &9597&34*0/ &9595"3(&5%63"5*0/ &959.&%*"4&26&/$& &95*/' UT &95*/'
UT &95*/' UT UT UT UT
)-4ʢ)551-JWF4USFBNJOHʣ QMBZMJTU@MJWFNV &95.6 &9597&34*0/ &9595"3(&5%63"5*0/ &959.&%*"4&26&/$& &95*/' UT &95*/'
UT &95*/' UT UT UT UT
)-4ʢ)551-JWF4USFBNJOHʣ QMBZMJTU@MJWFNV &95.6 &9597&34*0/ &9595"3(&5%63"5*0/ &959.&%*"4&26&/$& &95*/' UT &95*/'
UT &95*/' UT UT UT UT UT
)-4"EBQUJWF4USFBNJOH NBTUFS@QMBZMJTUNV &95.6 &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ
#"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV
)-4"EBQUJWF4USFBNJOH NBTUFS@QMBZMJTUNV &95.6 &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ
#"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV NV Q
)-4"EBQUJWF4USFBNJOH NBTUFS@QMBZMJTUNV &95.6 &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ
#"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV NV Q NV Q
֤σόΠεͷϓϨΠϦετऔಘִؒ ϥΠϒ৴Ͱ54ϑΝΠϧͷηάϝϯτִ͕ؒඵͷ߹ɻ 1$ 8&# J04 "OESPJE
֤σόΠεͷϓϨΠϦετऔಘִؒ ϥΠϒ৴Ͱ54ϑΝΠϧͷηάϝϯτִ͕ؒඵͷ߹ɻ 1$ 8&# J04 "OESPJE ඵִؒ ඵִؒ
֤σόΠεͷϓϨΠϦετऔಘִؒ ϥΠϒ৴Ͱ54ϑΝΠϧͷηάϝϯτִ͕ؒඵͷ߹ɻ 1$ 8&# J04 "OESPJE ඵִؒ ඵִؒ ඵִؒ
ŧŖƃ
݁ɺ&YP1MBZFSͷෆ۩߹Ͱͨ͠ɻɻ IUUQTHJUIVCDPNHPPHMF &YP1MBZFSQVMM
ߴϏοτϨʔτΓସΘΓޙQ͕औಘ͞Εଓ͚͍ͯͨ NBTUFS@QMBZMJTUNV &95.6 &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ
#"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV NV Q NV Q
͜ΕͰղফ
ը໘ʹ࠷దͳϏοτϨʔτ੍ޚ
"CFNB57։ہॳ݄ ΞϓϦԣը໘ݻఆͰࢹௌ໘ͷը໘αΠζύλʔϯͷΈɻ
"CFNB57։ہप݄ ΞϓϦैདྷͷԣը໘ʹՃ͑ɺॎը໘ͰͷࢹௌʹରԠɻ
"CFNB57։ہप݄ ͞Βʹɺ"OESPJE৽ػೳͷϚϧνΟϯυͰࢹௌՄೳʹɻ
ࢹௌ໘ͷύλʔϯ͕ෳࡶԽʜ
)-4"EBQUJWF4USFBNJOH NBTUFS@QMBZMJTUNV &95.6 &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ
#"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV NV Q NV Q
)-4"EBQUJWF4USFBNJOH NBTUFS@QMBZMJTUNV &95.6 &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ
#"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV NV Q NV Q Q 'VMM)% Y
)-4"EBQUJWF4USFBNJOH NBTUFS@QMBZMJTUNV &95.6 &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ
#"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV NV Q NV Q Y Q 'VMM)% Y
)-4"EBQUJWF4USFBNJOH NBTUFS@QMBZMJTUNV &95.6 &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ
#"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV NV Q NV Q Y Q 'VMM)% Y , ഒͷ௨৴ྔʜ
)-4"EBQUJWF4USFBNJOH NBTUFS@QMBZMJTUNV &95.6 &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ
#"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV &959ʜ #"/%8*%5) QMBZMJTU@MJWFNV NV Q NV Q Y Q 'VMM)% Y Q )% Y
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ ͍͔ͭ͘ͷ݅ΛΈ߹ΘͤͯϏοτϨʔτΛಈతʹมߋ͍ͯ͠Δɻ ը࣭ઃఆ ௨৴ճઢ ը໘෯ ࣗಈ ࠷ߴը࣭ ߴը࣭ ʜ 8*'*
.PCJMF ʜ 8JOEPX෯ 7JFX෯ ʜ 04WFS YPSIJHIFS Y ʜ
public class VideoBitrateAdjuster { private final VideoBitrateTable auto = new
AutoBitrateTable(); private final VideoBitrateTable legacy = new LegacyBitrateTable(); private final VideoBitrateTable manual = new ManualBitrateTable(); public VideoBitrate adjust(@Px int w, VideoQuality quality, NetworkState network) { if (quality == AUTO) { if (isLegacyPlatform()) { return legacy.lookup(w, quality, network); } else { return auto.lookup(w, quality, network); } } else { return manual.lookup(w, quality, network); } } "CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ ˞αϯϓϧίʔυͰ͢
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ public class LimitedBandwidthMeter implements BandwidthMeter { ... public setMaxBitrate(long
bitrate) { ... } public long getBitrateEstimate() { return Math.min(bitrateEstimate, maxBitrate); } ... } package com.google.android.exoplayer2.upstream; public interface BandwidthMeter { long getBitrateEstimate(); } ˞αϯϓϧίʔυͰ͢
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer NV UT
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 8*'* QY NV UT
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 8*'* QY NV UT
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 8*'* QY Q NV
UT
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 8*'* QY Q CQT
NV UT
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 8*'* QY Q CQT
NBY#JUSBUFQ NV UT
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 8*'* QY Q CQT
NBY#JUSBUFQ NV UT
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 8*'* QY Q CQT
NBY#JUSBUFQ NV UT
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 8*'* QY Q CQT
NBY#JUSBUFQ NV UT Q
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 8*'* QY Q CQT
NBY#JUSBUFQ NV UT Q Q
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 .0#*-& QY Q CQT
NBY#JUSBUFQ NV UT Q Q
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 .0#*-& QY Q CQT
NBY#JUSBUFQ NV UT Q Q
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 .0#*-& QY Q CQT
NBY#JUSBUFQ NV UT Q Q
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 .0#*-& QY Q CQT
NBY#JUSBUFQ NV UT Q Q
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 .0#*-& QY Q CQT
NBY#JUSBUFQ NV UT Q Q
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 .0#*-& QY Q CQT
NBY#JUSBUFQ NV UT Q Q
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 .0#*-& QY Q CQT
NBY#JUSBUFQ NV UT Q Q
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 .0#*-& QY Q CQT
NBY#JUSBUFQ NV UT Q Q
"CFNB57ΞϓϦͷϏοτϨʔτ੍ޚʢ"OESPJEʣ VideoBitrateAdjuster PlayerBitrateChanger LimitedBandwidthMeter ExoPlayer "650 .0#*-& QY Q CQT
NBY#JUSBUFQ NV UT Q Q
ͯ͢௨৴ྔΛ͑ΔͨΊ
·ͱΊ
·ͱΊ wϓϨΠϦετऔಘ͠ա͗ ࠷৽ͷ&YP1MBZFSʢSʣΛར༻͢ΕղফͰ͖Δɻ wը໘ʹ࠷దͳϏοτϨʔτ੍ޚ ଳҬ্ݶΛઃఆ͢Δ͜ͱͰແବͳ௨৴ྔΛ͑Δ͜ͱ͕Ͱ͖Δɻ
͝ਗ਼ௌ͋Γ͕ͱ͏͍͟͝·ͨ͠ɻ
8F`SFIJSJOH IUUQTBCFNBHO[SBT