import { renderVideo } from './video-renderer'
import './settings-menu-button'
import { PeertubePluginOptions, VideoJSComponentInterface, videojsUntyped } from './peertube-videojs-typings'
-import { getAverageBandwidth, getStoredMute, getStoredVolume, saveAverageBandwidth, saveMuteInStore, saveVolumeInStore } from './utils'
+import {
+ getAverageBandwidth,
+ getStoredMute,
+ getStoredVolume,
+ isMobile,
+ saveAverageBandwidth,
+ saveMuteInStore,
+ saveVolumeInStore
+} from './utils'
import minBy from 'lodash-es/minBy'
import maxBy from 'lodash-es/maxBy'
import * as CacheChunkStore from 'cache-chunk-store'
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.trigger('autoResolutionUpdate')
}
+ getCurrentVideoFile () {
+ return this.currentVideoFile
+ }
+
+ getTorrent () {
+ return this.torrent
+ }
+
private tryToPlay (done?: Function) {
if (!done) done = function () { /* empty */ }
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