Fix play on iOS (grumph)
This commit is contained in:
parent
0b33c52060
commit
e7eb5b3997
4 changed files with 19 additions and 6 deletions
|
@ -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({
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
export const environment = {
|
||||
production: false,
|
||||
hmr: true,
|
||||
apiUrl: 'http://localhost:9000'
|
||||
apiUrl: 'http://192.168.1.42:9000'
|
||||
}
|
||||
|
|
|
@ -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>
|
||||
|
|
Loading…
Reference in a new issue