UNPKG

rb-sdk

Version:

rb client sdk

165 lines (147 loc) 6.57 kB
'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;