]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/assets/player/types/peertube-videojs-typings.ts
Reorganize player manager options builder
[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 UserWatching = {
92 url: string
93 authorizationHeader: string
94 }
95
96 type PeerTubePluginOptions = {
97 mode: PlayerMode
98
99 autoplay: boolean
100 videoViewUrl: string
101 videoDuration: number
102
103 userWatching?: UserWatching
104 subtitle?: string
105
106 videoCaptions: VideoJSCaption[]
107
108 stopTime: number | string
109
110 isLive: boolean
111
112 videoUUID: string
113 }
114
115 type PlaylistPluginOptions = {
116 elements: VideoPlaylistElement[]
117
118 playlist: VideoPlaylist
119
120 getCurrentPosition: () => number
121
122 onItemClicked: (element: VideoPlaylistElement) => void
123 }
124
125 type NextPreviousVideoButtonOptions = {
126 type: 'next' | 'previous'
127 handler: () => void
128 isDisabled: () => boolean
129 }
130
131 type PeerTubeLinkButtonOptions = {
132 shortUUID: string
133 }
134
135 type PeerTubeP2PInfoButtonOptions = {
136 p2pEnabled: boolean
137 }
138
139 type WebtorrentPluginOptions = {
140 playerElement: HTMLVideoElement
141
142 autoplay: boolean
143 videoDuration: number
144
145 videoFiles: VideoFile[]
146
147 startTime: number | string
148
149 playerRefusedP2P: boolean
150 }
151
152 type P2PMediaLoaderPluginOptions = {
153 redundancyUrlManager: RedundancyUrlManager
154 type: string
155 src: string
156
157 startTime: number | string
158
159 loader: P2PMediaLoader
160 }
161
162 export type P2PMediaLoader = {
163 getEngine(): Engine
164 }
165
166 type VideoJSPluginOptions = {
167 playlist?: PlaylistPluginOptions
168
169 peertube: PeerTubePluginOptions
170
171 webtorrent?: WebtorrentPluginOptions
172
173 p2pMediaLoader?: P2PMediaLoaderPluginOptions
174 }
175
176 type LoadedQualityData = {
177 qualitySwitchCallback: (resolutionId: number, type: 'video') => void
178 qualityData: {
179 video: {
180 id: number
181 label: string
182 selected: boolean
183 }[]
184 }
185 }
186
187 type ResolutionUpdateData = {
188 auto: boolean
189 resolutionId: number
190 id?: number
191 }
192
193 type AutoResolutionUpdateData = {
194 possible: boolean
195 }
196
197 type PlayerNetworkInfo = {
198 source: 'webtorrent' | 'p2p-media-loader'
199
200 http: {
201 downloadSpeed: number
202 uploadSpeed: number
203 downloaded: number
204 uploaded: number
205 }
206
207 p2p: {
208 downloadSpeed: number
209 uploadSpeed: number
210 downloaded: number
211 uploaded: number
212 numPeers: number
213 }
214
215 // In bytes
216 bandwidthEstimate: number
217 }
218
219 type PlaylistItemOptions = {
220 element: VideoPlaylistElement
221
222 onClicked: () => void
223 }
224
225 export {
226 PlayerNetworkInfo,
227 PlaylistItemOptions,
228 NextPreviousVideoButtonOptions,
229 ResolutionUpdateData,
230 AutoResolutionUpdateData,
231 PlaylistPluginOptions,
232 VideoJSCaption,
233 UserWatching,
234 PeerTubePluginOptions,
235 WebtorrentPluginOptions,
236 P2PMediaLoaderPluginOptions,
237 PeerTubeResolution,
238 VideoJSPluginOptions,
239 LoadedQualityData,
240 PeerTubeLinkButtonOptions,
241 PeerTubeP2PInfoButtonOptions
242 }