Home Reference Source

src/config.ts

  1. /**
  2. * HLS config
  3. */
  4.  
  5. import AbrController from './controller/abr-controller';
  6. import BufferController from './controller/buffer-controller';
  7. import CapLevelController from './controller/cap-level-controller';
  8. import FPSController from './controller/fps-controller';
  9. import XhrLoader from './utils/xhr-loader';
  10. // import FetchLoader from './utils/fetch-loader';
  11.  
  12. import AudioTrackController from './controller/audio-track-controller';
  13. import AudioStreamController from './controller/audio-stream-controller';
  14.  
  15. import * as Cues from './utils/cues';
  16. import TimelineController from './controller/timeline-controller';
  17. import SubtitleTrackController from './controller/subtitle-track-controller';
  18. import { SubtitleStreamController } from './controller/subtitle-stream-controller';
  19. import EMEController from './controller/eme-controller';
  20. import { requestMediaKeySystemAccess, MediaKeyFunc } from './utils/mediakeys-helper';
  21.  
  22. type ABRControllerConfig = {
  23. abrEwmaFastLive: number,
  24. abrEwmaSlowLive: number,
  25. abrEwmaFastVoD: number,
  26. abrEwmaSlowVoD: number,
  27. abrEwmaDefaultEstimate: number,
  28. abrBandWidthFactor: number,
  29. abrBandWidthUpFactor: number,
  30. abrMaxWithRealBitrate: boolean,
  31. maxStarvationDelay: number,
  32. maxLoadingDelay: number,
  33. };
  34.  
  35. export type BufferControllerConfig = {
  36. appendErrorMaxRetry: number,
  37. liveDurationInfinity: boolean,
  38. liveBackBufferLength: number,
  39. };
  40.  
  41. type CapLevelControllerConfig = {
  42. capLevelToPlayerSize: boolean
  43. };
  44.  
  45. export type EMEControllerConfig = {
  46. licenseXhrSetup?: (xhr: XMLHttpRequest, url: string) => void,
  47. emeEnabled: boolean,
  48. widevineLicenseUrl?: string,
  49. requestMediaKeySystemAccessFunc: MediaKeyFunc | null,
  50. };
  51.  
  52. type FragmentLoaderConfig = {
  53. fLoader: any, // TODO(typescript-loader): Once Loader is typed fill this in
  54.  
  55. fragLoadingTimeOut: number,
  56. fragLoadingMaxRetry: number,
  57. fragLoadingRetryDelay: number,
  58. fragLoadingMaxRetryTimeout: number,
  59. };
  60.  
  61. type FPSControllerConfig = {
  62. capLevelOnFPSDrop: boolean,
  63. fpsDroppedMonitoringPeriod: number,
  64. fpsDroppedMonitoringThreshold: number,
  65. };
  66.  
  67. type LevelControllerConfig = {
  68. startLevel?: number
  69. };
  70.  
  71. type MP4RemuxerConfig = {
  72. stretchShortVideoTrack: boolean,
  73. maxAudioFramesDrift: number,
  74. };
  75.  
  76. type PlaylistLoaderConfig = {
  77. pLoader: any, // TODO(typescript-loader): Once Loader is typed fill this in
  78.  
  79. manifestLoadingTimeOut: number,
  80. manifestLoadingMaxRetry: number,
  81. manifestLoadingRetryDelay: number,
  82. manifestLoadingMaxRetryTimeout: number,
  83.  
  84. levelLoadingTimeOut: number,
  85. levelLoadingMaxRetry: number,
  86. levelLoadingRetryDelay: number,
  87. levelLoadingMaxRetryTimeout: number
  88. };
  89.  
  90. type StreamControllerConfig = {
  91. autoStartLoad: boolean,
  92. startPosition: number,
  93. defaultAudioCodec?: string,
  94. initialLiveManifestSize: number,
  95. maxBufferLength: number,
  96. maxBufferSize: number,
  97. maxBufferHole: number,
  98.  
  99. lowBufferWatchdogPeriod: number,
  100. highBufferWatchdogPeriod: number,
  101. nudgeOffset: number,
  102. nudgeMaxRetry: number,
  103. maxFragLookUpTolerance: number,
  104. liveSyncDurationCount: number,
  105. liveMaxLatencyDurationCount: number,
  106. liveSyncDuration?: number,
  107. liveMaxLatencyDuration?: number,
  108. maxMaxBufferLength: number,
  109.  
  110. startFragPrefetch: boolean,
  111. testBandwidth: boolean
  112. };
  113.  
  114. type TimelineControllerConfig = {
  115. cueHandler: Cues.CuesInterface,
  116. enableCEA708Captions: boolean,
  117. enableWebVTT: boolean,
  118. captionsTextTrack1Label: string,
  119. captionsTextTrack1LanguageCode: string,
  120. captionsTextTrack2Label: string,
  121. captionsTextTrack2LanguageCode: string,
  122. captionsTextTrack3Label: string,
  123. captionsTextTrack3LanguageCode: string,
  124. captionsTextTrack4Label: string,
  125. captionsTextTrack4LanguageCode: string,
  126. renderTextTracksNatively: boolean,
  127. };
  128.  
  129. type TSDemuxerConfig = {
  130. forceKeyFrameOnDiscontinuity: boolean,
  131. };
  132.  
  133. export type HlsConfig =
  134. {
  135. debug: boolean,
  136. enableWorker: boolean,
  137. enableSoftwareAES: boolean,
  138. minAutoBitrate: number,
  139. loader: any, // TODO(typescript-xhrloader): Type once XHR is done
  140. xhrSetup?: (xhr: XMLHttpRequest, url: string) => void,
  141.  
  142. // Alt Audio
  143. audioStreamController?: any, // TODO(typescript-audiostreamcontroller): Type once file is done
  144. audioTrackController?: any, // TODO(typescript-audiotrackcontroller): Type once file is done
  145. // Subtitle
  146. subtitleStreamController?: any, // TODO(typescript-subtitlestreamcontroller): Type once file is done
  147. subtitleTrackController?: any, // TODO(typescript-subtitletrackcontroller): Type once file is done
  148. timelineController?: any, // TODO(typescript-timelinecontroller): Type once file is done
  149. // EME
  150. emeController?: typeof EMEController,
  151.  
  152. abrController: any, // TODO(typescript-abrcontroller): Type once file is done
  153. bufferController: typeof BufferController,
  154. capLevelController: any, // TODO(typescript-caplevelcontroller): Type once file is done
  155. fpsController: any, // TODO(typescript-fpscontroller): Type once file is done
  156. } &
  157. ABRControllerConfig &
  158. BufferControllerConfig &
  159. CapLevelControllerConfig &
  160. EMEControllerConfig &
  161. FPSControllerConfig &
  162. FragmentLoaderConfig &
  163. LevelControllerConfig &
  164. MP4RemuxerConfig &
  165. PlaylistLoaderConfig &
  166. StreamControllerConfig &
  167. TimelineControllerConfig &
  168. TSDemuxerConfig;
  169.  
  170. // If possible, keep hlsDefaultConfig shallow
  171. // It is cloned whenever a new Hls instance is created, by keeping the config
  172. // shallow the properties are cloned, and we don't end up manipulating the default
  173. export const hlsDefaultConfig: HlsConfig = {
  174. autoStartLoad: true, // used by stream-controller
  175. startPosition: -1, // used by stream-controller
  176. defaultAudioCodec: void 0, // used by stream-controller
  177. debug: false, // used by logger
  178. capLevelOnFPSDrop: false, // used by fps-controller
  179. capLevelToPlayerSize: false, // used by cap-level-controller
  180. initialLiveManifestSize: 1, // used by stream-controller
  181. maxBufferLength: 30, // used by stream-controller
  182. maxBufferSize: 60 * 1000 * 1000, // used by stream-controller
  183. maxBufferHole: 0.5, // used by stream-controller
  184.  
  185. lowBufferWatchdogPeriod: 0.5, // used by stream-controller
  186. highBufferWatchdogPeriod: 3, // used by stream-controller
  187. nudgeOffset: 0.1, // used by stream-controller
  188. nudgeMaxRetry: 3, // used by stream-controller
  189. maxFragLookUpTolerance: 0.25, // used by stream-controller
  190. liveSyncDurationCount: 3, // used by stream-controller
  191. liveMaxLatencyDurationCount: Infinity, // used by stream-controller
  192. liveSyncDuration: void 0, // used by stream-controller
  193. liveMaxLatencyDuration: void 0, // used by stream-controller
  194. liveDurationInfinity: false, // used by buffer-controller
  195. liveBackBufferLength: Infinity, // used by buffer-controller
  196. maxMaxBufferLength: 600, // used by stream-controller
  197. enableWorker: true, // used by demuxer
  198. enableSoftwareAES: true, // used by decrypter
  199. manifestLoadingTimeOut: 10000, // used by playlist-loader
  200. manifestLoadingMaxRetry: 1, // used by playlist-loader
  201. manifestLoadingRetryDelay: 1000, // used by playlist-loader
  202. manifestLoadingMaxRetryTimeout: 64000, // used by playlist-loader
  203. startLevel: void 0, // used by level-controller
  204. levelLoadingTimeOut: 10000, // used by playlist-loader
  205. levelLoadingMaxRetry: 4, // used by playlist-loader
  206. levelLoadingRetryDelay: 1000, // used by playlist-loader
  207. levelLoadingMaxRetryTimeout: 64000, // used by playlist-loader
  208. fragLoadingTimeOut: 20000, // used by fragment-loader
  209. fragLoadingMaxRetry: 6, // used by fragment-loader
  210. fragLoadingRetryDelay: 1000, // used by fragment-loader
  211. fragLoadingMaxRetryTimeout: 64000, // used by fragment-loader
  212. startFragPrefetch: false, // used by stream-controller
  213. fpsDroppedMonitoringPeriod: 5000, // used by fps-controller
  214. fpsDroppedMonitoringThreshold: 0.2, // used by fps-controller
  215. appendErrorMaxRetry: 3, // used by buffer-controller
  216. loader: XhrLoader,
  217. // loader: FetchLoader,
  218. fLoader: void 0, // used by fragment-loader
  219. pLoader: void 0, // used by playlist-loader
  220. xhrSetup: void 0, // used by xhr-loader
  221. licenseXhrSetup: void 0, // used by eme-controller
  222. // fetchSetup: void 0,
  223. abrController: AbrController,
  224. bufferController: BufferController,
  225. capLevelController: CapLevelController,
  226. fpsController: FPSController,
  227. stretchShortVideoTrack: false, // used by mp4-remuxer
  228. maxAudioFramesDrift: 1, // used by mp4-remuxer
  229. forceKeyFrameOnDiscontinuity: true, // used by ts-demuxer
  230. abrEwmaFastLive: 3, // used by abr-controller
  231. abrEwmaSlowLive: 9, // used by abr-controller
  232. abrEwmaFastVoD: 3, // used by abr-controller
  233. abrEwmaSlowVoD: 9, // used by abr-controller
  234. abrEwmaDefaultEstimate: 5e5, // 500 kbps // used by abr-controller
  235. abrBandWidthFactor: 0.95, // used by abr-controller
  236. abrBandWidthUpFactor: 0.7, // used by abr-controller
  237. abrMaxWithRealBitrate: false, // used by abr-controller
  238. maxStarvationDelay: 4, // used by abr-controller
  239. maxLoadingDelay: 4, // used by abr-controller
  240. minAutoBitrate: 0, // used by hls
  241. emeEnabled: false, // used by eme-controller
  242. widevineLicenseUrl: void 0, // used by eme-controller
  243. requestMediaKeySystemAccessFunc: requestMediaKeySystemAccess, // used by eme-controller
  244. testBandwidth: true,
  245.  
  246. // Dynamic Modules
  247. ...timelineConfig(),
  248. subtitleStreamController: (__USE_SUBTITLES__) ? SubtitleStreamController : void 0,
  249. subtitleTrackController: (__USE_SUBTITLES__) ? SubtitleTrackController : void 0,
  250. timelineController: (__USE_SUBTITLES__) ? TimelineController : void 0,
  251. audioStreamController: (__USE_ALT_AUDIO__) ? AudioStreamController : void 0,
  252. audioTrackController: (__USE_ALT_AUDIO__) ? AudioTrackController : void 0,
  253. emeController: (__USE_EME_DRM__) ? EMEController : void 0
  254. };
  255.  
  256. function timelineConfig (): TimelineControllerConfig {
  257. return {
  258. cueHandler: Cues, // used by timeline-controller
  259. enableCEA708Captions: __USE_SUBTITLES__, // used by timeline-controller
  260. enableWebVTT: __USE_SUBTITLES__, // used by timeline-controller
  261. captionsTextTrack1Label: 'English', // used by timeline-controller
  262. captionsTextTrack1LanguageCode: 'en', // used by timeline-controller
  263. captionsTextTrack2Label: 'Spanish', // used by timeline-controller
  264. captionsTextTrack2LanguageCode: 'es', // used by timeline-controller
  265. captionsTextTrack3Label: 'Unknown CC', // used by timeline-controller
  266. captionsTextTrack3LanguageCode: '', // used by timeline-controller
  267. captionsTextTrack4Label: 'Unknown CC', // used by timeline-controller
  268. captionsTextTrack4LanguageCode: '', // used by timeline-controller
  269. renderTextTracksNatively: true
  270. };
  271. }