Skip to content

Commit 5fbac16

Browse files
committed
fix: retain playlist attributes when refreshing live media playlists (#1270)
1 parent b98877d commit 5fbac16

File tree

2 files changed

+105
-1
lines changed

2 files changed

+105
-1
lines changed

src/playlist-loader.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -334,7 +334,7 @@ export const updateMaster = (master, newMedia, unchangedCheck = isPlaylistUnchan
334334
}
335335
for (let i = 0; i < properties.playlists.length; i++) {
336336
if (newMedia.id === properties.playlists[i].id) {
337-
properties.playlists[i] = newMedia;
337+
properties.playlists[i] = mergedPlaylist;
338338
}
339339
}
340340
});

test/playlist-loader.test.js

+104
Original file line numberDiff line numberDiff line change
@@ -795,6 +795,110 @@ QUnit.module('Playlist Loader', function(hooks) {
795795
assert.deepEqual(result, master, 'playlist updated');
796796
});
797797

798+
QUnit.test('updateMaster retains mediaGroup attributes', function(assert) {
799+
const master = {
800+
mediaGroups: {
801+
AUDIO: {
802+
'GROUP-ID': {
803+
default: {
804+
default: true,
805+
playlists: [{
806+
mediaSequence: 0,
807+
attributes: {
808+
BANDWIDTH: 9,
809+
CODECS: 'mp4a.40.2'
810+
},
811+
id: 'playlist-0-uri',
812+
uri: 'playlist-0-uri',
813+
resolvedUri: urlTo('playlist-0-uri'),
814+
segments: [{
815+
duration: 10,
816+
uri: 'segment-0-uri',
817+
resolvedUri: urlTo('segment-0-uri')
818+
}]
819+
}]
820+
}
821+
}
822+
}
823+
},
824+
playlists: [{
825+
mediaSequence: 0,
826+
attributes: {
827+
BANDWIDTH: 9,
828+
CODECS: 'mp4a.40.2'
829+
},
830+
id: 'playlist-0-uri',
831+
uri: 'playlist-0-uri',
832+
resolvedUri: urlTo('playlist-0-uri'),
833+
segments: [{
834+
duration: 10,
835+
uri: 'segment-0-uri',
836+
resolvedUri: urlTo('segment-0-uri')
837+
}]
838+
}]
839+
};
840+
const media = {
841+
mediaSequence: 1,
842+
attributes: {
843+
BANDWIDTH: 9
844+
},
845+
id: 'playlist-0-uri',
846+
uri: 'playlist-0-uri',
847+
segments: [{
848+
duration: 10,
849+
uri: 'segment-0-uri'
850+
}]
851+
};
852+
853+
master.playlists[media.id] = master.playlists[0];
854+
855+
assert.deepEqual(
856+
updateMaster(master, media),
857+
{
858+
mediaGroups: {
859+
AUDIO: {
860+
'GROUP-ID': {
861+
default: {
862+
default: true,
863+
playlists: [{
864+
mediaSequence: 1,
865+
attributes: {
866+
BANDWIDTH: 9,
867+
CODECS: 'mp4a.40.2'
868+
},
869+
id: 'playlist-0-uri',
870+
uri: 'playlist-0-uri',
871+
resolvedUri: urlTo('playlist-0-uri'),
872+
segments: [{
873+
duration: 10,
874+
uri: 'segment-0-uri',
875+
resolvedUri: urlTo('segment-0-uri')
876+
}]
877+
}]
878+
}
879+
}
880+
}
881+
},
882+
playlists: [{
883+
mediaSequence: 1,
884+
attributes: {
885+
BANDWIDTH: 9,
886+
CODECS: 'mp4a.40.2'
887+
},
888+
id: 'playlist-0-uri',
889+
uri: 'playlist-0-uri',
890+
resolvedUri: urlTo('playlist-0-uri'),
891+
segments: [{
892+
duration: 10,
893+
uri: 'segment-0-uri',
894+
resolvedUri: urlTo('segment-0-uri')
895+
}]
896+
}]
897+
},
898+
'updated playlist retains codec attribute'
899+
);
900+
});
901+
798902
QUnit.test('uses last segment duration for refresh delay', function(assert) {
799903
const media = { targetDuration: 7, segments: [] };
800904

0 commit comments

Comments
 (0)