From 72efdda586489bf59ac7df12ff9e75a926f1f048 Mon Sep 17 00:00:00 2001 From: Chocobozzz Date: Mon, 11 May 2020 17:48:25 +0200 Subject: [PATCH] Try to fix auto play on apple devices --- .../src/assets/player/peertube-player-manager.ts | 14 +++++++++----- client/src/assets/player/peertube-plugin.ts | 2 +- .../assets/player/webtorrent/webtorrent-plugin.ts | 2 +- 3 files changed, 11 insertions(+), 7 deletions(-) diff --git a/client/src/assets/player/peertube-player-manager.ts b/client/src/assets/player/peertube-player-manager.ts index 61da6a4cb..5ebc247f2 100644 --- a/client/src/assets/player/peertube-player-manager.ts +++ b/client/src/assets/player/peertube-player-manager.ts @@ -187,7 +187,7 @@ export class PeertubePlayerManager { ): videojs.PlayerOptions { const commonOptions = options.common - let autoplay = commonOptions.autoplay + let autoplay = this.getAutoPlayValue(commonOptions.autoplay) let html5 = {} const plugins: VideoJSPluginOptions = { @@ -232,9 +232,7 @@ export class PeertubePlayerManager { ? commonOptions.muted : undefined, // Undefined so the player knows it has to check the local storage - autoplay: autoplay === true - ? this.getAutoPlayValue() - : autoplay, + autoplay: this.getAutoPlayValue(autoplay), poster: commonOptions.poster, inactivityTimeout: commonOptions.inactivityTimeout, @@ -510,9 +508,15 @@ export class PeertubePlayerManager { }) } - private static getAutoPlayValue () { + private static getAutoPlayValue (autoplay: any) { + if (autoplay !== true) return autoplay + + const isIOS = !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform) const isSafari = /^((?!chrome|android).)*safari/i.test(navigator.userAgent) + // Giving up with iOS + if (isIOS) return false + // We have issues with autoplay and Safari. // any that tries to play using auto mute seems to work if (isSafari) return 'any' diff --git a/client/src/assets/player/peertube-plugin.ts b/client/src/assets/player/peertube-plugin.ts index 5085f7f86..a5a706420 100644 --- a/client/src/assets/player/peertube-plugin.ts +++ b/client/src/assets/player/peertube-plugin.ts @@ -45,7 +45,7 @@ class PeerTubePlugin extends Plugin { this.savedInactivityTimeout = player.options_.inactivityTimeout - if (options.autoplay === true) this.player.addClass('vjs-has-autoplay') + if (options.autoplay) this.player.addClass('vjs-has-autoplay') this.player.on('autoplay-failure', () => { this.player.removeClass('vjs-has-autoplay') diff --git a/client/src/assets/player/webtorrent/webtorrent-plugin.ts b/client/src/assets/player/webtorrent/webtorrent-plugin.ts index cb3deacc6..a894a90f5 100644 --- a/client/src/assets/player/webtorrent/webtorrent-plugin.ts +++ b/client/src/assets/player/webtorrent/webtorrent-plugin.ts @@ -417,7 +417,7 @@ class WebTorrentPlugin extends Plugin { private initializePlayer () { this.buildQualities() - if (this.autoplay === true) { + if (this.autoplay) { this.player.posterImage.hide() return this.updateVideoFile(undefined, { forcePlay: true, seek: this.startTime })