SlideShare a Scribd company logo
1 of 36
Download to read offline
Scaling Live OTT with
DASH
Techniques and Lessons Learned
ZACHARY
CAVA
Scaling Live OTT with DASH
2
Video Platform Architect
3
Hulu + Live TV
Scaling Live OTT with DASH
Topics Today
4
• LIVE Streaming with DASH
• Optimizing for Scale
• Q&A
4
LIVE Streaming with
DASH
Scaling Live OTT with DASH
The Timing Model
LIVE Streaming with DASH
• Well Defined Timing Model
• Synchronized to Real Time Clock
• Explicit Segment Availability
• Declarative Timing Control
• DVR Buffer Window
• Presentation Delay
• Presentation Updates
• Basic Simple Polling
• Advanced In-Segment Signalling
Segment Addressing
LIVE Streaming with DASH
• Templatized Segment Addressing
• $Number$ or $Time$
• Optional Explicit Addressing
• Individual segment entries
• Fully represents missing segments
• Deployed $Time$ with Timeline
• Artifact of stateless ingest system
• Re-evaluating for Low Latency
<SegmentTemplate timescale="90000"
presentationTimeOffset="3054136803"
media="STREAM/video/$Time$.m4s"
initialization="STREAM/init/video.mp4">
<SegmentTimeline>
<S t="3054139806" d="360360"/>
<S t="3054500166" d="360360"/>
<S t="3054860526" d="360360"/>
<S t="3055220886" d="360360"/>
<S t="3055581246" d="360360"/>
<S t="3055941606" d="360360"/>
<S t="3056301966" d="360360"/>
<S t="3056662326" d="360360"/>
<S t="3057022686" d="360360"/>
<S t="3057383046" d="360360"/>
<S t="3057743406" d="360360"/>
</SegmentTimeline>
</SegmentTemplate>
Multi-CDN Enablement
LIVE Streaming with DASH
• Multiple BaseURL Elements
• One per CDN
• Client has ability to choose source
• Switching enabled by ABR
• Segment Authentication Complicated
• No common auth scheme
• Must add token per CDN
• ExtUrlQueryInfo used to abstract
manifest tokens
<Period id="1" start="...">
<BaseURL serviceLocation="cdn-1">...</BaseURL>
<BaseURL serviceLocation="cdn-2">...</BaseURL>
<BaseURL serviceLocation="cdn-3">...</BaseURL>
...
</Period>
Basic Manifest Example
LIVE Streaming with DASH
• Let’s look at a 5 minute manifest
• Live Streaming Details
• Multi-Period
• 8 Video Representations
• 1 Audio Representation
• CEA-608/708 Captions
• 3 Segment CDNs
5 Minute Manifest (1 of ?)
LIVE Streaming with DASH
<?xml version="1.0" encoding="UTF-8"?>
<MPD type="dynamic" minimumUpdatePeriod="PT3.0S" suggestedPresentationDelay="PT8S"
availabilityStartTime="2017-05-01T07:00:00+00:00" ...>
<Period id="1" start="PT70406325.063S">
<BaseURL serviceLocation="cdn-1">https://cdn-1.net/CNN/</BaseURL>
<BaseURL serviceLocation="cdn-2">https://cdn-2.net/CNN/</BaseURL>
<BaseURL serviceLocation="cdn-3">https://cdn-3.net/CNN/</BaseURL>
<AdaptationSet id="2" mimeType="video/mp4" segmentAlignment="true"
bitstreamSwitching="true" maxWidth="1280" maxHeight="720" maxFrameRate="60000/1001">
<Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng"/>
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011"
value="cenc" cenc:default_KID="..."/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/>
<Representation id="VIDEO_7" codecs="avc1.4d400d" width="352" height="198"
startWithSAP="1" bandwidth="474092" frameRate="30000/1001">
<SegmentTemplate timescale="90000" presentationTimeOffset="3054136803"
media="CNN/VIDEO_7/$Time$.m4s"
initialization="CNN/init/VIDEO_7.mp4">
<SegmentTimeline>
<S t="3054139806" d="360360"/>
5 Minute Manifest (2 of ?)
LIVE Streaming with DASH
<S t="3054500166" d="360360"/>
<S t="3054860526" d="360360"/>
<S t="3055220886" d="360360"/>
<S t="3055581246" d="360360"/>
<S t="3055941606" d="360360"/>
<S t="3056301966" d="360360"/>
<S t="3056662326" d="360360"/>
<S t="3057022686" d="360360"/>
<S t="3057383046" d="360360"/>
<S t="3057743406" d="360360"/>
<S t="3058103766" d="360360"/>
<S t="3058464126" d="360360"/>
<S t="3058824486" d="360360"/>
<S t="3059184846" d="360360"/>
<S t="3059545206" d="360360"/>
<S t="3059905566" d="360360"/>
<S t="3060265926" d="360360"/>
<S t="3060626286" d="360360"/>
<S t="3060986646" d="360360"/>
<S t="3061347006" d="360360"/>
<S t="3061707366" d="360360"/>
5 Minute Manifest (3 of ?)
LIVE Streaming with DASH
<S t="3062067726" d="360360"/>
<S t="3062428086" d="360360"/>
<S t="3062788446" d="360360"/>
<S t="3063148806" d="360360"/>
<S t="3063509166" d="360360"/>
<S t="3063869526" d="360360"/>
<S t="3064229886" d="360360"/>
<S t="3064590246" d="360360"/>
<S t="3064950606" d="360360"/>
<S t="3065310966" d="360360"/>
<S t="3065671326" d="360360"/>
<S t="3066031686" d="360360"/>
<S t="3066392046" d="360360"/>
<S t="3066752406" d="360360"/>
<S t="3067112766" d="360360"/>
<S t="3067473126" d="360360"/>
<S t="3067833486" d="360360"/>
<S t="3068193846" d="360360"/>
<S t="3068554206" d="360360"/>
<S t="3068914566" d="360360"/>
<S t="3069274926" d="360360"/>
5 Minute Manifest (4 of ?)
LIVE Streaming with DASH
<S t="3069635286" d="360360"/>
<S t="3069995646" d="360360"/>
<S t="3070356006" d="360360"/>
<S t="3070716366" d="360360"/>
<S t="3071076726" d="360360"/>
<S t="3071437086" d="360360"/>
<S t="3071797446" d="360360"/>
<S t="3072157806" d="360360"/>
<S t="3072518166" d="360360"/>
<S t="3072878526" d="360360"/>
<S t="3073238886" d="360360"/>
<S t="3073599246" d="360360"/>
<S t="3073959606" d="360360"/>
<S t="3074319966" d="360360"/>
<S t="3074680326" d="360360"/>
<S t="3075040686" d="360360"/>
<S t="3075401046" d="360360"/>
<S t="3075761406" d="360360"/>
<S t="3076121766" d="360360"/>
<S t="3076482126" d="360360"/>
<S t="3076842486" d="360360"/>
5 Minute Manifest (5 of ?)
LIVE Streaming with DASH
<S t="3077202846" d="360360"/>
<S t="3077563206" d="360360"/>
<S t="3077923566" d="360360"/>
<S t="3078283926" d="360360"/>
<S t="3078644286" d="360360"/>
<S t="3079004646" d="360360"/>
<S t="3079365006" d="360360"/>
<S t="3079725366" d="360360"/>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
<Representation id="VIDEO_6" codecs="avc1.4d400d" width="384" height="216"
startWithSAP="1" bandwidth="741797" frameRate="30000/1001">
<SegmentTemplate timescale="90000" presentationTimeOffset="3054136803"
media="CNN/VIDEO_6/$Time$.m4s"
initialization="CNN/init/VIDEO_6.mp4">
<SegmentTimeline>
<S t="3054139806" d="360360"/>
<S t="3054500166" d="360360"/>
<S t="3054860526" d="360360"/>
<S t="3055220886" d="360360"/>
5 Minute Manifest (36 of 36)
LIVE Streaming with DASH
<S t="3074681608" d="360960"/>
<S t="3075042568" d="359040"/>
<S t="3075401608" d="360960"/>
<S t="3075762568" d="360960"/>
<S t="3076123528" d="359040"/>
<S t="3076482568" d="360960"/>
<S t="3076843528" d="360960"/>
<S t="3077204488" d="359040"/>
<S t="3077563528" d="360960"/>
<S t="3077924488" d="360960"/>
<S t="3078285448" d="359040"/>
<S t="3078644488" d="360960"/>
<S t="3079005448" d="360960"/>
<S t="3079366408" d="359040"/>
<S t="3079725448" d="360960"/>
</SegmentTimeline>
</SegmentTemplate>
</Representation>
</AdaptationSet>
</Period>
</MPD>
Only 5 Minutes of Content
LIVE Streaming with DASH
• By The Numbers
• 694 XML Nodes
• 46KB Uncompressed Size
• ~30ms Parse Time
• Simply Does Not Scale
• 1 hour => 8665 Nodes, 573KB
• 3 hours => 26512 Nodes, 1.9MB
• What Makes The Manifest So Big?
• Explicit segment addressing
• Usage of multiple periods
Optimizing for Scale
Scaling Live OTT with DASH
Focusing Optimizations
Optimizing for Scale
• Concurrency is The Challenge
• Clients constantly polling
• Need highly cacheable responses
• Avoid sacrificing quality for scale
• Optimize for Network and Clients
• Ensure high cache hit ratio
• Minimize cost of updates for clients
• Service resources aren’t endless
• Important to Optimize Holistically
Compress the Timelines
Optimizing for Scale
• Utilize S@r Attribute
• Collapse repeated durations
• Not effective on “patterned” durations
• Omit S@t for Consecutive Segments
• Only necessary for start and gaps
• One Timeline per AdaptationSet
• Segments are time aligned anyways
• $RepresentationID$ template
• Representation timescales must match
<SegmentTemplate timescale="90000"
media="CNN/$RepresentationID$/$Time$.m4s"
initialization="CNN/init/$RepresentationID$.m4s"
...>
<SegmentTimeline>
<S t="3054860526" d="360360" r="71"/>
<S d="270270" />
</SegmentTimeline>
<Representation id="VIDEO_7" .../>
<Representation id="VIDEO_6" .../>
<Representation id="VIDEO_5" .../>
<Representation id="VIDEO_4" .../>
<Representation id="VIDEO_3" .../>
<Representation id="VIDEO_2" .../>
<Representation id="VIDEO_1" .../>
<Representation id="VIDEO_0" .../>
</SegmentTemplate>
5 Minute Manifest with Compressed Timeline
Optimizing for Scale
• By The Numbers
• 78 XML Nodes
• 8.1KB Uncompressed Size
• ~20ms Parse Time
• Smaller Magnitude, Scales The Same
• 1 hour => 986 Nodes, 100KB
• 3 hour => 3351 Nodes, 373KB
• Cost Accumulates Over Time
• Updates increase in cost over time
• Parsing during playback is expensive
• What is really changing in updates?
<?xml version="1.0" encoding="UTF-8"?>
<MPD type="dynamic" minBufferTime="PT1.0S" minimumUpdatePeriod="PT3.0S" suggestedPresentationDelay="PT8S" ...>
<Period id="1" start="PT70406333.088S">
<BaseURL serviceLocation="cdn-1">https://cdn-1.net/CNN/</BaseURL>
<BaseURL serviceLocation="cdn-2">https://cdn-2.net/CNN/</BaseURL>
<BaseURL serviceLocation="cdn-3">https://cdn-3.net/CNN/</BaseURL>
<AdaptationSet id="2" mimeType="video/mp4" segmentAlignment="true" bitstreamSwitching="true" ...>
<Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng"/>
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/>
<SegmentTemplate timescale="90000" presentationTimeOffset="3054857523"
media="CNN/$RepresentationID$/$Time$.m4s"
initialization="CNN/init/$RepresentationID$.mp4">
<SegmentTimeline>
<S t="3054860526" d="360360" r="71"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="VIDEO_7" width="352" height="198" .../>
<Representation id="VIDEO_6" width="384" height="216" .../>
<Representation id="VIDEO_5" width="480" height="270" .../>
<Representation id="VIDEO_4" width="608" height="342" .../>
<Representation id="VIDEO_3" width="768" height="432" .../>
<Representation id="VIDEO_2" width="1024" height="576" .../>
<Representation id="VIDEO_1" width="1280" height="720" .../>
<Representation id="VIDEO_0" width="1280" height="720" .../>
</AdaptationSet>
<AdaptationSet id="1" mimeType="audio/mp4" segmentAlignment="true" bitstreamSwitching="true">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/>
<InbandEventStream schemeIdUri="www.nielsen.com:id3:v1" value="1"/>
<SegmentTemplate timescale="90000" presentationTimeOffset="3054857523"
media="CNN/$RepresentationID$/$Time$.m4s"
initialization="CNN/init/$RepresentationID$.mp4">
<SegmentTimeline>
<S t="3054861448" d="360960"/>
<S d="359040"/>
<S d="360960" r="1"/>
<S d="359040"/>
<S d="360960" r="2"/>
<S d="359040"/>
<S d="360960" r="1"/>
<S d="359040"/>
<S d="360960" r="1"/>
<S d="359040"/>
<S d="360960" r="1"/>
....
<S d="360960" r="2"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="AUDIO" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="96000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/>
</Representation>
</AdaptationSet>
</Period>
</MPD>
Change Across Updates
Optimizing for Scale
<?xml version="1.0" encoding="UTF-8"?>
<MPD type="dynamic" minBufferTime="PT1.0S" minimumUpdatePeriod="PT3.0S" suggestedPresentationDelay="PT8S" ...>
<Period id="1" start="PT70406333.088S">
<BaseURL serviceLocation="cdn-1">https://cdn-1.net/CNN/</BaseURL>
<BaseURL serviceLocation="cdn-2">https://cdn-2.net/CNN/</BaseURL>
<BaseURL serviceLocation="cdn-3">https://cdn-3.net/CNN/</BaseURL>
<AdaptationSet id="2" mimeType="video/mp4" segmentAlignment="true" bitstreamSwitching="true" ...>
<Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng"/>
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/>
<SegmentTemplate timescale="90000" presentationTimeOffset="3054857523"
media="CNN/$RepresentationID$/$Time$.m4s"
initialization="CNN/init/$RepresentationID$.mp4">
<SegmentTimeline>
<S t="3054860526" d="360360" r="1"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="VIDEO_7" width="352" height="198" .../>
<Representation id="VIDEO_6" width="384" height="216" .../>
<Representation id="VIDEO_5" width="480" height="270" .../>
<Representation id="VIDEO_4" width="608" height="342" .../>
<Representation id="VIDEO_3" width="768" height="432" .../>
<Representation id="VIDEO_2" width="1024" height="576" .../>
<Representation id="VIDEO_1" width="1280" height="720" .../>
<Representation id="VIDEO_0" width="1280" height="720" .../>
</AdaptationSet>
<AdaptationSet id="1" mimeType="audio/mp4" segmentAlignment="true" bitstreamSwitching="true">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/>
<InbandEventStream schemeIdUri="www.nielsen.com:id3:v1" value="1"/>
<SegmentTemplate timescale="90000" presentationTimeOffset="3054857523"
media="CNN/$RepresentationID$/$Time$.m4s"
initialization="CNN/init/$RepresentationID$.mp4">
<SegmentTimeline>
<S t="3054861448" d="360960"/>
<S d="359040"/>
</SegmentTemplate>
<Representation id="AUDIO" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1"
bandwidth="96000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011"
value="2"/>
</Representation>
</AdaptationSet>
</Period>
</MPD>
<?xml version="1.0" encoding="UTF-8"?>
<MPD type="dynamic" minBufferTime="PT1.0S" minimumUpdatePeriod="PT3.0S" suggestedPresentationDelay="PT8S" ...>
<Period id="1" start="PT70406333.088S">
<BaseURL serviceLocation="cdn-1">https://cdn-1.net/CNN/</BaseURL>
<BaseURL serviceLocation="cdn-2">https://cdn-2.net/CNN/</BaseURL>
<BaseURL serviceLocation="cdn-3">https://cdn-3.net/CNN/</BaseURL>
<AdaptationSet id="2" mimeType="video/mp4" segmentAlignment="true" bitstreamSwitching="true" ...>
<Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng"/>
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/>
<SegmentTemplate timescale="90000" presentationTimeOffset="3054857523"
media="CNN/$RepresentationID$/$Time$.m4s"
initialization="CNN/init/$RepresentationID$.mp4">
<SegmentTimeline>
<S t="3054860526" d="360360" r="2"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="VIDEO_7" width="352" height="198" .../>
<Representation id="VIDEO_6" width="384" height="216" .../>
<Representation id="VIDEO_5" width="480" height="270" .../>
<Representation id="VIDEO_4" width="608" height="342" .../>
<Representation id="VIDEO_3" width="768" height="432" .../>
<Representation id="VIDEO_2" width="1024" height="576" .../>
<Representation id="VIDEO_1" width="1280" height="720" .../>
<Representation id="VIDEO_0" width="1280" height="720" .../>
</AdaptationSet>
<AdaptationSet id="1" mimeType="audio/mp4" segmentAlignment="true" bitstreamSwitching="true">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/>
<InbandEventStream schemeIdUri="www.nielsen.com:id3:v1" value="1"/>
<SegmentTemplate timescale="90000" presentationTimeOffset="3054857523"
media="CNN/$RepresentationID$/$Time$.m4s"
initialization="CNN/init/$RepresentationID$.mp4">
<SegmentTimeline>
<S t="3054861448" d="360960"/>
<S d="359040"/>
<S d="360960"/>
</SegmentTemplate>
<Representation id="AUDIO" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1"
bandwidth="96000">
<AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011"
value="2"/>
</Representation>
</AdaptationSet>
</Period>
</MPD>
MPD Patch Updates
Scaling Live OTT with DASH
Optimizing Update Requests
MPD Patch Updates
• Solution Constraints
• Send only new information to clients
• Maintain response caching
• Minimize request client processing
• Keep server in control of playout
• Created the Patch Manifest concept
• Special server update response
• Leverages MPD structure semantics
• Uses client persisted breadcrumbing
• Relies on client timeline persistence
25
Received
Manifests
Join Manifest Patch 1
?
Patch Manifest Playout
MPD Patch Updates
26
Received
Manifests
In-Memory
Manifest
Join Manifest Patch 1
?
Patch Manifest Playout
MPD Patch Updates
27
Received
Manifests
In-Memory
Manifest
Join Manifest Patch 1 Patch 2
?
Patch Manifest Playout
MPD Patch Updates
28
Received
Manifests
In-Memory
Manifest
Join Manifest Patch 1 Patch 2
Patch Manifest Playout
MPD Patch Updates
Anatomy of a Join Manifest
MPD Patch Updates
<?xml version="1.0" encoding="UTF-8"?>
<MPD type="dynamic" id="channel" minimumUpdatePeriod="PT3.0S" publishTime="2019-10-18T22:06:14" ...>
<PatchLocation ttl="60">/patch/channel.mpd?publishTime=2019-10-18T22:06:14&s=5095823234</PatchLocation>
<Period id="1" start="PT70715052.772S">
<BaseURL serviceLocation="cdn-1">https://cdn-1.net/channel/</BaseURL>
<BaseURL serviceLocation="cdn-2">https://cdn-2.net/channel/</BaseURL>
<BaseURL serviceLocation="cdn-3">https://cdn-3.net/channel/</BaseURL>
<AdaptationSet id="2" mimeType="video/mp4" segmentAlignment="true" bitstreamSwitching="true" ...>
<Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng"/>
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/>
<SegmentTemplate timescale="90000" presentationTimeOffset="5069874311"
media="channel/$RepresentationID$/$Time$.m4s"
initialization="channel/init/$RepresentationID$.mp4">
<SegmentTimeline>
<S t="5069877314" d="360360" r="71"/>
</SegmentTimeline>
</SegmentTemplate>
<Representation id="VIDEO_7" width="352" height="198" .../>
<Representation id="VIDEO_6" width="384" height="216" .../>
<Representation id="VIDEO_5" width="480" height="270" .../>
...
Anatomy of a Patch Manifest
MPD Patch Updates
<?xml version="1.0" encoding="UTF-8"?>
<Patch mpdId="channel" originalPublishTime="2019-10-18T22:06:14" publishTime="2019-10-18T22:06:17"
xmlns="urn:mpeg:dash:schema:mpd-patch:2020" xmlns:p="urn:ietf:params:xml:schema:patch-ops" ...>
<p:replace sel="/MPD/@publishTime">2019-10-18T22:06:17</p:replace>
<p:replace sel="/MPD/PatchLocation[0]">
<PatchLocation ttl="60">/patch/channel.mpd?publishTime=2019-10-18T22:06:17&s=5095823234</PatchLocation>
</p:replace>
<p:add sel="/MPD/Period[@id='1']/AdaptationSet[@id='1']/SegmentTemplate/SegmentTimeline">
<S t="5095823752" d="360960" />
</p:add>
<p:add sel="/MPD/Period[@id='1']/AdaptationSet[@id='2']/SegmentTemplate/SegmentTimeline">
<S t="5095823234" d="360360" />
</p:add>
</Patch>
Patch Manifests
MPD Patch Updates
• By The Numbers
• 9 XML Nodes
• ~1KB Uncompressed Size
• ~2ms Parse Time
• Successfully Deployed Solution
• Constant cost addition over time
• Efficient for network and client
• No reduction in cache efficiency
• Server fully in control of timeline
From Demuxed: Discovering Unique Streams
32
1
2
3
4
?
?
?
?
MPD Patch Updates
From Demuxed: Discovering Unique Streams
33
1
2
3
4
?
MPD Patch Updates
34
Today / Forward Looking
MPD Patch Updates
● Deployed in production today
○ Primary LIVE streaming method
○ Including some proprietary players
● MPEG-DASH Formalization
○ Moved from TuC to AMD.1
○ Landing in 4th Edition Soon
● DASH Industry Forum Work
○ Optimizing DASH at Scale
○ Reference Implementations
Q&A
35
THANK YOU
36

More Related Content

What's hot

UC4 SCHEDULING
UC4 SCHEDULINGUC4 SCHEDULING
UC4 SCHEDULINGroelspi
 
Azure Pipelines Multistage YAML - Top 10 Features
Azure Pipelines Multistage YAML - Top 10 FeaturesAzure Pipelines Multistage YAML - Top 10 Features
Azure Pipelines Multistage YAML - Top 10 FeaturesMarc Müller
 
Systems Monitoring with Prometheus (Devops Ireland April 2015)
Systems Monitoring with Prometheus (Devops Ireland April 2015)Systems Monitoring with Prometheus (Devops Ireland April 2015)
Systems Monitoring with Prometheus (Devops Ireland April 2015)Brian Brazil
 
Troubleshooting as Your Kafka Clusters Grow (Krunal Vora, Tinder) Kafka Summi...
Troubleshooting as Your Kafka Clusters Grow (Krunal Vora, Tinder) Kafka Summi...Troubleshooting as Your Kafka Clusters Grow (Krunal Vora, Tinder) Kafka Summi...
Troubleshooting as Your Kafka Clusters Grow (Krunal Vora, Tinder) Kafka Summi...confluent
 
PromQL Deep Dive - The Prometheus Query Language
PromQL Deep Dive - The Prometheus Query Language PromQL Deep Dive - The Prometheus Query Language
PromQL Deep Dive - The Prometheus Query Language Weaveworks
 
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...StreamNative
 
Develop QNAP NAS App by Docker
Develop QNAP NAS App by DockerDevelop QNAP NAS App by Docker
Develop QNAP NAS App by DockerTerry Chen
 
Applications Performance Monitoring with Applications Manager part 1
Applications Performance Monitoring with Applications Manager part 1Applications Performance Monitoring with Applications Manager part 1
Applications Performance Monitoring with Applications Manager part 1ManageEngine, Zoho Corporation
 
Introduction to Open Telemetry as Observability Library
Introduction to Open  Telemetry as Observability LibraryIntroduction to Open  Telemetry as Observability Library
Introduction to Open Telemetry as Observability LibraryTonny Adhi Sabastian
 
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트Amazon Web Services Korea
 
Datadogoverview.pptx
Datadogoverview.pptxDatadogoverview.pptx
Datadogoverview.pptxssuser8bc443
 
Azure Digital Twins 2.0
Azure Digital Twins 2.0Azure Digital Twins 2.0
Azure Digital Twins 2.0Marco Parenzan
 
An introduction to Microservices
An introduction to MicroservicesAn introduction to Microservices
An introduction to MicroservicesCisco DevNet
 
Application Performance Monitoring with OpenTelemetry
Application Performance Monitoring with OpenTelemetryApplication Performance Monitoring with OpenTelemetry
Application Performance Monitoring with OpenTelemetryJan Mikeš
 
Hypervisors Vs Bare Metal Servers: a Beginner’s Guide
Hypervisors Vs Bare Metal Servers: a Beginner’s GuideHypervisors Vs Bare Metal Servers: a Beginner’s Guide
Hypervisors Vs Bare Metal Servers: a Beginner’s GuideGlobalTeleHost Corp.
 
How Liberty Mutual Moves toward Real-Time Financial Closing
How Liberty Mutual Moves toward Real-Time Financial ClosingHow Liberty Mutual Moves toward Real-Time Financial Closing
How Liberty Mutual Moves toward Real-Time Financial ClosingAmazon Web Services
 
Building Real-time Pipelines with FLaNK_ A Case Study with Transit Data
Building Real-time Pipelines with FLaNK_ A Case Study with Transit DataBuilding Real-time Pipelines with FLaNK_ A Case Study with Transit Data
Building Real-time Pipelines with FLaNK_ A Case Study with Transit DataTimothy Spann
 
Juraci Paixão Kröhling - All you need to know about OpenTelemetry
Juraci Paixão Kröhling - All you need to know about OpenTelemetryJuraci Paixão Kröhling - All you need to know about OpenTelemetry
Juraci Paixão Kröhling - All you need to know about OpenTelemetryJuliano Costa
 
Comunicação cliente servidor
Comunicação cliente servidorComunicação cliente servidor
Comunicação cliente servidorNascimentoeli
 

What's hot (20)

UC4 SCHEDULING
UC4 SCHEDULINGUC4 SCHEDULING
UC4 SCHEDULING
 
Azure Pipelines Multistage YAML - Top 10 Features
Azure Pipelines Multistage YAML - Top 10 FeaturesAzure Pipelines Multistage YAML - Top 10 Features
Azure Pipelines Multistage YAML - Top 10 Features
 
Systems Monitoring with Prometheus (Devops Ireland April 2015)
Systems Monitoring with Prometheus (Devops Ireland April 2015)Systems Monitoring with Prometheus (Devops Ireland April 2015)
Systems Monitoring with Prometheus (Devops Ireland April 2015)
 
Troubleshooting as Your Kafka Clusters Grow (Krunal Vora, Tinder) Kafka Summi...
Troubleshooting as Your Kafka Clusters Grow (Krunal Vora, Tinder) Kafka Summi...Troubleshooting as Your Kafka Clusters Grow (Krunal Vora, Tinder) Kafka Summi...
Troubleshooting as Your Kafka Clusters Grow (Krunal Vora, Tinder) Kafka Summi...
 
PromQL Deep Dive - The Prometheus Query Language
PromQL Deep Dive - The Prometheus Query Language PromQL Deep Dive - The Prometheus Query Language
PromQL Deep Dive - The Prometheus Query Language
 
OOPSLA Talk on Preon
OOPSLA Talk on PreonOOPSLA Talk on Preon
OOPSLA Talk on Preon
 
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
Streaming Millions of Contact Center Interactions in (Near) Real-Time with Pu...
 
Develop QNAP NAS App by Docker
Develop QNAP NAS App by DockerDevelop QNAP NAS App by Docker
Develop QNAP NAS App by Docker
 
Applications Performance Monitoring with Applications Manager part 1
Applications Performance Monitoring with Applications Manager part 1Applications Performance Monitoring with Applications Manager part 1
Applications Performance Monitoring with Applications Manager part 1
 
Introduction to Open Telemetry as Observability Library
Introduction to Open  Telemetry as Observability LibraryIntroduction to Open  Telemetry as Observability Library
Introduction to Open Telemetry as Observability Library
 
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
게임사를 위한 Amazon GameLift 세션 - 이정훈, AWS 솔루션즈 아키텍트
 
Datadogoverview.pptx
Datadogoverview.pptxDatadogoverview.pptx
Datadogoverview.pptx
 
Azure Digital Twins 2.0
Azure Digital Twins 2.0Azure Digital Twins 2.0
Azure Digital Twins 2.0
 
An introduction to Microservices
An introduction to MicroservicesAn introduction to Microservices
An introduction to Microservices
 
Application Performance Monitoring with OpenTelemetry
Application Performance Monitoring with OpenTelemetryApplication Performance Monitoring with OpenTelemetry
Application Performance Monitoring with OpenTelemetry
 
Hypervisors Vs Bare Metal Servers: a Beginner’s Guide
Hypervisors Vs Bare Metal Servers: a Beginner’s GuideHypervisors Vs Bare Metal Servers: a Beginner’s Guide
Hypervisors Vs Bare Metal Servers: a Beginner’s Guide
 
How Liberty Mutual Moves toward Real-Time Financial Closing
How Liberty Mutual Moves toward Real-Time Financial ClosingHow Liberty Mutual Moves toward Real-Time Financial Closing
How Liberty Mutual Moves toward Real-Time Financial Closing
 
Building Real-time Pipelines with FLaNK_ A Case Study with Transit Data
Building Real-time Pipelines with FLaNK_ A Case Study with Transit DataBuilding Real-time Pipelines with FLaNK_ A Case Study with Transit Data
Building Real-time Pipelines with FLaNK_ A Case Study with Transit Data
 
Juraci Paixão Kröhling - All you need to know about OpenTelemetry
Juraci Paixão Kröhling - All you need to know about OpenTelemetryJuraci Paixão Kröhling - All you need to know about OpenTelemetry
Juraci Paixão Kröhling - All you need to know about OpenTelemetry
 
Comunicação cliente servidor
Comunicação cliente servidorComunicação cliente servidor
Comunicação cliente servidor
 

Similar to Scaling Live OTT with DASH

System and User Aspects of Web Search Latency
System and User Aspects of Web Search LatencySystem and User Aspects of Web Search Latency
System and User Aspects of Web Search LatencyTelefonica Research
 
What We Learned About Cassandra While Building go90 (Christopher Webster & Th...
What We Learned About Cassandra While Building go90 (Christopher Webster & Th...What We Learned About Cassandra While Building go90 (Christopher Webster & Th...
What We Learned About Cassandra While Building go90 (Christopher Webster & Th...DataStax
 
Getting started with Cassandra 2.1
Getting started with Cassandra 2.1Getting started with Cassandra 2.1
Getting started with Cassandra 2.1Viswanath J
 
StructuredStreaming webinar slides.pptx
StructuredStreaming webinar slides.pptxStructuredStreaming webinar slides.pptx
StructuredStreaming webinar slides.pptxMiloudMihoubi
 
StructuredStreaming webinar slides.pptx
StructuredStreaming webinar slides.pptxStructuredStreaming webinar slides.pptx
StructuredStreaming webinar slides.pptxGianCarloPoggiEscoba1
 
Azure stream analytics by Nico Jacobs
Azure stream analytics by Nico JacobsAzure stream analytics by Nico Jacobs
Azure stream analytics by Nico JacobsITProceed
 
Performance Tuning with Execution Plans
Performance Tuning with Execution PlansPerformance Tuning with Execution Plans
Performance Tuning with Execution PlansGrant Fritchey
 
SPA2015: Hooman Beheshti – The Future of CDNs
SPA2015: Hooman Beheshti – The Future of CDNsSPA2015: Hooman Beheshti – The Future of CDNs
SPA2015: Hooman Beheshti – The Future of CDNsFastly
 
Journey of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The CloudJourney of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The Cloudtakezoe
 
Tuning Autovacuum in Postgresql
Tuning Autovacuum in PostgresqlTuning Autovacuum in Postgresql
Tuning Autovacuum in PostgresqlMydbops
 
Datadog: a Real-Time Metrics Database for One Quadrillion Points/Day
Datadog: a Real-Time Metrics Database for One Quadrillion Points/DayDatadog: a Real-Time Metrics Database for One Quadrillion Points/Day
Datadog: a Real-Time Metrics Database for One Quadrillion Points/DayC4Media
 
Modularization compass - Navigating white waters of feature-oriented modularity
Modularization compass - Navigating white waters of feature-oriented modularityModularization compass - Navigating white waters of feature-oriented modularity
Modularization compass - Navigating white waters of feature-oriented modularityAndrzej Olszak
 
Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda A...
Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda A...Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda A...
Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda A...C4Media
 
Music City Agile 2019 - Measuring Flow: Metrics that Matter
Music City Agile 2019 - Measuring Flow: Metrics that MatterMusic City Agile 2019 - Measuring Flow: Metrics that Matter
Music City Agile 2019 - Measuring Flow: Metrics that MatterJulie Wyman
 
200603ash.pdf Performance Tuning Oracle DB
200603ash.pdf Performance Tuning Oracle DB200603ash.pdf Performance Tuning Oracle DB
200603ash.pdf Performance Tuning Oracle DBcookie1969
 
KoprowskiT - SQLBITS X - 2am a disaster just began
KoprowskiT - SQLBITS X - 2am a disaster just beganKoprowskiT - SQLBITS X - 2am a disaster just began
KoprowskiT - SQLBITS X - 2am a disaster just beganTobias Koprowski
 
CCI2017 - Considerations for Migrating Databases to Azure - Gianluca Sartori
CCI2017 - Considerations for Migrating Databases to Azure - Gianluca SartoriCCI2017 - Considerations for Migrating Databases to Azure - Gianluca Sartori
CCI2017 - Considerations for Migrating Databases to Azure - Gianluca Sartoriwalk2talk srl
 
Performance OR Capacity #CMGimPACt2016
Performance OR Capacity #CMGimPACt2016 Performance OR Capacity #CMGimPACt2016
Performance OR Capacity #CMGimPACt2016 Alex Gilgur
 

Similar to Scaling Live OTT with DASH (20)

System and User Aspects of Web Search Latency
System and User Aspects of Web Search LatencySystem and User Aspects of Web Search Latency
System and User Aspects of Web Search Latency
 
What We Learned About Cassandra While Building go90 (Christopher Webster & Th...
What We Learned About Cassandra While Building go90 (Christopher Webster & Th...What We Learned About Cassandra While Building go90 (Christopher Webster & Th...
What We Learned About Cassandra While Building go90 (Christopher Webster & Th...
 
Getting started with Cassandra 2.1
Getting started with Cassandra 2.1Getting started with Cassandra 2.1
Getting started with Cassandra 2.1
 
Brief Scrum
Brief ScrumBrief Scrum
Brief Scrum
 
StructuredStreaming webinar slides.pptx
StructuredStreaming webinar slides.pptxStructuredStreaming webinar slides.pptx
StructuredStreaming webinar slides.pptx
 
StructuredStreaming webinar slides.pptx
StructuredStreaming webinar slides.pptxStructuredStreaming webinar slides.pptx
StructuredStreaming webinar slides.pptx
 
Azure stream analytics by Nico Jacobs
Azure stream analytics by Nico JacobsAzure stream analytics by Nico Jacobs
Azure stream analytics by Nico Jacobs
 
Performance Tuning with Execution Plans
Performance Tuning with Execution PlansPerformance Tuning with Execution Plans
Performance Tuning with Execution Plans
 
SPA2015: Hooman Beheshti – The Future of CDNs
SPA2015: Hooman Beheshti – The Future of CDNsSPA2015: Hooman Beheshti – The Future of CDNs
SPA2015: Hooman Beheshti – The Future of CDNs
 
Journey of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The CloudJourney of Migrating Millions of Queries on The Cloud
Journey of Migrating Millions of Queries on The Cloud
 
Tuning Autovacuum in Postgresql
Tuning Autovacuum in PostgresqlTuning Autovacuum in Postgresql
Tuning Autovacuum in Postgresql
 
Datadog: a Real-Time Metrics Database for One Quadrillion Points/Day
Datadog: a Real-Time Metrics Database for One Quadrillion Points/DayDatadog: a Real-Time Metrics Database for One Quadrillion Points/Day
Datadog: a Real-Time Metrics Database for One Quadrillion Points/Day
 
Modularization compass - Navigating white waters of feature-oriented modularity
Modularization compass - Navigating white waters of feature-oriented modularityModularization compass - Navigating white waters of feature-oriented modularity
Modularization compass - Navigating white waters of feature-oriented modularity
 
Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda A...
Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda A...Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda A...
Have Your Cake and Eat It Too -- Further Dispelling the Myths of the Lambda A...
 
Music City Agile 2019 - Measuring Flow: Metrics that Matter
Music City Agile 2019 - Measuring Flow: Metrics that MatterMusic City Agile 2019 - Measuring Flow: Metrics that Matter
Music City Agile 2019 - Measuring Flow: Metrics that Matter
 
200603ash.pdf Performance Tuning Oracle DB
200603ash.pdf Performance Tuning Oracle DB200603ash.pdf Performance Tuning Oracle DB
200603ash.pdf Performance Tuning Oracle DB
 
KoprowskiT - SQLBITS X - 2am a disaster just began
KoprowskiT - SQLBITS X - 2am a disaster just beganKoprowskiT - SQLBITS X - 2am a disaster just began
KoprowskiT - SQLBITS X - 2am a disaster just began
 
CCI2017 - Considerations for Migrating Databases to Azure - Gianluca Sartori
CCI2017 - Considerations for Migrating Databases to Azure - Gianluca SartoriCCI2017 - Considerations for Migrating Databases to Azure - Gianluca Sartori
CCI2017 - Considerations for Migrating Databases to Azure - Gianluca Sartori
 
Matlab teaching
Matlab teachingMatlab teaching
Matlab teaching
 
Performance OR Capacity #CMGimPACt2016
Performance OR Capacity #CMGimPACt2016 Performance OR Capacity #CMGimPACt2016
Performance OR Capacity #CMGimPACt2016
 

More from David Sayed

HDR Formats and Trends
HDR Formats and TrendsHDR Formats and Trends
HDR Formats and TrendsDavid Sayed
 
Seattle Video Tech Meetup August 2019: Optimal Multi-codec Streaming
Seattle Video Tech Meetup August 2019: Optimal Multi-codec StreamingSeattle Video Tech Meetup August 2019: Optimal Multi-codec Streaming
Seattle Video Tech Meetup August 2019: Optimal Multi-codec StreamingDavid Sayed
 
Seattle Video Tech: The Future of SSAI on OTT Devices
Seattle Video Tech: The Future of SSAI on OTT DevicesSeattle Video Tech: The Future of SSAI on OTT Devices
Seattle Video Tech: The Future of SSAI on OTT DevicesDavid Sayed
 
On ABR Streaming and CDN Performance
On ABR Streaming and CDN PerformanceOn ABR Streaming and CDN Performance
On ABR Streaming and CDN PerformanceDavid Sayed
 
NGBP ATSC 3.0 Overview
NGBP ATSC 3.0 OverviewNGBP ATSC 3.0 Overview
NGBP ATSC 3.0 OverviewDavid Sayed
 
November 2018 Seattle Video Tech Meetup: SCTE-35 In-Band Event Signalling for...
November 2018 Seattle Video Tech Meetup: SCTE-35 In-Band Event Signalling for...November 2018 Seattle Video Tech Meetup: SCTE-35 In-Band Event Signalling for...
November 2018 Seattle Video Tech Meetup: SCTE-35 In-Band Event Signalling for...David Sayed
 
AWS 2013 LA Media Event: Scalable Media Processing
AWS 2013 LA Media Event: Scalable Media ProcessingAWS 2013 LA Media Event: Scalable Media Processing
AWS 2013 LA Media Event: Scalable Media ProcessingDavid Sayed
 
What's New with Amazon Elastic Transcoder November 2013
What's New with Amazon Elastic Transcoder November 2013What's New with Amazon Elastic Transcoder November 2013
What's New with Amazon Elastic Transcoder November 2013David Sayed
 
AWS re:Invent 2013 Scalable Media Processing in the Cloud
AWS re:Invent 2013 Scalable Media Processing in the CloudAWS re:Invent 2013 Scalable Media Processing in the Cloud
AWS re:Invent 2013 Scalable Media Processing in the CloudDavid Sayed
 
Internet Strategies Forum 2010 - Microsoft Media Platform
Internet Strategies Forum 2010 - Microsoft Media PlatformInternet Strategies Forum 2010 - Microsoft Media Platform
Internet Strategies Forum 2010 - Microsoft Media PlatformDavid Sayed
 
IBC2010 Microsoft Media Platform Booth Demos
IBC2010 Microsoft Media Platform Booth DemosIBC2010 Microsoft Media Platform Booth Demos
IBC2010 Microsoft Media Platform Booth DemosDavid Sayed
 

More from David Sayed (12)

HDR Formats and Trends
HDR Formats and TrendsHDR Formats and Trends
HDR Formats and Trends
 
Seattle Video Tech Meetup August 2019: Optimal Multi-codec Streaming
Seattle Video Tech Meetup August 2019: Optimal Multi-codec StreamingSeattle Video Tech Meetup August 2019: Optimal Multi-codec Streaming
Seattle Video Tech Meetup August 2019: Optimal Multi-codec Streaming
 
Seattle Video Tech: The Future of SSAI on OTT Devices
Seattle Video Tech: The Future of SSAI on OTT DevicesSeattle Video Tech: The Future of SSAI on OTT Devices
Seattle Video Tech: The Future of SSAI on OTT Devices
 
On ABR Streaming and CDN Performance
On ABR Streaming and CDN PerformanceOn ABR Streaming and CDN Performance
On ABR Streaming and CDN Performance
 
NGBP ATSC 3.0 Overview
NGBP ATSC 3.0 OverviewNGBP ATSC 3.0 Overview
NGBP ATSC 3.0 Overview
 
November 2018 Seattle Video Tech Meetup: SCTE-35 In-Band Event Signalling for...
November 2018 Seattle Video Tech Meetup: SCTE-35 In-Band Event Signalling for...November 2018 Seattle Video Tech Meetup: SCTE-35 In-Band Event Signalling for...
November 2018 Seattle Video Tech Meetup: SCTE-35 In-Band Event Signalling for...
 
AWS 2013 LA Media Event: Scalable Media Processing
AWS 2013 LA Media Event: Scalable Media ProcessingAWS 2013 LA Media Event: Scalable Media Processing
AWS 2013 LA Media Event: Scalable Media Processing
 
What's New with Amazon Elastic Transcoder November 2013
What's New with Amazon Elastic Transcoder November 2013What's New with Amazon Elastic Transcoder November 2013
What's New with Amazon Elastic Transcoder November 2013
 
AWS re:Invent 2013 Scalable Media Processing in the Cloud
AWS re:Invent 2013 Scalable Media Processing in the CloudAWS re:Invent 2013 Scalable Media Processing in the Cloud
AWS re:Invent 2013 Scalable Media Processing in the Cloud
 
Internet Strategies Forum 2010 - Microsoft Media Platform
Internet Strategies Forum 2010 - Microsoft Media PlatformInternet Strategies Forum 2010 - Microsoft Media Platform
Internet Strategies Forum 2010 - Microsoft Media Platform
 
IBC2010 Microsoft Media Platform Booth Demos
IBC2010 Microsoft Media Platform Booth DemosIBC2010 Microsoft Media Platform Booth Demos
IBC2010 Microsoft Media Platform Booth Demos
 
DSLR Shoot
DSLR ShootDSLR Shoot
DSLR Shoot
 

Recently uploaded

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationSafe Software
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsMark Billinghurst
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupFlorian Wilhelm
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxOnBoard
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsPrecisely
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Scott Keck-Warren
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):comworks
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Alan Dix
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Neo4j
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhisoniya singh
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsMemoori
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Allon Mureinik
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking MenDelhi Call girls
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersThousandEyes
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...shyamraj55
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024Scott Keck-Warren
 

Recently uploaded (20)

Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry InnovationBeyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
Beyond Boundaries: Leveraging No-Code Solutions for Industry Innovation
 
Human Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR SystemsHuman Factors of XR: Using Human Factors to Design XR Systems
Human Factors of XR: Using Human Factors to Design XR Systems
 
DMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special EditionDMCC Future of Trade Web3 - Special Edition
DMCC Future of Trade Web3 - Special Edition
 
Streamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project SetupStreamlining Python Development: A Guide to a Modern Project Setup
Streamlining Python Development: A Guide to a Modern Project Setup
 
Maximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptxMaximizing Board Effectiveness 2024 Webinar.pptx
Maximizing Board Effectiveness 2024 Webinar.pptx
 
Unlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power SystemsUnlocking the Potential of the Cloud for IBM Power Systems
Unlocking the Potential of the Cloud for IBM Power Systems
 
Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024Advanced Test Driven-Development @ php[tek] 2024
Advanced Test Driven-Development @ php[tek] 2024
 
Pigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping ElbowsPigging Solutions Piggable Sweeping Elbows
Pigging Solutions Piggable Sweeping Elbows
 
CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):CloudStudio User manual (basic edition):
CloudStudio User manual (basic edition):
 
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...Swan(sea) Song – personal research during my six years at Swansea ... and bey...
Swan(sea) Song – personal research during my six years at Swansea ... and bey...
 
Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024Build your next Gen AI Breakthrough - April 2024
Build your next Gen AI Breakthrough - April 2024
 
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | DelhiFULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
FULL ENJOY 🔝 8264348440 🔝 Call Girls in Diplomatic Enclave | Delhi
 
AI as an Interface for Commercial Buildings
AI as an Interface for Commercial BuildingsAI as an Interface for Commercial Buildings
AI as an Interface for Commercial Buildings
 
The transition to renewables in India.pdf
The transition to renewables in India.pdfThe transition to renewables in India.pdf
The transition to renewables in India.pdf
 
Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)Injustice - Developers Among Us (SciFiDevCon 2024)
Injustice - Developers Among Us (SciFiDevCon 2024)
 
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
08448380779 Call Girls In Diplomatic Enclave Women Seeking Men
 
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for PartnersEnhancing Worker Digital Experience: A Hands-on Workshop for Partners
Enhancing Worker Digital Experience: A Hands-on Workshop for Partners
 
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptxVulnerability_Management_GRC_by Sohang Sengupta.pptx
Vulnerability_Management_GRC_by Sohang Sengupta.pptx
 
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
Automating Business Process via MuleSoft Composer | Bangalore MuleSoft Meetup...
 
SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024SQL Database Design For Developers at php[tek] 2024
SQL Database Design For Developers at php[tek] 2024
 

Scaling Live OTT with DASH

  • 1. Scaling Live OTT with DASH Techniques and Lessons Learned
  • 2. ZACHARY CAVA Scaling Live OTT with DASH 2 Video Platform Architect
  • 3. 3 Hulu + Live TV Scaling Live OTT with DASH
  • 4. Topics Today 4 • LIVE Streaming with DASH • Optimizing for Scale • Q&A 4
  • 5. LIVE Streaming with DASH Scaling Live OTT with DASH
  • 6. The Timing Model LIVE Streaming with DASH • Well Defined Timing Model • Synchronized to Real Time Clock • Explicit Segment Availability • Declarative Timing Control • DVR Buffer Window • Presentation Delay • Presentation Updates • Basic Simple Polling • Advanced In-Segment Signalling
  • 7. Segment Addressing LIVE Streaming with DASH • Templatized Segment Addressing • $Number$ or $Time$ • Optional Explicit Addressing • Individual segment entries • Fully represents missing segments • Deployed $Time$ with Timeline • Artifact of stateless ingest system • Re-evaluating for Low Latency <SegmentTemplate timescale="90000" presentationTimeOffset="3054136803" media="STREAM/video/$Time$.m4s" initialization="STREAM/init/video.mp4"> <SegmentTimeline> <S t="3054139806" d="360360"/> <S t="3054500166" d="360360"/> <S t="3054860526" d="360360"/> <S t="3055220886" d="360360"/> <S t="3055581246" d="360360"/> <S t="3055941606" d="360360"/> <S t="3056301966" d="360360"/> <S t="3056662326" d="360360"/> <S t="3057022686" d="360360"/> <S t="3057383046" d="360360"/> <S t="3057743406" d="360360"/> </SegmentTimeline> </SegmentTemplate>
  • 8. Multi-CDN Enablement LIVE Streaming with DASH • Multiple BaseURL Elements • One per CDN • Client has ability to choose source • Switching enabled by ABR • Segment Authentication Complicated • No common auth scheme • Must add token per CDN • ExtUrlQueryInfo used to abstract manifest tokens <Period id="1" start="..."> <BaseURL serviceLocation="cdn-1">...</BaseURL> <BaseURL serviceLocation="cdn-2">...</BaseURL> <BaseURL serviceLocation="cdn-3">...</BaseURL> ... </Period>
  • 9. Basic Manifest Example LIVE Streaming with DASH • Let’s look at a 5 minute manifest • Live Streaming Details • Multi-Period • 8 Video Representations • 1 Audio Representation • CEA-608/708 Captions • 3 Segment CDNs
  • 10. 5 Minute Manifest (1 of ?) LIVE Streaming with DASH <?xml version="1.0" encoding="UTF-8"?> <MPD type="dynamic" minimumUpdatePeriod="PT3.0S" suggestedPresentationDelay="PT8S" availabilityStartTime="2017-05-01T07:00:00+00:00" ...> <Period id="1" start="PT70406325.063S"> <BaseURL serviceLocation="cdn-1">https://cdn-1.net/CNN/</BaseURL> <BaseURL serviceLocation="cdn-2">https://cdn-2.net/CNN/</BaseURL> <BaseURL serviceLocation="cdn-3">https://cdn-3.net/CNN/</BaseURL> <AdaptationSet id="2" mimeType="video/mp4" segmentAlignment="true" bitstreamSwitching="true" maxWidth="1280" maxHeight="720" maxFrameRate="60000/1001"> <Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng"/> <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/> <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/> <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/> <Representation id="VIDEO_7" codecs="avc1.4d400d" width="352" height="198" startWithSAP="1" bandwidth="474092" frameRate="30000/1001"> <SegmentTemplate timescale="90000" presentationTimeOffset="3054136803" media="CNN/VIDEO_7/$Time$.m4s" initialization="CNN/init/VIDEO_7.mp4"> <SegmentTimeline> <S t="3054139806" d="360360"/>
  • 11. 5 Minute Manifest (2 of ?) LIVE Streaming with DASH <S t="3054500166" d="360360"/> <S t="3054860526" d="360360"/> <S t="3055220886" d="360360"/> <S t="3055581246" d="360360"/> <S t="3055941606" d="360360"/> <S t="3056301966" d="360360"/> <S t="3056662326" d="360360"/> <S t="3057022686" d="360360"/> <S t="3057383046" d="360360"/> <S t="3057743406" d="360360"/> <S t="3058103766" d="360360"/> <S t="3058464126" d="360360"/> <S t="3058824486" d="360360"/> <S t="3059184846" d="360360"/> <S t="3059545206" d="360360"/> <S t="3059905566" d="360360"/> <S t="3060265926" d="360360"/> <S t="3060626286" d="360360"/> <S t="3060986646" d="360360"/> <S t="3061347006" d="360360"/> <S t="3061707366" d="360360"/>
  • 12. 5 Minute Manifest (3 of ?) LIVE Streaming with DASH <S t="3062067726" d="360360"/> <S t="3062428086" d="360360"/> <S t="3062788446" d="360360"/> <S t="3063148806" d="360360"/> <S t="3063509166" d="360360"/> <S t="3063869526" d="360360"/> <S t="3064229886" d="360360"/> <S t="3064590246" d="360360"/> <S t="3064950606" d="360360"/> <S t="3065310966" d="360360"/> <S t="3065671326" d="360360"/> <S t="3066031686" d="360360"/> <S t="3066392046" d="360360"/> <S t="3066752406" d="360360"/> <S t="3067112766" d="360360"/> <S t="3067473126" d="360360"/> <S t="3067833486" d="360360"/> <S t="3068193846" d="360360"/> <S t="3068554206" d="360360"/> <S t="3068914566" d="360360"/> <S t="3069274926" d="360360"/>
  • 13. 5 Minute Manifest (4 of ?) LIVE Streaming with DASH <S t="3069635286" d="360360"/> <S t="3069995646" d="360360"/> <S t="3070356006" d="360360"/> <S t="3070716366" d="360360"/> <S t="3071076726" d="360360"/> <S t="3071437086" d="360360"/> <S t="3071797446" d="360360"/> <S t="3072157806" d="360360"/> <S t="3072518166" d="360360"/> <S t="3072878526" d="360360"/> <S t="3073238886" d="360360"/> <S t="3073599246" d="360360"/> <S t="3073959606" d="360360"/> <S t="3074319966" d="360360"/> <S t="3074680326" d="360360"/> <S t="3075040686" d="360360"/> <S t="3075401046" d="360360"/> <S t="3075761406" d="360360"/> <S t="3076121766" d="360360"/> <S t="3076482126" d="360360"/> <S t="3076842486" d="360360"/>
  • 14. 5 Minute Manifest (5 of ?) LIVE Streaming with DASH <S t="3077202846" d="360360"/> <S t="3077563206" d="360360"/> <S t="3077923566" d="360360"/> <S t="3078283926" d="360360"/> <S t="3078644286" d="360360"/> <S t="3079004646" d="360360"/> <S t="3079365006" d="360360"/> <S t="3079725366" d="360360"/> </SegmentTimeline> </SegmentTemplate> </Representation> <Representation id="VIDEO_6" codecs="avc1.4d400d" width="384" height="216" startWithSAP="1" bandwidth="741797" frameRate="30000/1001"> <SegmentTemplate timescale="90000" presentationTimeOffset="3054136803" media="CNN/VIDEO_6/$Time$.m4s" initialization="CNN/init/VIDEO_6.mp4"> <SegmentTimeline> <S t="3054139806" d="360360"/> <S t="3054500166" d="360360"/> <S t="3054860526" d="360360"/> <S t="3055220886" d="360360"/>
  • 15.
  • 16. 5 Minute Manifest (36 of 36) LIVE Streaming with DASH <S t="3074681608" d="360960"/> <S t="3075042568" d="359040"/> <S t="3075401608" d="360960"/> <S t="3075762568" d="360960"/> <S t="3076123528" d="359040"/> <S t="3076482568" d="360960"/> <S t="3076843528" d="360960"/> <S t="3077204488" d="359040"/> <S t="3077563528" d="360960"/> <S t="3077924488" d="360960"/> <S t="3078285448" d="359040"/> <S t="3078644488" d="360960"/> <S t="3079005448" d="360960"/> <S t="3079366408" d="359040"/> <S t="3079725448" d="360960"/> </SegmentTimeline> </SegmentTemplate> </Representation> </AdaptationSet> </Period> </MPD>
  • 17. Only 5 Minutes of Content LIVE Streaming with DASH • By The Numbers • 694 XML Nodes • 46KB Uncompressed Size • ~30ms Parse Time • Simply Does Not Scale • 1 hour => 8665 Nodes, 573KB • 3 hours => 26512 Nodes, 1.9MB • What Makes The Manifest So Big? • Explicit segment addressing • Usage of multiple periods
  • 18. Optimizing for Scale Scaling Live OTT with DASH
  • 19. Focusing Optimizations Optimizing for Scale • Concurrency is The Challenge • Clients constantly polling • Need highly cacheable responses • Avoid sacrificing quality for scale • Optimize for Network and Clients • Ensure high cache hit ratio • Minimize cost of updates for clients • Service resources aren’t endless • Important to Optimize Holistically
  • 20. Compress the Timelines Optimizing for Scale • Utilize S@r Attribute • Collapse repeated durations • Not effective on “patterned” durations • Omit S@t for Consecutive Segments • Only necessary for start and gaps • One Timeline per AdaptationSet • Segments are time aligned anyways • $RepresentationID$ template • Representation timescales must match <SegmentTemplate timescale="90000" media="CNN/$RepresentationID$/$Time$.m4s" initialization="CNN/init/$RepresentationID$.m4s" ...> <SegmentTimeline> <S t="3054860526" d="360360" r="71"/> <S d="270270" /> </SegmentTimeline> <Representation id="VIDEO_7" .../> <Representation id="VIDEO_6" .../> <Representation id="VIDEO_5" .../> <Representation id="VIDEO_4" .../> <Representation id="VIDEO_3" .../> <Representation id="VIDEO_2" .../> <Representation id="VIDEO_1" .../> <Representation id="VIDEO_0" .../> </SegmentTemplate>
  • 21. 5 Minute Manifest with Compressed Timeline Optimizing for Scale • By The Numbers • 78 XML Nodes • 8.1KB Uncompressed Size • ~20ms Parse Time • Smaller Magnitude, Scales The Same • 1 hour => 986 Nodes, 100KB • 3 hour => 3351 Nodes, 373KB • Cost Accumulates Over Time • Updates increase in cost over time • Parsing during playback is expensive • What is really changing in updates? <?xml version="1.0" encoding="UTF-8"?> <MPD type="dynamic" minBufferTime="PT1.0S" minimumUpdatePeriod="PT3.0S" suggestedPresentationDelay="PT8S" ...> <Period id="1" start="PT70406333.088S"> <BaseURL serviceLocation="cdn-1">https://cdn-1.net/CNN/</BaseURL> <BaseURL serviceLocation="cdn-2">https://cdn-2.net/CNN/</BaseURL> <BaseURL serviceLocation="cdn-3">https://cdn-3.net/CNN/</BaseURL> <AdaptationSet id="2" mimeType="video/mp4" segmentAlignment="true" bitstreamSwitching="true" ...> <Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng"/> <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/> <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/> <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/> <SegmentTemplate timescale="90000" presentationTimeOffset="3054857523" media="CNN/$RepresentationID$/$Time$.m4s" initialization="CNN/init/$RepresentationID$.mp4"> <SegmentTimeline> <S t="3054860526" d="360360" r="71"/> </SegmentTimeline> </SegmentTemplate> <Representation id="VIDEO_7" width="352" height="198" .../> <Representation id="VIDEO_6" width="384" height="216" .../> <Representation id="VIDEO_5" width="480" height="270" .../> <Representation id="VIDEO_4" width="608" height="342" .../> <Representation id="VIDEO_3" width="768" height="432" .../> <Representation id="VIDEO_2" width="1024" height="576" .../> <Representation id="VIDEO_1" width="1280" height="720" .../> <Representation id="VIDEO_0" width="1280" height="720" .../> </AdaptationSet> <AdaptationSet id="1" mimeType="audio/mp4" segmentAlignment="true" bitstreamSwitching="true"> <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/> <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/> <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/> <InbandEventStream schemeIdUri="www.nielsen.com:id3:v1" value="1"/> <SegmentTemplate timescale="90000" presentationTimeOffset="3054857523" media="CNN/$RepresentationID$/$Time$.m4s" initialization="CNN/init/$RepresentationID$.mp4"> <SegmentTimeline> <S t="3054861448" d="360960"/> <S d="359040"/> <S d="360960" r="1"/> <S d="359040"/> <S d="360960" r="2"/> <S d="359040"/> <S d="360960" r="1"/> <S d="359040"/> <S d="360960" r="1"/> <S d="359040"/> <S d="360960" r="1"/> .... <S d="360960" r="2"/> </SegmentTimeline> </SegmentTemplate> <Representation id="AUDIO" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="96000"> <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/> </Representation> </AdaptationSet> </Period> </MPD>
  • 22. Change Across Updates Optimizing for Scale <?xml version="1.0" encoding="UTF-8"?> <MPD type="dynamic" minBufferTime="PT1.0S" minimumUpdatePeriod="PT3.0S" suggestedPresentationDelay="PT8S" ...> <Period id="1" start="PT70406333.088S"> <BaseURL serviceLocation="cdn-1">https://cdn-1.net/CNN/</BaseURL> <BaseURL serviceLocation="cdn-2">https://cdn-2.net/CNN/</BaseURL> <BaseURL serviceLocation="cdn-3">https://cdn-3.net/CNN/</BaseURL> <AdaptationSet id="2" mimeType="video/mp4" segmentAlignment="true" bitstreamSwitching="true" ...> <Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng"/> <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/> <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/> <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/> <SegmentTemplate timescale="90000" presentationTimeOffset="3054857523" media="CNN/$RepresentationID$/$Time$.m4s" initialization="CNN/init/$RepresentationID$.mp4"> <SegmentTimeline> <S t="3054860526" d="360360" r="1"/> </SegmentTimeline> </SegmentTemplate> <Representation id="VIDEO_7" width="352" height="198" .../> <Representation id="VIDEO_6" width="384" height="216" .../> <Representation id="VIDEO_5" width="480" height="270" .../> <Representation id="VIDEO_4" width="608" height="342" .../> <Representation id="VIDEO_3" width="768" height="432" .../> <Representation id="VIDEO_2" width="1024" height="576" .../> <Representation id="VIDEO_1" width="1280" height="720" .../> <Representation id="VIDEO_0" width="1280" height="720" .../> </AdaptationSet> <AdaptationSet id="1" mimeType="audio/mp4" segmentAlignment="true" bitstreamSwitching="true"> <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/> <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/> <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/> <InbandEventStream schemeIdUri="www.nielsen.com:id3:v1" value="1"/> <SegmentTemplate timescale="90000" presentationTimeOffset="3054857523" media="CNN/$RepresentationID$/$Time$.m4s" initialization="CNN/init/$RepresentationID$.mp4"> <SegmentTimeline> <S t="3054861448" d="360960"/> <S d="359040"/> </SegmentTemplate> <Representation id="AUDIO" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="96000"> <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/> </Representation> </AdaptationSet> </Period> </MPD> <?xml version="1.0" encoding="UTF-8"?> <MPD type="dynamic" minBufferTime="PT1.0S" minimumUpdatePeriod="PT3.0S" suggestedPresentationDelay="PT8S" ...> <Period id="1" start="PT70406333.088S"> <BaseURL serviceLocation="cdn-1">https://cdn-1.net/CNN/</BaseURL> <BaseURL serviceLocation="cdn-2">https://cdn-2.net/CNN/</BaseURL> <BaseURL serviceLocation="cdn-3">https://cdn-3.net/CNN/</BaseURL> <AdaptationSet id="2" mimeType="video/mp4" segmentAlignment="true" bitstreamSwitching="true" ...> <Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng"/> <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/> <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/> <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/> <SegmentTemplate timescale="90000" presentationTimeOffset="3054857523" media="CNN/$RepresentationID$/$Time$.m4s" initialization="CNN/init/$RepresentationID$.mp4"> <SegmentTimeline> <S t="3054860526" d="360360" r="2"/> </SegmentTimeline> </SegmentTemplate> <Representation id="VIDEO_7" width="352" height="198" .../> <Representation id="VIDEO_6" width="384" height="216" .../> <Representation id="VIDEO_5" width="480" height="270" .../> <Representation id="VIDEO_4" width="608" height="342" .../> <Representation id="VIDEO_3" width="768" height="432" .../> <Representation id="VIDEO_2" width="1024" height="576" .../> <Representation id="VIDEO_1" width="1280" height="720" .../> <Representation id="VIDEO_0" width="1280" height="720" .../> </AdaptationSet> <AdaptationSet id="1" mimeType="audio/mp4" segmentAlignment="true" bitstreamSwitching="true"> <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/> <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/> <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/> <InbandEventStream schemeIdUri="www.nielsen.com:id3:v1" value="1"/> <SegmentTemplate timescale="90000" presentationTimeOffset="3054857523" media="CNN/$RepresentationID$/$Time$.m4s" initialization="CNN/init/$RepresentationID$.mp4"> <SegmentTimeline> <S t="3054861448" d="360960"/> <S d="359040"/> <S d="360960"/> </SegmentTemplate> <Representation id="AUDIO" codecs="mp4a.40.2" audioSamplingRate="48000" startWithSAP="1" bandwidth="96000"> <AudioChannelConfiguration schemeIdUri="urn:mpeg:dash:23003:3:audio_channel_configuration:2011" value="2"/> </Representation> </AdaptationSet> </Period> </MPD>
  • 23. MPD Patch Updates Scaling Live OTT with DASH
  • 24. Optimizing Update Requests MPD Patch Updates • Solution Constraints • Send only new information to clients • Maintain response caching • Minimize request client processing • Keep server in control of playout • Created the Patch Manifest concept • Special server update response • Leverages MPD structure semantics • Uses client persisted breadcrumbing • Relies on client timeline persistence
  • 25. 25 Received Manifests Join Manifest Patch 1 ? Patch Manifest Playout MPD Patch Updates
  • 26. 26 Received Manifests In-Memory Manifest Join Manifest Patch 1 ? Patch Manifest Playout MPD Patch Updates
  • 27. 27 Received Manifests In-Memory Manifest Join Manifest Patch 1 Patch 2 ? Patch Manifest Playout MPD Patch Updates
  • 28. 28 Received Manifests In-Memory Manifest Join Manifest Patch 1 Patch 2 Patch Manifest Playout MPD Patch Updates
  • 29. Anatomy of a Join Manifest MPD Patch Updates <?xml version="1.0" encoding="UTF-8"?> <MPD type="dynamic" id="channel" minimumUpdatePeriod="PT3.0S" publishTime="2019-10-18T22:06:14" ...> <PatchLocation ttl="60">/patch/channel.mpd?publishTime=2019-10-18T22:06:14&s=5095823234</PatchLocation> <Period id="1" start="PT70715052.772S"> <BaseURL serviceLocation="cdn-1">https://cdn-1.net/channel/</BaseURL> <BaseURL serviceLocation="cdn-2">https://cdn-2.net/channel/</BaseURL> <BaseURL serviceLocation="cdn-3">https://cdn-3.net/channel/</BaseURL> <AdaptationSet id="2" mimeType="video/mp4" segmentAlignment="true" bitstreamSwitching="true" ...> <Accessibility schemeIdUri="urn:scte:dash:cc:cea-608:2015" value="CC1=eng"/> <ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc" cenc:default_KID="..."/> <ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"/> <ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"/> <SegmentTemplate timescale="90000" presentationTimeOffset="5069874311" media="channel/$RepresentationID$/$Time$.m4s" initialization="channel/init/$RepresentationID$.mp4"> <SegmentTimeline> <S t="5069877314" d="360360" r="71"/> </SegmentTimeline> </SegmentTemplate> <Representation id="VIDEO_7" width="352" height="198" .../> <Representation id="VIDEO_6" width="384" height="216" .../> <Representation id="VIDEO_5" width="480" height="270" .../> ...
  • 30. Anatomy of a Patch Manifest MPD Patch Updates <?xml version="1.0" encoding="UTF-8"?> <Patch mpdId="channel" originalPublishTime="2019-10-18T22:06:14" publishTime="2019-10-18T22:06:17" xmlns="urn:mpeg:dash:schema:mpd-patch:2020" xmlns:p="urn:ietf:params:xml:schema:patch-ops" ...> <p:replace sel="/MPD/@publishTime">2019-10-18T22:06:17</p:replace> <p:replace sel="/MPD/PatchLocation[0]"> <PatchLocation ttl="60">/patch/channel.mpd?publishTime=2019-10-18T22:06:17&s=5095823234</PatchLocation> </p:replace> <p:add sel="/MPD/Period[@id='1']/AdaptationSet[@id='1']/SegmentTemplate/SegmentTimeline"> <S t="5095823752" d="360960" /> </p:add> <p:add sel="/MPD/Period[@id='1']/AdaptationSet[@id='2']/SegmentTemplate/SegmentTimeline"> <S t="5095823234" d="360360" /> </p:add> </Patch>
  • 31. Patch Manifests MPD Patch Updates • By The Numbers • 9 XML Nodes • ~1KB Uncompressed Size • ~2ms Parse Time • Successfully Deployed Solution • Constant cost addition over time • Efficient for network and client • No reduction in cache efficiency • Server fully in control of timeline
  • 32. From Demuxed: Discovering Unique Streams 32 1 2 3 4 ? ? ? ? MPD Patch Updates
  • 33. From Demuxed: Discovering Unique Streams 33 1 2 3 4 ? MPD Patch Updates
  • 34. 34 Today / Forward Looking MPD Patch Updates ● Deployed in production today ○ Primary LIVE streaming method ○ Including some proprietary players ● MPEG-DASH Formalization ○ Moved from TuC to AMD.1 ○ Landing in 4th Edition Soon ● DASH Industry Forum Work ○ Optimizing DASH at Scale ○ Reference Implementations