]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/assets/player/types/peertube-videojs-typings.ts
Merge branch 'release/4.3.0' into develop
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / types / peertube-videojs-typings.ts
1 import { HlsConfig, Level } from 'hls.js'
2 import videojs from 'video.js'
3 import { Engine } from '@peertube/p2p-media-loader-hlsjs'
4 import { VideoFile, VideoPlaylist, VideoPlaylistElement } from '@shared/models'
5 import { PeerTubeDockPluginOptions } from '../shared/dock/peertube-dock-plugin'
6 import { Html5Hlsjs } from '../shared/p2p-media-loader/hls-plugin'
7 import { P2pMediaLoaderPlugin } from '../shared/p2p-media-loader/p2p-media-loader-plugin'
8 import { RedundancyUrlManager } from '../shared/p2p-media-loader/redundancy-url-manager'
9 import { PeerTubePlugin } from '../shared/peertube/peertube-plugin'
10 import { PlaylistPlugin } from '../shared/playlist/playlist-plugin'
11 import { PeerTubeResolutionsPlugin } from '../shared/resolutions/peertube-resolutions-plugin'
12 import { StatsCardOptions } from '../shared/stats/stats-card'
13 import { StatsForNerdsPlugin } from '../shared/stats/stats-plugin'
14 import { EndCardOptions } from '../shared/upnext/end-card'
15 import { WebTorrentPlugin } from '../shared/webtorrent/webtorrent-plugin'
16 import { PlayerMode } from './manager-options'
17
18 declare module 'video.js' {
19
20 export interface VideoJsPlayer {
21 srOptions_: HlsjsConfigHandlerOptions
22
23 theaterEnabled: boolean
24
25 // FIXME: add it to upstream typings
26 posterImage: {
27 show (): void
28 hide (): void
29 }
30
31 handleTechSeeked_ (): void
32
33 // Plugins
34
35 peertube (): PeerTubePlugin
36
37 webtorrent (): WebTorrentPlugin
38
39 p2pMediaLoader (): P2pMediaLoaderPlugin
40
41 peertubeResolutions (): PeerTubeResolutionsPlugin
42
43 contextmenuUI (options: any): any
44
45 bezels (): void
46 peertubeMobile (): void
47 peerTubeHotkeysPlugin (): void
48
49 stats (options?: StatsCardOptions): StatsForNerdsPlugin
50
51 textTracks (): TextTrackList & {
52 tracks_: (TextTrack & { id: string, label: string, src: string })[]
53 }
54
55 peertubeDock (options: PeerTubeDockPluginOptions): void
56
57 upnext (options: Partial<EndCardOptions>): void
58
59 playlist (): PlaylistPlugin
60 }
61 }
62
63 export interface VideoJSTechHLS extends videojs.Tech {
64 hlsProvider: Html5Hlsjs
65 }
66
67 export interface HlsjsConfigHandlerOptions {
68 hlsjsConfig?: HlsConfig
69
70 levelLabelHandler?: (level: Level) => string
71 }
72
73 type PeerTubeResolution = {
74 id: number
75
76 height?: number
77 label?: string
78 width?: number
79 bitrate?: number
80
81 selected: boolean
82 selectCallback: () => void
83 }
84
85 type VideoJSCaption = {
86 label: string
87 language: string
88 src: string
89 }
90
91 type PeerTubePluginOptions = {
92 mode: PlayerMode
93
94 autoplay: boolean
95 videoDuration: number
96
97 videoViewUrl: string
98 authorizationHeader?: () => string
99
100 subtitle?: string
101
102 videoCaptions: VideoJSCaption[]
103
104 startTime: number | string
105 stopTime: number | string
106
107 isLive: boolean
108
109 videoUUID: string
110 }
111
112 type MetricsPluginOptions = {
113 mode: PlayerMode
114 metricsUrl: string
115 videoUUID: string
116 }
117
118 type PlaylistPluginOptions = {
119 elements: VideoPlaylistElement[]
120
121 playlist: VideoPlaylist
122
123 getCurrentPosition: () => number
124
125 onItemClicked: (element: VideoPlaylistElement) => void
126 }
127
128 type NextPreviousVideoButtonOptions = {
129 type: 'next' | 'previous'
130 handler: () => void
131 isDisabled: () => boolean
132 }
133
134 type PeerTubeLinkButtonOptions = {
135 shortUUID: string
136 instanceName: string
137 }
138
139 type PeerTubeP2PInfoButtonOptions = {
140 p2pEnabled: boolean
141 }
142
143 type WebtorrentPluginOptions = {
144 playerElement: HTMLVideoElement
145
146 autoplay: boolean
147 videoDuration: number
148
149 videoFiles: VideoFile[]
150
151 startTime: number | string
152
153 playerRefusedP2P: boolean
154
155 requiresAuth: boolean
156 videoFileToken: () => string
157
158 buildWebSeedUrls: (file: VideoFile) => string[]
159 }
160
161 type P2PMediaLoaderPluginOptions = {
162 redundancyUrlManager: RedundancyUrlManager
163 type: string
164 src: string
165
166 startTime: number | string
167
168 loader: P2PMediaLoader
169
170 requiresAuth: boolean
171 }
172
173 export type P2PMediaLoader = {
174 getEngine(): Engine
175 }
176
177 type VideoJSPluginOptions = {
178 playlist?: PlaylistPluginOptions
179
180 peertube: PeerTubePluginOptions
181 metrics: MetricsPluginOptions
182
183 webtorrent?: WebtorrentPluginOptions
184
185 p2pMediaLoader?: P2PMediaLoaderPluginOptions
186 }
187
188 type LoadedQualityData = {
189 qualitySwitchCallback: (resolutionId: number, type: 'video') => void
190 qualityData: {
191 video: {
192 id: number
193 label: string
194 selected: boolean
195 }[]
196 }
197 }
198
199 type ResolutionUpdateData = {
200 auto: boolean
201 resolutionId: number
202 id?: number
203 }
204
205 type AutoResolutionUpdateData = {
206 possible: boolean
207 }
208
209 type PlayerNetworkInfo = {
210 source: 'webtorrent' | 'p2p-media-loader'
211
212 http: {
213 downloadSpeed: number
214 downloaded: number
215 }
216
217 p2p: {
218 downloadSpeed: number
219 uploadSpeed: number
220 downloaded: number
221 uploaded: number
222 numPeers: number
223 }
224
225 // In bytes
226 bandwidthEstimate: number
227 }
228
229 type PlaylistItemOptions = {
230 element: VideoPlaylistElement
231
232 onClicked: () => void
233 }
234
235 export {
236 PlayerNetworkInfo,
237 PlaylistItemOptions,
238 NextPreviousVideoButtonOptions,
239 ResolutionUpdateData,
240 AutoResolutionUpdateData,
241 PlaylistPluginOptions,
242 MetricsPluginOptions,
243 VideoJSCaption,
244 PeerTubePluginOptions,
245 WebtorrentPluginOptions,
246 P2PMediaLoaderPluginOptions,
247 PeerTubeResolution,
248 VideoJSPluginOptions,
249 LoadedQualityData,
250 PeerTubeLinkButtonOptions,
251 PeerTubeP2PInfoButtonOptions
252 }