diff --git a/src/media-groups.js b/src/media-groups.js index c34e435d0..fb03ebd7e 100644 --- a/src/media-groups.js +++ b/src/media-groups.js @@ -337,10 +337,6 @@ export const setupListeners = { } }; -const byGroupId = (type, groupId) => (playlist) => playlist.attributes[type] === groupId; - -const byResolvedUri = (resolvedUri) => (playlist) => playlist.resolvedUri === resolvedUri; - export const initialize = { /** * Setup PlaylistLoaders and AudioTracks for the audio groups @@ -357,7 +353,7 @@ export const initialize = { sourceType, segmentLoaders: { [type]: segmentLoader }, requestOptions, - master: { mediaGroups, playlists }, + master: { mediaGroups }, mediaTypes: { [type]: { groups, @@ -380,25 +376,9 @@ export const initialize = { // List of playlists that have an AUDIO attribute value matching the current // group ID - const groupPlaylists = playlists.filter(byGroupId(type, groupId)); for (let variantLabel in mediaGroups[type][groupId]) { let properties = mediaGroups[type][groupId][variantLabel]; - - // List of playlists for the current group ID that have a matching uri with - // this alternate audio variant - const matchingPlaylists = - groupPlaylists.filter(byResolvedUri(properties.resolvedUri)); - - if (matchingPlaylists.length) { - // If there is a playlist that has the same uri as this audio variant, assume - // that the playlist is audio only. We delete the resolvedUri property here - // to prevent a playlist loader from being created so that we don't have - // both the main and audio segment loaders loading the same audio segments - // from the same playlist. - delete properties.resolvedUri; - } - let playlistLoader; if (properties.resolvedUri) { diff --git a/src/sync-controller.js b/src/sync-controller.js index d1a2fe4fc..4efdaef3b 100644 --- a/src/sync-controller.js +++ b/src/sync-controller.js @@ -49,9 +49,9 @@ export const syncPointStrategies = [ let segmentStart = segmentTime + syncController.datetimeToDisplayTime; let distance = Math.abs(currentTime - segmentStart); - // Once the distance begins to increase, we have passed + // Once the distance begins to increase, or if distance is 0, we have passed // currentTime and can stop looking for better candidates - if (lastDistance !== null && lastDistance < distance) { + if (lastDistance !== null && (distance === 0 || lastDistance < distance)) { break; } diff --git a/test/media-groups.test.js b/test/media-groups.test.js index f83c0427e..7f89c0085 100644 --- a/test/media-groups.test.js +++ b/test/media-groups.test.js @@ -831,7 +831,7 @@ function(assert) { 'no playlist loader when misconfigured'); }); -QUnit.test('initialize audio does not create playlist loader for alternate tracks with' + +QUnit.skip('initialize audio does not create playlist loader for alternate tracks with' + ' main stream as URI attribute', function(assert) { this.master.mediaGroups.AUDIO.aud1 = { en: { default: true, language: 'en', resolvedUri: 'main.m3u8' }, diff --git a/test/sync-controller.test.js b/test/sync-controller.test.js index 3d1988c6a..e9ee22b18 100644 --- a/test/sync-controller.test.js +++ b/test/sync-controller.test.js @@ -68,12 +68,12 @@ QUnit.test('returns correct sync point for ProgramDateTime strategy', function(a QUnit.test('ProgramDateTime strategy finds nearest segment for sync', function(assert) { let strategy = getStrategy('ProgramDateTime'); - let playlist = playlistWithDuration(40); + let playlist = playlistWithDuration(200); let timeline = 0; let duration = Infinity; let syncPoint; - syncPoint = strategy.run(this.syncController, playlist, duration, timeline, 23); + syncPoint = strategy.run(this.syncController, playlist, duration, timeline, 170); assert.equal(syncPoint, null, 'no syncpoint when datetimeToDisplayTime not set'); @@ -83,7 +83,7 @@ QUnit.test('ProgramDateTime strategy finds nearest segment for sync', function(a this.syncController.setDateTimeMapping(playlist); - let newPlaylist = playlistWithDuration(40); + let newPlaylist = playlistWithDuration(200); syncPoint = strategy.run(this.syncController, newPlaylist, duration, timeline); @@ -93,12 +93,19 @@ QUnit.test('ProgramDateTime strategy finds nearest segment for sync', function(a segment.dateTimeObject = new Date(2012, 11, 12, 12, 12, 22 + (index * 10)); }); - syncPoint = strategy.run(this.syncController, newPlaylist, duration, timeline, 23); + syncPoint = strategy.run(this.syncController, newPlaylist, duration, timeline, 170); assert.deepEqual(syncPoint, { - time: 20, - segmentIndex: 1 + time: 160, + segmentIndex: 15 }, 'syncpoint found for ProgramDateTime set'); + + syncPoint = strategy.run(this.syncController, newPlaylist, duration, timeline, 0); + + assert.deepEqual(syncPoint, { + time: 10, + segmentIndex: 0 + }, 'syncpoint found for ProgramDateTime set at 0'); }); QUnit.test('Does not set date time mapping if date time info not on first segment',