diff options
author | Chocobozzz <me@florianbigard.com> | 2018-04-18 10:20:13 +0200 |
---|---|---|
committer | Chocobozzz <me@florianbigard.com> | 2018-04-18 10:20:13 +0200 |
commit | 80109b2ddb14ec4a54cede7885611cb9244da3cb (patch) | |
tree | d84323763c38cbdc1aff156598d9ab215bfe4dbe /client/src/assets/player/peertube-videojs-plugin.ts | |
parent | 66dc59076413b9a4aa0899d3192b0bdf03ee654d (diff) | |
download | PeerTube-80109b2ddb14ec4a54cede7885611cb9244da3cb.tar.gz PeerTube-80109b2ddb14ec4a54cede7885611cb9244da3cb.tar.zst PeerTube-80109b2ddb14ec4a54cede7885611cb9244da3cb.zip |
Handle when autoplay fails
Diffstat (limited to 'client/src/assets/player/peertube-videojs-plugin.ts')
-rw-r--r-- | client/src/assets/player/peertube-videojs-plugin.ts | 35 |
1 files changed, 25 insertions, 10 deletions
diff --git a/client/src/assets/player/peertube-videojs-plugin.ts b/client/src/assets/player/peertube-videojs-plugin.ts index 60c291a50..290d88724 100644 --- a/client/src/assets/player/peertube-videojs-plugin.ts +++ b/client/src/assets/player/peertube-videojs-plugin.ts | |||
@@ -68,9 +68,7 @@ class PeerTubePlugin extends Plugin { | |||
68 | constructor (player: videojs.Player, options: PeertubePluginOptions) { | 68 | constructor (player: videojs.Player, options: PeertubePluginOptions) { |
69 | super(player, options) | 69 | super(player, options) |
70 | 70 | ||
71 | // Fix canplay event on google chrome by disabling default videojs autoplay | 71 | this.autoplay = options.autoplay |
72 | this.autoplay = this.player.options_.autoplay | ||
73 | this.player.options_.autoplay = false | ||
74 | 72 | ||
75 | this.startTime = options.startTime | 73 | this.startTime = options.startTime |
76 | this.videoFiles = options.videoFiles | 74 | this.videoFiles = options.videoFiles |
@@ -190,12 +188,7 @@ class PeerTubePlugin extends Plugin { | |||
190 | 188 | ||
191 | if (err) return this.fallbackToHttp(done) | 189 | if (err) return this.fallbackToHttp(done) |
192 | 190 | ||
193 | if (!this.player.paused()) { | 191 | if (!this.player.paused()) return this.tryToPlay(done) |
194 | const playPromise = this.player.play() | ||
195 | if (playPromise !== undefined) return playPromise.then(done) | ||
196 | |||
197 | return done() | ||
198 | } | ||
199 | 192 | ||
200 | return done() | 193 | return done() |
201 | }) | 194 | }) |
@@ -264,6 +257,25 @@ class PeerTubePlugin extends Plugin { | |||
264 | this.trigger('autoResolutionUpdate') | 257 | this.trigger('autoResolutionUpdate') |
265 | } | 258 | } |
266 | 259 | ||
260 | private tryToPlay (done?: Function) { | ||
261 | if (!done) done = function () { /* empty */ } | ||
262 | |||
263 | const playPromise = this.player.play() | ||
264 | if (playPromise !== undefined) { | ||
265 | return playPromise.then(done) | ||
266 | .catch(err => { | ||
267 | console.error(err) | ||
268 | this.player.pause() | ||
269 | this.player.posterImage.show() | ||
270 | this.player.removeClass('vjs-has-autoplay') | ||
271 | |||
272 | return done() | ||
273 | }) | ||
274 | } | ||
275 | |||
276 | return done() | ||
277 | } | ||
278 | |||
267 | private seek (time: number) { | 279 | private seek (time: number) { |
268 | this.player.currentTime(time) | 280 | this.player.currentTime(time) |
269 | this.player.handleTechSeeked_() | 281 | this.player.handleTechSeeked_() |
@@ -317,7 +329,10 @@ class PeerTubePlugin extends Plugin { | |||
317 | if (this.autoplay === true) { | 329 | if (this.autoplay === true) { |
318 | this.player.posterImage.hide() | 330 | this.player.posterImage.hide() |
319 | 331 | ||
320 | this.updateVideoFile(undefined, 0, () => this.seek(this.startTime)) | 332 | this.updateVideoFile(undefined, 0, () => { |
333 | this.seek(this.startTime) | ||
334 | this.tryToPlay() | ||
335 | }) | ||
321 | } else { | 336 | } else { |
322 | // Proxy first play | 337 | // Proxy first play |
323 | const oldPlay = this.player.play.bind(this.player) | 338 | const oldPlay = this.player.play.bind(this.player) |