X-Git-Url: https://git.immae.eu/?a=blobdiff_plain;ds=inline;f=client%2Fsrc%2Fassets%2Fplayer%2Fwebtorrent%2Fwebtorrent-plugin.ts;h=bf6b0a718dcbe024777916bf1ccf46ec091a27ea;hb=abb3097e814af0f22477aea68310e85671230942;hp=5101b516251fdd4c9a9fd51d5499623d33e5d8c2;hpb=43c66a91dfe5b8e101047b815ab2da8512a00904;p=github%2FChocobozzz%2FPeerTube.git diff --git a/client/src/assets/player/webtorrent/webtorrent-plugin.ts b/client/src/assets/player/webtorrent/webtorrent-plugin.ts index 5101b5162..bf6b0a718 100644 --- a/client/src/assets/player/webtorrent/webtorrent-plugin.ts +++ b/client/src/assets/player/webtorrent/webtorrent-plugin.ts @@ -1,17 +1,15 @@ -// FIXME: something weird with our path definition in tsconfig and typings -// @ts-ignore -import * as videojs from 'video.js' +import videojs, { VideoJsPlayer } from 'video.js' import * as WebTorrent from 'webtorrent' import { renderVideo } from './video-renderer' -import { LoadedQualityData, PlayerNetworkInfo, VideoJSComponentInterface, WebtorrentPluginOptions } from '../peertube-videojs-typings' +import { LoadedQualityData, PlayerNetworkInfo, WebtorrentPluginOptions } from '../peertube-videojs-typings' import { getRtcConfig, timeToInt, videoFileMaxByResolution, videoFileMinByResolution } from '../utils' import { PeertubeChunkStore } from './peertube-chunk-store' import { getAverageBandwidthInStore, getStoredMute, - getStoredVolume, getStoredP2PEnabled, + getStoredVolume, saveAverageBandwidth } from '../peertube-player-local-storage' import { VideoFile } from '@shared/models' @@ -24,14 +22,16 @@ type PlayOptions = { delay?: number } -const Plugin: VideoJSComponentInterface = videojs.getPlugin('plugin') +const Plugin = videojs.getPlugin('plugin') + class WebTorrentPlugin extends Plugin { + readonly videoFiles: VideoFile[] + private readonly playerElement: HTMLVideoElement private readonly autoplay: boolean = false private readonly startTime: number = 0 - private readonly savePlayerSrcFunction: Function - private readonly videoFiles: VideoFile[] + private readonly savePlayerSrcFunction: VideoJsPlayer['src'] private readonly videoDuration: number private readonly CONSTANTS = { INFO_SCHEDULER: 1000, // Don't change this @@ -49,7 +49,6 @@ class WebTorrentPlugin extends Plugin { dht: false }) - private player: any private currentVideoFile: VideoFile private torrent: WebTorrent.Torrent @@ -70,8 +69,8 @@ class WebTorrentPlugin extends Plugin { private downloadSpeeds: number[] = [] - constructor (player: videojs.Player, options: WebtorrentPluginOptions) { - super(player, options) + constructor (player: VideoJsPlayer, options?: WebtorrentPluginOptions) { + super(player) this.startTime = timeToInt(options.startTime) @@ -147,12 +146,12 @@ class WebTorrentPlugin extends Plugin { } // Do not display error to user because we will have multiple fallback - this.disableErrorDisplay() + this.disableErrorDisplay(); // Hack to "simulate" src link in video.js >= 6 // Without this, we can't play the video after pausing it // https://github.com/videojs/video.js/blob/master/src/js/player.js#L1633 - this.player.src = () => true + (this.player as any).src = () => true const oldPlaybackRate = this.player.playbackRate() const previousVideoFile = this.currentVideoFile @@ -229,6 +228,10 @@ class WebTorrentPlugin extends Plugin { this.trigger('resolutionChange', { auto: this.autoResolution, resolutionId: this.getCurrentResolutionId() }) } + isAutoResolutionPossible () { + return this.autoResolutionPossible + } + getTorrent () { return this.torrent } @@ -329,7 +332,7 @@ class WebTorrentPlugin extends Plugin { const playPromise = this.player.play() if (playPromise !== undefined) { - return playPromise.then(done) + return playPromise.then(() => done()) .catch((err: Error) => { if (err.message.indexOf('The play() request was interrupted by a call to pause()') !== -1) { return @@ -422,8 +425,8 @@ class WebTorrentPlugin extends Plugin { } // Proxy first play - const oldPlay = this.player.play.bind(this.player) - this.player.play = () => { + const oldPlay = this.player.play.bind(this.player); + (this.player as any).play = () => { this.player.addClass('vjs-has-big-play-button-clicked') this.player.play = oldPlay @@ -615,7 +618,7 @@ class WebTorrentPlugin extends Plugin { video: qualityLevelsPayload } } - this.player.tech_.trigger('loadedqualitydata', payload) + this.player.tech(true).trigger('loadedqualitydata', payload) } private buildQualityLabel (file: VideoFile) { @@ -647,9 +650,9 @@ class WebTorrentPlugin extends Plugin { return } - for (let i = 0; i < qualityLevels; i++) { - const q = this.player.qualityLevels[i] - if (q.height === resolutionId) qualityLevels.selectedIndex = i + for (let i = 0; i < qualityLevels.length; i++) { + const q = qualityLevels[i] + if (q.height === resolutionId) qualityLevels.selectedIndex_ = i } } }