]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/assets/player/peertube-videojs-typings.ts
Fix viewers for lives
[github/Chocobozzz/PeerTube.git] / client / src / assets / player / peertube-videojs-typings.ts
1 import { Config, Level } from 'hls.js'
2 import videojs from 'video.js'
3 import { VideoFile, VideoPlaylist, VideoPlaylistElement } from '@shared/models'
4 import { P2pMediaLoaderPlugin } from './p2p-media-loader/p2p-media-loader-plugin'
5 import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager'
6 import { PlayerMode } from './peertube-player-manager'
7 import { PeerTubePlugin } from './peertube-plugin'
8 import { PlaylistPlugin } from './playlist/playlist-plugin'
9 import { EndCardOptions } from './upnext/end-card'
10 import { WebTorrentPlugin } from './webtorrent/webtorrent-plugin'
11
12 declare module 'video.js' {
13
14 export interface VideoJsPlayer {
15 srOptions_: HlsjsConfigHandlerOptions
16
17 theaterEnabled: boolean
18
19 // FIXME: add it to upstream typings
20 posterImage: {
21 show (): void
22 hide (): void
23 }
24
25 handleTechSeeked_ (): void
26
27 // Plugins
28
29 peertube (): PeerTubePlugin
30
31 webtorrent (): WebTorrentPlugin
32
33 p2pMediaLoader (): P2pMediaLoaderPlugin
34
35 contextmenuUI (options: any): any
36
37 bezels (): void
38
39 qualityLevels (): QualityLevels
40
41 textTracks (): TextTrackList & {
42 on: Function
43 tracks_: (TextTrack & { id: string, label: string, src: string })[]
44 }
45
46 dock (options: { title: string, description: string }): void
47
48 upnext (options: Partial<EndCardOptions>): void
49
50 playlist (): PlaylistPlugin
51 }
52 }
53
54 export interface VideoJSTechHLS extends videojs.Tech {
55 hlsProvider: any // FIXME: typings
56 }
57
58 export interface HlsjsConfigHandlerOptions {
59 hlsjsConfig?: Config & { cueHandler: any }// FIXME: typings
60 captionConfig?: any // FIXME: typings
61
62 levelLabelHandler?: (level: Level) => string
63 }
64
65 type QualityLevelRepresentation = {
66 id: number
67 height: number
68
69 label?: string
70 width?: number
71 bandwidth?: number
72 bitrate?: number
73
74 enabled?: Function
75 _enabled: boolean
76 }
77
78 type QualityLevels = QualityLevelRepresentation[] & {
79 selectedIndex: number
80 selectedIndex_: number
81
82 addQualityLevel (representation: QualityLevelRepresentation): 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
113 type PlaylistPluginOptions = {
114 elements: VideoPlaylistElement[]
115
116 playlist: VideoPlaylist
117
118 getCurrentPosition: () => number
119
120 onItemClicked: (element: VideoPlaylistElement) => void
121 }
122
123 type NextPreviousVideoButtonOptions = {
124 type: 'next' | 'previous'
125 handler: Function
126 isDisabled: () => boolean
127 }
128
129 type WebtorrentPluginOptions = {
130 playerElement: HTMLVideoElement
131
132 autoplay: boolean
133 videoDuration: number
134
135 videoFiles: VideoFile[]
136
137 startTime: number | string
138 }
139
140 type P2PMediaLoaderPluginOptions = {
141 redundancyUrlManager: RedundancyUrlManager
142 type: string
143 src: string
144
145 startTime: number | string
146 }
147
148 type VideoJSPluginOptions = {
149 playlist?: PlaylistPluginOptions
150
151 peertube: PeerTubePluginOptions
152
153 webtorrent?: WebtorrentPluginOptions
154
155 p2pMediaLoader?: P2PMediaLoaderPluginOptions
156 }
157
158 type LoadedQualityData = {
159 qualitySwitchCallback: Function,
160 qualityData: {
161 video: {
162 id: number
163 label: string
164 selected: boolean
165 }[]
166 }
167 }
168
169 type ResolutionUpdateData = {
170 auto: boolean,
171 resolutionId: number
172 id?: number
173 }
174
175 type AutoResolutionUpdateData = {
176 possible: boolean
177 }
178
179 type PlayerNetworkInfo = {
180 source: 'webtorrent' | 'p2p-media-loader'
181
182 http: {
183 downloadSpeed: number
184 uploadSpeed: number
185 downloaded: number
186 uploaded: number
187 }
188
189 p2p: {
190 downloadSpeed: number
191 uploadSpeed: number
192 downloaded: number
193 uploaded: number
194 numPeers: number
195 }
196 }
197
198 type PlaylistItemOptions = {
199 element: VideoPlaylistElement
200
201 onClicked: Function
202 }
203
204 export {
205 PlayerNetworkInfo,
206 PlaylistItemOptions,
207 NextPreviousVideoButtonOptions,
208 ResolutionUpdateData,
209 AutoResolutionUpdateData,
210 PlaylistPluginOptions,
211 VideoJSCaption,
212 UserWatching,
213 PeerTubePluginOptions,
214 WebtorrentPluginOptions,
215 P2PMediaLoaderPluginOptions,
216 VideoJSPluginOptions,
217 LoadedQualityData,
218 QualityLevelRepresentation,
219 QualityLevels
220 }