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

HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)Teiichi Ota
 
Megacity on mobile: How we optimized it with Adaptive Performance
Megacity on mobile: How we optimized it with Adaptive PerformanceMegacity on mobile: How we optimized it with Adaptive Performance
Megacity on mobile: How we optimized it with Adaptive PerformanceUnity Technologies
 
BUSINESS ARCHITECTURE OVERVIEW
BUSINESS ARCHITECTURE OVERVIEWBUSINESS ARCHITECTURE OVERVIEW
BUSINESS ARCHITECTURE OVERVIEWKenMartin18
 
VVC tutorial at ICME 2020 together with Benjamin Bross
VVC tutorial at ICME 2020 together with Benjamin BrossVVC tutorial at ICME 2020 together with Benjamin Bross
VVC tutorial at ICME 2020 together with Benjamin BrossMathias Wien
 
製作 Unity Plugin for iOS
製作 Unity Plugin for iOS製作 Unity Plugin for iOS
製作 Unity Plugin for iOSJohnny Sung
 
Real business architecture transforms business
Real business architecture transforms businessReal business architecture transforms business
Real business architecture transforms businessGraham McLeod
 
【Unity道場Houdini編】Houdini Engine とプロシージャル法
【Unity道場Houdini編】Houdini Engine とプロシージャル法【Unity道場Houdini編】Houdini Engine とプロシージャル法
【Unity道場Houdini編】Houdini Engine とプロシージャル法UnityTechnologiesJapan002
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]DeNA
 
An Introduction to Video Principles-Part 1
An Introduction to Video Principles-Part 1   An Introduction to Video Principles-Part 1
An Introduction to Video Principles-Part 1 Dr. Mohieddin Moradi
 
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian FeldmannBitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian FeldmannBitmovin Inc
 
IT Sourcing I Best Practices I NuggetHub
IT Sourcing I Best Practices I NuggetHubIT Sourcing I Best Practices I NuggetHub
IT Sourcing I Best Practices I NuggetHubRichardNowack
 
Gstreamer: an Overview
Gstreamer: an OverviewGstreamer: an Overview
Gstreamer: an OverviewRodrigo Costa
 
シリコンスタジオの最新テクノロジーデモ技術解説
シリコンスタジオの最新テクノロジーデモ技術解説シリコンスタジオの最新テクノロジーデモ技術解説
シリコンスタジオの最新テクノロジーデモ技術解説Silicon Studio Corporation
 
IT4IT™ Reference Architecture in short.
IT4IT™ Reference Architecture in short.IT4IT™ Reference Architecture in short.
IT4IT™ Reference Architecture in short.Architecture Center Ltd
 
世界の動画技術動向を見据えた 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.
 
より高品質なメディアサービスを目指す ABEMA の技術進化
より高品質なメディアサービスを目指す ABEMA の技術進化より高品質なメディアサービスを目指す ABEMA の技術進化
より高品質なメディアサービスを目指す ABEMA の技術進化Yusuke Goto
 

What's hot (20)

HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
HTML5時代のネット動画技術〜良い子悪い子普通の子(増補改訂版)
 
Megacity on mobile: How we optimized it with Adaptive Performance
Megacity on mobile: How we optimized it with Adaptive PerformanceMegacity on mobile: How we optimized it with Adaptive Performance
Megacity on mobile: How we optimized it with Adaptive Performance
 
BUSINESS ARCHITECTURE OVERVIEW
BUSINESS ARCHITECTURE OVERVIEWBUSINESS ARCHITECTURE OVERVIEW
BUSINESS ARCHITECTURE OVERVIEW
 
「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例
「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例
「電車でGO!!」アーケード大型3画面筐体で実在の街並みを表現するUE4開発事例
 
VVC tutorial at ICME 2020 together with Benjamin Bross
VVC tutorial at ICME 2020 together with Benjamin BrossVVC tutorial at ICME 2020 together with Benjamin Bross
VVC tutorial at ICME 2020 together with Benjamin Bross
 
製作 Unity Plugin for iOS
製作 Unity Plugin for iOS製作 Unity Plugin for iOS
製作 Unity Plugin for iOS
 
Real business architecture transforms business
Real business architecture transforms businessReal business architecture transforms business
Real business architecture transforms business
 
【Unity道場Houdini編】Houdini Engine とプロシージャル法
【Unity道場Houdini編】Houdini Engine とプロシージャル法【Unity道場Houdini編】Houdini Engine とプロシージャル法
【Unity道場Houdini編】Houdini Engine とプロシージャル法
 
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
Unity 2018-2019を見据えたDeNAのUnity開発のこれから [DeNA TechCon 2019]
 
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
UE4のローカライズ機能紹介 (UE4 Localization Deep Dive)
 
An Introduction to Video Principles-Part 1
An Introduction to Video Principles-Part 1   An Introduction to Video Principles-Part 1
An Introduction to Video Principles-Part 1
 
Localization feature of ue4
Localization feature of ue4Localization feature of ue4
Localization feature of ue4
 
多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法多機能ボイチャを簡単に導入する方法
多機能ボイチャを簡単に導入する方法
 
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian FeldmannBitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
Bitmovin AV1/VVC Presentation_Streaming Media East by Christian Feldmann
 
IT Sourcing I Best Practices I NuggetHub
IT Sourcing I Best Practices I NuggetHubIT Sourcing I Best Practices I NuggetHub
IT Sourcing I Best Practices I NuggetHub
 
Gstreamer: an Overview
Gstreamer: an OverviewGstreamer: an Overview
Gstreamer: an Overview
 
シリコンスタジオの最新テクノロジーデモ技術解説
シリコンスタジオの最新テクノロジーデモ技術解説シリコンスタジオの最新テクノロジーデモ技術解説
シリコンスタジオの最新テクノロジーデモ技術解説
 
IT4IT™ Reference Architecture in short.
IT4IT™ Reference Architecture in short.IT4IT™ Reference Architecture in short.
IT4IT™ Reference Architecture in short.
 
世界の動画技術動向を見据えた 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
 
より高品質なメディアサービスを目指す ABEMA の技術進化
より高品質なメディアサービスを目指す ABEMA の技術進化より高品質なメディアサービスを目指す ABEMA の技術進化
より高品質なメディアサービスを目指す ABEMA の技術進化
 

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
 
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 (11)

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

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationSafe Software
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxKatpro Technologies
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure servicePooja Nehwal
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...gurkirankumar98700
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Paola De la Torre
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024The Digital Insurer
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024Results
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...Martijn de Jong
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘RTylerCroy
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024Rafal Los
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking MenDelhi Call girls
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesSinan KOZAK
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024The Digital Insurer
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024The Digital Insurer
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreternaman860154
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsEnterprise Knowledge
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slidespraypatel2
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonAnna Loughnan Colquhoun
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Enterprise Knowledge
 

Recently uploaded (20)

From Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time AutomationFrom Event to Action: Accelerate Your Decision Making with Real-Time Automation
From Event to Action: Accelerate Your Decision Making with Real-Time Automation
 
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptxFactors to Consider When Choosing Accounts Payable Services Providers.pptx
Factors to Consider When Choosing Accounts Payable Services Providers.pptx
 
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure serviceWhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
WhatsApp 9892124323 ✓Call Girls In Kalyan ( Mumbai ) secure service
 
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
Kalyanpur ) Call Girls in Lucknow Finest Escorts Service 🍸 8923113531 🎰 Avail...
 
Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101Salesforce Community Group Quito, Salesforce 101
Salesforce Community Group Quito, Salesforce 101
 
Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024Partners Life - Insurer Innovation Award 2024
Partners Life - Insurer Innovation Award 2024
 
A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024A Call to Action for Generative AI in 2024
A Call to Action for Generative AI in 2024
 
2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...2024: Domino Containers - The Next Step. News from the Domino Container commu...
2024: Domino Containers - The Next Step. News from the Domino Container commu...
 
🐬 The future of MySQL is Postgres 🐘
🐬  The future of MySQL is Postgres   🐘🐬  The future of MySQL is Postgres   🐘
🐬 The future of MySQL is Postgres 🐘
 
The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024The 7 Things I Know About Cyber Security After 25 Years | April 2024
The 7 Things I Know About Cyber Security After 25 Years | April 2024
 
08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men08448380779 Call Girls In Friends Colony Women Seeking Men
08448380779 Call Girls In Friends Colony Women Seeking Men
 
Unblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen FramesUnblocking The Main Thread Solving ANRs and Frozen Frames
Unblocking The Main Thread Solving ANRs and Frozen Frames
 
Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024Tata AIG General Insurance Company - Insurer Innovation Award 2024
Tata AIG General Insurance Company - Insurer Innovation Award 2024
 
Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024Axa Assurance Maroc - Insurer Innovation Award 2024
Axa Assurance Maroc - Insurer Innovation Award 2024
 
Presentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreterPresentation on how to chat with PDF using ChatGPT code interpreter
Presentation on how to chat with PDF using ChatGPT code interpreter
 
IAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI SolutionsIAC 2024 - IA Fast Track to Search Focused AI Solutions
IAC 2024 - IA Fast Track to Search Focused AI Solutions
 
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law DevelopmentsTrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
TrustArc Webinar - Stay Ahead of US State Data Privacy Law Developments
 
Slack Application Development 101 Slides
Slack Application Development 101 SlidesSlack Application Development 101 Slides
Slack Application Development 101 Slides
 
Data Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt RobisonData Cloud, More than a CDP by Matt Robison
Data Cloud, More than a CDP by Matt Robison
 
Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...Driving Behavioral Change for Information Management through Data-Driven Gree...
Driving Behavioral Change for Information Management through Data-Driven Gree...
 

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