Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
314 commits
Select commit Hold shift + click to select a range
90d3c83
Merge pull request #43 from qualabs/alternative/max-duration
sebastianpiq Jan 17, 2025
5c3995c
Merge pull request #46 from qualabs/alternative/return-offset
sebastianpiq Jan 17, 2025
a8ffdab
merge alternative-media-presentations
sebastianpiq Jan 17, 2025
5581320
Merge pull request #44 from qualabs/alternative/start-at-playhead
sebastianpiq Jan 17, 2025
74bdd09
Fix clip+startAtPlayhead and maxDurations bugs
sebastianpiq Jan 20, 2025
8ba35db
Fix alternative player don't return
sebastianpiq Jan 20, 2025
3552c63
Fix alternative event earliestResolutionTimeOffset attribute
sebastianpiq Jan 20, 2025
0de5b4d
Merge branch 'alternative/add-logger' into demo-bug-fixes
sebastianpiq Jan 21, 2025
b3c4a46
Merge branch 'alternative/update-constants' into demo-bug-fixes
sebastianpiq Jan 21, 2025
d244a49
Fix merge logger and constants bugs
sebastianpiq Jan 21, 2025
e089428
Remove parse alternative mpd event unnecesary if conditions
sebastianpiq Jan 21, 2025
13970c7
Only Alternative MPD replace events can be used used for dynamic MPD
tatiana-perera Jan 21, 2025
da5bfd5
Fix alternative events not triggered without event duration
sebastianpiq Jan 21, 2025
1ca952f
Fix wrong clip and startAtPlayhead return time
sebastianpiq Jan 23, 2025
d799b98
Include t anchor with startAtPlayhead
tatiana-perera Jan 23, 2025
a238d42
Changed doble quotes to single ones
tatiana-perera Jan 23, 2025
87482a2
Merged demo-bug-fixes into current branch
tatiana-perera Jan 23, 2025
e3d03fa
Now, the t anchor is obtained with a regEx
tatiana-perera Jan 23, 2025
f7bb729
Merge pull request #48 from qualabs/feature/alternative-startAtPlayHe…
tatiana-perera Jan 23, 2025
5a05014
Now the alternative duration is the minimum of max duration and the a…
tatiana-perera Jan 24, 2025
22d412d
Fix bug multi alternative events
sebastianpiq Jan 24, 2025
3c7c1fe
Merge pull request #47 from qualabs/demo-bug-fixes
tatiana-perera Jan 24, 2025
f134052
Fix baseURL issues
sebastianpiq Jan 30, 2025
6b7b8ae
Add default (60 seconds) to the erliestResolutionTimeOffset
sebastianpiq Feb 3, 2025
f1fc5d8
Add default value to the earliestResolutionTimeOffset
sebastianpiq Feb 25, 2025
f3510ee
add sample page for List MPDs
cotid-qualabs Feb 25, 2025
2129527
Merge pull request #54 from qualabs/mpd-lists/earliestresolutionTimeD…
cotid-qualabs Feb 26, 2025
576993c
Update samples/list-mpds/list-mpds.html
cotid-qualabs Feb 26, 2025
84c7823
Update samples/list-mpds/list-mpds.html
cotid-qualabs Feb 26, 2025
eb38a07
wording update on case 8 for list mpds sample
cotid-qualabs Feb 26, 2025
4eb03e2
Merge branch 'mpd-lists/sample-page' of github_qualabs:qualabs/dash.j…
cotid-qualabs Feb 26, 2025
bbf8665
Update samples/list-mpds/list-mpds.html
cotid-qualabs Feb 26, 2025
ad68721
wording update on case 8 for list mpds sample
cotid-qualabs Feb 26, 2025
0d9fe88
Merge branch 'mpd-lists/sample-page' of github_qualabs:qualabs/dash.j…
cotid-qualabs Feb 26, 2025
5441697
wording update on case 8 for list mpds sample
cotid-qualabs Feb 26, 2025
5c80924
remove href from dropdown links on list mpd sample
cotid-qualabs Feb 26, 2025
3961e64
typo
cotid-qualabs Feb 26, 2025
7b4c0e4
typo
cotid-qualabs Feb 26, 2025
5e37ed7
Fix base uri issues
sebastianpiq Feb 26, 2025
0ad6a77
Fix handling of periods with duration but without start time
sebastianpiq Feb 27, 2025
60928cc
Merge pull request #55 from qualabs/mpd-lists/sample-page
sebastianpiq Feb 27, 2025
30cefbd
Merge pull request #56 from qualabs/mpd-lists/base-uri-fix
sebastianpiq Feb 27, 2025
48d4f1f
Merge branch 'feature/mpd-lists' into mpd-lists/fix-only-duration-per…
sebastianpiq Feb 27, 2025
98c91c9
Remove blank spaces
sebastianpiq Feb 27, 2025
0f5e770
Merge pull request #57 from qualabs/mpd-lists/fix-only-duration-perio…
sebastianpiq Feb 27, 2025
955d8ff
basic test case for debugging
cotid-qualabs Feb 27, 2025
238352d
Add constant for the deafaul earliest resolution time offset
sebastianpiq Feb 28, 2025
779ef4b
Merge pull request #52 from qualabs/alternative/earliestResolutionTim…
sebastianpiq Feb 28, 2025
24ec616
basic test case for debugging
cotid-qualabs Feb 28, 2025
d86e3dc
remove unused variables
cotid-qualabs Feb 28, 2025
bf5016b
regular periods trigger manifest update event test case WIP
cotid-qualabs Feb 28, 2025
2b8e133
quote fix
cotid-qualabs Feb 28, 2025
c6d2480
WIP
cotid-qualabs Mar 4, 2025
aa6e60f
WIP
cotid-qualabs Mar 4, 2025
aa075b2
WIP
cotid-qualabs Mar 5, 2025
fbe8b49
WIP
cotid-qualabs Mar 5, 2025
d4792ba
WIP
cotid-qualabs Mar 5, 2025
bdee174
remove baseurl parameter from listmpd dummy helper
cotid-qualabs Mar 6, 2025
70f3981
Implement loadLinkedPeriod unit tests
sebastianpiq Mar 6, 2025
cfdca5b
list mpd unit test cases
cotid-qualabs Mar 7, 2025
1b35170
Fix bug period duration precedence
sebastianpiq Mar 10, 2025
9afd91d
Now ProgramInformation is no longer override by the imported MPD
tatiana-perera Mar 11, 2025
b6abe51
Merge pull request #60 from qualabs/mpd-lists/bug-programinformation-…
cotid-qualabs Mar 12, 2025
118d6df
bug: fix typo on CoreEvents name
cotid-qualabs Mar 12, 2025
3a31f8b
Merge pull request #59 from qualabs/mpd-lists/unit-test
cotid-qualabs Mar 12, 2025
1a304fb
Merge pull request #63 from qualabs/mpd-lists/importedMpdLoaded-typo
cotid-qualabs Mar 12, 2025
4b7fa75
Merge mpd level essentaial and suplemental properties to linked perio…
sebastianpiq Mar 13, 2025
167ce54
Resolve minor code review comments
sebastianpiq Mar 21, 2025
35612d2
Undo manifestLoader as a singleton
sebastianpiq Mar 21, 2025
cb29ea9
Merge development into mpd-lists branch
sebastianpiq Mar 24, 2025
91f9c66
Fix sample json
sebastianpiq Mar 24, 2025
26af4a5
[MpdLists] Fix merge imported profiles issue (#66)
sebastianpiq Mar 25, 2025
1c29fec
Merge pull request #67 from qualabs/mpd-lists/review-changes
cotid-qualabs Mar 25, 2025
2321e23
Merge branch 'development' into feature/mpd-lists
sebastianpiq Apr 3, 2025
4880a6b
Fix code formatting
sebastianpiq Apr 3, 2025
437210b
Update dashjs path in to the list mpd demo
sebastianpiq Apr 3, 2025
c609b9f
Handle empty manifest profiles to prevent errors during parsing
sebastianpiq Apr 3, 2025
5fa9745
Merge branch 'development' into feature/alternative-media-presentations
emilsas Apr 30, 2025
53661d7
Rename 'startAtPlayhead' to 'startWithOffset' in AlternativeMpd and r…
sebastianpiq May 28, 2025
d30c20d
Fix typos and rename some methods (#103)
sebastianpiq Jun 2, 2025
ea03de7
Merge branch 'development' into feature/mpd-lists
sebastianpiq Jun 4, 2025
aadfd4f
Merge branch 'development' into feature/mpd-lists
sebastianpiq Jun 4, 2025
bfc2218
Fix: update minEarliestResolutionTimeOffset to 0
sebastianpiq Jun 4, 2025
5eaeece
Merge pull request #102 from qualabs/alternative-mpd/update-startWith…
cotid-qualabs Jun 4, 2025
3894b78
refactor: rename IMPORTED_MPDS_LOADED event to LINKED_PERIOD_FOUND an…
sebastianpiq Jun 4, 2025
4c67920
WIP executeOnce
cotid-qualabs Jun 5, 2025
7366dc8
Fix: reset ListMpdController event listeners during reset
sebastianpiq Jun 5, 2025
08540d7
refactor: encapsulate reset logic in resetInitialSettings and call du…
sebastianpiq Jun 5, 2025
a481798
refactor: simplify linked period handling in ManifestUpdater and List…
sebastianpiq Jun 6, 2025
e3c4a4e
Fix: validate period ID before seeking to period in StreamController
sebastianpiq Jun 6, 2025
72f789d
refactor: improve linked period identification in StreamController
sebastianpiq Jun 6, 2025
69c856e
refactor: rename linked period event to list MPD found for clarity
sebastianpiq Jun 6, 2025
3b7cd8f
WIP
cotid-qualabs Jun 9, 2025
5d29012
task/cml-segement-template-util (#4711)
littlespex May 3, 2025
a6668f7
TypeScript fixes for MediaSettings (#4761)
stschr May 3, 2025
3015cd7
Fix errors in JSDoc
dsilhavy May 9, 2025
360b691
Stschr/20250424 role main (#4760)
stschr May 10, 2025
b886c86
Fix build error in network sample (#4767)
dsilhavy May 10, 2025
5d9298b
Increase version number to 5.1.0
dsilhavy May 14, 2025
ca5b06e
fix: fix: allow large ints to be passed in as time values for process…
littlespex May 18, 2025
1adf9ee
Change next version number to 5.0.3
dsilhavy May 21, 2025
1bfcc77
[VTTParser] Support for lineAlign and positionAlign (#4773)
eduter May 21, 2025
47efab3
[TextTracks] Improve performance of addCaptions and fix duplicate che…
eduter May 21, 2025
2dfa4f3
add check for schemeIdUri in getIsMain() (#4779)
stschr May 21, 2025
103b9c6
Upgrade CML version in network interceptor sample
dsilhavy May 21, 2025
4906ee5
Fix regression when setting size of VTT cue (#4780)
dsilhavy May 21, 2025
fb1661a
fix: Handle falsy values in DescriptorType value property (#4784)
stephanterning May 22, 2025
6ffda88
Merge branch 'development' into feature/alternative-media-presentations
sebastianpiq Jun 9, 2025
13d17a9
task/cml-segement-template-util (#4711)
littlespex May 3, 2025
2b0c0ae
Fix build error in network sample (#4767)
dsilhavy May 10, 2025
3254903
Increase version number to 5.1.0
dsilhavy May 14, 2025
02370b0
Change next version number to 5.0.3
dsilhavy May 21, 2025
00148c9
Upgrade CML version in network interceptor sample
dsilhavy May 21, 2025
b9aaeda
Increase version number to 5.1.0
dsilhavy Jun 2, 2025
7f1f596
feature: implement no jump alternative event attribute
sebastianpiq Jun 12, 2025
c82f1cf
Merge pull request #106 from qualabs/alternative-media-presentation/n…
cotid-qualabs Jun 12, 2025
75271ae
Remove unnecessary code and comments
sebastianpiq Jun 19, 2025
bf62c90
Remove unnecesary white space
sebastianpiq Jun 20, 2025
ef3f338
refactor: remove unused resetAlt functions from Stream and StreamCont…
sebastianpiq Jun 20, 2025
b35d5eb
Merge branch 'feature/alternative-media-presentations' into alternati…
sebastianpiq Jun 20, 2025
7d9cc16
feat: add executeOnce property to AlternativeMpd and update related l…
sebastianpiq Jun 20, 2025
82a582a
refactor: remove executeOnce property from alternativeMpd in DashMani…
sebastianpiq Jun 20, 2025
50a898d
refactor: improve readability by adding comments to skip logic in eve…
sebastianpiq Jun 20, 2025
759a251
Merge pull request #105 from qualabs/alternative-media-presentation/e…
cotid-qualabs Jun 23, 2025
a76affe
feature: add no jump attributes and refactor event handling logic
sebastianpiq Jun 25, 2025
e801b16
refactor: update no jump attributes and clean up event handling logic
sebastianpiq Jun 25, 2025
94d2412
refactor: update noJump condition to use constant for better readability
sebastianpiq Jun 25, 2025
8346e30
Merge pull request #109 from qualabs/alternative-media-presentations/…
cotid-qualabs Jun 25, 2025
5b2adbd
feature: add STATUS repeat and update
sebastianpiq Jun 27, 2025
de365a2
Merge branch 'feature/alternative-media-presentations' into alternati…
sebastianpiq Jun 30, 2025
96b93f7
refactor: simplify condition checks for scheduled events in Alternati…
sebastianpiq Jun 30, 2025
2cde079
Merge pull request #111 from qualabs/alternative-media-presentations/…
cotid-qualabs Jul 10, 2025
72e93be
Move parse event logic from the event recived to the player time updated
sebastianpiq Aug 18, 2025
d24d68a
Refactor eventController to handle earliestResolutionTimeOffset and r…
sebastianpiq Aug 18, 2025
0ec11d4
Remove unnecessary console log from _onAlternativeEventTriggered func…
sebastianpiq Aug 18, 2025
7a3a542
refactor: remove prebufferedEvents and streamline prebuffering logic
sebastianpiq Aug 18, 2025
41e4274
fix: ensure video elements are inserted into the DOM only if parentNo…
sebastianpiq Aug 18, 2025
161ea40
fix: include event object in EVENT_READY_TO_RESOLVE trigger and adjus…
sebastianpiq Aug 19, 2025
323b32d
fix: include event object in EVENT_READY_TO_RESOLVE trigger and adjus…
sebastianpiq Aug 19, 2025
a5dac1c
feat: implement noJump event handling and refactor event triggering l…
sebastianpiq Aug 22, 2025
08050a4
feat: enhance noJump event handling and refactor related logic
sebastianpiq Aug 22, 2025
051acf9
fix: reorder conditions in _canEventRetrigger to improve clarity and …
sebastianpiq Aug 22, 2025
74be18f
feat: add playback seeking event handling to prevent false event trig…
sebastianpiq Aug 22, 2025
27168b2
feat: implement logic to determine the first event in a sequence for …
sebapique Aug 22, 2025
46aee3a
feat: add executeOnce handling
sebapique Aug 22, 2025
f3561f9
refactor: remove unused constants and clean up event handling logic
sebapique Aug 23, 2025
d821539
tests
sebapique Aug 26, 2025
fc12b2a
refactor: remove unnecessary tests
sebastianpiq Aug 26, 2025
e5333fd
refactor: remove unnecessary tests
sebastianpiq Aug 26, 2025
70ca4cd
Implement alternativeMpdController unit tests
sebastianpiq Sep 2, 2025
46eb407
feat: add mock utilities for AlternativeMpdController testing
sebastianpiq Sep 2, 2025
e51d9e2
Fix event resolution time offset
sebastianpiq Sep 4, 2025
268add0
refactor: remove debug log for resolution time calculation
sebastianpiq Sep 4, 2025
701fe33
refactor: Implement media manager
sebastianpiq Sep 8, 2025
2902846
Add sample page
sebastianpiq Sep 9, 2025
3743525
Implement alternative preload
sebastianpiq Sep 9, 2025
74f8aac
refactor: Clean up MediaManager prebuffered content handling
sebastianpiq Sep 9, 2025
dc3bb19
fix: adapt switch back logic for live to live
sebastianpiq Sep 11, 2025
15f49a0
refactor: Event controller supports alternative events (#126)
sebastianpiq Sep 11, 2025
3adb4e8
add alternative content start and end events
cotid-qualabs Sep 11, 2025
c0679f5
add vod to vod insert and replace functional tests
cotid-qualabs Sep 11, 2025
8a32cc4
insert manifest fix
cotid-qualabs Sep 11, 2025
ca3338f
Merge branch 'feature/alternative-media-presentations' of github.com:…
cotid-qualabs Sep 11, 2025
a33627a
refactor: Rename realMaxDuration to calculatedMaxDuration and encapsu…
sebastianpiq Sep 11, 2025
d8f509c
Merge branch 'feature/alternative-media-presentations' into alternati…
sebastianpiq Sep 11, 2025
5a2673f
add live to vod replace functional test
cotid-qualabs Sep 11, 2025
654bc94
add vod to live
cotid-qualabs Sep 11, 2025
45d6047
add vod to live
cotid-qualabs Sep 11, 2025
ff5a6b6
add complete alterantive duration verification
cotid-qualabs Sep 11, 2025
b8c7c41
add insert vod to live
cotid-qualabs Sep 11, 2025
8cfcf2f
alternative replace vod manifest cleanup
cotid-qualabs Sep 11, 2025
feb415d
add complete alterantive duration to live to vod
cotid-qualabs Sep 11, 2025
d913269
variable rename
cotid-qualabs Sep 11, 2025
92578b4
file renames
cotid-qualabs Sep 11, 2025
4ffe120
vector name update
cotid-qualabs Sep 11, 2025
6b2d78c
add live to live
cotid-qualabs Sep 11, 2025
060e165
executeOnce functional test case
cotid-qualabs Sep 12, 2025
9a6c2d4
refactor: Move event handling logic in the MediaManager into the Alte…
sebapique Sep 12, 2025
c5ebb05
test case rename
cotid-qualabs Sep 12, 2025
e2f791d
simplify replace live test case
cotid-qualabs Sep 12, 2025
3852a27
Implemented live content with alternative live content playback (#129)
sebastianpiq Sep 12, 2025
16c0ef7
Merge branch 'feature/alternative-media-presentations' of github.com:…
cotid-qualabs Sep 12, 2025
22d9045
extend tolerance for live content
cotid-qualabs Sep 12, 2025
b276809
test: Add unit tests for AlternativeMediaController with MediaManager…
sebapique Sep 15, 2025
e7bf699
refactor: Replace console logging with logger in AlternativeMediaCont…
sebapique Sep 15, 2025
f5d1de1
test: crete unit test for switchBackToMainContent logic
sebapique Sep 15, 2025
5d4ca6f
refactor: Enhance MediaManagerMock with improved event handling and r…
sebapique Sep 15, 2025
4c7ead2
Merge branch 'feature/alternative-media-presentations' into alternati…
sebapique Sep 15, 2025
8069607
remove unnecssary changes
sebapique Sep 15, 2025
13a2cc9
Merge pull request #130 from qualabs/alternative-media-presentations/…
cotid-qualabs Sep 16, 2025
6b4c916
Merge pull request #128 from qualabs/alternative-media-presentations/…
cotid-qualabs Sep 16, 2025
7d2029b
Fix mediaManager don't set the configs property
sebastianpiq Sep 16, 2025
6211d8d
fix: modify _onAlternativePlaybackTimeUpdated to use a cloned event o…
sebapique Sep 16, 2025
339ce3a
feat: add setAlternativeVideoElement method to manage alternative vid…
sebastianpiq Sep 18, 2025
302d324
feat: add logging for prebuffering start in MediaManager
sebastianpiq Sep 18, 2025
20e3d8a
executeOnce bugfix (#132)
cotid-qualabs Sep 18, 2025
8eb7f7d
refactor: remove redundant config setting for alternative video element
sebastianpiq Sep 18, 2025
17a6e4a
refactor: remove redundant config setting for alternative video element
sebastianpiq Sep 18, 2025
8e27e27
feat: implement alternative video element support and update related …
sebastianpiq Sep 18, 2025
29bddb2
fix: rename test case
cotid-qualabs Sep 19, 2025
b1e1deb
replace functional test use getCurrentTime
cotid-qualabs Sep 19, 2025
a5ef275
Merge pull request #133 from qualabs/alternative-media-presentations/…
cotid-qualabs Sep 19, 2025
be466f2
add init for alternative media method into the functional tests dash …
sebastianpiq Sep 22, 2025
852a74b
Merge pull request #134 from qualabs/alternative-media-presentations/…
cotid-qualabs Sep 22, 2025
991f292
feat: add setAlternativeVideoElement unit test
sebastianpiq Sep 22, 2025
1e0048e
fix debug import in the MediaManager
sebastianpiq Sep 22, 2025
40dd8f9
refactor: streamline MediaManager instance creation in tests
sebastianpiq Sep 22, 2025
c270d1c
feat: add context variable to MediaManager constructor
sebastianpiq Sep 22, 2025
dd2cf07
fix: ensure MediaManager is initialized in beforeEach
sebastianpiq Sep 22, 2025
1884d4c
test: add getAlternativePlayer test for the MediaManager and fix swit…
sebastianpiq Sep 22, 2025
1fe5d55
fix: update expectation in getAlternativePlayer test to check for und…
sebastianpiq Sep 22, 2025
079e650
test: remove 'only' from getAlternativePlayer tests to ensure all tes…
sebastianpiq Sep 22, 2025
ed82fa9
refactor: clean up comments in getAlternativePlayer test for clarity
sebastianpiq Sep 22, 2025
da35d11
test: add unit test for switchToAlternativeContent and prebufferAlter…
sebastianpiq Sep 22, 2025
686e271
test: implement switch back to main content unit test
sebastianpiq Sep 22, 2025
8fdbd8d
test: Improve MediaManager unit test and add switchBackToMain contet …
sebastianpiq Sep 22, 2025
3224608
add presentation time validation to replace vod
cotid-qualabs Sep 23, 2025
7bf503c
add presentation time validation to insert vod
cotid-qualabs Sep 23, 2025
e8256ce
Merge pull request #136 from qualabs/media-manager-unit-test/set-alte…
cotid-qualabs Sep 23, 2025
90541aa
Merge branch 'alternative-media-presentations/media-manager-unit-test…
sebastianpiq Sep 23, 2025
04f67e0
Revert "Merge branch 'alternative-media-presentations/media-manager-u…
sebastianpiq Sep 23, 2025
9de7d08
Merge pull request #137 from qualabs/media-manager-unit-test/prebuffe…
cotid-qualabs Sep 23, 2025
34ec73d
Merge branch 'alternative-media-presentations/media-manager-unit-test…
sebastianpiq Sep 23, 2025
caac29e
Merge pull request #138 from qualabs/media-manager-unit-test/switch-b…
cotid-qualabs Sep 23, 2025
d093ed8
Merge branch 'feature/alternative-media-presentations' into alternati…
sebastianpiq Sep 23, 2025
80ff9ee
Fix formatting of alternative video element in index.html
sebastianpiq Sep 23, 2025
d6b27f6
Merge pull request #135 from qualabs/alternative-media-presentations/…
cotid-qualabs Sep 23, 2025
456e20c
feat: Implement live to live switch back
sebastianpiq Sep 23, 2025
a909d2f
fix: Correct variable name typo in EventController and remove console…
sebastianpiq Sep 25, 2025
c871f7f
Merge pull request #139 from qualabs/alternative-media-presentations/…
cotid-qualabs Sep 25, 2025
6594b70
Alternative media presentations/clip functional test (#140)
cotid-qualabs Sep 26, 2025
16416f2
feat: Add EVENT_UPDATED constant and implement event update handling …
sebastianpiq Oct 2, 2025
70e0ebe
Fix max duration calculation on update event
sebastianpiq Oct 6, 2025
57adcc2
Merge pull request #143 from qualabs/alternative-media-presentations/…
cotid-qualabs Oct 8, 2025
b68b73f
Alternative MPD live to live sample page (#144)
cotid-qualabs Oct 8, 2025
465f9a2
[Alternative media presentations] Playback ended event (#141)
cotid-qualabs Oct 9, 2025
7095cc9
add returnOffset functional test (#142)
cotid-qualabs Oct 9, 2025
1d8f5fd
Add alternative live to live status update functional test (#145)
cotid-qualabs Oct 10, 2025
d758cf3
Add Listen Mode sample and update samples.json with new entry
sebastianpiq Oct 10, 2025
f3931c8
Add setAlternativeVideoElement as optional and fix issue restarting t…
sebastianpiq Oct 15, 2025
735ab95
remove unnecessary parameter in addManifestResponseInterceptor
sebastianpiq Oct 15, 2025
36d6359
Merge pull request #147 from qualabs/alternative-media-presentations/…
cotid-qualabs Oct 15, 2025
942efd1
Update alternative media presentations sample and remove obsolete man…
sebastianpiq Oct 15, 2025
8355665
Modify alternative media presentations sample HTML file
sebastianpiq Oct 15, 2025
80f2acb
Update href for Alternative Media Presentations sample to point to th…
sebastianpiq Oct 16, 2025
1ef1b90
Merge branch 'development' into feature/alternative-media-presentations
sebastianpiq Oct 16, 2025
ecea7ad
Merge branch 'development' into feature/mpd-lists
sebastianpiq Dec 22, 2025
04d9524
fix: validate availabilityEndTime in manifest merging process
sebastianpiq Dec 22, 2025
7683769
refactor: remove handling of 'No Content' response in manifest loading
sebastianpiq Dec 22, 2025
dfc2a40
Merge branch 'feature/mpd-lists' into svgai/alternative-mpd
sebastianpiq Jan 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 1 addition & 1 deletion build/webpack/modern/webpack.modern.dev.cjs
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ const umdDevConfig = merge(umdConfig, {
open: ['samples/index.html'],
hot: true,
compress: true,
port: 3000
port: 3001
}
});

Expand Down
156 changes: 156 additions & 0 deletions samples/advanced/list-mpds.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,156 @@
<!DOCTYPE html>
<html>
<head>
<title>List MPDs example</title>
<link rel="stylesheet" href="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/css/bootstrap.min.css" integrity="sha384-Vkoo8x4CGsO3+Hhxv8T/Q5PaXtkKtu6ug5TOeNV6gBiFeWPGFN9MuhOf23Q9Ifjh" crossorigin="anonymous">
<script src="https://code.jquery.com/jquery-3.4.1.slim.min.js" integrity="sha384-J6qa4849blE2+poT4WnyKhv5vZF5SrPo0iEjwBvKU7imGFAV0wwj1yYfoRSJoZ+n" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/popper.js@1.16.0/dist/umd/popper.min.js" integrity="sha384-Q6E9RHvbIyZFJoft+2mJbHaEWldlvI9IOYy5n3zV9zzTtmI3UksdQRVvoxMfooAo" crossorigin="anonymous"></script>
<script src="https://cdn.jsdelivr.net/npm/bootstrap@4.4.1/dist/js/bootstrap.min.js" integrity="sha384-wfSDF2E50Y2D1uUdj0O3uMBJnjuUD4Ih7YwaYd1iqfktj0Uod8GCExl3Og8ifwB6" crossorigin="anonymous"></script>
</head>
<body>
<div class="container py-4">
<header class="pb-3 mb-4 border-bottom">
<img class=""
src="../lib/img/dashjs-logo.png"
width="200">
</header>
<div class="row">
<div class="col-md-12">
<div class="h-100 p-5 bg-light border rounded-3">
<h3>List MPDs</h3>
<p>This sample shows the following use cases of the List MPDs implementation in DASH</p>
<ul>
<li><p><strong>Case 0: Single Linked Period - </strong> An MPD with a single Period that links to an Imported MPD.</p></li>
<li><p><strong>Case 1: Multiple Linked Period -</strong> An MPD with multiple linked Periods, each pointing to a different Imported MPD.</p></li>
<li><p><strong>Case 2: Linked Period + Regular Period -</strong> An MPD with one linked Period followed by a regular Period.</p></li>
<li><p><strong>Case 3: Regular Period + Linked Period -</strong> An MPD with one regular Period followed by a linked Period.</p></li>
<li><p><strong>Case 4: EarliestResolutionTime > minBufferTime -</strong> An MPD where the earliestResolutionTime of the linked Period exceeds the min buffer time.</p></li>
<li><p><strong>Case 5: EarliestResolutionTime < minBufferTime -</strong> An MPD where the earliestResolutionTime of the linked Period is less than the buffer time.</p></li>
<li><p><strong>Case 6: Different Linked Period and Imported Period durations -</strong> An MPD where a Linked Period references an Imported MPD with a duration that does not match the Linked Period's duration in the main manifest</p></li>
<li><p><strong>Case 7: First List MPD Period with start time =/ 0 -</strong> The MPD is of type list, and the first Period in the manifest has a start time that is not equal to PT0S (0 seconds).</p></li>
<li><p><strong>Case 8: Retry -</strong> The MPD is of type list, and the ImportedMPD should not be downloadable</p></li>
</ul>
</div>
</div>
</div>
<div class="row pt-4">
<div class="col">
<div class="row justify-content-around">
<div class="col-auto">
<div class="btn-group mb-2">
<button type="button" class="btn btn-primary dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
Select Case
</button>
<div class="dropdown-menu" id="assetDropdown">
<a class="dropdown-item" data-id="case0" data-url="https://comcast-dash-6-assets.s3.us-east-2.amazonaws.com/ListMPDs/bbb/list0.mpd">Case 0: Single Linked Period</a>
<a class="dropdown-item" data-id="case1" data-url="https://comcast-dash-6-assets.s3.us-east-2.amazonaws.com/ListMPDs/bbb/list1.mpd">Case 1: Multiple Linked Period</a>
<a class="dropdown-item" data-id="case2" data-url="https://comcast-dash-6-assets.s3.us-east-2.amazonaws.com/ListMPDs/bbb/list2.mpd">Case 2: Linked Period + Regular Period</a>
<a class="dropdown-item" data-id="case3" data-url="https://comcast-dash-6-assets.s3.us-east-2.amazonaws.com/ListMPDs/bbb/list3.mpd">Case 3: Regular Period + Linked Period</a>
<a class="dropdown-item" data-id="case4" data-url="https://comcast-dash-6-assets.s3.us-east-2.amazonaws.com/ListMPDs/bbb/list4.mpd">Case 4: EarliestResolutionTime &gt; minBufferTime</a>
<a class="dropdown-item" data-id="case5" data-url="https://comcast-dash-6-assets.s3.us-east-2.amazonaws.com/ListMPDs/bbb/list5.mpd">Case 5: EarliestResolutionTime &lt; minBufferTime</a>
<a class="dropdown-item" data-id="case6" data-url="https://comcast-dash-6-assets.s3.us-east-2.amazonaws.com/ListMPDs/bbb/list6.mpd">Case 6: Different Linked Period and Imported Period durations</a>
<a class="dropdown-item" data-id="case7" data-url="https://comcast-dash-6-assets.s3.us-east-2.amazonaws.com/ListMPDs/bbb/list7.mpd">Case 7: First List MPD Period with start time =/ 0</a>
<a class="dropdown-item" data-id="case8" data-url="https://comcast-dash-6-assets.s3.us-east-2.amazonaws.com/ListMPDs/bbb/list8.mpd">Case 8: Retry</a>
</div>
</div>
</div>
<div class="col">
<h3 id="casetitle">Case 0: Single Linked Period</h3>
</div>
</div>
<span class="h5">Expected behavior: </span>
<p id="behavior">The player should download the Imported MPD and reproduce the unique Period.</p>
<div class="dash-video-player">
<div class="videoContainer" id="videoContainer">
<video id="main-video" preload="auto" width="100%" controls></video>
</div>
</div>
</div>
<div class="col-6">
<pre style="background-color: #dddddd; height: 100%; overflow: auto; padding: 2em"><div id="manifest" class="text-wrap"></div></pre>
</div>
</div>
<div class="row">
<div class="col-md-12">
<div id="code-output"></div>
</div>
</div>
<footer class="pt-3 mt-4 text-muted border-top">
&copy; DASH-IF
</footer>

<script src="../../dist/modern/umd/dash.all.debug.js"></script>
<script>
async function selectCase(player, currentAsset){
let manifest = document.getElementById("manifest");
const response = await fetch(currentAsset);
manifest.innerText = await response.text();

const assetDropdown = document.getElementById("assetDropdown");
assetDropdown.addEventListener("click", async (event) => {
const target = event.target;
if (target.tagName === "A" && target.dataset.url) {
currentAsset = target.dataset.url;
player.attachSource(currentAsset);

const response = await fetch(currentAsset);
manifest.innerText = await response.text();

casetitle.innerText = target.text;

const caseId = target.dataset.id;
switch(caseId) {
case 'case0':
behavior.innerText = "The player should download the Imported MPD and reproduce the unique Period.";
break;
case 'case1':
behavior.innerText = "The player should download the first Imported MPD, reproduce its first Period, and, upon completion, download the second Imported MPD and reproduce its first Period.";
break;
case 'case2':
behavior.innerText = "The player should download the first Imported MPD, reproduce its first Period, and, upon completion, play the next regular Period.";
break;
case 'case3':
behavior.innerText = "The player should start by playing the first regular Period as usual and, upon completion, download the linked Imported MPD and reproduce its first Period.";
break;
case 'case4':
behavior.innerText = "The player should start by playing the first regular Period as usual and, upon its completion, download the linked Imported MPD at startTime - earliestResolutionTime and reproduce its first Period";
break;
case 'case5':
behavior.innerText = "The player should start by playing the first regular Period as usual and, upon its completion, download the linked Imported MPD at with earliestResolutionTime = 0 and reproduce its first Period.";
break;
case 'case6':
behavior.innerText = "The player must respect the shortest duration between the Linked Period in the main manifest and the Imported MPD. Playback should seamlessly stop at the shorter duration, ensuring no content extends beyond the specified boundaries.";
break;
case 'case7':
behavior.innerText = "The player should throw an error indicating that the start time of the first period in a list type MPD manifest is invalid.";
break;
case 'case8':
behavior.innerText = "The player should attempt to download the manifest four times before failing.";
break;
}
Comment on lines +102 to +130

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

This switch statement can be refactored into a more maintainable data structure, like a map or an object, to associate case IDs with their behavior descriptions. This will make the code cleaner and easier to extend with new cases.

                    const behaviors = {
                        'case0': "The player should download the Imported MPD and reproduce the unique Period.",
                        'case1': "The player should download the first Imported MPD, reproduce its first Period, and, upon completion, download the second Imported MPD and reproduce its first Period.",
                        'case2': "The player should download the first Imported MPD, reproduce its first Period, and, upon completion, play the next regular Period.",
                        'case3': "The player should start by playing the first regular Period as usual and, upon completion, download the linked Imported MPD and reproduce its first Period.",
                        'case4': "The player should start by playing the first regular Period as usual and, upon its completion, download the linked Imported MPD at startTime - earliestResolutionTime and reproduce its first Period",
                        'case5': "The player should start by playing the first regular Period as usual and, upon its completion, download the linked Imported MPD at with earliestResolutionTime = 0 and reproduce its first Period.",
                        'case6': "The player must respect the shortest duration between the Linked Period in the main manifest and the Imported MPD. Playback should seamlessly stop at the shorter duration, ensuring no content extends beyond the specified boundaries.",
                        'case7': "The player should throw an error indicating that the start time of the first period in a list type MPD manifest is invalid.",
                        'case8': "The player should attempt to download the manifest four times before failing."
                    };
                    if (behaviors[caseId]) {
                        behavior.innerText = behaviors[caseId];
                    }

}
});
}
</script>
<script class="code">
const video = document.querySelector("video");

const player = dashjs.MediaPlayer().create();
player.initialize();
player.updateSettings({
debug: {
logLevel: dashjs.Debug.LOG_LEVEL_DEBUG,
},
});
player.setAutoPlay(false);
player.attachView(video);

let currentAsset = "https://comcast-dash-6-assets.s3.us-east-2.amazonaws.com/ListMPDs/bbb/list0.mpd";
player.attachSource(currentAsset);

selectCase(player, currentAsset) // Select Case functionality only
</script>
<script src="../highlighter.js"></script>

</body>
</html>
Loading
Loading