Skip to content

Commit

Permalink
Add integration tests for endNumber attributes and fix remaining issues
Browse files Browse the repository at this point in the history
  • Loading branch information
peaBerberian committed Dec 5, 2022
1 parent 5065bd5 commit a5dac78
Show file tree
Hide file tree
Showing 19 changed files with 991 additions and 46 deletions.
149 changes: 149 additions & 0 deletions manifest.mpd
Original file line number Diff line number Diff line change
@@ -0,0 +1,149 @@
<?xml version="1.0" encoding="UTF-8" ?>
<MPD profiles="urn:mpeg:dash:profile:isoff-live:2011" type="dynamic" availabilityStartTime="2022-10-26T02:33:26Z" minimumUpdatePeriod="PT2.0S" minBufferTime="PT2.0S" publishTime="2022-12-02T14:29:12.527Z" timeShiftBufferDepth="PT5M" suggestedPresentationDelay="PT2.0S" xmlns="urn:mpeg:dash:schema:mpd:2011" xmlns:cenc="urn:mpeg:cenc:2013" xmlns:mspr="urn:microsoft:playready" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="urn:mpeg:dash:schema:mpd:2011 DASH-MPD.xsd">
<Period start="PT0S" id="1">
<AdaptationSet mimeType="video/mp4" startWithSAP="1" segmentAlignment="true" par="16:9">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"></ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"><mspr:pro xmlns:mspr="urn:microsoft:playready">VAMAAAEAAQBKAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ARgAyAEsAcwBzAGgARgA2AGMAawBDAFEAYwBpAE0AQwA0AGUATwBqAEwAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBEAGsARQBYAHQAYwBsAFMAWABrAFUAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwBlAG4AcwBlAC4AYwB1AGIAbwB2AGkAcwBpAG8AbgAuAGkAdAAvAEwAaQBjAGUAbgBzAGUALwByAGkAZwBoAHQAcwBtAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwADoALwAvAGMAbwBuAHQAbwBzAG8ALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</mspr:pro><cenc:pssh xmlns:cenc="urn:mpeg:cenc:2013">AAADdHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAA1RUAwAAAQABAEoDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBGADIASwBzAHMAaABGADYAYwBrAEMAUQBjAGkATQBDADQAZQBPAGoATABBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AEQAawBFAFgAdABjAGwAUwBYAGsAVQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAGUAbgBzAGUALgBjAHUAYgBvAHYAaQBzAGkAbwBuAC4AaQB0AC8ATABpAGMAZQBuAHMAZQAvAHIAaQBnAGgAdABzAG0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AYwBvAG4AdABvAHMAbwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</cenc:pssh></ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"><cenc:pssh xmlns:cenc="urn:mpeg:cenc:2013">AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEIIARIQsqxiF3oRQHKQciMC4eOjLBoAIh45MDIwMDEzMV8yMDIyMDIwMTAwMDBfTElWRUNFTkMqAkhEMgBI49yVmwY=</cenc:pssh></ContentProtection>
<SegmentTemplate timescale="10000000" presentationTimeOffset="0" media="$RepresentationID$_Segment-$Time$.m4v" initialization="$RepresentationID$_init.m4i">
<SegmentTimeline>
<S t="32394546833710" d="20000000" r="149" />
</SegmentTimeline>
</SegmentTemplate>
<Representation width="384" height="216" frameRate="25" codecs="avc1.4d400d" scanType="progressive" sar="1:1" id="1666751597836item-01item" bandwidth="350000" />
<Representation width="480" height="270" frameRate="25" codecs="avc1.4d4015" scanType="progressive" sar="1:1" id="1666751597836item-02item" bandwidth="650000" />
<Representation width="768" height="432" frameRate="25" codecs="avc1.4d401e" scanType="progressive" sar="1:1" id="1666751597836item-03item" bandwidth="1000000" />
<Representation width="768" height="432" frameRate="25" codecs="avc1.4d401e" scanType="progressive" sar="1:1" id="1666751597836item-04item" bandwidth="1700000" />
<Representation width="1280" height="720" frameRate="25" codecs="avc1.4d401f" scanType="progressive" sar="1:1" id="1666751597836item-05item" bandwidth="2800000" />
<Representation width="1280" height="720" frameRate="25" codecs="avc1.4d401f" scanType="progressive" sar="1:1" id="1666751597836item-06item" bandwidth="4000000" />
<Representation width="1920" height="1080" frameRate="25" codecs="avc1.640028" scanType="progressive" sar="1:1" id="1666751597836item-07item" bandwidth="5500000" />
<Representation width="1920" height="1080" frameRate="25" codecs="avc1.64002a" scanType="progressive" sar="1:1" id="1666751597836item-08item" bandwidth="7000000" />
</AdaptationSet>
<AdaptationSet mimeType="audio/mp4" startWithSAP="1" lang="ita" segmentAlignment="true">
<ContentProtection schemeIdUri="urn:mpeg:dash:mp4protection:2011" value="cenc"></ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:9a04f079-9840-4286-ab92-e65be0885f95"><mspr:pro xmlns:mspr="urn:microsoft:playready">VAMAAAEAAQBKAzwAVwBSAE0ASABFAEEARABFAFIAIAB4AG0AbABuAHMAPQAiAGgAdAB0AHAAOgAvAC8AcwBjAGgAZQBtAGEAcwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwBEAFIATQAvADIAMAAwADcALwAwADMALwBQAGwAYQB5AFIAZQBhAGQAeQBIAGUAYQBkAGUAcgAiACAAdgBlAHIAcwBpAG8AbgA9ACIANAAuADAALgAwAC4AMAAiAD4APABEAEEAVABBAD4APABQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsARQBZAEwARQBOAD4AMQA2ADwALwBLAEUAWQBMAEUATgA+ADwAQQBMAEcASQBEAD4AQQBFAFMAQwBUAFIAPAAvAEEATABHAEkARAA+ADwALwBQAFIATwBUAEUAQwBUAEkATgBGAE8APgA8AEsASQBEAD4ARgAyAEsAcwBzAGgARgA2AGMAawBDAFEAYwBpAE0AQwA0AGUATwBqAEwAQQA9AD0APAAvAEsASQBEAD4APABDAEgARQBDAEsAUwBVAE0APgBEAGsARQBYAHQAYwBsAFMAWABrAFUAPQA8AC8AQwBIAEUAQwBLAFMAVQBNAD4APABMAEEAXwBVAFIATAA+AGgAdAB0AHAAcwA6AC8ALwBsAGkAYwBlAG4AcwBlAC4AYwB1AGIAbwB2AGkAcwBpAG8AbgAuAGkAdAAvAEwAaQBjAGUAbgBzAGUALwByAGkAZwBoAHQAcwBtAGEAbgBhAGcAZQByAC4AYQBzAG0AeAA8AC8ATABBAF8AVQBSAEwAPgA8AEwAVQBJAF8AVQBSAEwAPgBoAHQAdABwADoALwAvAGMAbwBuAHQAbwBzAG8ALgBtAGkAYwByAG8AcwBvAGYAdAAuAGMAbwBtAC8APAAvAEwAVQBJAF8AVQBSAEwAPgA8AEMAVQBTAFQATwBNAEEAVABUAFIASQBCAFUAVABFAFMAIAB4AG0AbABuAHMAPQAiACIAPgA8AC8AQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwA+ADwALwBEAEEAVABBAD4APAAvAFcAUgBNAEgARQBBAEQARQBSAD4A</mspr:pro><cenc:pssh xmlns:cenc="urn:mpeg:cenc:2013">AAADdHBzc2gAAAAAmgTweZhAQoarkuZb4IhflQAAA1RUAwAAAQABAEoDPABXAFIATQBIAEUAQQBEAEUAUgAgAHgAbQBsAG4AcwA9ACIAaAB0AHQAcAA6AC8ALwBzAGMAaABlAG0AYQBzAC4AbQBpAGMAcgBvAHMAbwBmAHQALgBjAG8AbQAvAEQAUgBNAC8AMgAwADAANwAvADAAMwAvAFAAbABhAHkAUgBlAGEAZAB5AEgAZQBhAGQAZQByACIAIAB2AGUAcgBzAGkAbwBuAD0AIgA0AC4AMAAuADAALgAwACIAPgA8AEQAQQBUAEEAPgA8AFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBFAFkATABFAE4APgAxADYAPAAvAEsARQBZAEwARQBOAD4APABBAEwARwBJAEQAPgBBAEUAUwBDAFQAUgA8AC8AQQBMAEcASQBEAD4APAAvAFAAUgBPAFQARQBDAFQASQBOAEYATwA+ADwASwBJAEQAPgBGADIASwBzAHMAaABGADYAYwBrAEMAUQBjAGkATQBDADQAZQBPAGoATABBAD0APQA8AC8ASwBJAEQAPgA8AEMASABFAEMASwBTAFUATQA+AEQAawBFAFgAdABjAGwAUwBYAGsAVQA9ADwALwBDAEgARQBDAEsAUwBVAE0APgA8AEwAQQBfAFUAUgBMAD4AaAB0AHQAcABzADoALwAvAGwAaQBjAGUAbgBzAGUALgBjAHUAYgBvAHYAaQBzAGkAbwBuAC4AaQB0AC8ATABpAGMAZQBuAHMAZQAvAHIAaQBnAGgAdABzAG0AYQBuAGEAZwBlAHIALgBhAHMAbQB4ADwALwBMAEEAXwBVAFIATAA+ADwATABVAEkAXwBVAFIATAA+AGgAdAB0AHAAOgAvAC8AYwBvAG4AdABvAHMAbwAuAG0AaQBjAHIAbwBzAG8AZgB0AC4AYwBvAG0ALwA8AC8ATABVAEkAXwBVAFIATAA+ADwAQwBVAFMAVABPAE0AQQBUAFQAUgBJAEIAVQBUAEUAUwAgAHgAbQBsAG4AcwA9ACIAIgA+ADwALwBDAFUAUwBUAE8ATQBBAFQAVABSAEkAQgBVAFQARQBTAD4APAAvAEQAQQBUAEEAPgA8AC8AVwBSAE0ASABFAEEARABFAFIAPgA=</cenc:pssh></ContentProtection>
<ContentProtection schemeIdUri="urn:uuid:edef8ba9-79d6-4ace-a3c8-27dcd51d21ed"><cenc:pssh xmlns:cenc="urn:mpeg:cenc:2013">AAAAYnBzc2gAAAAA7e+LqXnWSs6jyCfc1R0h7QAAAEIIARIQsqxiF3oRQHKQciMC4eOjLBoAIh45MDIwMDEzMV8yMDIyMDIwMTAwMDBfTElWRUNFTkMqAkhEMgBI49yVmwY=</cenc:pssh></ContentProtection>
<SegmentTemplate timescale="10000000" presentationTimeOffset="0" media="$RepresentationID$_Segment-$Time$.m4a" initialization="$RepresentationID$_init.m4i">
<SegmentTimeline>
<S t="32394546887043" d="20053333" />
<S t="32394566940376" d="20053334" />
<S t="32394586993710" d="19840000" />
<S t="32394606833710" d="20053333" r="1" />
<S t="32394646940376" d="20053334" />
<S t="32394666993710" d="19840000" />
<S t="32394686833710" d="20053333" r="1" />
<S t="32394726940376" d="20053334" />
<S t="32394746993710" d="19840000" />
<S t="32394766833710" d="20053333" r="1" />
<S t="32394806940376" d="20053334" />
<S t="32394826993710" d="19840000" />
<S t="32394846833710" d="20053333" r="1" />
<S t="32394886940376" d="20053334" />
<S t="32394906993710" d="19840000" />
<S t="32394926833710" d="20053333" r="1" />
<S t="32394966940376" d="20053334" />
<S t="32394986993710" d="19840000" />
<S t="32395006833710" d="20053333" r="1" />
<S t="32395046940376" d="20053334" />
<S t="32395066993710" d="19840000" />
<S t="32395086833710" d="20053333" r="1" />
<S t="32395126940376" d="20053334" />
<S t="32395146993710" d="19840000" />
<S t="32395166833710" d="20053333" r="1" />
<S t="32395206940376" d="20053334" />
<S t="32395226993710" d="19840000" />
<S t="32395246833710" d="20053333" r="1" />
<S t="32395286940376" d="20053334" />
<S t="32395306993710" d="19840000" />
<S t="32395326833710" d="20053333" r="1" />
<S t="32395366940376" d="20053334" />
<S t="32395386993710" d="19840000" />
<S t="32395406833710" d="20053333" r="1" />
<S t="32395446940376" d="20053334" />
<S t="32395466993710" d="19840000" />
<S t="32395486833710" d="20053333" r="1" />
<S t="32395526940376" d="20053334" />
<S t="32395546993710" d="19840000" />
<S t="32395566833710" d="20053333" r="1" />
<S t="32395606940376" d="20053334" />
<S t="32395626993710" d="19840000" />
<S t="32395646833710" d="20053333" r="1" />
<S t="32395686940376" d="20053334" />
<S t="32395706993710" d="19840000" />
<S t="32395726833710" d="20053333" r="1" />
<S t="32395766940376" d="20053334" />
<S t="32395786993710" d="19840000" />
<S t="32395806833710" d="20053333" r="1" />
<S t="32395846940376" d="20053334" />
<S t="32395866993710" d="19840000" />
<S t="32395886833710" d="20053333" r="1" />
<S t="32395926940376" d="20053334" />
<S t="32395946993710" d="19840000" />
<S t="32395966833710" d="20053333" r="1" />
<S t="32396006940376" d="20053334" />
<S t="32396026993710" d="19840000" />
<S t="32396046833710" d="20053333" r="1" />
<S t="32396086940376" d="20053334" />
<S t="32396106993710" d="19840000" />
<S t="32396126833710" d="20053333" r="1" />
<S t="32396166940376" d="20053334" />
<S t="32396186993710" d="19840000" />
<S t="32396206833710" d="20053333" r="1" />
<S t="32396246940376" d="20053334" />
<S t="32396266993710" d="19840000" />
<S t="32396286833710" d="20053333" r="1" />
<S t="32396326940376" d="20053334" />
<S t="32396346993710" d="19840000" />
<S t="32396366833710" d="20053333" r="1" />
<S t="32396406940376" d="20053334" />
<S t="32396426993710" d="19840000" />
<S t="32396446833710" d="20053333" r="1" />
<S t="32396486940376" d="20053334" />
<S t="32396506993710" d="19840000" />
<S t="32396526833710" d="20053333" r="1" />
<S t="32396566940376" d="20053334" />
<S t="32396586993710" d="19840000" />
<S t="32396606833710" d="20053333" r="1" />
<S t="32396646940376" d="20053334" />
<S t="32396666993710" d="19840000" />
<S t="32396686833710" d="20053333" r="1" />
<S t="32396726940376" d="20053334" />
<S t="32396746993710" d="19840000" />
<S t="32396766833710" d="20053333" r="1" />
<S t="32396806940376" d="20053334" />
<S t="32396826993710" d="19840000" />
<S t="32396846833710" d="20053333" r="1" />
<S t="32396886940376" d="20053334" />
<S t="32396906993710" d="19840000" />
<S t="32396926833710" d="20053333" r="1" />
<S t="32396966940376" d="20053334" />
<S t="32396986993710" d="19840000" />
<S t="32397006833710" d="20053333" r="1" />
<S t="32397046940376" d="20053334" />
<S t="32397066993710" d="19840000" />
<S t="32397086833710" d="20053333" r="1" />
<S t="32397126940376" d="20053334" />
<S t="32397146993710" d="19840000" />
<S t="32397166833710" d="20053333" r="1" />
<S t="32397206940376" d="20053334" />
<S t="32397226993710" d="19840000" />
<S t="32397246833710" d="20053333" r="1" />
<S t="32397286940376" d="20053334" />
<S t="32397306993710" d="19840000" />
<S t="32397326833710" d="20053333" r="1" />
<S t="32397366940376" d="20053334" />
<S t="32397386993710" d="19840000" />
<S t="32397406833710" d="20053333" r="1" />
<S t="32397446940376" d="20053334" />
<S t="32397466993710" d="19840000" />
<S t="32397486833710" d="20053333" r="1" />
<S t="32397526940376" d="20053334" />
</SegmentTimeline>
</SegmentTemplate>
<Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="1666751597836item-09item" bandwidth="96000" />
<Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="1666751597836item-10item" bandwidth="128000" />
<Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="1666751597836item-11item" bandwidth="192000" />
<Representation audioSamplingRate="48000" codecs="mp4a.40.2" id="1666751597836item-12item" bandwidth="256000" />
</AdaptationSet>
</Period>
</MPD>
18 changes: 3 additions & 15 deletions src/core/stream/period/create_empty_adaptation_stream.ts
Original file line number Diff line number Diff line change
Expand Up @@ -15,14 +15,11 @@
*/

import {
combineLatest as observableCombineLatest,
mergeMap,
Observable,
of as observableOf,
} from "rxjs";
import log from "../../../log";
import { Period } from "../../../manifest";
import { IReadOnlySharedReference } from "../../../utils/reference";
import { IReadOnlyPlaybackObserver } from "../../api";
import { IBufferType } from "../../segment_buffers";
import { IStreamStatusEvent } from "../types";
Expand All @@ -34,35 +31,26 @@ import { IPeriodStreamPlaybackObservation } from "./period_stream";
* This observable will never download any segment and just emit a "full"
* event when reaching the end.
* @param {Observable} playbackObserver
* @param {Object} wantedBufferAhead
* @param {string} bufferType
* @param {Object} content
* @returns {Observable}
*/
export default function createEmptyAdaptationStream(
playbackObserver : IReadOnlyPlaybackObserver<IPeriodStreamPlaybackObservation>,
wantedBufferAhead : IReadOnlySharedReference<number>,
bufferType : IBufferType,
content : { period : Period }
) : Observable<IStreamStatusEvent> {
const { period } = content;
let hasFinishedLoading = false;
const wantedBufferAhead$ = wantedBufferAhead.asObservable();
const observation$ = playbackObserver.getReference().asObservable();
return observableCombineLatest([observation$,
wantedBufferAhead$]).pipe(
mergeMap(([observation, wba]) => {
return observation$.pipe(
mergeMap((observation) => {
const position = observation.position.last;
if (period.end !== undefined && position + wba >= period.end) {
log.debug("Stream: full \"empty\" AdaptationStream", bufferType);
hasFinishedLoading = true;
}
return observableOf({ type: "stream-status" as const,
value: { period,
bufferType,
position,
imminentDiscontinuity: null,
hasFinishedLoading,
hasFinishedLoading: true,
neededSegments: [],
shouldRefreshManifest: false } });
})
Expand Down
4 changes: 2 additions & 2 deletions src/core/stream/period/period_stream.ts
Original file line number Diff line number Diff line change
Expand Up @@ -202,7 +202,7 @@ export default function PeriodStream({

return observableConcat(
cleanBuffer$.pipe(map(() => EVENTS.adaptationChange(bufferType, null, period))),
createEmptyStream(playbackObserver, wantedBufferAhead, bufferType, { period })
createEmptyStream(playbackObserver, bufferType, { period })
);
}

Expand Down Expand Up @@ -313,7 +313,7 @@ export default function PeriodStream({
});
return observableConcat(
observableOf(EVENTS.warning(formattedError)),
createEmptyStream(playbackObserver, wantedBufferAhead, bufferType, { period })
createEmptyStream(playbackObserver, bufferType, { period })
);
}
log.error(`Stream: ${bufferType} Stream crashed. Stopping playback.`,
Expand Down

0 comments on commit a5dac78

Please sign in to comment.