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