diff options
Diffstat (limited to 'client/src/assets/player/peertube-videojs-plugin.ts')
-rw-r--r-- | client/src/assets/player/peertube-videojs-plugin.ts | 30 |
1 files changed, 18 insertions, 12 deletions
diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index 47288c842..d3ae7b137 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts | |||
@@ -55,6 +55,7 @@ class PeerTubePlugin extends Plugin { | |||
55 | private player: any | 55 | private player: any |
56 | private currentVideoFile: VideoFile | 56 | private currentVideoFile: VideoFile |
57 | private torrent: WebTorrent.Torrent | 57 | private torrent: WebTorrent.Torrent |
58 | private fakeRenderer | ||
58 | private autoResolution = true | 59 | private autoResolution = true |
59 | private isAutoResolutionObservation = false | 60 | private isAutoResolutionObservation = false |
60 | 61 | ||
@@ -123,6 +124,8 @@ class PeerTubePlugin extends Plugin { | |||
123 | 124 | ||
124 | // Don't need to destroy renderer, video player will be destroyed | 125 | // Don't need to destroy renderer, video player will be destroyed |
125 | this.flushVideoFile(this.currentVideoFile, false) | 126 | this.flushVideoFile(this.currentVideoFile, false) |
127 | |||
128 | this.destroyFakeRenderer() | ||
126 | } | 129 | } |
127 | 130 | ||
128 | getCurrentResolutionId () { | 131 | getCurrentResolutionId () { |
@@ -185,7 +188,6 @@ class PeerTubePlugin extends Plugin { | |||
185 | console.log('Adding ' + magnetOrTorrentUrl + '.') | 188 | console.log('Adding ' + magnetOrTorrentUrl + '.') |
186 | 189 | ||
187 | const oldTorrent = this.torrent | 190 | const oldTorrent = this.torrent |
188 | let fakeRenderer | ||
189 | const torrentOptions = { | 191 | const torrentOptions = { |
190 | store: (chunkLength, storeOpts) => new CacheChunkStore(new PeertubeChunkStore(chunkLength, storeOpts), { | 192 | store: (chunkLength, storeOpts) => new CacheChunkStore(new PeertubeChunkStore(chunkLength, storeOpts), { |
191 | max: 100 | 193 | max: 100 |
@@ -205,7 +207,7 @@ class PeerTubePlugin extends Plugin { | |||
205 | if (options.delay) { | 207 | if (options.delay) { |
206 | const fakeVideoElem = document.createElement('video') | 208 | const fakeVideoElem = document.createElement('video') |
207 | renderVideo(torrent.files[0], fakeVideoElem, { autoplay: false, controls: false }, (err, renderer) => { | 209 | renderVideo(torrent.files[0], fakeVideoElem, { autoplay: false, controls: false }, (err, renderer) => { |
208 | fakeRenderer = renderer | 210 | this.fakeRenderer = renderer |
209 | 211 | ||
210 | if (err) console.error('Cannot render new torrent in fake video element.', err) | 212 | if (err) console.error('Cannot render new torrent in fake video element.', err) |
211 | 213 | ||
@@ -217,16 +219,7 @@ class PeerTubePlugin extends Plugin { | |||
217 | 219 | ||
218 | // Render the video in a few seconds? (on resolution change for example, we wait some seconds of the new video resolution) | 220 | // Render the video in a few seconds? (on resolution change for example, we wait some seconds of the new video resolution) |
219 | this.addTorrentDelay = setTimeout(() => { | 221 | this.addTorrentDelay = setTimeout(() => { |
220 | if (fakeRenderer) { | 222 | this.destroyFakeRenderer() |
221 | if (fakeRenderer.destroy) { | ||
222 | try { | ||
223 | fakeRenderer.destroy() | ||
224 | } catch (err) { | ||
225 | console.log('Cannot destroy correctly fake renderer.', err) | ||
226 | } | ||
227 | } | ||
228 | fakeRenderer = undefined | ||
229 | } | ||
230 | 223 | ||
231 | const paused = this.player.paused() | 224 | const paused = this.player.paused() |
232 | 225 | ||
@@ -567,6 +560,19 @@ class PeerTubePlugin extends Plugin { | |||
567 | return this.videoFiles[Math.floor(this.videoFiles.length / 2)] | 560 | return this.videoFiles[Math.floor(this.videoFiles.length / 2)] |
568 | } | 561 | } |
569 | 562 | ||
563 | private destroyFakeRenderer () { | ||
564 | if (this.fakeRenderer) { | ||
565 | if (this.fakeRenderer.destroy) { | ||
566 | try { | ||
567 | this.fakeRenderer.destroy() | ||
568 | } catch (err) { | ||
569 | console.log('Cannot destroy correctly fake renderer.', err) | ||
570 | } | ||
571 | } | ||
572 | this.fakeRenderer = undefined | ||
573 | } | ||
574 | } | ||
575 | |||
570 | // Thanks: https://github.com/videojs/video.js/issues/4460#issuecomment-312861657 | 576 | // Thanks: https://github.com/videojs/video.js/issues/4460#issuecomment-312861657 |
571 | private initSmoothProgressBar () { | 577 | private initSmoothProgressBar () { |
572 | const SeekBar = videojsUntyped.getComponent('SeekBar') | 578 | const SeekBar = videojsUntyped.getComponent('SeekBar') |