1 import { HlsConfig, Level } from 'hls.js'
2 import videojs from 'video.js'
3 import { VideoFile, VideoPlaylist, VideoPlaylistElement } from '@shared/models'
4 import { PeerTubeDockPluginOptions } from './dock/peertube-dock-plugin'
5 import { Html5Hlsjs } from './p2p-media-loader/hls-plugin'
6 import { P2pMediaLoaderPlugin } from './p2p-media-loader/p2p-media-loader-plugin'
7 import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager'
8 import { PlayerMode } from './peertube-player-options-builder'
9 import { PeerTubePlugin } from './peertube-plugin'
10 import { PeerTubeResolutionsPlugin } from './peertube-resolutions-plugin'
11 import { PlaylistPlugin } from './playlist/playlist-plugin'
12 import { StatsCardOptions } from './stats/stats-card'
13 import { StatsForNerdsPlugin } from './stats/stats-plugin'
14 import { EndCardOptions } from './upnext/end-card'
15 import { WebTorrentPlugin } from './webtorrent/webtorrent-plugin'
17 declare module 'video.js' {
19 export interface VideoJsPlayer {
20 srOptions_: HlsjsConfigHandlerOptions
22 theaterEnabled: boolean
24 // FIXME: add it to upstream typings
30 handleTechSeeked_ (): void
34 peertube (): PeerTubePlugin
36 webtorrent (): WebTorrentPlugin
38 p2pMediaLoader (): P2pMediaLoaderPlugin
40 peertubeResolutions (): PeerTubeResolutionsPlugin
42 contextmenuUI (options: any): any
45 peertubeMobile (): void
46 peerTubeHotkeysPlugin (): void
48 stats (options?: StatsCardOptions): StatsForNerdsPlugin
50 textTracks (): TextTrackList & {
51 tracks_: (TextTrack & { id: string, label: string, src: string })[]
54 peertubeDock (options: PeerTubeDockPluginOptions): void
56 upnext (options: Partial<EndCardOptions>): void
58 playlist (): PlaylistPlugin
62 export interface VideoJSTechHLS extends videojs.Tech {
63 hlsProvider: Html5Hlsjs
66 export interface HlsjsConfigHandlerOptions {
67 hlsjsConfig?: HlsConfig
69 levelLabelHandler?: (level: Level) => string
72 type PeerTubeResolution = {
81 selectCallback: () => void
84 type VideoJSCaption = {
92 authorizationHeader: string
95 type PeerTubePluginOptions = {
100 videoDuration: number
102 userWatching?: UserWatching
105 videoCaptions: VideoJSCaption[]
107 stopTime: number | string
114 type PlaylistPluginOptions = {
115 elements: VideoPlaylistElement[]
117 playlist: VideoPlaylist
119 getCurrentPosition: () => number
121 onItemClicked: (element: VideoPlaylistElement) => void
124 type NextPreviousVideoButtonOptions = {
125 type: 'next' | 'previous'
127 isDisabled: () => boolean
130 type PeerTubeLinkButtonOptions = {
134 type PeerTubeP2PInfoButtonOptions = {
138 type WebtorrentPluginOptions = {
139 playerElement: HTMLVideoElement
142 videoDuration: number
144 videoFiles: VideoFile[]
146 startTime: number | string
148 playerRefusedP2P: boolean
151 type P2PMediaLoaderPluginOptions = {
152 redundancyUrlManager: RedundancyUrlManager
156 startTime: number | string
159 type VideoJSPluginOptions = {
160 playlist?: PlaylistPluginOptions
162 peertube: PeerTubePluginOptions
164 webtorrent?: WebtorrentPluginOptions
166 p2pMediaLoader?: P2PMediaLoaderPluginOptions
169 type LoadedQualityData = {
170 qualitySwitchCallback: (resolutionId: number, type: 'video') => void
180 type ResolutionUpdateData = {
186 type AutoResolutionUpdateData = {
190 type PlayerNetworkInfo = {
191 source: 'webtorrent' | 'p2p-media-loader'
194 downloadSpeed: number
201 downloadSpeed: number
209 bandwidthEstimate: number
212 type PlaylistItemOptions = {
213 element: VideoPlaylistElement
215 onClicked: () => void
221 NextPreviousVideoButtonOptions,
222 ResolutionUpdateData,
223 AutoResolutionUpdateData,
224 PlaylistPluginOptions,
227 PeerTubePluginOptions,
228 WebtorrentPluginOptions,
229 P2PMediaLoaderPluginOptions,
231 VideoJSPluginOptions,
233 PeerTubeLinkButtonOptions,
234 PeerTubeP2PInfoButtonOptions