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