diff --git a/src/playlist-loader.js b/src/playlist-loader.js index 1f7556470..51f16b0f8 100644 --- a/src/playlist-loader.js +++ b/src/playlist-loader.js @@ -334,7 +334,7 @@ export const updateMaster = (master, newMedia, unchangedCheck = isPlaylistUnchan } for (let i = 0; i < properties.playlists.length; i++) { if (newMedia.id === properties.playlists[i].id) { - properties.playlists[i] = newMedia; + properties.playlists[i] = mergedPlaylist; } } }); diff --git a/test/playlist-loader.test.js b/test/playlist-loader.test.js index eea3e9629..d6ce9c37d 100644 --- a/test/playlist-loader.test.js +++ b/test/playlist-loader.test.js @@ -795,6 +795,110 @@ QUnit.module('Playlist Loader', function(hooks) { assert.deepEqual(result, master, 'playlist updated'); }); + QUnit.test('updateMaster retains mediaGroup attributes', function(assert) { + const master = { + mediaGroups: { + AUDIO: { + 'GROUP-ID': { + default: { + default: true, + playlists: [{ + mediaSequence: 0, + attributes: { + BANDWIDTH: 9, + CODECS: 'mp4a.40.2' + }, + id: 'playlist-0-uri', + uri: 'playlist-0-uri', + resolvedUri: urlTo('playlist-0-uri'), + segments: [{ + duration: 10, + uri: 'segment-0-uri', + resolvedUri: urlTo('segment-0-uri') + }] + }] + } + } + } + }, + playlists: [{ + mediaSequence: 0, + attributes: { + BANDWIDTH: 9, + CODECS: 'mp4a.40.2' + }, + id: 'playlist-0-uri', + uri: 'playlist-0-uri', + resolvedUri: urlTo('playlist-0-uri'), + segments: [{ + duration: 10, + uri: 'segment-0-uri', + resolvedUri: urlTo('segment-0-uri') + }] + }] + }; + const media = { + mediaSequence: 1, + attributes: { + BANDWIDTH: 9 + }, + id: 'playlist-0-uri', + uri: 'playlist-0-uri', + segments: [{ + duration: 10, + uri: 'segment-0-uri' + }] + }; + + master.playlists[media.id] = master.playlists[0]; + + assert.deepEqual( + updateMaster(master, media), + { + mediaGroups: { + AUDIO: { + 'GROUP-ID': { + default: { + default: true, + playlists: [{ + mediaSequence: 1, + attributes: { + BANDWIDTH: 9, + CODECS: 'mp4a.40.2' + }, + id: 'playlist-0-uri', + uri: 'playlist-0-uri', + resolvedUri: urlTo('playlist-0-uri'), + segments: [{ + duration: 10, + uri: 'segment-0-uri', + resolvedUri: urlTo('segment-0-uri') + }] + }] + } + } + } + }, + playlists: [{ + mediaSequence: 1, + attributes: { + BANDWIDTH: 9, + CODECS: 'mp4a.40.2' + }, + id: 'playlist-0-uri', + uri: 'playlist-0-uri', + resolvedUri: urlTo('playlist-0-uri'), + segments: [{ + duration: 10, + uri: 'segment-0-uri', + resolvedUri: urlTo('segment-0-uri') + }] + }] + }, + 'updated playlist retains codec attribute' + ); + }); + QUnit.test('uses last segment duration for refresh delay', function(assert) { const media = { targetDuration: 7, segments: [] };