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
3
6.5k
AbemaTVを支えるアプリの優しさ / abematv_devcon_2017
ネットワーク帯域などの限られたシステムリソースを節約するために、Androidアプリで取り組んでいる優しさをいくつか紹介します。
Masaki Ogata
October 21, 2017
Tweet
Share
More Decks by Masaki Ogata
See All by Masaki Ogata
Jetpack Composeで始めるServer Cache State
ogaclejapan
2
210
Architecture Components - Lifecycle library
ogaclejapan
3
2.4k
How to keep data between orientation changes
ogaclejapan
7
2.5k
Your app name
ogaclejapan
1
2.9k
Flux de Relax :)
ogaclejapan
13
61k
Dagger2 has been released!
ogaclejapan
3
3.2k
Other Decks in Technology
See All in Technology
Mastraに入門してみた ~AWS CDKを添えて~
tsukuboshi
0
330
AIコーディングの最前線 〜活用のコツと課題〜
pharma_x_tech
4
2.5k
クラウド開発環境Cloud Workstationsの紹介
yunosukey
0
200
Dynamic Reteaming And Self Organization
miholovesq
3
650
CodePipelineのアクション統合から学ぶAWS CDKの抽象化技術 / codepipeline-actions-cdk-abstraction
gotok365
5
300
AIと共に乗り越える、 入社後2ヶ月の苦労と学習の軌跡
sai_kaneko
0
120
AWSで作るセキュアな認証基盤with OAuth mTLS / Secure Authentication Infrastructure with OAuth mTLS on AWS
kaminashi
0
190
3月のAWSアップデートを5分間でざっくりと!
kubomasataka
0
130
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
1
310
30代からでも遅くない! 内製開発の世界に飛び込み、最前線で戦うLLMアプリ開発エンジニアになろう
minorun365
PRO
15
4.5k
ドキュメント管理の理想と現実
kazuhe
1
230
【Λ(らむだ)】最近のアプデ情報 / RPALT20250422
lambda
0
120
Featured
See All Featured
Designing Experiences People Love
moore
141
24k
The Illustrated Children's Guide to Kubernetes
chrisshort
48
49k
Rebuilding a faster, lazier Slack
samanthasiow
81
8.9k
Rails Girls Zürich Keynote
gr2m
94
13k
The Power of CSS Pseudo Elements
geoffreycrofte
75
5.8k
Raft: Consensus for Rubyists
vanstee
137
6.9k
Unsuck your backbone
ammeep
670
57k
Put a Button on it: Removing Barriers to Going Fast.
kastner
60
3.8k
"I'm Feeling Lucky" - Building Great Search Experiences for Today's Users (#IAC19)
danielanewman
227
22k
GraphQLとの向き合い方2022年版
quramy
46
14k
RailsConf 2023
tenderlove
30
1.1k
jQuery: Nuts, Bolts and Bling
dougneiner
63
7.7k
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