Socket
Socket
Sign inDemoInstall

bigscreen-player

Package Overview
Dependencies
1
Maintainers
3
Versions
181
Alerts
File Explorer

Advanced tools

Install Socket

Detect and block malicious and high-risk dependencies

Install

Comparing version 3.4.0 to 3.5.0

docs/example-app/package-lock.json

2

package.json
{
"name": "bigscreen-player",
"version": "3.4.0",
"version": "3.5.0",
"description": "Simplified media playback for bigscreen devices.",

@@ -5,0 +5,0 @@ "main": "script/bigscreenplayer.js",

@@ -20,2 +20,3 @@ require(

var mediaSources;
var mediaSourcesTimeSpy;

@@ -33,2 +34,3 @@ var mockDashjs;

var testManifestObject;
var timeUtilsMock;

@@ -55,3 +57,3 @@ var dashjsMediaPlayerEvents = {

'reset', 'isPaused', 'pause', 'play', 'seek', 'isReady', 'refreshManifest', 'getDashMetrics', 'getMetricsFor', 'setBufferToKeep',
'setBufferAheadToKeep', 'setBufferTimeAtTopQuality', 'setBufferTimeAtTopQualityLongForm', 'getBitrateInfoListFor', 'getAverageThroughput']);
'setBufferAheadToKeep', 'setBufferTimeAtTopQuality', 'setBufferTimeAtTopQualityLongForm', 'getBitrateInfoListFor', 'getAverageThroughput', 'getDVRWindowSize', 'setLiveDelay']);
mockPluginsInterface = jasmine.createSpyObj('interface', ['onErrorCleared', 'onBuffering', 'onBufferingCleared', 'onError', 'onFatalError', 'onErrorHandled', 'onPlayerInfoUpdated']);

@@ -79,2 +81,7 @@ mockPlugins = {

timeUtilsMock = jasmine.createSpyObj('timeUtilsMock', ['calculateSlidingWindowSeekOffset']);
timeUtilsMock.calculateSlidingWindowSeekOffset.and.callFake(function (time) {
return time;
});
mockDashjs.MediaPlayer.and.returnValue(mockDashMediaPlayer);

@@ -88,2 +95,3 @@ mockDashMediaPlayer.create.and.returnValue(mockDashInstance);

mockDashInstance.getMetricsFor.and.returnValue(true);
mockDashInstance.getDVRWindowSize.and.returnValue(101);

@@ -127,3 +135,4 @@ mockDashInstance.on.and.callFake(function (eventType, handler) {

mediaSources = new MediaSources();
spyOn(mediaSources, 'time').and.callThrough();
mediaSourcesTimeSpy = spyOn(mediaSources, 'time');
mediaSourcesTimeSpy.and.callThrough();
spyOn(mediaSources, 'failover').and.callThrough();

@@ -144,3 +153,4 @@ mediaSources.init(cdnArray, new Date(), WindowTypes.STATIC, LiveSupport.SEEKABLE, mediaSourceCallbacks);

'bigscreenplayer/plugins': mockPlugins,
'bigscreenplayer/dynamicwindowutils': mockDynamicWindowUtils
'bigscreenplayer/dynamicwindowutils': mockDynamicWindowUtils,
'bigscreenplayer/utils/timeutils': timeUtilsMock
});

@@ -168,2 +178,3 @@

mockDashInstance.seek.calls.reset();
timeUtilsMock.calculateSlidingWindowSeekOffset.calls.reset();
});

@@ -704,3 +715,3 @@

expect(mockVideoElement.currentTime).toBe(12);
expect(mockDashInstance.seek).toHaveBeenCalledWith(12);
});

@@ -717,3 +728,3 @@

expect(mockVideoElement.currentTime).toBe(99.9);
expect(mockDashInstance.seek).toHaveBeenCalledWith(99.9);
});

@@ -738,2 +749,9 @@

});
it('It should calculate seek offset time when paused before seeking', function () {
mseStrategy.pause();
mseStrategy.setCurrentTime(101);
expect(timeUtilsMock.calculateSlidingWindowSeekOffset).toHaveBeenCalledTimes(1);
});
});

@@ -740,0 +758,0 @@

@@ -28,4 +28,38 @@ require(

});
describe('Calculate Sliding Window Seek Offset', function () {
beforeEach(function () {
jasmine.clock().mockDate(new Date('2019-10-22T10:59:20.000Z'));
});
afterEach(function () {
jasmine.clock().uninstall();
});
it('should return the relative time in seconds including the time a user spent seeking', function () {
var time = 4000;
// Note the 5 minute (300 second difference)
var dvrInfoRangeStart = new Date('2019-10-22T09:00:00.000Z') / 1000;
var timeCorrection = new Date('2019-10-22T08:55:00.000Z') / 1000;
var pausedTime = new Date('2019-10-22T10:59:00.000Z');
// mock Date.now is 20 seconds later. Slow seeking!
expect(TimeUtils.calculateSlidingWindowSeekOffset(time, dvrInfoRangeStart, timeCorrection, pausedTime)).toBe(3680);
});
it('should return the relative time in seconds if paused time is 0', function () {
var time = 4000;
// Note the 5 minute (300 second difference)
var dvrInfoRangeStart = new Date('2019-10-22T09:00:00.000Z') / 1000;
var timeCorrection = new Date('2019-10-22T08:55:00.000Z') / 1000;
var pausedTime = 0;
expect(TimeUtils.calculateSlidingWindowSeekOffset(time, dvrInfoRangeStart, timeCorrection, pausedTime)).toBe(3700);
});
});
});
}
);

@@ -12,2 +12,3 @@ define('bigscreenplayer/playbackstrategy/msestrategy',

'bigscreenplayer/playbackstrategy/growingwindowrefresher',
'bigscreenplayer/utils/timeutils',

@@ -17,4 +18,5 @@ // static imports

],
function (MediaState, WindowTypes, DebugTool, MediaKinds, Plugins, ManifestModifier, LiveSupport, DynamicWindowUtils, GrowingWindowRefresher) {
function (MediaState, WindowTypes, DebugTool, MediaKinds, Plugins, ManifestModifier, LiveSupport, DynamicWindowUtils, GrowingWindowRefresher, TimeUtils) {
var MSEStrategy = function (mediaSources, windowType, mediaKind, playbackElement, isUHD, device) {
var LIVE_DELAY_SECONDS = 1.1;
var mediaPlayer;

@@ -30,2 +32,3 @@ var mediaElement;

var refreshFailoverTime;
var slidingWindowPausedTime = 0;
var isEnded = false;

@@ -254,3 +257,3 @@

function getClampedTime (time, range) {
return Math.min(Math.max(time, range.start), range.end - 1.1);
return Math.min(Math.max(time, range.start), range.end - LIVE_DELAY_SECONDS);
}

@@ -285,2 +288,3 @@

mediaPlayer.getDebug().setLogToBrowserConsole(false);
mediaPlayer.setLiveDelay(LIVE_DELAY_SECONDS);

@@ -386,2 +390,17 @@ mediaPlayer.setBufferToKeep(0);

function calculateSeekOffset (time) {
function getClampedTimeForLive (time) {
return Math.min(Math.max(time, 0), mediaPlayer.getDVRWindowSize() - LIVE_DELAY_SECONDS);
}
if (windowType === WindowTypes.SLIDING) {
var dvrInfo = mediaPlayer.getDashMetrics().getCurrentDVRInfo(mediaPlayer.getMetricsFor(mediaKind));
var offset = TimeUtils.calculateSlidingWindowSeekOffset(time, dvrInfo.range.start, timeCorrection, slidingWindowPausedTime);
slidingWindowPausedTime = 0;
return getClampedTimeForLive(offset);
}
return getClampedTime(time, getSeekableRange());
}
return {

@@ -466,2 +485,6 @@ transitions: {

pause: function (opts) {
if (windowType === WindowTypes.SLIDING) {
slidingWindowPausedTime = Date.now();
}
mediaPlayer.pause();

@@ -486,8 +509,7 @@ opts = opts || {};

var seekToTime = getClampedTime(time, getSeekableRange());
if (windowType === WindowTypes.SLIDING) {
mediaElement.currentTime = (seekToTime + timeCorrection);
} else if (windowType === WindowTypes.GROWING && seekToTime > getCurrentTime()) {
if (windowType === WindowTypes.GROWING && seekToTime > getCurrentTime()) {
refreshManifestBeforeSeek(seekToTime);
} else {
mediaPlayer.seek(seekToTime);
var seekTime = calculateSeekOffset(time);
mediaPlayer.seek(seekTime);
}

@@ -494,0 +516,0 @@ }

@@ -29,8 +29,19 @@ define(

function calculateSlidingWindowSeekOffset (time, dvrInfoRangeStart, timeCorrection, slidingWindowPausedTime) {
var dashRelativeTime = time + timeCorrection - dvrInfoRangeStart;
if (slidingWindowPausedTime === 0) {
return dashRelativeTime;
}
return dashRelativeTime - ((Date.now() - slidingWindowPausedTime) / 1000);
}
return {
durationToSeconds: durationToSeconds,
convertToSeekableVideoTime: convertToSeekableVideoTime,
convertToVideoTime: convertToVideoTime
convertToVideoTime: convertToVideoTime,
calculateSlidingWindowSeekOffset: calculateSlidingWindowSeekOffset
};
}
);
SocketSocket SOC 2 Logo

Product

  • Package Alerts
  • Integrations
  • Docs
  • Pricing
  • FAQ
  • Roadmap

Packages

Stay in touch

Get open source security insights delivered straight into your inbox.


  • Terms
  • Privacy
  • Security

Made with ⚡️ by Socket Inc