Skip to content

Commit 5916912

Browse files
authored
Merge pull request #49 from Stremio/feat/youtube-video-playback-speed
feat(YoutubeVideo): implement playbackSpeed
2 parents 2ee9f84 + 17b8b78 commit 5916912

File tree

1 file changed

+21
-1
lines changed

1 file changed

+21
-1
lines changed

src/YouTubeVideo/YouTubeVideo.js

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,6 +28,7 @@ function YouTubeVideo(options) {
2828
onPropChanged('time');
2929
onPropChanged('volume');
3030
onPropChanged('muted');
31+
onPropChanged('playbackSpeed');
3132
}, timeChangedTimeout);
3233

3334
var video = null;
@@ -46,6 +47,7 @@ function YouTubeVideo(options) {
4647
buffering: false,
4748
volume: false,
4849
muted: false,
50+
playbackSpeed: false,
4951
subtitlesTracks: false,
5052
selectedSubtitlesTrackId: false
5153
};
@@ -165,6 +167,7 @@ function YouTubeVideo(options) {
165167
onPropChanged('buffering');
166168
onPropChanged('volume');
167169
onPropChanged('muted');
170+
onPropChanged('playbackSpeed');
168171
onPropChanged('subtitlesTracks');
169172
onPropChanged('selectedSubtitlesTrackId');
170173
}
@@ -240,6 +243,13 @@ function YouTubeVideo(options) {
240243

241244
return video.isMuted();
242245
}
246+
case 'playbackSpeed': {
247+
if (stream === null || typeof video.getPlaybackRate !== 'function' || video.getPlaybackRate() === null || !isFinite(video.getPlaybackRate())) {
248+
return null;
249+
}
250+
251+
return video.getPlaybackRate();
252+
}
243253
case 'subtitlesTracks': {
244254
if (stream === null || typeof video.getOption !== 'function') {
245255
return [];
@@ -335,6 +345,14 @@ function YouTubeVideo(options) {
335345

336346
break;
337347
}
348+
case 'playbackSpeed': {
349+
if (stream !== null && typeof video.setPlaybackRate === 'function' && isFinite(propValue)) {
350+
video.setPlaybackRate(propValue);
351+
onPropChanged('playbackSpeed');
352+
}
353+
354+
break;
355+
}
338356
case 'selectedSubtitlesTrackId': {
339357
if (stream !== null) {
340358
selectedSubtitlesTrackId = null;
@@ -388,6 +406,7 @@ function YouTubeVideo(options) {
388406
onPropChanged('buffering');
389407
onPropChanged('volume');
390408
onPropChanged('muted');
409+
onPropChanged('playbackSpeed');
391410
onPropChanged('subtitlesTracks');
392411
onPropChanged('selectedSubtitlesTrackId');
393412
} else {
@@ -417,6 +436,7 @@ function YouTubeVideo(options) {
417436
onPropChanged('buffering');
418437
onPropChanged('volume');
419438
onPropChanged('muted');
439+
onPropChanged('playbackSpeed');
420440
onPropChanged('subtitlesTracks');
421441
onPropChanged('selectedSubtitlesTrackId');
422442
break;
@@ -477,7 +497,7 @@ YouTubeVideo.canPlayStream = function(stream) {
477497
YouTubeVideo.manifest = {
478498
name: 'YouTubeVideo',
479499
external: false,
480-
props: ['stream', 'loaded', 'paused', 'time', 'duration', 'buffering', 'volume', 'muted', 'subtitlesTracks', 'selectedSubtitlesTrackId'],
500+
props: ['stream', 'loaded', 'paused', 'time', 'duration', 'buffering', 'volume', 'muted', 'playbackSpeed', 'subtitlesTracks', 'selectedSubtitlesTrackId'],
481501
commands: ['load', 'unload', 'destroy'],
482502
events: ['propValue', 'propChanged', 'ended', 'error', 'subtitlesTrackLoaded']
483503
};

0 commit comments

Comments
 (0)