Try to fix auto play on apple devices

This commit is contained in:
Chocobozzz 2020-05-11 17:48:25 +02:00
parent 6422847473
commit 72efdda586
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
3 changed files with 11 additions and 7 deletions

View File

@ -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'

View File

@ -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')

View File

@ -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 })