Skip to content

Commit cbbd76e

Browse files
committed
Different MPV arguments depending on MPV version
1 parent 00fc6b7 commit cbbd76e

File tree

1 file changed

+55
-32
lines changed

1 file changed

+55
-32
lines changed

src/ShellVideo/ShellVideo.js

Lines changed: 55 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,18 @@ var stremioToMPVProps = {
2525
'subtitlesOutlineColor': 'sub-border-color',
2626
};
2727

28+
function parseVersion(version) {
29+
return version.split('.').slice(0, 2).map(function (v) { return parseInt(v) });
30+
}
31+
32+
function versionGTE(a, b) {
33+
var versionA = parseVersion(a);
34+
var versionB = parseVersion(b);
35+
if (versionA[0] > versionB[0]) return true;
36+
if (versionA[0] < versionB[0]) return false;
37+
return versionA[1] >= versionB[1];
38+
}
39+
2840
function ShellVideo(options) {
2941
options = options || {};
3042

@@ -37,6 +49,10 @@ function ShellVideo(options) {
3749
stremioProps[stremioToMPVProps[key]] = key;
3850
}
3951
});
52+
var resolveMPVVersion;
53+
var waitForMPVVersion = new Promise(function (resolve) {
54+
resolveMPVVersion = resolve;
55+
});
4056
command('unload');
4157

4258
ipc.send('mpv-command', ['stop']);
@@ -92,6 +108,7 @@ function ShellVideo(options) {
92108
ipc.on('mpv-prop-change', function(args) {
93109
switch (args.name) {
94110
case 'mpv-version':
111+
resolveMPVVersion(args.data);
95112
case 'ffmpeg-version': {
96113
props[args.name] = logProp(args);
97114
break;
@@ -302,49 +319,55 @@ function ShellVideo(options) {
302319
case 'load': {
303320
command('unload');
304321
if (commandArgs && commandArgs.stream && typeof commandArgs.stream.url === 'string') {
305-
stream = commandArgs.stream;
306-
onPropChanged('stream');
322+
waitForMPVVersion.then(function (mpvVersion) {
323+
stream = commandArgs.stream;
324+
onPropChanged('stream');
307325

308-
setBackground(false);
326+
setBackground(false);
309327

310-
ipc.send('mpv-set-prop', ['no-sub-ass']);
328+
ipc.send('mpv-set-prop', ['no-sub-ass']);
311329

312-
// opengl-cb is an alias for the new name "libmpv", as shown in mpv's video/out/vo.c aliases
313-
// opengl is an alias for the new name "gpu"
314-
// When on Windows we use d3d for the rendering in separate window
315-
var windowRenderer = navigator.platform === 'Win32' ? 'direct3d' : 'opengl';
316-
var videoOutput = options.mpvSeparateWindow ? windowRenderer : 'opengl-cb';
317-
var separateWindow = options.mpvSeparateWindow ? 'yes' : 'no';
318-
ipc.send('mpv-set-prop', ['vo', videoOutput]);
319-
ipc.send('mpv-set-prop', ['osc', separateWindow]);
320-
ipc.send('mpv-set-prop', ['input-defalt-bindings', separateWindow]);
321-
ipc.send('mpv-set-prop', ['input-vo-keyboard', separateWindow]);
330+
// opengl-cb is an alias for the new name "libmpv", as shown in mpv's video/out/vo.c aliases
331+
// opengl is an alias for the new name "gpu"
332+
// When on Windows we use d3d for the rendering in separate window
333+
var windowRenderer = navigator.platform === 'Win32' ? 'direct3d' : 'opengl';
334+
var videoOutput = options.mpvSeparateWindow ? windowRenderer : 'opengl-cb';
335+
var separateWindow = options.mpvSeparateWindow ? 'yes' : 'no';
336+
ipc.send('mpv-set-prop', ['vo', videoOutput]);
337+
ipc.send('mpv-set-prop', ['osc', separateWindow]);
338+
ipc.send('mpv-set-prop', ['input-defalt-bindings', separateWindow]);
339+
ipc.send('mpv-set-prop', ['input-vo-keyboard', separateWindow]);
322340

323-
if (commandArgs.time !== null && isFinite(commandArgs.time)) {
324-
ipc.send('mpv-command', ['loadfile', stream.url, 'replace', '-1', 'start=+'+Math.floor(parseInt(commandArgs.time, 10)/1000)]);
325-
} else {
326-
ipc.send('mpv-command', ['loadfile', stream.url]);
327-
}
328-
ipc.send('mpv-set-prop', ['pause', false]);
329-
ipc.send('mpv-set-prop', ['speed', props.speed]);
330-
ipc.send('mpv-set-prop', ['aid', props.aid]);
331-
ipc.send('mpv-set-prop', ['mute', 'no']);
341+
var startAt = Math.floor(parseInt(commandArgs.time, 10) / 1000) || 0
342+
if (startAt !== 0) {
343+
if (versionGTE(mpvVersion, '0.39')) {
344+
ipc.send('mpv-command', ['loadfile', stream.url, 'replace', '-1', 'start=+' + startAt]);
345+
} else {
346+
ipc.send('mpv-command', ['loadfile', stream.url, 'replace', 'start=+' + startAt]);
347+
}
348+
} else {
349+
ipc.send('mpv-command', ['loadfile', stream.url]);
350+
}
351+
ipc.send('mpv-set-prop', ['pause', false]);
352+
ipc.send('mpv-set-prop', ['speed', props.speed]);
353+
ipc.send('mpv-set-prop', ['aid', props.aid]);
354+
ipc.send('mpv-set-prop', ['mute', 'no']);
332355

333-
onPropChanged('paused');
334-
onPropChanged('time');
335-
onPropChanged('duration');
336-
onPropChanged('buffering');
337-
onPropChanged('volume');
338-
onPropChanged('muted');
339-
onPropChanged('subtitlesTracks');
340-
onPropChanged('selectedSubtitlesTrackId');
356+
onPropChanged('paused');
357+
onPropChanged('time');
358+
onPropChanged('duration');
359+
onPropChanged('buffering');
360+
onPropChanged('volume');
361+
onPropChanged('muted');
362+
onPropChanged('subtitlesTracks');
363+
onPropChanged('selectedSubtitlesTrackId');
364+
});
341365
} else {
342366
onError(Object.assign({}, ERROR.UNSUPPORTED_STREAM, {
343367
critical: true,
344368
stream: commandArgs ? commandArgs.stream : null
345369
}));
346370
}
347-
348371
break;
349372
}
350373
case 'unload': {

0 commit comments

Comments
 (0)