aboutsummaryrefslogblamecommitdiffhomepage
path: root/client/src/assets/player/peertube-videojs-typings.ts
blob: a4e4c580c12c4eb5e7153b0846886ceefc3eb985 (plain) (tree)
1
2
3
4
5
6
7
8
9
                                                  


                                                                                 
                                                                                
                                          

                                      
 
                           
 
                                  

                                         











                                        
                               
 
                                   
 
                                           
 



                                     
                                   
 



                                                                 

                                  

                                                                
   

 






























                                                                    





                       




                             
                              

                  
                   

                       

                             


                                 

                           








                                 

                            


                                    
                                            

              

                            







                                              

 













                                  
             





                                 
                          






                         








                         
        
                    

                           
                 




                              


                             
 
import { PeerTubePlugin } from './peertube-plugin'
import { WebTorrentPlugin } from './webtorrent/webtorrent-plugin'
import { P2pMediaLoaderPlugin } from './p2p-media-loader/p2p-media-loader-plugin'
import { PlayerMode } from './peertube-player-manager'
import { RedundancyUrlManager } from './p2p-media-loader/redundancy-url-manager'
import { VideoFile } from '@shared/models'
import videojs from 'video.js'
import { Config, Level } from 'hls.js'

declare module 'video.js' {

  export interface VideoJsPlayer {
    srOptions_: HlsjsConfigHandlerOptions

    theaterEnabled: boolean

    // FIXME: add it to upstream typings
    posterImage: {
      show (): void
      hide (): void
    }

    handleTechSeeked_ (): void

    // Plugins

    peertube (): PeerTubePlugin

    webtorrent (): WebTorrentPlugin

    p2pMediaLoader (): P2pMediaLoaderPlugin

    contextmenuUI (options: any): any

    bezels (): void

    qualityLevels (): QualityLevels

    textTracks (): TextTrackList & {
      on: Function
      tracks_: { kind: string, mode: string, language: string }[]
    }

    audioTracks (): AudioTrackList

    dock (options: { title: string, description: string }): void
  }
}

export interface VideoJSTechHLS extends videojs.Tech {
  hlsProvider: any // FIXME: typings
}

export interface HlsjsConfigHandlerOptions {
  hlsjsConfig?: Config & { cueHandler: any }// FIXME: typings
  captionConfig?: any // FIXME: typings

  levelLabelHandler?: (level: Level) => string
}

type QualityLevelRepresentation = {
  id: number
  height: number

  label?: string
  width?: number
  bandwidth?: number
  bitrate?: number

  enabled?: Function
  _enabled: boolean
}

type QualityLevels = QualityLevelRepresentation[] & {
  selectedIndex: number
  selectedIndex_: number

  addQualityLevel (representation: QualityLevelRepresentation): void
}

type VideoJSCaption = {
  label: string
  language: string
  src: string
}

type UserWatching = {
  url: string,
  authorizationHeader: string
}

type PeerTubePluginOptions = {
  mode: PlayerMode

  autoplay: boolean
  videoViewUrl: string
  videoDuration: number

  userWatching?: UserWatching
  subtitle?: string

  videoCaptions: VideoJSCaption[]

  stopTime: number | string
}

type WebtorrentPluginOptions = {
  playerElement: HTMLVideoElement

  autoplay: boolean
  videoDuration: number

  videoFiles: VideoFile[]

  startTime: number | string
}

type P2PMediaLoaderPluginOptions = {
  redundancyUrlManager: RedundancyUrlManager
  type: string
  src: string

  startTime: number | string
}

type VideoJSPluginOptions = {
  peertube: PeerTubePluginOptions

  webtorrent?: WebtorrentPluginOptions

  p2pMediaLoader?: P2PMediaLoaderPluginOptions
}

type LoadedQualityData = {
  qualitySwitchCallback: Function,
  qualityData: {
    video: {
      id: number
      label: string
      selected: boolean
    }[]
  }
}

type ResolutionUpdateData = {
  auto: boolean,
  resolutionId: number
  id?: number
}

type AutoResolutionUpdateData = {
  possible: boolean
}

type PlayerNetworkInfo = {
  http: {
    downloadSpeed: number
    uploadSpeed: number
    downloaded: number
    uploaded: number
  }

  p2p: {
    downloadSpeed: number
    uploadSpeed: number
    downloaded: number
    uploaded: number
    numPeers: number
  }
}

export {
  PlayerNetworkInfo,
  ResolutionUpdateData,
  AutoResolutionUpdateData,
  VideoJSCaption,
  UserWatching,
  PeerTubePluginOptions,
  WebtorrentPluginOptions,
  P2PMediaLoaderPluginOptions,
  VideoJSPluginOptions,
  LoadedQualityData,
  QualityLevelRepresentation,
  QualityLevels
}