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')
|
const playerElementWrapper = this.elementRef.nativeElement.querySelector('#video-element-wrapper')
|
||||||
this.playerElement = document.createElement('video')
|
this.playerElement = document.createElement('video')
|
||||||
this.playerElement.className = 'video-js vjs-peertube-skin'
|
this.playerElement.className = 'video-js vjs-peertube-skin'
|
||||||
|
this.playerElement.setAttribute('playsinline', 'true')
|
||||||
playerElementWrapper.appendChild(this.playerElement)
|
playerElementWrapper.appendChild(this.playerElement)
|
||||||
|
|
||||||
const videojsOptions = getVideojsOptions({
|
const videojsOptions = getVideojsOptions({
|
||||||
|
|
|
@ -63,7 +63,8 @@ class PeerTubePlugin extends Plugin {
|
||||||
constructor (player: videojs.Player, options: PeertubePluginOptions) {
|
constructor (player: videojs.Player, options: PeertubePluginOptions) {
|
||||||
super(player, options)
|
super(player, options)
|
||||||
|
|
||||||
this.autoplay = options.autoplay
|
// Disable auto play on iOS
|
||||||
|
this.autoplay = options.autoplay && this.isIOS() === false
|
||||||
|
|
||||||
this.startTime = options.startTime
|
this.startTime = options.startTime
|
||||||
this.videoFiles = options.videoFiles
|
this.videoFiles = options.videoFiles
|
||||||
|
@ -180,6 +181,7 @@ class PeerTubePlugin extends Plugin {
|
||||||
oldTorrent.removePeer(oldTorrent['ws'])
|
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.addTorrentDelay = setTimeout(() => {
|
||||||
this.flushVideoFile(previousVideoFile)
|
this.flushVideoFile(previousVideoFile)
|
||||||
|
|
||||||
|
@ -337,6 +339,12 @@ class PeerTubePlugin extends Plugin {
|
||||||
this.tryToPlay()
|
this.tryToPlay()
|
||||||
})
|
})
|
||||||
} else {
|
} 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
|
// Proxy first play
|
||||||
const oldPlay = this.player.play.bind(this.player)
|
const oldPlay = this.player.play.bind(this.player)
|
||||||
this.player.play = () => {
|
this.player.play = () => {
|
||||||
|
@ -439,7 +447,7 @@ class PeerTubePlugin extends Plugin {
|
||||||
return fetch(this.videoViewUrl, { method: 'POST' })
|
return fetch(this.videoViewUrl, { method: 'POST' })
|
||||||
}
|
}
|
||||||
|
|
||||||
private fallbackToHttp (done: Function) {
|
private fallbackToHttp (done?: Function, play = true) {
|
||||||
this.flushVideoFile(this.currentVideoFile, true)
|
this.flushVideoFile(this.currentVideoFile, true)
|
||||||
this.torrent = null
|
this.torrent = null
|
||||||
|
|
||||||
|
@ -449,9 +457,9 @@ class PeerTubePlugin extends Plugin {
|
||||||
const httpUrl = this.currentVideoFile.fileUrl
|
const httpUrl = this.currentVideoFile.fileUrl
|
||||||
this.player.src = this.savePlayerSrcFunction
|
this.player.src = this.savePlayerSrcFunction
|
||||||
this.player.src(httpUrl)
|
this.player.src(httpUrl)
|
||||||
this.player.play()
|
if (play) this.tryToPlay()
|
||||||
|
|
||||||
return done()
|
if (done) return done()
|
||||||
}
|
}
|
||||||
|
|
||||||
private handleError (err: Error | string) {
|
private handleError (err: Error | string) {
|
||||||
|
@ -466,6 +474,10 @@ class PeerTubePlugin extends Plugin {
|
||||||
this.player.removeClass('vjs-error-display-enabled')
|
this.player.removeClass('vjs-error-display-enabled')
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private isIOS () {
|
||||||
|
return !!navigator.platform && /iPad|iPhone|iPod/.test(navigator.platform)
|
||||||
|
}
|
||||||
|
|
||||||
private alterInactivity () {
|
private alterInactivity () {
|
||||||
let saveInactivityTimeout: number
|
let saveInactivityTimeout: number
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
export const environment = {
|
export const environment = {
|
||||||
production: false,
|
production: false,
|
||||||
hmr: true,
|
hmr: true,
|
||||||
apiUrl: 'http://localhost:9000'
|
apiUrl: 'http://192.168.1.42:9000'
|
||||||
}
|
}
|
||||||
|
|
|
@ -17,7 +17,7 @@
|
||||||
<div id="error-content"></div>
|
<div id="error-content"></div>
|
||||||
</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>
|
</video>
|
||||||
|
|
||||||
</body>
|
</body>
|
||||||
|
|
Loading…
Reference in a new issue