1 // FIXME: something weird with our path definition in tsconfig and typings
3 import * as videojs from 'video.js'
5 import { PeerTubePlugin } from './peertube-plugin'
6 import { WebTorrentPlugin } from './webtorrent/webtorrent-plugin'
7 import { P2pMediaLoaderPlugin } from './p2p-media-loader/p2p-media-loader-plugin'
8 import { PlayerMode } from './peertube-player-manager'
9 import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager'
10 import { VideoFile } from '@shared/models'
12 declare namespace videojs {
14 peertube (): PeerTubePlugin
15 webtorrent (): WebTorrentPlugin
16 p2pMediaLoader (): P2pMediaLoaderPlugin
20 interface VideoJSComponentInterface {
21 _player: videojs.Player
23 new (player: videojs.Player, options?: any): any
25 registerComponent (name: string, obj: any): any
28 type VideoJSCaption = {
36 authorizationHeader: string
39 type PeerTubePluginOptions = {
46 userWatching?: UserWatching
49 videoCaptions: VideoJSCaption[]
51 stopTime: number | string
54 type WebtorrentPluginOptions = {
55 playerElement: HTMLVideoElement
60 videoFiles: VideoFile[]
62 startTime: number | string
65 type P2PMediaLoaderPluginOptions = {
66 redundancyUrlManager: RedundancyUrlManager
70 startTime: number | string
73 type VideoJSPluginOptions = {
74 peertube: PeerTubePluginOptions
76 webtorrent?: WebtorrentPluginOptions
78 p2pMediaLoader?: P2PMediaLoaderPluginOptions
81 // videojs typings don't have some method we need
82 const videojsUntyped = videojs as any
84 type LoadedQualityData = {
85 qualitySwitchCallback: Function,
95 type ResolutionUpdateData = {
101 type AutoResolutionUpdateData = {
105 type PlayerNetworkInfo = {
107 downloadSpeed: number
114 downloadSpeed: number
124 ResolutionUpdateData,
125 AutoResolutionUpdateData,
126 VideoJSComponentInterface,
130 PeerTubePluginOptions,
131 WebtorrentPluginOptions,
132 P2PMediaLoaderPluginOptions,
133 VideoJSPluginOptions,