SlideShare uma empresa Scribd logo
1 de 55
#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 

… …
#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 

…
✕
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)
}
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()
}
✔
✔
✔
✔
✔
✔

Mais conteúdo relacionado

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

OFFPIPE Assistant Toolbox Presentation
OFFPIPE Assistant Toolbox PresentationOFFPIPE Assistant Toolbox Presentation
OFFPIPE Assistant Toolbox PresentationOFFPIPE Assistant
 
How to free your computer from virus-shara aguirre-director of happiness.m4v
How to free your computer from virus-shara aguirre-director of happiness.m4vHow to free your computer from virus-shara aguirre-director of happiness.m4v
How to free your computer from virus-shara aguirre-director of happiness.m4vShara Aguirre
 
The Knock Knock Protocol
The Knock Knock ProtocolThe Knock Knock Protocol
The Knock Knock Protocoladil raja
 
Umbrella for MSPs: Cloud Security via N-able
Umbrella for MSPs: Cloud Security via N-ableUmbrella for MSPs: Cloud Security via N-able
Umbrella for MSPs: Cloud Security via N-ableOpenDNS
 
[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...
[CB16] Background Story of "Operation neutralizing banking malware" and highl...CODE BLUE
 
PTZOptics® 2016 Partner Webinar
PTZOptics® 2016 Partner WebinarPTZOptics® 2016 Partner Webinar
PTZOptics® 2016 Partner WebinarPaul Richards
 
Iptv m3u france new update channels 09 11-2017
Iptv m3u france new update channels 09 11-2017Iptv m3u france new update channels 09 11-2017
Iptv m3u france new update channels 09 11-2017Hillal Didi
 
Collamat shall be the preferred producer of labelling heads and standardized ...
Collamat shall be the preferred producer of labelling heads and standardized ...Collamat shall be the preferred producer of labelling heads and standardized ...
Collamat shall be the preferred producer of labelling heads and standardized ...PT Asia Ltd.
 
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 ?
How to build a digital platform for the city ?Stéphane Schultz
 
Brinksway Tool Ltd Presentation
Brinksway Tool Ltd PresentationBrinksway Tool Ltd Presentation
Brinksway Tool Ltd Presentationjonny davies
 

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

OFFPIPE Assistant Toolbox Presentation
OFFPIPE Assistant Toolbox PresentationOFFPIPE Assistant Toolbox Presentation
OFFPIPE Assistant Toolbox Presentation
 
How to free your computer from virus-shara aguirre-director of happiness.m4v
How to free your computer from virus-shara aguirre-director of happiness.m4vHow to free your computer from virus-shara aguirre-director of happiness.m4v
How to free your computer from virus-shara aguirre-director of happiness.m4v
 
The Knock Knock Protocol
The Knock Knock ProtocolThe Knock Knock Protocol
The Knock Knock Protocol
 
Umbrella for MSPs: Cloud Security via N-able
Umbrella for MSPs: Cloud Security via N-ableUmbrella for MSPs: Cloud Security via N-able
Umbrella for MSPs: Cloud Security via N-able
 
[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...
[CB16] Background Story of "Operation neutralizing banking malware" and highl...
 
PTZOptics® 2016 Partner Webinar
PTZOptics® 2016 Partner WebinarPTZOptics® 2016 Partner Webinar
PTZOptics® 2016 Partner Webinar
 
Iptv m3u france new update channels 09 11-2017
Iptv m3u france new update channels 09 11-2017Iptv m3u france new update channels 09 11-2017
Iptv m3u france new update channels 09 11-2017
 
Collamat shall be the preferred producer of labelling heads and standardized ...
Collamat shall be the preferred producer of labelling heads and standardized ...Collamat shall be the preferred producer of labelling heads and standardized ...
Collamat shall be the preferred producer of labelling heads and standardized ...
 
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 ?
How to build a digital platform for the city ?
 
Brinksway Tool Ltd Presentation
Brinksway Tool Ltd PresentationBrinksway Tool Ltd Presentation
Brinksway Tool Ltd Presentation
 

Mais de AbemaTV, Inc.

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

Mais de AbemaTV, Inc. (9)

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

Último

TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingEdi Saputra
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfOverkill Security
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdfSandro Moreira
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century educationjfdjdjcjdnsjd
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...DianaGray10
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MIND CTI
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024The Digital Insurer
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyKhushali Kathiriya
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FMESafe Software
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfOrbitshub
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Victor Rentea
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...apidays
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsNanddeep Nachan
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistandanishmna97
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoffsammart93
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAndrey Devyatkin
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusZilliz
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...apidays
 

Último (20)

+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
+971581248768>> SAFE AND ORIGINAL ABORTION PILLS FOR SALE IN DUBAI AND ABUDHA...
 
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data DiscoveryTrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
TrustArc Webinar - Unlock the Power of AI-Driven Data Discovery
 
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost SavingRepurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
Repurposing LNG terminals for Hydrogen Ammonia: Feasibility and Cost Saving
 
Cyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdfCyberprint. Dark Pink Apt Group [EN].pdf
Cyberprint. Dark Pink Apt Group [EN].pdf
 
[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf[BuildWithAI] Introduction to Gemini.pdf
[BuildWithAI] Introduction to Gemini.pdf
 
presentation ICT roal in 21st century education
presentation ICT roal in 21st century educationpresentation ICT roal in 21st century education
presentation ICT roal in 21st century education
 
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
Connector Corner: Accelerate revenue generation using UiPath API-centric busi...
 
MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024MINDCTI Revenue Release Quarter One 2024
MINDCTI Revenue Release Quarter One 2024
 
AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024AXA XL - Insurer Innovation Award Americas 2024
AXA XL - Insurer Innovation Award Americas 2024
 
Artificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : UncertaintyArtificial Intelligence Chap.5 : Uncertainty
Artificial Intelligence Chap.5 : Uncertainty
 
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers:  A Deep Dive into Serverless Spatial Data and FMECloud Frontiers:  A Deep Dive into Serverless Spatial Data and FME
Cloud Frontiers: A Deep Dive into Serverless Spatial Data and FME
 
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdfRising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
Rising Above_ Dubai Floods and the Fortitude of Dubai International Airport.pdf
 
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
Modular Monolith - a Practical Alternative to Microservices @ Devoxx UK 2024
 
Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...Apidays New York 2024 - The value of a flexible API Management solution for O...
Apidays New York 2024 - The value of a flexible API Management solution for O...
 
MS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectorsMS Copilot expands with MS Graph connectors
MS Copilot expands with MS Graph connectors
 
CNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In PakistanCNIC Information System with Pakdata Cf In Pakistan
CNIC Information System with Pakdata Cf In Pakistan
 
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot TakeoffStrategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
Strategize a Smooth Tenant-to-tenant Migration and Copilot Takeoff
 
AWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of TerraformAWS Community Day CPH - Three problems of Terraform
AWS Community Day CPH - Three problems of Terraform
 
Exploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with MilvusExploring Multimodal Embeddings with Milvus
Exploring Multimodal Embeddings with Milvus
 
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
Apidays New York 2024 - Passkeys: Developing APIs to enable passwordless auth...
 

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

  • 1.
  • 2.
  • 3.
  • 4.
  • 5.
  • 6.
  • 7.
  • 8.
  • 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 … …
  • 11.
  • 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 …
  • 14.
  • 15.
  • 16.
  • 17.
  • 18.
  • 19.
  • 20.
  • 21.
  • 22.
  • 23.
  • 24.
  • 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) }
  • 28.
  • 29.
  • 30.
  • 31.
  • 32.
  • 33.
  • 34.
  • 35.
  • 36.
  • 37.
  • 38.
  • 39.
  • 40.
  • 41.
  • 42.
  • 43.
  • 44.
  • 45.
  • 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() } ✔ ✔ ✔
  • 50.
  • 51.
  • 52.
  • 53.
  • 54.