]> git.immae.eu Git - github/Chocobozzz/PeerTube.git/blob - client/src/assets/player/peertube-videojs-typings.ts
Handle basic playlist in embed
[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
111 type PlaylistPluginOptions = {
112 elements: VideoPlaylistElement[]
113
114 playlist: VideoPlaylist
115
116 getCurrentPosition: () => number
117
118 onItemClicked: (element: VideoPlaylistElement) => void
119 }
120
121 type WebtorrentPluginOptions = {
122 playerElement: HTMLVideoElement
123
124 autoplay: boolean
125 videoDuration: number
126
127 videoFiles: VideoFile[]
128
129 startTime: number | string
130 }
131
132 type P2PMediaLoaderPluginOptions = {
133 redundancyUrlManager: RedundancyUrlManager
134 type: string
135 src: string
136
137 startTime: number | string
138 }
139
140 type VideoJSPluginOptions = {
141 playlist?: PlaylistPluginOptions
142
143 peertube: PeerTubePluginOptions
144
145 webtorrent?: WebtorrentPluginOptions
146
147 p2pMediaLoader?: P2PMediaLoaderPluginOptions
148 }
149
150 type LoadedQualityData = {
151 qualitySwitchCallback: Function,
152 qualityData: {
153 video: {
154 id: number
155 label: string
156 selected: boolean
157 }[]
158 }
159 }
160
161 type ResolutionUpdateData = {
162 auto: boolean,
163 resolutionId: number
164 id?: number
165 }
166
167 type AutoResolutionUpdateData = {
168 possible: boolean
169 }
170
171 type PlayerNetworkInfo = {
172 http: {
173 downloadSpeed: number
174 uploadSpeed: number
175 downloaded: number
176 uploaded: number
177 }
178
179 p2p: {
180 downloadSpeed: number
181 uploadSpeed: number
182 downloaded: number
183 uploaded: number
184 numPeers: number
185 }
186 }
187
188 type PlaylistItemOptions = {
189 element: VideoPlaylistElement
190
191 onClicked: Function
192 }
193
194 export {
195 PlayerNetworkInfo,
196 PlaylistItemOptions,
197 ResolutionUpdateData,
198 AutoResolutionUpdateData,
199 PlaylistPluginOptions,
200 VideoJSCaption,
201 UserWatching,
202 PeerTubePluginOptions,
203 WebtorrentPluginOptions,
204 P2PMediaLoaderPluginOptions,
205 VideoJSPluginOptions,
206 LoadedQualityData,
207 QualityLevelRepresentation,
208 QualityLevels
209 }