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