// Thanks https://github.com/streamroot/videojs-hlsjs-plugin
// We duplicated this plugin to choose the hls.js version we want, because streamroot only provide a bundled file
-import * as Hlsjs from 'hls.js'
-import videojs, { VideoJsPlayer } from 'video.js'
+import * as Hlsjs from 'hls.js/dist/hls.light.js'
+import videojs from 'video.js'
import { HlsjsConfigHandlerOptions, QualityLevelRepresentation, QualityLevels, VideoJSTechHLS } from '../peertube-videojs-typings'
type ErrorCounts = {
levels: Hlsjs.Level[]
}
+type CustomAudioTrack = Hlsjs.HlsAudioTrack & { name?: string, lang?: string }
+
const registerSourceHandler = function (vjs: typeof videojs) {
if (!Hlsjs.isSupported()) {
console.warn('Hls.js is not supported in this browser!')
(vjs as any).Html5Hlsjs = Html5Hlsjs
}
-function hlsjsConfigHandler (this: VideoJsPlayer, options: HlsjsConfigHandlerOptions) {
+function hlsjsConfigHandler (this: videojs.Player, options: HlsjsConfigHandlerOptions) {
const player = this
if (!options) return
private readonly videoElement: HTMLVideoElement
private readonly errorCounts: ErrorCounts = {}
- private readonly player: VideoJsPlayer
+ private readonly player: videojs.Player
private readonly tech: videojs.Tech
private readonly source: videojs.Tech.SourceObject
private readonly vjs: typeof videojs
- private hls: Hlsjs & { manualLevel?: number } // FIXME: typings
+ private hls: Hlsjs & { manualLevel?: number, audioTrack?: any, audioTracks?: CustomAudioTrack[] } // FIXME: typings
private hlsjsConfig: Partial<Hlsjs.Config & { cueHandler: any }> = null
private _duration: number = null
this.player.textTracks().removeEventListener('change', this.handlers.textTracksChange)
this.uiTextTrackHandled = false
- this.player.audioTracks().removeEventListener('change', this.handlers.audioTracksChange)
-
this.hls.destroy()
}
if (this.errorCounts[ Hlsjs.ErrorTypes.MEDIA_ERROR ] > 2) {
console.info('bubbling media error up to VIDEOJS')
+ this.hls.destroy()
this.tech.error = () => error
this.tech.trigger('error')
return
}
private _onAudioTracks () {
- const hlsAudioTracks = this.hls.audioTracks as (AudioTrack & { name?: string, lang?: string })[] // FIXME typings
+ const hlsAudioTracks = this.hls.audioTracks
const playerAudioTracks = this.tech.audioTracks()
if (hlsAudioTracks.length > 1 && playerAudioTracks.length === 0) {