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