Fix play on iOS (grumph)

This commit is contained in:
Chocobozzz 2018-05-22 09:16:05 +02:00
parent 0b33c52060
commit e7eb5b3997
No known key found for this signature in database
GPG Key ID: 583A612D890159BE
4 changed files with 19 additions and 6 deletions

View File

@ -340,6 +340,7 @@ export class VideoWatchComponent implements OnInit, OnDestroy {
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({

View File

@ -63,7 +63,8 @@ class PeerTubePlugin extends Plugin {
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
@ -180,6 +181,7 @@ class PeerTubePlugin extends Plugin {
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)
@ -337,6 +339,12 @@ class PeerTubePlugin extends Plugin {
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 = () => {
@ -439,7 +447,7 @@ class PeerTubePlugin extends Plugin {
return fetch(this.videoViewUrl, { method: 'POST' })
}
private fallbackToHttp (done: Function) {
private fallbackToHttp (done?: Function, play = true) {
this.flushVideoFile(this.currentVideoFile, true)
this.torrent = null
@ -449,9 +457,9 @@ class PeerTubePlugin extends Plugin {
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) {
@ -466,6 +474,10 @@ class PeerTubePlugin extends Plugin {
this.player.removeClass('vjs-error-display-enabled')
}
private isIOS () {
return !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform)
}
private alterInactivity () {
let saveInactivityTimeout: number

View File

@ -1,5 +1,5 @@
export const environment = {
production: false,
hmr: true,
apiUrl: 'http://localhost:9000'
apiUrl: 'http://192.168.1.42:9000'
}

View File

@ -17,7 +17,7 @@
<div id="error-content"></div>
</div>
<video id="video-container" class="video-js vjs-peertube-skin">
<video playsinline="true" id="video-container" class="video-js vjs-peertube-skin">
</video>
</body>