wfs.js 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106
  1. /**
  2. * WFS interface, Jeff Yang 2016.10
  3. */
  4. 'use strict';
  5. import Event from './events';
  6. import FlowController from './controller/flow-controller';
  7. import BufferController from './controller/buffer-controller';
  8. import EventEmitter from 'events';
  9. import XhrLoader from './utils/xhr-loader';
  10. import FileLoader from './loader/file-loader';
  11. import WebsocketLoader from './loader/websocket-loader';
  12. class Wfs {
  13. static get version() {
  14. // replaced with browserify-versionify transform
  15. return '__VERSION__'+'v.0.0.0.1';
  16. }
  17. static isSupported() {
  18. return (window.MediaSource &&
  19. typeof window.MediaSource.isTypeSupported === 'function' &&
  20. window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42c01f,mp4a.40.2"'));
  21. }
  22. static get Events() {
  23. return Event;
  24. }
  25. static get DefaultConfig() {
  26. if(!Wfs.defaultConfig) {
  27. Wfs.defaultConfig = {
  28. autoStartLoad: true,
  29. startPosition: -1,
  30. debug: false,
  31. fLoader: undefined,
  32. loader: XhrLoader,
  33. //loader: FetchLoader,
  34. fmp4FileUrl: 'xxxx.mp4',
  35. fragLoadingTimeOut: 20000,
  36. fragLoadingMaxRetry: 6,
  37. fragLoadingRetryDelay: 1000,
  38. fragLoadingMaxRetryTimeout: 64000,
  39. fragLoadingLoopThreshold: 3,
  40. forceKeyFrameOnDiscontinuity: true,
  41. appendErrorMaxRetry: 3
  42. };
  43. }
  44. return Wfs.defaultConfig;
  45. }
  46. static set DefaultConfig(defaultConfig) {
  47. Wfs.defaultConfig = defaultConfig;
  48. }
  49. constructor(config = {}) {
  50. var defaultConfig = Wfs.DefaultConfig;
  51. for (var prop in defaultConfig) {
  52. if (prop in config) { continue; }
  53. config[prop] = defaultConfig[prop];
  54. }
  55. this.config = config;
  56. // observer setup
  57. var observer = this.observer = new EventEmitter();
  58. observer.trigger = function trigger (event, ...data) {
  59. observer.emit(event, event, ...data);
  60. };
  61. observer.off = function off (event, ...data) {
  62. observer.removeListener(event, ...data);
  63. };
  64. this.on = observer.on.bind(observer);
  65. this.off = observer.off.bind(observer);
  66. this.trigger = observer.trigger.bind(observer);
  67. this.flowController = new FlowController(this);
  68. this.bufferController = new BufferController(this);
  69. // this.fileLoader = new FileLoader(this);
  70. this.websocketLoader = new WebsocketLoader(this);
  71. this.mediaType = undefined;
  72. }
  73. destroy() {
  74. this.flowController.destroy();
  75. this.bufferController.destroy();
  76. // this.fileLoader.destroy();
  77. this.websocketLoader.destroy();
  78. }
  79. attachMedia(media, channelName='chX',mediaType='H264Raw', websocketName='play2') { // 'H264Raw' 'FMp4'
  80. this.mediaType = mediaType;
  81. this.media = media;
  82. this.trigger(Event.MEDIA_ATTACHING, {media:media, channelName:channelName, mediaType:mediaType, websocketName:websocketName });
  83. }
  84. attachWebsocket(websocket,channelName) {
  85. this.trigger(Event.WEBSOCKET_ATTACHING, {websocket: websocket, mediaType:this.mediaType, channelName:channelName });
  86. }
  87. }
  88. export default Wfs;