/** * WFS interface, Jeff Yang 2016.10 */ /* eslint-disable */ "use strict"; import Event from "./events"; import FlowController from "./controller/flow-controller"; import BufferController from "./controller/buffer-controller"; import EventEmitter from "events"; // import XhrLoader from './utils/xhr-loader'; import WebsocketLoader from "./loader/websocket-loader"; class Wfs { static get version() { // replaced with browserify-versionify transform return "__VERSION__" + "v.0.0.0.1"; } static isSupported() { return ( window.MediaSource && typeof window.MediaSource.isTypeSupported === "function" && window.MediaSource.isTypeSupported('video/mp4; codecs="avc1.42c01f,mp4a.40.2"') ); } static get Events() { return Event; } static get DefaultConfig() { if (!Wfs.defaultConfig) { Wfs.defaultConfig = { autoStartLoad: true, startPosition: -1, debug: false, // H264_TIMEBASE: 3600, // fLoader: undefined, // loader: XhrLoader, //loader: FetchLoader, // fmp4FileUrl: 'xxxx.mp4', fragLoadingTimeOut: 20000, fragLoadingMaxRetry: 6, fragLoadingRetryDelay: 1000, fragLoadingMaxRetryTimeout: 64000, fragLoadingLoopThreshold: 3, forceKeyFrameOnDiscontinuity: true, appendErrorMaxRetry: 3 }; } return Wfs.defaultConfig; } static set DefaultConfig(defaultConfig) { Wfs.defaultConfig = defaultConfig; } constructor(config = {}) { var defaultConfig = Wfs.DefaultConfig; for (var prop in defaultConfig) { if (prop in config) { continue; } config[prop] = defaultConfig[prop]; } this.config = config; // observer setup var observer = (this.observer = new EventEmitter()); observer.trigger = function trigger(event, ...data) { observer.emit(event, event, ...data); }; observer.off = function off(event, ...data) { observer.removeListener(event, ...data); }; this.on = observer.on.bind(observer); this.off = observer.off.bind(observer); this.trigger = observer.trigger.bind(observer); this.flowController = new FlowController(this); this.bufferController = new BufferController(this); // this.fileLoader = new FileLoader(this); this.websocketLoader = new WebsocketLoader(this); this.mediaType = undefined; this.cameraInfo = {}; this.playerStatus = -1; } destroy() { this.flowController.destroy(); this.bufferController.destroy(); // this.fileLoader.destroy(); this.websocketLoader.destroy(); } attachMedia(media, channelName = "chX", mediaType = "H264Raw", websocketName = "ws", cameraInfo = {}) { // 'H264Raw' 'FMp4' this.mediaType = mediaType; this.media = media; this.cameraInfo = cameraInfo; this.trigger(Event.MEDIA_ATTACHING, { media: media, channelName: channelName, mediaType: mediaType, websocketName: websocketName, cameraInfo: cameraInfo }); } attachWebsocket(websocket, channelName, cameraInfo) { this.trigger(Event.WEBSOCKET_ATTACHING, { websocket: websocket, mediaType: this.mediaType, channelName: channelName, cameraInfo: cameraInfo }); } } export default Wfs;