]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/assets/player/types/peertube-videojs-typings.ts
Merge branch 'feature/improve-live' 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: videojs.Autoplay
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: videojs.Autoplay
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 videoFileToken: () => string
172 }
173
174 export type P2PMediaLoader = {
175 getEngine(): Engine
176 }
177
178 type VideoJSPluginOptions = {
179 playlist?: PlaylistPluginOptions
180
181 peertube: PeerTubePluginOptions
182 metrics: MetricsPluginOptions
183
184 webtorrent?: WebtorrentPluginOptions
185
186 p2pMediaLoader?: P2PMediaLoaderPluginOptions
187 }
188
189 type LoadedQualityData = {
190 qualitySwitchCallback: (resolutionId: number, type: 'video') => void
191 qualityData: {
192 video: {
193 id: number
194 label: string
195 selected: boolean
196 }[]
197 }
198 }
199
200 type ResolutionUpdateData = {
201 auto: boolean
202 resolutionId: number
203 id?: number
204 }
205
206 type AutoResolutionUpdateData = {
207 possible: boolean
208 }
209
210 type PlayerNetworkInfo = {
211 source: 'webtorrent' | 'p2p-media-loader'
212
213 http: {
214 downloadSpeed: number
215 downloaded: number
216 }
217
218 p2p: {
219 downloadSpeed: number
220 uploadSpeed: number
221 downloaded: number
222 uploaded: number
223 numPeers: number
224 }
225
226 // In bytes
227 bandwidthEstimate: number
228 }
229
230 type PlaylistItemOptions = {
231 element: VideoPlaylistElement
232
233 onClicked: () => void
234 }
235
236 export {
237 PlayerNetworkInfo,
238 PlaylistItemOptions,
239 NextPreviousVideoButtonOptions,
240 ResolutionUpdateData,
241 AutoResolutionUpdateData,
242 PlaylistPluginOptions,
243 MetricsPluginOptions,
244 VideoJSCaption,
245 PeerTubePluginOptions,
246 WebtorrentPluginOptions,
247 P2PMediaLoaderPluginOptions,
248 PeerTubeResolution,
249 VideoJSPluginOptions,
250 LoadedQualityData,
251 PeerTubeLinkButtonOptions,
252 PeerTubeP2PInfoButtonOptions
253 }