/**
|
* 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 = {};
|
}
|
|
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;
|