rb-sdk
Version:
rb client sdk
165 lines (147 loc) • 6.57 kB
JavaScript
'use strict';
Object.defineProperty(exports, "__esModule", {
value: true
});
var _createClass = function () { function defineProperties(target, props) { for (var i = 0; i < props.length; i++) { var descriptor = props[i]; descriptor.enumerable = descriptor.enumerable || false; descriptor.configurable = true; if ("value" in descriptor) descriptor.writable = true; Object.defineProperty(target, descriptor.key, descriptor); } } return function (Constructor, protoProps, staticProps) { if (protoProps) defineProperties(Constructor.prototype, protoProps); if (staticProps) defineProperties(Constructor, staticProps); return Constructor; }; }();
var _RBDebugger = require('./RBDebugger');
var _RBDebugger2 = _interopRequireDefault(_RBDebugger);
var _EventDispatcher = require('./EventDispatcher');
var _EventDispatcher2 = _interopRequireDefault(_EventDispatcher);
var _RBEvent = require('./RBEvent');
var _RBEvent2 = _interopRequireDefault(_RBEvent);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
var RBMediaRecoder = function () {
function RBMediaRecoder(configuration) {
_classCallCheck(this, RBMediaRecoder);
this.mediaRecorder = null;
this.recodeStream = null;
this.recordConfig = configuration.getRecord();
this.recodeState = 0;
this._init();
}
_createClass(RBMediaRecoder, [{
key: '_init',
value: function _init() {
var _this = this;
}
}, {
key: 'cleanTracks',
value: function cleanTracks() {
if (!this.recodeStream) {
return;
}
var _this = this;
var trackers = this.recodeStream.getTracks();
trackers.forEach(function (track) {
try {
_this.recodeStream.removeTrack(track);
track.stop();
} catch (e) {
_RBDebugger2.default.error('Close recodeStream track error:', { track: track, e: e });
}
});
}
}, {
key: 'addTrack',
value: function addTrack(videoStream, audioStream) {
if (!this.recordConfig.supportRecord || !videoStream || !audioStream || 1 === this.recodeState) {
return;
}
this.recodeStream = this.recodeStream || videoStream;
_EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.RECORD_TRACK_ADD_BEFORE, null));
var _this = this;
var trackers = audioStream.getAudioTracks();
trackers.forEach(function (track) {
var flag = true;
var recodeTrackers = _this.recodeStream.getTracks();
recodeTrackers.forEach(function (recodeTrack) {
if (recodeTrack.id == track.id && recodeTrack.kind == track.kind || track.kind != "audio") {
flag = false;
}
});
if (flag) {
_this.recodeStream.addTrack(track);
}
});
console.log("recodeTrackers ==========start");
_this.recodeStream.getTracks().forEach(function (recodeTrack) {
console.log("recodeTrackers ==========" + recodeTrack.id + "========" + recodeTrack.kind);
});
console.log("recodeTrackers ==========end");
_EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.RECORD_TRACK_ADD_AFTER, null));
}
}, {
key: 'start',
value: function start() {
if (!this.recordConfig.supportRecord || 1 === this.recodeState) {
return;
}
var _this = this;
var options = { mimeType: 'video/webm;codecs=vp9,opus' };
if (!MediaRecorder.isTypeSupported(options.mimeType)) {
options = { mimeType: 'video/webm;codecs=vp8,opus' };
if (!MediaRecorder.isTypeSupported(options.mimeType)) {
options = { mimeType: 'video/webm' };
if (!MediaRecorder.isTypeSupported(options.mimeType)) {
options = { mimeType: '' };
}
}
}
try {
this.mediaRecorder = new MediaRecorder(this.recodeStream, options);
} catch (e) {
_RBDebugger2.default.error('Create media recorder error.', e);
_EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(this, _RBEvent2.default.ACTION_RECORDER_ERROR, e));
}
this.mediaRecorder.ondataavailable = function (event) {
if (!event.data || event.data.size <= 0) {
return;
}
var time = new Date().getTime();
_EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(_this, _RBEvent2.default.RECORD_STREAM_PUSH, {
time: time,
chunks: event.data
}));
};
this.mediaRecorder.onstop = function (event) {
_EventDispatcher2.default.dispatchEvent(new _RBEvent2.default(_this, _RBEvent2.default.RECORDER_STOP, null));
};
this.mediaRecorder.start(this.recordConfig.sliceTime);
this.recodeState = 1;
}
}, {
key: 'stop',
value: function stop() {
if (this.mediaRecorder) this.mediaRecorder.stop();
}
}, {
key: 'pause',
value: function pause() {
if (this.mediaRecorder) this.mediaRecorder.pause();
}
}, {
key: 'resume',
value: function resume() {
if (this.mediaRecorder) this.mediaRecorder.resume();
}
}, {
key: 'getRecodeState',
value: function getRecodeState() {
return this.recodeState;
}
}, {
key: 'distory',
value: function distory(isEnd) {
if (this.mediaRecorder) this.mediaRecorder.stop();
if (isEnd) {
this.recodeState = 0;
this.cleanTracks();
this.recodeStream = null;
this.mediaRecorder = null;
}
}
}]);
return RBMediaRecoder;
}();
exports.default = RBMediaRecoder;