ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4

AbemaTV, Inc.
AbemaTV, Inc.AbemaTV, Inc.
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
#EXTM3U 

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=300000

http://mycompany.com/240p.m3u8 

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1400000

http://mycompany.com/480p.m3u8 

… …

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=2400000

http://mycompany.com/720p.m3u8 

… …
#EXTM3U 

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=300000

http://mycompany.com/240p.m3u8 

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1400000

http://mycompany.com/480p.m3u8 

… …

#EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=2400000

http://mycompany.com/720p.m3u8 

… …
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
#EXT-X-VERSION:3 

#EXTM3U 

#EXT-X-TARGETDURATION:10 

#EXT-X-MEDIA-SEQUENCE:1

#EXTINF:10.0, 

http://media.example.com/segment1.ts 

#EXTINF:9.0, 

http://media.example.com/segment2.ts 

…
#EXT-X-VERSION:3 

#EXTM3U 

#EXT-X-TARGETDURATION:10 

#EXT-X-MEDIA-SEQUENCE:1

#EXTINF:10.0, 

http://media.example.com/segment1.ts 

#EXTINF:9.0, 

http://media.example.com/segment2.ts 

…
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
✕
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
public interface BandwidthMeter {
…
/** Returns the estimated bandwidth in bits/sec. */
long getBitrateEstimate();
…
}
class AbemaBandwidthMeter(
private val default: DefaultBandwidthMeter
) : BandwidthMeter by default, TransferListener<Any> by default {
private var limitBitrate = Long.MAX_VALUE
override fun getBitrateEstimate(): Long {
return Math.min(default.bitrateEstimate, limitBitrate)
}
fun setLimitBitrate(limitBitrate: Long) {
this.limitBitrate = limitBitrate
}
}
class AbemaBandwidthMeter(
private val default: DefaultBandwidthMeter
) : BandwidthMeter by default, TransferListener<Any> by default {
private var limitBitrate = Long.MAX_VALUE
override fun getBitrateEstimate(): Long {
return Math.min(default.bitrateEstimate, limitBitrate)
}
fun setLimitBitrate(limitBitrate: Long) {
this.limitBitrate = limitBitrate
}
}
override fun getBitrateEstimate(): Long {
return Math.min(default.bitrateEstimate, limitBitrate)
}
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
private fun stopVideo() {
…
sendPlayerLog();
}
private fun sendPlayerLog() {
// send log here
}
private fun pauseVideo() {
…
sendPlayerLog();
}
private val programMetaChanged = { meta ->
if (shouldSend) sendPlayerLog()
};
private fun stopVideo() {
…
sendPlayerLog();
}
private fun sendPlayerLog() {
// send log here
}}
private fun pauseVideo() {
…
sendPlayerLog();
}
private val programMetaChanged = { meta ->
if (shouldSend) sendPlayerLog()
};
✘
✘
private fun sendPlayerLog() {
// send log here
}}
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
…
val logTracker = PlayerLogTracker(…)
player.addTrackers(
logTracker,
…
)
}
class PlayerLogTracker(
metadataDetector: MetadataDetector,
stateDetector: PlaybackStateDetector,
sendPlayerLog: () -> Unit
) {
// call sendPlayerLog()
}
private fun sendPlayerLog() {
// send log here
}
@Override
public void onCreate(Bundle b) {
super.onCreate(b);
…
val logTracker = PlayerLogTracker(…)
player.addTrackers(
logTracker,
…
)
}
class PlayerLogTracker(
metadataDetector: MetadataDetector,
stateDetector: PlaybackStateDetector,
sendPlayerLog: () -> Unit
) {
// call sendPlayerLog()
}
✔
✔
✔
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4
✔
✔
✔
1 of 55

Recommended

Camera equipment presentation by
Camera equipment presentation Camera equipment presentation
Camera equipment presentation SarahMurrayy
329 views9 slides
Voyager 3 specification- www.ttbvs.com by
Voyager 3 specification- www.ttbvs.comVoyager 3 specification- www.ttbvs.com
Voyager 3 specification- www.ttbvs.comTTBVS
159 views11 slides
IP67 Full HD GMSL2 HDR camera for Jetson AGX Xavier by
IP67 Full HD GMSL2 HDR camera for Jetson AGX XavierIP67 Full HD GMSL2 HDR camera for Jetson AGX Xavier
IP67 Full HD GMSL2 HDR camera for Jetson AGX Xaviere-con Systems
116 views5 slides
Contract Testing Php-pact by
Contract Testing Php-pactContract Testing Php-pact
Contract Testing Php-pactDaniele D'Angeli
1.6K views62 slides
Pentest iot - SDR by
Pentest iot - SDRPentest iot - SDR
Pentest iot - SDRAries Syamsuddin
739 views86 slides
Umbrella for MSPs: Enterprise Grade Malware Protection & Containment by
Umbrella for MSPs: Enterprise Grade Malware Protection & ContainmentUmbrella for MSPs: Enterprise Grade Malware Protection & Containment
Umbrella for MSPs: Enterprise Grade Malware Protection & ContainmentOpenDNS
1.1K views42 slides

More Related Content

Similar to ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4

Any Given Thursday, Friday, Saturday: How Pac-12 Streams Hundreds of Live Eve... by
Any Given Thursday, Friday, Saturday: How Pac-12 Streams Hundreds of Live Eve...Any Given Thursday, Friday, Saturday: How Pac-12 Streams Hundreds of Live Eve...
Any Given Thursday, Friday, Saturday: How Pac-12 Streams Hundreds of Live Eve...Amazon Web Services
358 views55 slides
Mobile malware heuristics the path from 'eh' to pretty good' by
Mobile malware heuristics  the path from 'eh' to pretty good'Mobile malware heuristics  the path from 'eh' to pretty good'
Mobile malware heuristics the path from 'eh' to pretty good'Jimmy Shah
602 views20 slides
OFFPIPE Assistant Toolbox Presentation by
OFFPIPE Assistant Toolbox PresentationOFFPIPE Assistant Toolbox Presentation
OFFPIPE Assistant Toolbox PresentationOFFPIPE Assistant
328 views26 slides
The Knock Knock Protocol by
The Knock Knock ProtocolThe Knock Knock Protocol
The Knock Knock Protocoladil raja
1.3K views19 slides
How to build Spring services for Cloud Native platforms using the Open Servic... by
How to build Spring services for Cloud Native platforms using the Open Servic...How to build Spring services for Cloud Native platforms using the Open Servic...
How to build Spring services for Cloud Native platforms using the Open Servic...VMware Tanzu
338 views46 slides
Umbrella for MSPs: Cloud Security via N-able by
Umbrella for MSPs: Cloud Security via N-ableUmbrella for MSPs: Cloud Security via N-able
Umbrella for MSPs: Cloud Security via N-ableOpenDNS
1.2K views40 slides

Similar to ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4(11)

Any Given Thursday, Friday, Saturday: How Pac-12 Streams Hundreds of Live Eve... by Amazon Web Services
Any Given Thursday, Friday, Saturday: How Pac-12 Streams Hundreds of Live Eve...Any Given Thursday, Friday, Saturday: How Pac-12 Streams Hundreds of Live Eve...
Any Given Thursday, Friday, Saturday: How Pac-12 Streams Hundreds of Live Eve...
Mobile malware heuristics the path from 'eh' to pretty good' by Jimmy Shah
Mobile malware heuristics  the path from 'eh' to pretty good'Mobile malware heuristics  the path from 'eh' to pretty good'
Mobile malware heuristics the path from 'eh' to pretty good'
Jimmy Shah602 views
The Knock Knock Protocol by adil raja
The Knock Knock ProtocolThe Knock Knock Protocol
The Knock Knock Protocol
adil raja1.3K views
How to build Spring services for Cloud Native platforms using the Open Servic... by VMware Tanzu
How to build Spring services for Cloud Native platforms using the Open Servic...How to build Spring services for Cloud Native platforms using the Open Servic...
How to build Spring services for Cloud Native platforms using the Open Servic...
VMware Tanzu338 views
Umbrella for MSPs: Cloud Security via N-able by OpenDNS
Umbrella for MSPs: Cloud Security via N-ableUmbrella for MSPs: Cloud Security via N-able
Umbrella for MSPs: Cloud Security via N-able
OpenDNS1.2K views
[CB16] Background Story of "Operation neutralizing banking malware" and highl... by CODE BLUE
[CB16] Background Story of "Operation neutralizing banking malware" and highl...[CB16] Background Story of "Operation neutralizing banking malware" and highl...
[CB16] Background Story of "Operation neutralizing banking malware" and highl...
CODE BLUE395 views
PTZOptics® 2016 Partner Webinar by Paul Richards
PTZOptics® 2016 Partner WebinarPTZOptics® 2016 Partner Webinar
PTZOptics® 2016 Partner Webinar
Paul Richards11.7K views
[CB19] MalConfScan with Cuckoo: Automatic Malware Configuration Extraction Sy... by CODE BLUE
[CB19] MalConfScan with Cuckoo: Automatic Malware Configuration Extraction Sy...[CB19] MalConfScan with Cuckoo: Automatic Malware Configuration Extraction Sy...
[CB19] MalConfScan with Cuckoo: Automatic Malware Configuration Extraction Sy...
CODE BLUE421 views
How to build a digital platform for the city ? by Stéphane Schultz
How to build a digital platform for the city ?How to build a digital platform for the city ?
How to build a digital platform for the city ?
Stéphane Schultz2.1K views
Brinksway Tool Ltd Presentation by jonny davies
Brinksway Tool Ltd PresentationBrinksway Tool Ltd Presentation
Brinksway Tool Ltd Presentation
jonny davies607 views

More from AbemaTV, Inc.

世界の動画技術動向を見据えた AbemaTV の向かう先 / AbemaTV DevCon 2018 TrackA Final Session by
世界の動画技術動向を見据えた AbemaTV の向かう先 / AbemaTV DevCon 2018 TrackA Final Session世界の動画技術動向を見据えた AbemaTV の向かう先 / AbemaTV DevCon 2018 TrackA Final Session
世界の動画技術動向を見据えた AbemaTV の向かう先 / AbemaTV DevCon 2018 TrackA Final SessionAbemaTV, Inc.
10.6K views200 slides
「72時間ホンネテレビ」の負荷対策とその裏側 / AbemaTV DevCon 2018 TrackA Session A1 by
「72時間ホンネテレビ」の負荷対策とその裏側 / AbemaTV DevCon 2018 TrackA Session A1「72時間ホンネテレビ」の負荷対策とその裏側 / AbemaTV DevCon 2018 TrackA Session A1
「72時間ホンネテレビ」の負荷対策とその裏側 / AbemaTV DevCon 2018 TrackA Session A1AbemaTV, Inc.
3.4K views88 slides
Keynote:AbemaTVのエンジニア組織論と今後の技術戦略 / AbemaTV DevCon 2018 TrackA Keynote by
Keynote:AbemaTVのエンジニア組織論と今後の技術戦略 / AbemaTV DevCon 2018 TrackA KeynoteKeynote:AbemaTVのエンジニア組織論と今後の技術戦略 / AbemaTV DevCon 2018 TrackA Keynote
Keynote:AbemaTVのエンジニア組織論と今後の技術戦略 / AbemaTV DevCon 2018 TrackA KeynoteAbemaTV, Inc.
4.3K views72 slides
AbemaTVの広告システムと、データサイエンスの広告事業への貢献 / AbemaTV DevCon 2018 TrackA Session A4 by
AbemaTVの広告システムと、データサイエンスの広告事業への貢献 / AbemaTV DevCon 2018 TrackA Session A4AbemaTVの広告システムと、データサイエンスの広告事業への貢献 / AbemaTV DevCon 2018 TrackA Session A4
AbemaTVの広告システムと、データサイエンスの広告事業への貢献 / AbemaTV DevCon 2018 TrackA Session A4AbemaTV, Inc.
3.9K views82 slides
AbemaTV における推薦システム / AbemaTV DevCon 2018 TrackB Session B7 by
AbemaTV における推薦システム / AbemaTV DevCon 2018 TrackB Session B7AbemaTV における推薦システム / AbemaTV DevCon 2018 TrackB Session B7
AbemaTV における推薦システム / AbemaTV DevCon 2018 TrackB Session B7AbemaTV, Inc.
2.7K views36 slides
Kubernetes Jobによるバッチシステムのリソース最適化 / AbemaTV DevCon 2018 TrackB Session B6 by
Kubernetes Jobによるバッチシステムのリソース最適化 / AbemaTV DevCon 2018 TrackB Session B6Kubernetes Jobによるバッチシステムのリソース最適化 / AbemaTV DevCon 2018 TrackB Session B6
Kubernetes Jobによるバッチシステムのリソース最適化 / AbemaTV DevCon 2018 TrackB Session B6AbemaTV, Inc.
4.5K views43 slides

More from AbemaTV, Inc.(9)

世界の動画技術動向を見据えた AbemaTV の向かう先 / AbemaTV DevCon 2018 TrackA Final Session by AbemaTV, Inc.
世界の動画技術動向を見据えた AbemaTV の向かう先 / AbemaTV DevCon 2018 TrackA Final Session世界の動画技術動向を見据えた AbemaTV の向かう先 / AbemaTV DevCon 2018 TrackA Final Session
世界の動画技術動向を見据えた AbemaTV の向かう先 / AbemaTV DevCon 2018 TrackA Final Session
AbemaTV, Inc.10.6K views
「72時間ホンネテレビ」の負荷対策とその裏側 / AbemaTV DevCon 2018 TrackA Session A1 by AbemaTV, Inc.
「72時間ホンネテレビ」の負荷対策とその裏側 / AbemaTV DevCon 2018 TrackA Session A1「72時間ホンネテレビ」の負荷対策とその裏側 / AbemaTV DevCon 2018 TrackA Session A1
「72時間ホンネテレビ」の負荷対策とその裏側 / AbemaTV DevCon 2018 TrackA Session A1
AbemaTV, Inc.3.4K views
Keynote:AbemaTVのエンジニア組織論と今後の技術戦略 / AbemaTV DevCon 2018 TrackA Keynote by AbemaTV, Inc.
Keynote:AbemaTVのエンジニア組織論と今後の技術戦略 / AbemaTV DevCon 2018 TrackA KeynoteKeynote:AbemaTVのエンジニア組織論と今後の技術戦略 / AbemaTV DevCon 2018 TrackA Keynote
Keynote:AbemaTVのエンジニア組織論と今後の技術戦略 / AbemaTV DevCon 2018 TrackA Keynote
AbemaTV, Inc.4.3K views
AbemaTVの広告システムと、データサイエンスの広告事業への貢献 / AbemaTV DevCon 2018 TrackA Session A4 by AbemaTV, Inc.
AbemaTVの広告システムと、データサイエンスの広告事業への貢献 / AbemaTV DevCon 2018 TrackA Session A4AbemaTVの広告システムと、データサイエンスの広告事業への貢献 / AbemaTV DevCon 2018 TrackA Session A4
AbemaTVの広告システムと、データサイエンスの広告事業への貢献 / AbemaTV DevCon 2018 TrackA Session A4
AbemaTV, Inc.3.9K views
AbemaTV における推薦システム / AbemaTV DevCon 2018 TrackB Session B7 by AbemaTV, Inc.
AbemaTV における推薦システム / AbemaTV DevCon 2018 TrackB Session B7AbemaTV における推薦システム / AbemaTV DevCon 2018 TrackB Session B7
AbemaTV における推薦システム / AbemaTV DevCon 2018 TrackB Session B7
AbemaTV, Inc.2.7K views
Kubernetes Jobによるバッチシステムのリソース最適化 / AbemaTV DevCon 2018 TrackB Session B6 by AbemaTV, Inc.
Kubernetes Jobによるバッチシステムのリソース最適化 / AbemaTV DevCon 2018 TrackB Session B6Kubernetes Jobによるバッチシステムのリソース最適化 / AbemaTV DevCon 2018 TrackB Session B6
Kubernetes Jobによるバッチシステムのリソース最適化 / AbemaTV DevCon 2018 TrackB Session B6
AbemaTV, Inc.4.5K views
MリーグスタジオのARバーチャル技術 / AbemaTV DevCon 2018 TrackB Session B1 by AbemaTV, Inc.
MリーグスタジオのARバーチャル技術 / AbemaTV DevCon 2018 TrackB Session B1MリーグスタジオのARバーチャル技術 / AbemaTV DevCon 2018 TrackB Session B1
MリーグスタジオのARバーチャル技術 / AbemaTV DevCon 2018 TrackB Session B1
AbemaTV, Inc.2.8K views
AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2 by AbemaTV, Inc.
AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2
AbemaTVのアーキテクチャの変遷 / AbemaTV DevCon 2018 TrackA Session A2
AbemaTV, Inc.40.5K views
Why & how we build our feature flag system / AbemaTV DevCon 2018 TrackA Sessi... by AbemaTV, Inc.
Why & how we build our feature flag system / AbemaTV DevCon 2018 TrackA Sessi...Why & how we build our feature flag system / AbemaTV DevCon 2018 TrackA Sessi...
Why & how we build our feature flag system / AbemaTV DevCon 2018 TrackA Sessi...
AbemaTV, Inc.2.8K views

Recently uploaded

Scaling Knowledge Graph Architectures with AI by
Scaling Knowledge Graph Architectures with AIScaling Knowledge Graph Architectures with AI
Scaling Knowledge Graph Architectures with AIEnterprise Knowledge
53 views15 slides
State of the Union - Rohit Yadav - Apache CloudStack by
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStackShapeBlue
145 views53 slides
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue by
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlueMigrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlueShapeBlue
96 views20 slides
"Surviving highload with Node.js", Andrii Shumada by
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada Fwdays
40 views29 slides
NTGapps NTG LowCode Platform by
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform Mustafa Kuğu
141 views30 slides
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De... by
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...Moses Kemibaro
29 views38 slides

Recently uploaded(20)

State of the Union - Rohit Yadav - Apache CloudStack by ShapeBlue
State of the Union - Rohit Yadav - Apache CloudStackState of the Union - Rohit Yadav - Apache CloudStack
State of the Union - Rohit Yadav - Apache CloudStack
ShapeBlue145 views
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue by ShapeBlue
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlueMigrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue
Migrating VMware Infra to KVM Using CloudStack - Nicolas Vazquez - ShapeBlue
ShapeBlue96 views
"Surviving highload with Node.js", Andrii Shumada by Fwdays
"Surviving highload with Node.js", Andrii Shumada "Surviving highload with Node.js", Andrii Shumada
"Surviving highload with Node.js", Andrii Shumada
Fwdays40 views
NTGapps NTG LowCode Platform by Mustafa Kuğu
NTGapps NTG LowCode Platform NTGapps NTG LowCode Platform
NTGapps NTG LowCode Platform
Mustafa Kuğu141 views
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De... by Moses Kemibaro
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...
Don’t Make A Human Do A Robot’s Job! : 6 Reasons Why AI Will Save Us & Not De...
Moses Kemibaro29 views
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N... by James Anderson
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
GDG Cloud Southlake 28 Brad Taylor and Shawn Augenstein Old Problems in the N...
James Anderson133 views
Data Integrity for Banking and Financial Services by Precisely
Data Integrity for Banking and Financial ServicesData Integrity for Banking and Financial Services
Data Integrity for Banking and Financial Services
Precisely56 views
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue by ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlueElevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
Elevating Privacy and Security in CloudStack - Boris Stoyanov - ShapeBlue
ShapeBlue96 views
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online by ShapeBlue
KVM Security Groups Under the Hood - Wido den Hollander - Your.OnlineKVM Security Groups Under the Hood - Wido den Hollander - Your.Online
KVM Security Groups Under the Hood - Wido den Hollander - Your.Online
ShapeBlue102 views
DRBD Deep Dive - Philipp Reisner - LINBIT by ShapeBlue
DRBD Deep Dive - Philipp Reisner - LINBITDRBD Deep Dive - Philipp Reisner - LINBIT
DRBD Deep Dive - Philipp Reisner - LINBIT
ShapeBlue62 views
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas... by Bernd Ruecker
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
iSAQB Software Architecture Gathering 2023: How Process Orchestration Increas...
Bernd Ruecker50 views
HTTP headers that make your website go faster - devs.gent November 2023 by Thijs Feryn
HTTP headers that make your website go faster - devs.gent November 2023HTTP headers that make your website go faster - devs.gent November 2023
HTTP headers that make your website go faster - devs.gent November 2023
Thijs Feryn28 views
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P... by ShapeBlue
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
Developments to CloudStack’s SDN ecosystem: Integration with VMWare NSX 4 - P...
ShapeBlue82 views
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院 by IttrainingIttraining
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
【USB韌體設計課程】精選講義節錄-USB的列舉過程_艾鍗學院
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue by ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlueVNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
VNF Integration and Support in CloudStack - Wei Zhou - ShapeBlue
ShapeBlue85 views
Business Analyst Series 2023 - Week 3 Session 5 by DianaGray10
Business Analyst Series 2023 -  Week 3 Session 5Business Analyst Series 2023 -  Week 3 Session 5
Business Analyst Series 2023 - Week 3 Session 5
DianaGray10369 views

ExoPlayerで最適な視聴体験を届けるために / AbemaTV DevCon 2018 TrackB Session B4

  • 9. #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=300000 http://mycompany.com/240p.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1400000 http://mycompany.com/480p.m3u8 … … #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=2400000 http://mycompany.com/720p.m3u8 … …
  • 10. #EXTM3U #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=300000 http://mycompany.com/240p.m3u8 #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=1400000 http://mycompany.com/480p.m3u8 … … #EXT-X-STREAM-INF:PROGRAM-ID=1, BANDWIDTH=2400000 http://mycompany.com/720p.m3u8 … …
  • 12. #EXT-X-VERSION:3 #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:10.0, http://media.example.com/segment1.ts #EXTINF:9.0, http://media.example.com/segment2.ts …
  • 13. #EXT-X-VERSION:3 #EXTM3U #EXT-X-TARGETDURATION:10 #EXT-X-MEDIA-SEQUENCE:1 #EXTINF:10.0, http://media.example.com/segment1.ts #EXTINF:9.0, http://media.example.com/segment2.ts …
  • 21.
  • 25. public interface BandwidthMeter { … /** Returns the estimated bandwidth in bits/sec. */ long getBitrateEstimate(); … }
  • 26. class AbemaBandwidthMeter( private val default: DefaultBandwidthMeter ) : BandwidthMeter by default, TransferListener<Any> by default { private var limitBitrate = Long.MAX_VALUE override fun getBitrateEstimate(): Long { return Math.min(default.bitrateEstimate, limitBitrate) } fun setLimitBitrate(limitBitrate: Long) { this.limitBitrate = limitBitrate } }
  • 27. class AbemaBandwidthMeter( private val default: DefaultBandwidthMeter ) : BandwidthMeter by default, TransferListener<Any> by default { private var limitBitrate = Long.MAX_VALUE override fun getBitrateEstimate(): Long { return Math.min(default.bitrateEstimate, limitBitrate) } fun setLimitBitrate(limitBitrate: Long) { this.limitBitrate = limitBitrate } } override fun getBitrateEstimate(): Long { return Math.min(default.bitrateEstimate, limitBitrate) }
  • 46. private fun stopVideo() { … sendPlayerLog(); } private fun sendPlayerLog() { // send log here } private fun pauseVideo() { … sendPlayerLog(); } private val programMetaChanged = { meta -> if (shouldSend) sendPlayerLog() };
  • 47. private fun stopVideo() { … sendPlayerLog(); } private fun sendPlayerLog() { // send log here }} private fun pauseVideo() { … sendPlayerLog(); } private val programMetaChanged = { meta -> if (shouldSend) sendPlayerLog() }; ✘ ✘
  • 48. private fun sendPlayerLog() { // send log here }} @Override public void onCreate(Bundle b) { super.onCreate(b); … val logTracker = PlayerLogTracker(…) player.addTrackers( logTracker, … ) } class PlayerLogTracker( metadataDetector: MetadataDetector, stateDetector: PlaybackStateDetector, sendPlayerLog: () -> Unit ) { // call sendPlayerLog() }
  • 49. private fun sendPlayerLog() { // send log here } @Override public void onCreate(Bundle b) { super.onCreate(b); … val logTracker = PlayerLogTracker(…) player.addTrackers( logTracker, … ) } class PlayerLogTracker( metadataDetector: MetadataDetector, stateDetector: PlaybackStateDetector, sendPlayerLog: () -> Unit ) { // call sendPlayerLog() } ✔ ✔ ✔