From 64cc5e8575fda47b281ae20abf0020e27fc8ce7c Mon Sep 17 00:00:00 2001 From: Rigel Kent Date: Fri, 5 Oct 2018 15:17:34 +0200 Subject: add webtorrent opt-out settings - add a key in localstorage to remember the opt-out - add a user setting --- client/src/assets/player/peertube-player-local-storage.ts | 10 ++++++++++ client/src/assets/player/peertube-videojs-plugin.ts | 6 +++++- 2 files changed, 15 insertions(+), 1 deletion(-) (limited to 'client/src/assets/player') diff --git a/client/src/assets/player/peertube-player-local-storage.ts b/client/src/assets/player/peertube-player-local-storage.ts index dac54c5a4..c3d8b71bc 100644 --- a/client/src/assets/player/peertube-player-local-storage.ts +++ b/client/src/assets/player/peertube-player-local-storage.ts @@ -10,6 +10,15 @@ function getStoredVolume () { return undefined } +function getStoredWebTorrentPolicy () { + const value = getLocalStorage('webtorrent_policy') + if (value !== null && value !== undefined) { + if (value.toString() === 'disable') return true + } + + return undefined +} + function getStoredMute () { const value = getLocalStorage('mute') if (value !== null && value !== undefined) return value === 'true' @@ -56,6 +65,7 @@ function getAverageBandwidthInStore () { export { getStoredVolume, + getStoredWebTorrentPolicy, getStoredMute, getStoredTheater, saveVolumeInStore, diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index 2330f476f..90ca8f9fa 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts @@ -8,6 +8,7 @@ import { isMobile, timeToInt, videoFileMaxByResolution, videoFileMinByResolution import * as CacheChunkStore from 'cache-chunk-store' import { PeertubeChunkStore } from './peertube-chunk-store' import { + getStoredWebTorrentPolicy, getAverageBandwidthInStore, getStoredMute, getStoredVolume, @@ -64,6 +65,7 @@ class PeerTubePlugin extends Plugin { private autoResolution = true private forbidAutoResolution = false private isAutoResolutionObservation = false + private playerRefusedP2P = false private videoViewInterval private torrentInfoInterval @@ -97,6 +99,7 @@ class PeerTubePlugin extends Plugin { if (volume !== undefined) this.player.volume(volume) const muted = getStoredMute() if (muted !== undefined) this.player.muted(muted) + this.playerRefusedP2P = getStoredWebTorrentPolicy() || false this.initializePlayer() this.runTorrentInfoScheduler() @@ -288,7 +291,8 @@ class PeerTubePlugin extends Plugin { renderVideo(torrent.files[ 0 ], this.playerElement, renderVideoOptions, (err, renderer) => { this.renderer = renderer - if (err) return this.fallbackToHttp(done) + console.log('value this.playerRefusedP2P', this.playerRefusedP2P) + if (err || this.playerRefusedP2P) return this.fallbackToHttp(done) return this.tryToPlay(err => { if (err) return done(err) -- cgit v1.2.3 From ed638e5325096ef580da20f370ac61c59cd48cf7 Mon Sep 17 00:00:00 2001 From: Rigel Kent Date: Fri, 12 Oct 2018 18:12:39 +0200 Subject: move to boolean switch --- client/src/assets/player/peertube-player-local-storage.ts | 12 +++++------- client/src/assets/player/peertube-videojs-plugin.ts | 5 ++--- 2 files changed, 7 insertions(+), 10 deletions(-) (limited to 'client/src/assets/player') diff --git a/client/src/assets/player/peertube-player-local-storage.ts b/client/src/assets/player/peertube-player-local-storage.ts index c3d8b71bc..3ac5fe58a 100644 --- a/client/src/assets/player/peertube-player-local-storage.ts +++ b/client/src/assets/player/peertube-player-local-storage.ts @@ -10,13 +10,11 @@ function getStoredVolume () { return undefined } -function getStoredWebTorrentPolicy () { - const value = getLocalStorage('webtorrent_policy') - if (value !== null && value !== undefined) { - if (value.toString() === 'disable') return true - } +function getStoredWebTorrentEnabled (): boolean { + const value = getLocalStorage('webtorrent_enabled') + if (value !== null && value !== undefined) return value === 'true' - return undefined + return false } function getStoredMute () { @@ -65,7 +63,7 @@ function getAverageBandwidthInStore () { export { getStoredVolume, - getStoredWebTorrentPolicy, + getStoredWebTorrentEnabled, getStoredMute, getStoredTheater, saveVolumeInStore, diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index 90ca8f9fa..a53a2cc69 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts @@ -8,7 +8,7 @@ import { isMobile, timeToInt, videoFileMaxByResolution, videoFileMinByResolution import * as CacheChunkStore from 'cache-chunk-store' import { PeertubeChunkStore } from './peertube-chunk-store' import { - getStoredWebTorrentPolicy, + getStoredWebTorrentEnabled, getAverageBandwidthInStore, getStoredMute, getStoredVolume, @@ -82,6 +82,7 @@ class PeerTubePlugin extends Plugin { // Disable auto play on iOS this.autoplay = options.autoplay && this.isIOS() === false + this.playerRefusedP2P = !getStoredWebTorrentEnabled() this.startTime = timeToInt(options.startTime) this.videoFiles = options.videoFiles @@ -99,7 +100,6 @@ class PeerTubePlugin extends Plugin { if (volume !== undefined) this.player.volume(volume) const muted = getStoredMute() if (muted !== undefined) this.player.muted(muted) - this.playerRefusedP2P = getStoredWebTorrentPolicy() || false this.initializePlayer() this.runTorrentInfoScheduler() @@ -291,7 +291,6 @@ class PeerTubePlugin extends Plugin { renderVideo(torrent.files[ 0 ], this.playerElement, renderVideoOptions, (err, renderer) => { this.renderer = renderer - console.log('value this.playerRefusedP2P', this.playerRefusedP2P) if (err || this.playerRefusedP2P) return this.fallbackToHttp(done) return this.tryToPlay(err => { -- cgit v1.2.3 From a73115f31ae891cb47759f075b1d2cead40817a4 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Wed, 17 Oct 2018 10:47:01 +0200 Subject: Fix webtorrent disabling --- .../src/assets/player/peertube-videojs-plugin.ts | 47 ++++++++++++++-------- 1 file changed, 30 insertions(+), 17 deletions(-) (limited to 'client/src/assets/player') diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index a53a2cc69..5cebab6d9 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts @@ -8,15 +8,21 @@ import { isMobile, timeToInt, videoFileMaxByResolution, videoFileMinByResolution import * as CacheChunkStore from 'cache-chunk-store' import { PeertubeChunkStore } from './peertube-chunk-store' import { - getStoredWebTorrentEnabled, getAverageBandwidthInStore, getStoredMute, getStoredVolume, + getStoredWebTorrentEnabled, saveAverageBandwidth, saveMuteInStore, saveVolumeInStore } from './peertube-player-local-storage' +type PlayOptions = { + forcePlay?: boolean, + seek?: number, + delay?: number +} + const Plugin: VideoJSComponentInterface = videojs.getPlugin('plugin') class PeerTubePlugin extends Plugin { private readonly playerElement: HTMLVideoElement @@ -181,6 +187,15 @@ class PeerTubePlugin extends Plugin { const previousVideoFile = this.currentVideoFile this.currentVideoFile = videoFile + // Don't try on iOS that does not support MediaSource + // Or don't use P2P if webtorrent is disabled + if (this.isIOS() || this.playerRefusedP2P) { + return this.fallbackToHttp(options, () => { + this.player.playbackRate(oldPlaybackRate) + return done() + }) + } + this.addTorrent(this.currentVideoFile.magnetUri, previousVideoFile, options, () => { this.player.playbackRate(oldPlaybackRate) return done() @@ -251,11 +266,7 @@ class PeerTubePlugin extends Plugin { private addTorrent ( magnetOrTorrentUrl: string, previousVideoFile: VideoFile, - options: { - forcePlay?: boolean, - seek?: number, - delay?: number - }, + options: PlayOptions, done: Function ) { console.log('Adding ' + magnetOrTorrentUrl + '.') @@ -291,7 +302,7 @@ class PeerTubePlugin extends Plugin { renderVideo(torrent.files[ 0 ], this.playerElement, renderVideoOptions, (err, renderer) => { this.renderer = renderer - if (err || this.playerRefusedP2P) return this.fallbackToHttp(done) + if (err) return this.fallbackToHttp(options, done) return this.tryToPlay(err => { if (err) return done(err) @@ -299,7 +310,7 @@ class PeerTubePlugin extends Plugin { if (options.seek) this.seek(options.seek) if (options.forcePlay === false && paused === true) this.player.pause() - return done(err) + return done() }) }) }, options.delay || 0) @@ -435,12 +446,6 @@ class PeerTubePlugin extends Plugin { return this.updateVideoFile(undefined, { forcePlay: true, seek: this.startTime }) } - // Don't try on iOS that does not support MediaSource - if (this.isIOS()) { - this.currentVideoFile = this.pickAverageVideoFile() - return this.fallbackToHttp(undefined, false) - } - // Proxy first play const oldPlay = this.player.play.bind(this.player) this.player.play = () => { @@ -570,7 +575,9 @@ class PeerTubePlugin extends Plugin { return fetch(url, { method: 'PUT', body, headers }) } - private fallbackToHttp (done?: Function, play = true) { + private fallbackToHttp (options: PlayOptions, done?: Function) { + const paused = this.player.paused() + this.disableAutoResolution(true) this.flushVideoFile(this.currentVideoFile, true) @@ -582,9 +589,15 @@ class PeerTubePlugin extends Plugin { const httpUrl = this.currentVideoFile.fileUrl this.player.src = this.savePlayerSrcFunction this.player.src(httpUrl) - if (play) this.tryToPlay() - if (done) return done() + return this.tryToPlay(err => { + if (err && done) return done(err) + + if (options.seek) this.seek(options.seek) + if (options.forcePlay === false && paused === true) this.player.pause() + + if (done) return done() + }) } private handleError (err: Error | string) { -- cgit v1.2.3