bigscreen-player
Advanced tools
Comparing version 3.14.2 to 3.14.3
{ | ||
"name": "bigscreen-player", | ||
"version": "3.14.2", | ||
"version": "3.14.3", | ||
"description": "Simplified media playback for bigscreen devices.", | ||
@@ -5,0 +5,0 @@ "main": "script/bigscreenplayer.js", |
@@ -227,5 +227,7 @@ # Bigscreen Player | ||
### Releasing | ||
## Releasing | ||
`npm run pre-release:major|minor|patch` will bump the package.json and internal version. | ||
1. `npm run pre-release:major|minor|patch` will bump the package.json and internal version. | ||
2. Create a Github release. | ||
3. Publishing to NPM is handled with our [Travis CI integration](https://github.com/bbc/bigscreen-player/blob/master/.travis.yml). | ||
@@ -232,0 +234,0 @@ ## API Reference |
@@ -269,3 +269,5 @@ require( | ||
function startPlaybackAndPause (startTime, disableAutoResume) { | ||
function startPlaybackAndPause (startTime, disableAutoResume, windowType) { | ||
initialiseRestartableMediaPlayer(undefined, windowType); | ||
restartableMediaPlayer.beginPlaybackFrom(startTime); | ||
@@ -291,8 +293,2 @@ | ||
}); | ||
initialiseRestartableMediaPlayer(); | ||
for (var index = 0; index < mockCallback.length; index++) { | ||
mockCallback[index]({state: MediaPlayerBase.STATE.PLAYING}); | ||
} | ||
}); | ||
@@ -408,2 +404,4 @@ | ||
it('time spend buffering is deducted when considering time to auto-resume', function () { | ||
startPlaybackAndPause(); | ||
restartableMediaPlayer.beginPlaybackFrom(20); | ||
@@ -427,4 +425,12 @@ | ||
}); | ||
it('Should not start auto resume timeout if window type is not SLIDING', function () { | ||
startPlaybackAndPause(20, false, WindowTypes.GROWING); | ||
jasmine.clock().tick(12 * 1000); | ||
expect(player.resume).not.toHaveBeenCalled(); | ||
}); | ||
}); | ||
}); | ||
}); |
require( | ||
[ | ||
'bigscreenplayer/playbackstrategy/modifiers/mediaplayerbase', | ||
'bigscreenplayer/playbackstrategy/modifiers/live/seekable' | ||
'bigscreenplayer/playbackstrategy/modifiers/live/seekable', | ||
'bigscreenplayer/models/windowtypes' | ||
], | ||
function (MediaPlayerBase, SeekableMediaPlayer) { | ||
function (MediaPlayerBase, SeekableMediaPlayer, WindowTypes) { | ||
var sourceContainer = document.createElement('div'); | ||
@@ -23,4 +24,4 @@ var player; | ||
function initialiseSeekableMediaPlayer (config) { | ||
seekableMediaPlayer = SeekableMediaPlayer(player, config); | ||
function initialiseSeekableMediaPlayer (config, windowType) { | ||
seekableMediaPlayer = SeekableMediaPlayer(player, config, windowType); | ||
} | ||
@@ -176,3 +177,3 @@ | ||
initialiseSeekableMediaPlayer(); | ||
initialiseSeekableMediaPlayer(undefined, WindowTypes.SLIDING); | ||
@@ -290,2 +291,14 @@ player.getSeekableRange.and.returnValue({start: 0}); | ||
it('auto-resume is not cancelled by a status event', function () { | ||
startPlaybackAndPause(20, false); | ||
for (var index = 0; index < mockCallback.length; index++) { | ||
mockCallback[index]({type: MediaPlayerBase.EVENT.STATUS}); | ||
} | ||
jasmine.clock().tick(12 * 1000); | ||
expect(player.resume).toHaveBeenCalledTimes(1); | ||
}); | ||
it('will fake pause if attempting to pause at the start of playback ', function () { | ||
@@ -332,2 +345,20 @@ player.getCurrentTime.and.returnValue(0); | ||
}); | ||
it('Should auto resume when paused after a seek', function () { | ||
player.getSeekableRange.and.returnValue({start: 0}); | ||
player.getCurrentTime.and.returnValue(100); | ||
startPlaybackAndPause(100, false); | ||
player.getCurrentTime.and.returnValue(50); | ||
player.getState.and.returnValue(MediaPlayerBase.STATE.PAUSED); | ||
seekableMediaPlayer.playFrom(50); | ||
seekableMediaPlayer.pause(); | ||
jasmine.clock().tick(42 * 1000); | ||
expect(player.resume).toHaveBeenCalledTimes(1); | ||
}); | ||
}); | ||
@@ -334,0 +365,0 @@ }); |
@@ -744,3 +744,2 @@ require( | ||
it('should start autoresume timeout when paused', function () { | ||
mseStrategy.setCurrentTime(101); | ||
mseStrategy.pause(); | ||
@@ -756,3 +755,2 @@ | ||
mseStrategy.setCurrentTime(101); | ||
mseStrategy.pause(opts); | ||
@@ -770,21 +768,20 @@ | ||
it('should autoresume when paused and seeking to the start of the sliding window seekable range', function () { | ||
mockDynamicWindowUtils.shouldAutoResume.and.returnValue(true); | ||
it('should start auto resume timeout when paused and seeking', function () { | ||
mockDashInstance.isPaused.and.returnValue(true); | ||
mseStrategy.pause(); | ||
mseStrategy.setCurrentTime(0); | ||
mseStrategy.setCurrentTime(); | ||
expect(mockDynamicWindowUtils.shouldAutoResume).toHaveBeenCalledWith(jasmine.any(Number), jasmine.any(Number)); | ||
expect(mockDashInstance.play).toHaveBeenCalledTimes(1); | ||
eventCallbacks('seeked'); | ||
expect(mockDynamicWindowUtils.autoResumeAtStartOfRange).toHaveBeenCalledTimes(2); | ||
}); | ||
it('should not try to autoresume when playing and seeking to the start of the sliding window seekable range', function () { | ||
mockDynamicWindowUtils.shouldAutoResume.and.returnValue(true); | ||
it('should not try to autoresume when playing and seeking', function () { | ||
mockDashInstance.isPaused.and.returnValue(false); | ||
mseStrategy.setCurrentTime(0); | ||
mseStrategy.setCurrentTime(); | ||
eventCallbacks('seeked'); | ||
expect(mockDynamicWindowUtils.shouldAutoResume).toHaveBeenCalledWith(jasmine.any(Number), jasmine.any(Number)); | ||
expect(mockDashInstance.play).toHaveBeenCalledTimes(0); | ||
expect(mockDynamicWindowUtils.autoResumeAtStartOfRange).not.toHaveBeenCalled(); | ||
}); | ||
@@ -791,0 +788,0 @@ }); |
@@ -53,10 +53,6 @@ define( | ||
function resume () { | ||
mediaPlayer.resume(); | ||
} | ||
function pause (opts) { | ||
mediaPlayer.pause(); | ||
opts = opts || {}; | ||
if (opts.disableAutoResume !== true) { | ||
if (opts.disableAutoResume !== true && windowType === WindowTypes.SLIDING) { | ||
DynamicWindowUtils.autoResumeAtStartOfRange( | ||
@@ -71,2 +67,5 @@ getCurrentTime(), | ||
} | ||
function resume () { | ||
mediaPlayer.resume(); | ||
} | ||
@@ -73,0 +72,0 @@ function getCurrentTime () { |
@@ -5,8 +5,8 @@ define( | ||
'bigscreenplayer/playbackstrategy/modifiers/mediaplayerbase', | ||
'bigscreenplayer/dynamicwindowutils' | ||
'bigscreenplayer/dynamicwindowutils', | ||
'bigscreenplayer/models/windowtypes' | ||
], | ||
function (MediaPlayerBase, DynamicWindowUtils) { | ||
function (MediaPlayerBase, DynamicWindowUtils, WindowTypes) { | ||
'use strict'; | ||
function SeekableLivePlayer (mediaPlayer, deviceConfig) { | ||
function SeekableLivePlayer (mediaPlayer, deviceConfig, windowType) { | ||
var AUTO_RESUME_WINDOW_START_CUSHION_SECONDS = 8; | ||
@@ -69,9 +69,11 @@ | ||
mediaPlayer.pause(); | ||
DynamicWindowUtils.autoResumeAtStartOfRange( | ||
mediaPlayer.getCurrentTime(), | ||
mediaPlayer.getSeekableRange(), | ||
addEventCallback, | ||
removeEventCallback, | ||
MediaPlayerBase.unpausedEventCheck, | ||
resume); | ||
if (windowType === WindowTypes.SLIDING) { | ||
DynamicWindowUtils.autoResumeAtStartOfRange( | ||
mediaPlayer.getCurrentTime(), | ||
mediaPlayer.getSeekableRange(), | ||
addEventCallback, | ||
removeEventCallback, | ||
MediaPlayerBase.unpausedEventCheck, | ||
resume); | ||
} | ||
} | ||
@@ -122,3 +124,2 @@ }, | ||
} | ||
}); | ||
@@ -125,0 +126,0 @@ } |
@@ -42,3 +42,3 @@ define( | ||
function unpausedEventCheck (event) { | ||
if (event && event.state) { | ||
if (event && event.state && event.type !== 'status') { | ||
return event.state !== STATE.PAUSED; | ||
@@ -45,0 +45,0 @@ } else { |
@@ -83,3 +83,11 @@ define('bigscreenplayer/playbackstrategy/msestrategy', | ||
DebugTool.info('Seeked Event'); | ||
publishMediaState(isPaused() ? MediaState.PAUSED : MediaState.PLAYING); | ||
if (isPaused()) { | ||
if (windowType === WindowTypes.SLIDING) { | ||
startAutoResumeTimeout(); | ||
} | ||
publishMediaState(MediaState.PAUSED); | ||
} else { | ||
publishMediaState(MediaState.PLAYING); | ||
} | ||
} | ||
@@ -441,11 +449,28 @@ | ||
function resumeIfRequired (seekTime) { | ||
if (windowType !== WindowTypes.SLIDING) { return; } | ||
var seekableRange = getSeekableRange(); | ||
var shouldAutoResume = DynamicWindowUtils.shouldAutoResume(seekTime, seekableRange.start); | ||
if (isPaused() && shouldAutoResume) { | ||
mediaPlayer.play(); | ||
function addEventCallback (thisArg, newCallback) { | ||
var eventCallback = function (event) { | ||
newCallback.call(thisArg, event); | ||
}; | ||
eventCallbacks.push(eventCallback); | ||
} | ||
function removeEventCallback (callback) { | ||
var index = eventCallbacks.indexOf(callback); | ||
if (index !== -1) { | ||
eventCallbacks.splice(index, 1); | ||
} | ||
} | ||
function startAutoResumeTimeout () { | ||
DynamicWindowUtils.autoResumeAtStartOfRange( | ||
getCurrentTime(), | ||
getSeekableRange(), | ||
addEventCallback, | ||
removeEventCallback, | ||
function (event) { | ||
return event !== MediaState.PAUSED; | ||
}, | ||
mediaPlayer.play); | ||
} | ||
return { | ||
@@ -456,14 +481,4 @@ transitions: { | ||
}, | ||
addEventCallback: function (thisArg, newCallback) { | ||
var eventCallback = function (event) { | ||
newCallback.call(thisArg, event); | ||
}; | ||
eventCallbacks.push(eventCallback); | ||
}, | ||
removeEventCallback: function (callback) { | ||
var index = eventCallbacks.indexOf(callback); | ||
if (index !== -1) { | ||
eventCallbacks.splice(index, 1); | ||
} | ||
}, | ||
addEventCallback: addEventCallback, | ||
removeEventCallback: removeEventCallback, | ||
addErrorCallback: function (thisArg, newErrorCallback) { | ||
@@ -538,11 +553,3 @@ errorCallback = function (event) { | ||
if (opts.disableAutoResume !== true && windowType === WindowTypes.SLIDING) { | ||
DynamicWindowUtils.autoResumeAtStartOfRange( | ||
getCurrentTime(), | ||
getSeekableRange(), | ||
this.addEventCallback, | ||
this.removeEventCallback, | ||
function (event) { | ||
return event !== MediaState.PAUSED; | ||
}, | ||
mediaPlayer.play); | ||
startAutoResumeTimeout(); | ||
} | ||
@@ -562,3 +569,2 @@ }, | ||
mediaPlayer.seek(seekTime); | ||
resumeIfRequired(seekTime); | ||
} | ||
@@ -565,0 +571,0 @@ } |
define('bigscreenplayer/version', | ||
function () { | ||
return '3.14.2'; | ||
return '3.14.3'; | ||
} | ||
); |
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
License Policy Violation
LicenseThis package is not allowed per your license policy. Review the package's license to ensure compliance.
Found 1 instance in 1 package
New author
Supply chain riskA new npm collaborator published a version of the package for the first time. New collaborators are usually benign additions to a project, but do indicate a change to the security surface area of a package.
Found 1 instance in 1 package
Dynamic require
Supply chain riskDynamic require can indicate the package is performing dangerous or unsafe dynamic code execution.
Found 1 instance in 1 package
7853797
76349
244
1