const playerElementWrapper = this.elementRef.nativeElement.querySelector('#video-element-wrapper')
this.playerElement = document.createElement('video')
this.playerElement.className = 'video-js vjs-peertube-skin'
+ this.playerElement.setAttribute('playsinline', 'true')
playerElementWrapper.appendChild(this.playerElement)
const videojsOptions = getVideojsOptions({
constructor (player: videojs.Player, options: PeertubePluginOptions) {
super(player, options)
- this.autoplay = options.autoplay
+ // Disable auto play on iOS
+ this.autoplay = options.autoplay && this.isIOS() === false
this.startTime = options.startTime
this.videoFiles = options.videoFiles
oldTorrent.removePeer(oldTorrent['ws'])
}
+ // Render the video in a few seconds? (on resolution change for example, we wait some seconds of the new video resolution)
this.addTorrentDelay = setTimeout(() => {
this.flushVideoFile(previousVideoFile)
this.tryToPlay()
})
} else {
+ // Don't try on iOS that does not support MediaSource
+ if (this.isIOS()) {
+ this.currentVideoFile = this.videoFiles[0]
+ return this.fallbackToHttp(undefined, false)
+ }
+
// Proxy first play
const oldPlay = this.player.play.bind(this.player)
this.player.play = () => {
return fetch(this.videoViewUrl, { method: 'POST' })
}
- private fallbackToHttp (done: Function) {
+ private fallbackToHttp (done?: Function, play = true) {
this.flushVideoFile(this.currentVideoFile, true)
this.torrent = null
const httpUrl = this.currentVideoFile.fileUrl
this.player.src = this.savePlayerSrcFunction
this.player.src(httpUrl)
- this.player.play()
+ if (play) this.tryToPlay()
- return done()
+ if (done) return done()
}
private handleError (err: Error | string) {
this.player.removeClass('vjs-error-display-enabled')
}
+ private isIOS () {
+ return !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform)
+ }
+
private alterInactivity () {
let saveInactivityTimeout: number