李勇
e8c2424b 1 parent 08355a19 master ... 20170922-1 20171019-1 20171120-1w dev letv-20170426 ly20170622 ly20170622-2 ly20170622-3 ly20170627-2 ly20170706-1 ly20170708-2 ly20170708-3 ly20170710-1 ly20170717-1 ly20170719-1 ly20170723-1 ly20170724-2 ly20170726-1 ly20170731-1 ly20170731-2 ly20170801-2 ly20170802-1 ly20170818-1 ly20170818-2 ly20170820-1 ly20170821-1 ly20170824-1 ly20170829-1 ly20170925-1 ly20170926-1 ly20170927-1 ly20170929-1 ly20171011-1 ly20171013-1 ly20171013-2 ly20171016-1 ly20171021-1 ly20171023-1 ly20171024-1w ly20171025-1w ly20171026-1w ly20171027-1w ly20171030-1 ly20171030-2w ly20171107-1 ly20171110-1w ly20171113-1w ly20171204-1w ly20171208-1w ly20171211-1w ly20171211-2w ly20171214-1w mcuClientBranch webRtc-dev v2.38.13.20171216 v2.38.11.20171214 v2.38.3.201712011 v2.38.1.201712011 v2.36.11.20171204 v2.36.8.20171206 v2.36.4.20171201 v2.35.11.20171130 v2.34.16.20171128 v2.34.5.20171127 v2.33.6.20171123 v2.32.1.20171123 v2.31.12.20171122 v2.31.10.20171122 v2.30.5.20171117 v2.30.2.20171117 v2.29.5.20171114 v2.28.1.20171110 v2.27.11.20171109 v2.26.9.20171107 v2.26.6.20171103 v2.26.2.20171102 v2.25.7.20171031 v2.25.6.20171031 v2.25.0.20171030 v2.24.2.20171030 v2.23.0.20171030 v2.22.7.20171026 v2.20.5.20171023 v2.20.0.20171021 v2.19.8.20171020 v2.18.14.20171020 v2.18.10.20171019 v2.17.11.20171014 v2.16.8.20171012 v2.16.5.20171012 v2.15.5.20171001 v2.15.3.20170929 v2.14.5.20170927 v2.13.5.20170927 v2.12.14.20170927 v2.12.8.20170926 v2.12.6.20170925 v2.11.13.20170925 v2.10.7.20170921 v2.10.6.20170921 v2.10.5.20170920 v2.10.4.20170920 v2.9.3.20170919 v2.8.17.20170918 v2.8.8.20170917 v2.8.2.20170916 v2.6.2.20170915 v2.5.12.20170915 v2.5.6.20170914 v2.5.5.20170914 v2.4.4.20170908 v2.4.2.20170908 v2.4.0.20170907 v2.3.6.20170907 v2.2.16.20170905 v2.1.22.20170904 v1.84.0.20170912 v1.83.2.20170831 v1.82.11.20170829 v1.81.19.20170828 v1.80.2.20170824 v1.79.6.20170822 v1.79.5.20170821 v1.79.4.20170821 v1.79.3.20170821 v1.78.4.20170820 v1.77.4.20170819 v1.76.2.20170818 v1.75.0.20170815 v1.74.0.20170814 v1.73.2.20170814 v1.73.1.20170814 v1.71.0.20170813 v1.70.5.20170812 v1.68.2.20170812 v1.66.1.20170809 v1.65.25.20170808 v1.65.24.20170806 v1.63.1.20170731 v1.62.3.20170731 v1.61.0.20170729 v1.60.0.20170729 v1.59.0.20170729 v1.58.0.20170729 v1.57.0.20170727 v1.56.1.20170727 v1.56.0.20170727 v1.52.1.20170726 v1.51.0.20170724 v1.50.7.20170724 v1.49.1.20170724 v1.48.2.20170723 v1.46.1.20170722 v1.45.1.20170717 v1.43.1.20170711 v1.42.1.20170708 v1.41.0.20170708 v1.40.0.20170706 v1.39.2.20170706 v1.39.1.20170705 v1.38.4.20170629 v1.37.5.20170627 v1.37.2.20170622 v1.36.7.20170620 v1.36.4.20170620 v1.36.1.20170619 v1.35.4.20170619 v1.34.2.20170615 v1.33.2.20170615 v1.32.1.20170614 v1.31.11.20170613 v1.30.20.20170607 v1.30.7.20170606 v1.30.6.20170606 v1.30.5.20170605 v1.30.3.20170602 v1.29.8.20170601 v1.28.0.201705031 v1.27.16.201705027 v1.27.14.201705027 v1.27.10.201705026 v1.25.2.201705025 v1.23.5.201705023 v1.23.4.201705018 v1.21.1.201705017 v1.20.1.201705015 v1.19.1.201705012 v1.19.0.201705011 v1.18.0.201705010 v1.16.1.201705010 v1.15.2.20170507 v1.14.1.20170505 v1.13.0.20170504 v1.11.3.20170504 v1.10.2.20170428 v1.10.0.20170427 v1.9.20.20170426 v1.9.19.20170425 v1.9.18.20170425 v1.9.17.20170421 v1.9.16.20170420 v1.9.15.20170420 v1.9.11.20170419 v1.9.6.20170418 v1.9.4.20170417 v.1.9.2.20170413 v.1.9.0.20170411 v.1.8.22.20170411 v.1.8.19.20170411 v.1.8.16.20170410 v.1.8.13.20170409 v.1.8.10.20170407 v.1.8.9.20170407 v1.8.8.20170406 v.1.8.7.20170405-1 v.1.8.6.20170401-2 v.1.8.5.20170331-1 v.1.8.3.20170329-4 v1.8.1.20170321 mcuClient_v1.8.0.20170314

1.录制增加时间限制,默认为4小时(14400秒),课堂初始化的接口增加字段allowRecordMaxTime(Number)来控制录制的时间

2.加入课堂成功之后返回的参数中增加了录制回放的总时间长
3.录制模块增加了录制数据读取和录制数据用计时器回放的功能
4.录制模块增加状态更新的接口
... ... @@ -73,7 +73,7 @@ return /******/ (function(modules) { // webpackBootstrap
/******/ }
/******/ var hotApplyOnUpdate = true;
/******/ var hotCurrentHash = "b965c2eac4c1a05349c9"; // eslint-disable-line no-unused-vars
/******/ var hotCurrentHash = "9888fa83a0623fa73680"; // eslint-disable-line no-unused-vars
/******/ var hotCurrentModuleData = {};
/******/ var hotCurrentParents = []; // eslint-disable-line no-unused-vars
... ... @@ -669,7 +669,7 @@ return /******/ (function(modules) { // webpackBootstrap
var _RecordPlayBackParse2 = _interopRequireDefault(_RecordPlayBackParse);
var _mcu2 = __webpack_require__(37);
var _mcu2 = __webpack_require__(38);
var _mcu3 = _interopRequireDefault(_mcu2);
... ... @@ -681,7 +681,7 @@ return /******/ (function(modules) { // webpackBootstrap
var _Loger2 = _interopRequireDefault(_Loger);
var _ConferApe = __webpack_require__(39);
var _ConferApe = __webpack_require__(40);
var _ConferApe2 = _interopRequireDefault(_ConferApe);
... ... @@ -743,7 +743,7 @@ return /******/ (function(modules) { // webpackBootstrap
__webpack_require__(13);
var loger = _Loger2.default.getLoger('MessageEntrance');
var _sdkInfo = { "version": "v.1.0.2017.0307", "author": "www.3mang.com" };
var _sdkInfo = { "version": "v.1.7.0.20170309-1", "author": "www.3mang.com" };
//APE
var _sass = void 0;
... ... @@ -874,10 +874,6 @@ return /******/ (function(modules) { // webpackBootstrap
_this.pauseRecordPlayback = _this._pauseRecordPlayback.bind(_this);
_this.seekRecordPlayback = _this._seekRecordPlayback.bind(_this);
_this.addBuffer = _this._addBuffer.bind(_this);
_this.read = _this._read.bind(_this);
_this.writeBuffer = _this._writeBuffer.bind(_this);
//chatApe
_this.sendChatMsg = _this._sendChatMsg.bind(_this);
... ... @@ -1072,6 +1068,11 @@ return /******/ (function(modules) { // webpackBootstrap
_GlobalConfig2.default.userId = _param.userId || "0";
_GlobalConfig2.default.userName = _param.userName || "";
//最长允许录制的时间
if (_param.allowRecordMaxTime) {
_GlobalConfig2.default.allowRecordMaxTime = parseInt(_param.allowRecordMaxTime);
}
//获取课堂校验信息
if (_sass) {
_sass.getJoinParams(_GlobalConfig2.default.getClassInfo());
... ... @@ -1372,6 +1373,8 @@ return /******/ (function(modules) { // webpackBootstrap
joinClassSuccessCallBackData.province = _GlobalConfig2.default.province; //服务商
joinClassSuccessCallBackData.isp = _GlobalConfig2.default.isp; //服务商
joinClassSuccessCallBackData.classTimestamp = _GlobalConfig2.default.classTimestamp; //课堂进行的累积时间
joinClassSuccessCallBackData.recordPlaybackMaxTime = _GlobalConfig2.default.recordPlaybackMaxTime; //录制回放的总时间
loger.log('加入课堂成功');
console.log(joinClassSuccessCallBackData);
... ... @@ -1988,28 +1991,8 @@ return /******/ (function(modules) { // webpackBootstrap
_parseBuf.seekRecordPlayback(_param);
}
}
}, {
key: '_writeBuffer',
value: function _writeBuffer(_param) {
if (_parseBuf) {
_parseBuf.writeBuffer(_param);
}
}
}, {
key: '_addBuffer',
value: function _addBuffer(_arrayBuffer) {
if (_parseBuf) {
_parseBuf.addBuffer(_arrayBuffer);
}
}
}, {
key: '_read',
value: function _read(_param) {
if (_parseBuf) {
_parseBuf.read(_param);
}
}
// MCU 课堂成功
//录制回放加入 课堂成功
}, {
key: '_joinRecordPlaybackSuccessHandler',
... ... @@ -2059,6 +2042,9 @@ return /******/ (function(modules) { // webpackBootstrap
joinClassSuccessCallBackData.province = _GlobalConfig2.default.province; //服务商
joinClassSuccessCallBackData.isp = _GlobalConfig2.default.isp; //服务商
joinClassSuccessCallBackData.classTimestamp = _GlobalConfig2.default.classTimestamp; //课堂进行的累积时间
joinClassSuccessCallBackData.recordPlaybackMaxTime = _GlobalConfig2.default.recordPlaybackMaxTime; //录制回放的总时间
console.log(joinClassSuccessCallBackData);
//和加入课堂成功使用同样的消息处理
this._emit(_MessageTypes2.default.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData);
... ... @@ -2957,6 +2943,10 @@ return /******/ (function(modules) { // webpackBootstrap
//MessageTypes.WHITEBOARD_ANNOTAION_DELETE = 'whiteboard.annotation.delete';
//MessageTypes.WHITEBOARD_ANNOTATION_CLEAR = 'whiteboard.annotation.clear';
//录制回放
MessageTypes.RECORD_PLAYBACK_UPDATE = "record_playback_update"; //录制回放更新信息
//错误事件定义
MessageTypes.MCU_ERROR = "mcu_error"; //"mcuError";//MCU错误(内部使用)
MessageTypes.ERROR_EVENT = "error_event"; //外部监听错误的消息ID(外部使用)
... ... @@ -3499,7 +3489,7 @@ return /******/ (function(modules) { // webpackBootstrap
GlobalConfig.isp = ""; //服务商
GlobalConfig.isRecordPlayBack = false; //是否是录制回放,默认是否
GlobalConfig.allowRecordMaxTime = 14400; //(秒)允许录制的最长时间,默认是4小时
var _default = GlobalConfig;
exports.default = _default;
;
... ... @@ -5914,6 +5904,10 @@ return /******/ (function(modules) { // webpackBootstrap
var _EngineUtils2 = _interopRequireDefault(_EngineUtils);
var _TimerCounter = __webpack_require__(37);
var _TimerCounter2 = _interopRequireDefault(_TimerCounter);
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"); } }
... ... @@ -5923,9 +5917,13 @@ return /******/ (function(modules) { // webpackBootstrap
function _inherits(subClass, superClass) { if (typeof superClass !== "function" && superClass !== null) { throw new TypeError("Super expression must either be null or a function, not " + typeof superClass); } subClass.prototype = Object.create(superClass && superClass.prototype, { constructor: { value: subClass, enumerable: false, writable: true, configurable: true } }); if (superClass) Object.setPrototypeOf ? Object.setPrototypeOf(subClass, superClass) : subClass.__proto__ = superClass; }
var parseBuffer = void 0;
// 日志对象
var loger = _Loger2.default.getLoger('RecordPlayBackParse');
var Default = 0; //未开始
var PLAY = 1; //播放中
var PAUSE = 2; //暂停
var SEEK = 3; //seek
var STOP = 4; //停止
var RecordPlayBackParse = function (_Emiter) {
_inherits(RecordPlayBackParse, _Emiter);
... ... @@ -5939,9 +5937,15 @@ return /******/ (function(modules) { // webpackBootstrap
parseBuffer = new _bytebuffer2.default(_bytebuffer2.default.DEFAULT_CAPACITY, _bytebuffer2.default.LITTLE_ENDIAN);
parseBuffer.clear();
console.log(parseBuffer);
_this._recordPlaybackTimestamp = 0; //回放的时间
_this._recordPlaybackMaxTime = 0; //录制回放的总时间
_this._apes = {};
_this._messages = {};
_this._timerCounter = new _TimerCounter2.default(); //计时器
_this._timerCounter.addTimerCallBack(_this._timerCounterUptate.bind(_this), 1);
return _this;
}
//method--------------------内部---------------------------------------------
// 注册Ape
... ... @@ -6006,7 +6010,39 @@ return /******/ (function(modules) { // webpackBootstrap
}
}
//method------------外部接口-------------------------------------
//开启计时器
}, {
key: '_startTimerCounter',
value: function _startTimerCounter() {
this._timerCounter.startTimer();
}
//停止计时器
}, {
key: '_stopTimerCounter',
value: function _stopTimerCounter() {
this._timerCounter.stopTimer();
}
}, {
key: '_timerCounterUptate',
value: function _timerCounterUptate() {
this._recordPlaybackTimestamp = this._recordPlaybackTimestamp + 1; //计时
if (this._recordPlaybackTimestamp >= this._recordPlaybackMaxTime) {
this._stopTimerCounter();
loger.log("录制结束...当前时间->", this._recordPlaybackTimestamp, " 总时间->", this._recordPlaybackMaxTime);
this._emit(_MessageTypes2.default.RECORD_PLAYBACK_UPDATE, { "status": STOP });
return;
}
loger.log("录制回放中...", this._recordPlaybackTimestamp);
this._emit(_MessageTypes2.default.CLASS_UPDATE_TIMER, { "classTimestamp": this._recordPlaybackTimestamp });
//根据时间查找消息数据
this._searchMessageFromTime(this._recordPlaybackTimestamp);
}
//加载录制文件
}, {
... ... @@ -6014,12 +6050,13 @@ return /******/ (function(modules) { // webpackBootstrap
value: function readyRecordPlay() {
var _this2 = this;
this._stopTimerCounter();
loger.log("读取回放数据");
//let url = `http://123.56.73.119:80/h5dev/20170306/1357644520_20170306.rec`;
var url = 'http://' + _GlobalConfig2.default.RecordServerIP + ':' + _GlobalConfig2.default.RecordServerPort + '/' + _GlobalConfig2.default.recordFileName;
console.log(url);
fetch(url, {
timeout: 90000
timeout: 90000 //加载文件超时时间1分30秒
}).then(function (ret) {
if (ret.ok) {
return ret.arrayBuffer();
... ... @@ -6048,53 +6085,97 @@ return /******/ (function(modules) { // webpackBootstrap
if (parseBuffer) {
parseBuffer.clear();
parseBuffer.append(arrayBuffer);
//解析数据
this.parseArrayBuf();
}
this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS);
}
}, {
key: 'addArrayBuffer',
value: function addArrayBuffer(arrayBuffer) {
loger.log("addArrayBuffer", arrayBuffer.byteLength);
parseBuffer.append(arrayBuffer, "binary");
}
//解析数据
}, {
key: 'read',
value: function read() {
//loger.log("readUInt64", parseBuffer.readUInt64(0));
//loger.log("readUInt32", parseBuffer.readUInt32(8));
//loger.log("readByte", parseBuffer.readByte(12));
key: 'parseArrayBuf',
value: function parseArrayBuf() {
this._messages = {};
var byteLength = parseBuffer.offset;
parseBuffer.byteOffset = 0;
var position = 0;
while (position < byteLength) {
var time = parseBuffer.readUInt64(position, true);
position += 8;
var len = parseBuffer.readUInt32(position, true);
position += 4;
var byte = parseBuffer.buffer.slice(position, position + len);
position += len;
console.log(time, len, byte);
this._everSocketMsgReceivedHandler(byte);
var timestamp = parseBuffer.readUInt32(position);
position += 4; //4字节
var byteLen = parseBuffer.readUInt32(position);
position += 4; //4字节
var byteData = parseBuffer.buffer.slice(position, position + byteLen);
position += byteLen;
console.log(timestamp, byteLen, byteData);
var messageItem = this._messages[timestamp];
if (!messageItem) {
this._messages[timestamp] = []; //数组存数据,因为有1秒内收到多个消息的情况,timestamp是按秒记录的
messageItem = this._messages[timestamp];
}
messageItem.push({ "timestamp": timestamp, "byteData": byteData });
//记录最后一个数据的时间戳作为整个录制回放的总时间戳
this._recordPlaybackMaxTime = timestamp;
}
this._recordPlaybackTimestamp = 0;
this._stopTimerCounter();
_GlobalConfig2.default.recordPlaybackMaxTime = this._recordPlaybackMaxTime;
loger.log("录制回放数据解析完成,录制回放的总时间长为->", this._recordPlaybackMaxTime);
console.log(this._messages);
this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS, { "recordPlaybackMaxTime": this._recordPlaybackMaxTime });
}
//根据时间查找数据
}, {
key: 'writeBuffer',
value: function writeBuffer() {
parseBuffer.writeUint64(123456789, 0).flip();
parseBuffer.writeUint32(22211122, 8).flip();
key: '_searchMessageFromTime',
value: function _searchMessageFromTime(_timestamp) {
var msgDataArr = this._messages[_timestamp];
if (!msgDataArr) {
//没有数据,需要查找当前时间点属于哪一个时间戳关键帧
} else {
//把时间点对应的数据发送,同一秒内有存在多个数据的情况
for (var i = 0; i < msgDataArr.length; i++) {
this._everSocketMsgReceivedHandler(msgDataArr[i].byteData);
}
}
}
//method------------外部接口-------------------------------------
}, {
key: 'startRecordPlayback',
value: function startRecordPlayback(_param) {}
value: function startRecordPlayback(_param) {
this._startTimerCounter();
return { "code": _ApeConsts2.default.RETURN_SUCCESS, "data": "ok" };
//this._apes(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":});
}
}, {
key: 'stopRecordPlayback',
value: function stopRecordPlayback(_param) {}
value: function stopRecordPlayback(_param) {
this._recordPlaybackTimestamp = 0;
this._stopTimerCounter();
return { "code": _ApeConsts2.default.RETURN_SUCCESS, "data": "ok" };
}
}, {
key: 'pauseRecordPlayback',
value: function pauseRecordPlayback(_param) {}
value: function pauseRecordPlayback(_param) {
this._stopTimerCounter();
return { "code": _ApeConsts2.default.RETURN_SUCCESS, "data": "ok" };
}
}, {
key: 'seekRecordPlayback',
value: function seekRecordPlayback(_param) {}
value: function seekRecordPlayback(_param) {
if (!_param || !_param.time) {
return { "code": _ApeConsts2.default.RETURN_FAILED, "data": "参数不正确" };
}
this._stopTimerCounter();
this._recordPlaybackTimestamp = _param.time || 0;
this._startTimerCounter();
return { "code": _ApeConsts2.default.RETURN_SUCCESS, "data": "ok" };
}
}]);
return RecordPlayBackParse;
... ... @@ -6116,6 +6197,16 @@ return /******/ (function(modules) { // webpackBootstrap
__REACT_HOT_LOADER__.register(loger, 'loger', 'D:/work/McuClient/src/RecordPlayBackParse.js');
__REACT_HOT_LOADER__.register(Default, 'Default', 'D:/work/McuClient/src/RecordPlayBackParse.js');
__REACT_HOT_LOADER__.register(PLAY, 'PLAY', 'D:/work/McuClient/src/RecordPlayBackParse.js');
__REACT_HOT_LOADER__.register(PAUSE, 'PAUSE', 'D:/work/McuClient/src/RecordPlayBackParse.js');
__REACT_HOT_LOADER__.register(SEEK, 'SEEK', 'D:/work/McuClient/src/RecordPlayBackParse.js');
__REACT_HOT_LOADER__.register(STOP, 'STOP', 'D:/work/McuClient/src/RecordPlayBackParse.js');
__REACT_HOT_LOADER__.register(RecordPlayBackParse, 'RecordPlayBackParse', 'D:/work/McuClient/src/RecordPlayBackParse.js');
__REACT_HOT_LOADER__.register(_default, 'default', 'D:/work/McuClient/src/RecordPlayBackParse.js');
... ... @@ -17602,6 +17693,113 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 37 */
/***/ function(module, exports) {
"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; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
// //////////////////////////////////////////////////////////////////////////////
// 计时器
// //////////////////////////////////////////////////////////////////////////////
var TimerCounter = function () {
function TimerCounter() {
_classCallCheck(this, TimerCounter);
this.timer = 0;
this.delay = 1000;
this.counter = 0;
this.callBackDelay = 1; //回调间隔,单位(秒)
this.callBackFun = null; //回调函数
this.isStart = false;
}
_createClass(TimerCounter, [{
key: "addTimerCallBack",
value: function addTimerCallBack(_callBackFun, _callBackDelay) {
this.callBackFun = _callBackFun;
this.callBackDelay = _callBackDelay;
}
//开计时
}, {
key: "startTimer",
value: function startTimer() {
var _position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (this.isStart) return;
this.isStart = true;
if (_position && parseInt(_position) > 0) {
this.counter = _position;
} else {
this.counter = 0;
}
console.log("startTimer", this.counter);
this.timerClear();
this.timerStart();
}
//停止
}, {
key: "stopTimer",
value: function stopTimer() {
if (!this.isStart) return;
console.log("stopTimer", this.counter);
this.isStart = false;
this.timerClear();
}
//计数
}, {
key: "updateCounter",
value: function updateCounter() {
this.counter++;
//this.counter++;
//console.log("TimerCounter",counter);
if (this.callBackFun != null && this.counter % this.callBackDelay == 0) {
this.callBackFun();
}
}
}, {
key: "timerStart",
value: function timerStart() {
this.timer = setInterval(this.updateCounter.bind(this), this.delay);
}
}, {
key: "timerClear",
value: function timerClear() {
clearInterval(this.timer);
}
}]);
return TimerCounter;
}();
var _default = TimerCounter;
exports.default = _default;
;
var _temp = function () {
if (typeof __REACT_HOT_LOADER__ === 'undefined') {
return;
}
__REACT_HOT_LOADER__.register(TimerCounter, "TimerCounter", "D:/work/McuClient/src/TimerCounter.js");
__REACT_HOT_LOADER__.register(_default, "default", "D:/work/McuClient/src/TimerCounter.js");
}();
;
/***/ },
/* 38 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
... ... @@ -17624,7 +17822,7 @@ return /******/ (function(modules) { // webpackBootstrap
var _Loger2 = _interopRequireDefault(_Loger);
var _everSocket = __webpack_require__(38);
var _everSocket = __webpack_require__(39);
var _everSocket2 = _interopRequireDefault(_everSocket);
... ... @@ -17644,7 +17842,7 @@ return /******/ (function(modules) { // webpackBootstrap
var _ApeConsts2 = _interopRequireDefault(_ApeConsts);
var _ConferApe = __webpack_require__(39);
var _ConferApe = __webpack_require__(40);
var _ConferApe2 = _interopRequireDefault(_ConferApe);
... ... @@ -17904,7 +18102,7 @@ return /******/ (function(modules) { // webpackBootstrap
;
/***/ },
/* 38 */
/* 39 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
... ... @@ -18147,7 +18345,7 @@ return /******/ (function(modules) { // webpackBootstrap
;
/***/ },
/* 39 */
/* 40 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
... ... @@ -18158,7 +18356,7 @@ return /******/ (function(modules) { // webpackBootstrap
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 _Ape2 = __webpack_require__(40);
var _Ape2 = __webpack_require__(41);
var _Ape3 = _interopRequireDefault(_Ape2);
... ... @@ -18174,7 +18372,7 @@ return /******/ (function(modules) { // webpackBootstrap
var _pdus2 = _interopRequireDefault(_pdus);
var _zlib = __webpack_require__(41);
var _zlib = __webpack_require__(42);
var _utf = __webpack_require__(11);
... ... @@ -18192,7 +18390,7 @@ return /******/ (function(modules) { // webpackBootstrap
var _EngineUtils2 = _interopRequireDefault(_EngineUtils);
var _TimerCounter = __webpack_require__(42);
var _TimerCounter = __webpack_require__(37);
var _TimerCounter2 = _interopRequireDefault(_TimerCounter);
... ... @@ -18378,6 +18576,12 @@ return /******/ (function(modules) { // webpackBootstrap
}, {
key: 'startRecord',
value: function startRecord() {
//如果录制的时间长超出设定的最大录制时间就不再录制
if (_GlobalConfig2.default.classTimestamp >= _GlobalConfig2.default.allowRecordMaxTime) {
loger.warn('不能再录制,录制时间已经达到最大限制', _GlobalConfig2.default.classTimestamp);
return;
}
loger.log('startRecord', "isHost", _GlobalConfig2.default.isHost, "recordStatus", _GlobalConfig2.default.recordStatus);
//如果是host
if (_GlobalConfig2.default.isHost) {
... ... @@ -18929,7 +19133,7 @@ return /******/ (function(modules) { // webpackBootstrap
;
/***/ },
/* 40 */
/* 41 */
/***/ function(module, exports, __webpack_require__) {
'use strict';
... ... @@ -18948,7 +19152,7 @@ return /******/ (function(modules) { // webpackBootstrap
var _Emiter3 = _interopRequireDefault(_Emiter2);
var _mcu = __webpack_require__(37);
var _mcu = __webpack_require__(38);
var _mcu2 = _interopRequireDefault(_mcu);
... ... @@ -19031,7 +19235,8 @@ return /******/ (function(modules) { // webpackBootstrap
//先收到onJoinSessionHandlerSuccess 后收到 onJoinChannelHandlerSuccess
loger.log("APE-->registerApe");
loger.log('APE-->registerApe->', 'SessionId', _this._session_id, 'SessionName', _this._session_name, 'SessionTag', _this._session_tag);
// 监听底层MCU课堂
_this.mcu = _mcu2.default;
_this.mcu.on(_MessageTypes2.default.CLASS_JOIN_MCU_SUCCESS, _this._mcuConferenceJoinSuccessHandler.bind(_this));
... ... @@ -19409,7 +19614,7 @@ return /******/ (function(modules) { // webpackBootstrap
;
/***/ },
/* 41 */
/* 42 */
/***/ function(module, exports) {
/** @license zlib.js 2012 - imaya [ https://github.com/imaya/zlib.js ] The MIT License */(function() {'use strict';function l(d){throw d;}var v=void 0,x=!0,aa=this;function D(d,a){var c=d.split("."),e=aa;!(c[0]in e)&&e.execScript&&e.execScript("var "+c[0]);for(var b;c.length&&(b=c.shift());)!c.length&&a!==v?e[b]=a:e=e[b]?e[b]:e[b]={}};var F="undefined"!==typeof Uint8Array&&"undefined"!==typeof Uint16Array&&"undefined"!==typeof Uint32Array&&"undefined"!==typeof DataView;function H(d,a){this.index="number"===typeof a?a:0;this.i=0;this.buffer=d instanceof(F?Uint8Array:Array)?d:new (F?Uint8Array:Array)(32768);2*this.buffer.length<=this.index&&l(Error("invalid index"));this.buffer.length<=this.index&&this.f()}H.prototype.f=function(){var d=this.buffer,a,c=d.length,e=new (F?Uint8Array:Array)(c<<1);if(F)e.set(d);else for(a=0;a<c;++a)e[a]=d[a];return this.buffer=e};
... ... @@ -19454,112 +19659,6 @@ return /******/ (function(modules) { // webpackBootstrap
/***/ },
/* 42 */
/***/ function(module, exports) {
"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; }; }();
function _classCallCheck(instance, Constructor) { if (!(instance instanceof Constructor)) { throw new TypeError("Cannot call a class as a function"); } }
// //////////////////////////////////////////////////////////////////////////////
// 计时器
// //////////////////////////////////////////////////////////////////////////////
var TimerCounter = function () {
function TimerCounter() {
_classCallCheck(this, TimerCounter);
this.timer = 0;
this.delay = 1000;
this.counter = 0;
this.callBackDelay = 1; //回调间隔,单位(秒)
this.callBackFun = null; //回调函数
this.isStart = false;
}
_createClass(TimerCounter, [{
key: "addTimerCallBack",
value: function addTimerCallBack(_callBackFun, _callBackDelay) {
this.callBackFun = _callBackFun;
this.callBackDelay = _callBackDelay;
}
//开计时
}, {
key: "startTimer",
value: function startTimer() {
var _position = arguments.length > 0 && arguments[0] !== undefined ? arguments[0] : 0;
if (this.isStart) return;
this.isStart = true;
if (_position && parseInt(_position) > 0) {
this.counter = _position;
} else {
this.counter = 0;
}
console.log("startTimer", this.counter);
this.timerClear();
this.timerStart();
}
//停止
}, {
key: "stopTimer",
value: function stopTimer() {
console.log("stopTimer", this.counter);
this.isStart = false;
this.timerClear();
}
//计数
}, {
key: "updateCounter",
value: function updateCounter() {
this.counter++;
//this.counter++;
//console.log("TimerCounter",counter);
if (this.callBackFun != null && this.counter % this.callBackDelay == 0) {
this.callBackFun();
}
}
}, {
key: "timerStart",
value: function timerStart() {
this.timer = setInterval(this.updateCounter.bind(this), this.delay);
}
}, {
key: "timerClear",
value: function timerClear() {
clearInterval(this.timer);
}
}]);
return TimerCounter;
}();
var _default = TimerCounter;
exports.default = _default;
;
var _temp = function () {
if (typeof __REACT_HOT_LOADER__ === 'undefined') {
return;
}
__REACT_HOT_LOADER__.register(TimerCounter, "TimerCounter", "D:/work/McuClient/src/TimerCounter.js");
__REACT_HOT_LOADER__.register(_default, "default", "D:/work/McuClient/src/TimerCounter.js");
}();
;
/***/ },
/* 43 */
/***/ function(module, exports, __webpack_require__) {
... ... @@ -19571,7 +19670,7 @@ return /******/ (function(modules) { // webpackBootstrap
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 _Ape2 = __webpack_require__(40);
var _Ape2 = __webpack_require__(41);
var _Ape3 = _interopRequireDefault(_Ape2);
... ... @@ -19724,7 +19823,7 @@ return /******/ (function(modules) { // webpackBootstrap
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 _Ape2 = __webpack_require__(40);
var _Ape2 = __webpack_require__(41);
var _Ape3 = _interopRequireDefault(_Ape2);
... ... @@ -20454,7 +20553,7 @@ return /******/ (function(modules) { // webpackBootstrap
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 _Ape2 = __webpack_require__(40);
var _Ape2 = __webpack_require__(41);
var _Ape3 = _interopRequireDefault(_Ape2);
... ... @@ -20940,7 +21039,7 @@ return /******/ (function(modules) { // webpackBootstrap
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 _Ape2 = __webpack_require__(40);
var _Ape2 = __webpack_require__(41);
var _Ape3 = _interopRequireDefault(_Ape2);
... ... @@ -21585,7 +21684,7 @@ return /******/ (function(modules) { // webpackBootstrap
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 _Ape2 = __webpack_require__(40);
var _Ape2 = __webpack_require__(41);
var _Ape3 = _interopRequireDefault(_Ape2);
... ... @@ -21605,7 +21704,7 @@ return /******/ (function(modules) { // webpackBootstrap
var _MessageTypes2 = _interopRequireDefault(_MessageTypes);
var _zlib = __webpack_require__(41);
var _zlib = __webpack_require__(42);
var _utf = __webpack_require__(11);
... ...
... ... @@ -25,7 +25,7 @@ import ArrayBufferUtil from 'libs/ArrayBufferUtil';
import UTF8 from 'utf-8';
let loger = Loger.getLoger('MessageEntrance');
let _sdkInfo = {"version": "v.1.0.2017.0307", "author": "www.3mang.com"};
let _sdkInfo = {"version": "v.1.7.0.20170309-1", "author": "www.3mang.com"};
//APE
let _sass;
... ... @@ -132,10 +132,6 @@ export default class MessageEntrance extends Emiter {
this.pauseRecordPlayback = this._pauseRecordPlayback.bind(this);
this.seekRecordPlayback = this._seekRecordPlayback.bind(this);
this.addBuffer = this._addBuffer.bind(this);
this.read = this._read.bind(this);
this.writeBuffer = this._writeBuffer.bind(this);
//chatApe
this.sendChatMsg = this._sendChatMsg.bind(this);
... ... @@ -298,6 +294,11 @@ export default class MessageEntrance extends Emiter {
GlobalConfig.userId = _param.userId || "0";
GlobalConfig.userName = _param.userName || "";
//最长允许录制的时间
if(_param.allowRecordMaxTime){
GlobalConfig.allowRecordMaxTime=parseInt(_param.allowRecordMaxTime);
}
//获取课堂校验信息
if (_sass) {
_sass.getJoinParams(GlobalConfig.getClassInfo());
... ... @@ -569,6 +570,8 @@ export default class MessageEntrance extends Emiter {
joinClassSuccessCallBackData.province = GlobalConfig.province;//服务商
joinClassSuccessCallBackData.isp = GlobalConfig.isp;//服务商
joinClassSuccessCallBackData.classTimestamp=GlobalConfig.classTimestamp;//课堂进行的累积时间
joinClassSuccessCallBackData.recordPlaybackMaxTime=GlobalConfig.recordPlaybackMaxTime;//录制回放的总时间
loger.log('加入课堂成功');
console.log(joinClassSuccessCallBackData);
... ... @@ -1068,24 +1071,7 @@ export default class MessageEntrance extends Emiter {
}
}
_writeBuffer(_param) {
if (_parseBuf) {
_parseBuf.writeBuffer(_param);
}
}
_addBuffer(_arrayBuffer) {
if (_parseBuf) {
_parseBuf.addBuffer(_arrayBuffer);
}
}
_read(_param) {
if (_parseBuf) {
_parseBuf.read(_param);
}
}
// MCU 课堂成功
//录制回放加入 课堂成功
_joinRecordPlaybackSuccessHandler(_data) {
loger.log('加入录制回放成功.');
GlobalConfig.setCurrentStatus(GlobalConfig.statusCode_2);
... ... @@ -1132,6 +1118,9 @@ export default class MessageEntrance extends Emiter {
joinClassSuccessCallBackData.province = GlobalConfig.province;//服务商
joinClassSuccessCallBackData.isp = GlobalConfig.isp;//服务商
joinClassSuccessCallBackData.classTimestamp=GlobalConfig.classTimestamp;//课堂进行的累积时间
joinClassSuccessCallBackData.recordPlaybackMaxTime=GlobalConfig.recordPlaybackMaxTime;//录制回放的总时间
console.log(joinClassSuccessCallBackData);
//和加入课堂成功使用同样的消息处理
this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData);
... ...
... ... @@ -332,5 +332,5 @@ GlobalConfig.province = "";//服务商
GlobalConfig.isp ="";//服务商
GlobalConfig.isRecordPlayBack=false;//是否是录制回放,默认是否
GlobalConfig.allowRecordMaxTime=14400;//(秒)允许录制的最长时间,默认是4小时
export default GlobalConfig;
... ...
... ... @@ -63,6 +63,10 @@ MessageTypes.WHITEBOARD_ANNOTATION_UPDATE ="whiteboard_annotation_update";// 'wh
//MessageTypes.WHITEBOARD_ANNOTAION_DELETE = 'whiteboard.annotation.delete';
//MessageTypes.WHITEBOARD_ANNOTATION_CLEAR = 'whiteboard.annotation.clear';
//录制回放
MessageTypes.RECORD_PLAYBACK_UPDATE ="record_playback_update";//录制回放更新信息
//错误事件定义
MessageTypes.MCU_ERROR ="mcu_error";//"mcuError";//MCU错误(内部使用)
MessageTypes.ERROR_EVENT="error_event";//外部监听错误的消息ID(外部使用)
... ...
... ... @@ -11,21 +11,33 @@ import ArrayBufferUtil from 'libs/ArrayBufferUtil';
import Base64 from 'base64-js';
import GlobalConfig from 'GlobalConfig';
import EngineUtils from 'EngineUtils';
import TimerCounter from "TimerCounter";
let parseBuffer;
let parseBuffer;
// 日志对象
const loger = Loger.getLoger('RecordPlayBackParse');
const Default=0;//未开始
const PLAY=1;//播放中
const PAUSE=2;//暂停
const SEEK=3;//seek
const STOP=4;//停止
class RecordPlayBackParse extends Emiter {
constructor() {
super();
loger.log("RecordPlayBackParse");
parseBuffer = new ByteBuffer( ByteBuffer.DEFAULT_CAPACITY,ByteBuffer.LITTLE_ENDIAN);
parseBuffer = new ByteBuffer(ByteBuffer.DEFAULT_CAPACITY, ByteBuffer.LITTLE_ENDIAN);
parseBuffer.clear();
console.log(parseBuffer);
this._recordPlaybackTimestamp = 0;//回放的时间
this._recordPlaybackMaxTime = 0;//录制回放的总时间
this._apes = {};
this._messages = {};
this._timerCounter = new TimerCounter();//计时器
this._timerCounter.addTimerCallBack(this._timerCounterUptate.bind(this), 1);
}
//method--------------------内部---------------------------------------------
// 注册Ape
registerApe(ape) {
... ... @@ -40,11 +52,11 @@ class RecordPlayBackParse extends Emiter {
//*************非常重要******************
//客户端发送的所有125消息,MCU收到之后会痛120把消息返回给客户端,
//所以需要把125消息type转换为120,因为MCU在录制的时候是直接录制客户端发送的消息而不是MCU转换之后的
if(pduType==PduType.RCPDU_UNIFORM_SEND_DATA_REQUEST){
pduMsg.type=PduType.RCPDU_SEND_DATA_REQUEST;
pduType=PduType.RCPDU_SEND_DATA_REQUEST;
if (pduType == PduType.RCPDU_UNIFORM_SEND_DATA_REQUEST) {
pduMsg.type = PduType.RCPDU_SEND_DATA_REQUEST;
pduType = PduType.RCPDU_SEND_DATA_REQUEST;
}
loger.log('pduType',pduType);
loger.log('pduType', pduType);
switch (pduType) {
case PduType.RCPDU_CONNECT_PROVIDER_RESPONSE:
//加入课堂请求返回数据处理
... ... @@ -83,15 +95,41 @@ class RecordPlayBackParse extends Emiter {
}
}
//method------------外部接口-------------------------------------
//开启计时器
_startTimerCounter() {
this._timerCounter.startTimer();
}
//停止计时器
_stopTimerCounter() {
this._timerCounter.stopTimer();
}
_timerCounterUptate() {
this._recordPlaybackTimestamp = this._recordPlaybackTimestamp + 1;//计时
if(this._recordPlaybackTimestamp>=this._recordPlaybackMaxTime){
this._stopTimerCounter();
loger.log("录制结束...当前时间->", this._recordPlaybackTimestamp," 总时间->",this._recordPlaybackMaxTime);
this._emit(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":STOP});
return;
}
loger.log("录制回放中...", this._recordPlaybackTimestamp);
this._emit(MessageTypes.CLASS_UPDATE_TIMER, {"classTimestamp": this._recordPlaybackTimestamp});
//根据时间查找消息数据
this._searchMessageFromTime(this._recordPlaybackTimestamp);
}
//加载录制文件
readyRecordPlay(){
readyRecordPlay() {
this._stopTimerCounter();
loger.log("读取回放数据");
//let url = `http://123.56.73.119:80/h5dev/20170306/1357644520_20170306.rec`;
let url=`http://${ GlobalConfig.RecordServerIP}:${ GlobalConfig.RecordServerPort}/${GlobalConfig.recordFileName}`;
let url = `http://${ GlobalConfig.RecordServerIP}:${ GlobalConfig.RecordServerPort}/${GlobalConfig.recordFileName}`;
console.log(url);
fetch(url, {
timeout: 90000
timeout: 90000 //加载文件超时时间1分30秒
})
.then(ret => {
if (ret.ok) {
... ... @@ -117,57 +155,90 @@ class RecordPlayBackParse extends Emiter {
});
}
_loadRecordDataSuccess(arrayBuffer){
loger.log("获取录制回放数据的长度",arrayBuffer.byteLength);
if(parseBuffer){
_loadRecordDataSuccess(arrayBuffer) {
loger.log("获取录制回放数据的长度", arrayBuffer.byteLength);
if (parseBuffer) {
parseBuffer.clear();
parseBuffer.append(arrayBuffer);
//解析数据
this.parseArrayBuf();
}
this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS);
}
addArrayBuffer(arrayBuffer) {
loger.log("addArrayBuffer", arrayBuffer.byteLength);
parseBuffer.append(arrayBuffer, "binary");
}
read() {
//loger.log("readUInt64", parseBuffer.readUInt64(0));
//loger.log("readUInt32", parseBuffer.readUInt32(8));
//loger.log("readByte", parseBuffer.readByte(12));
let byteLength=parseBuffer.offset;
parseBuffer.byteOffset=0;
//解析数据
parseArrayBuf() {
this._messages = {};
let byteLength = parseBuffer.offset;
parseBuffer.byteOffset = 0;
var position = 0;
while (position<byteLength){
var time = parseBuffer.readUInt64(position, true);
position += 8;
var len = parseBuffer.readUInt32(position, true);
position += 4;
var byte = parseBuffer.buffer.slice(position, (position+len));
position += len;
console.log(time, len, byte);
this._everSocketMsgReceivedHandler(byte);
while (position < byteLength) {
let timestamp = parseBuffer.readUInt32(position);
position += 4;//4字节
let byteLen = parseBuffer.readUInt32(position);
position += 4;//4字节
let byteData = parseBuffer.buffer.slice(position, (position + byteLen));
position += byteLen;
console.log(timestamp, byteLen, byteData);
let messageItem=this._messages[timestamp];
if(!messageItem){
this._messages[timestamp]=[];//数组存数据,因为有1秒内收到多个消息的情况,timestamp是按秒记录的
messageItem=this._messages[timestamp];
}
messageItem.push({"timestamp": timestamp, "byteData": byteData});
//记录最后一个数据的时间戳作为整个录制回放的总时间戳
this._recordPlaybackMaxTime=timestamp;
}
this._recordPlaybackTimestamp=0;
this._stopTimerCounter();
GlobalConfig.recordPlaybackMaxTime=this._recordPlaybackMaxTime;
loger.log("录制回放数据解析完成,录制回放的总时间长为->",this._recordPlaybackMaxTime);
console.log(this._messages);
this._emit(RecordPlayBackParse.CLASS_JOIN_RECORD_PLAYBACK_SUCCESS,{"recordPlaybackMaxTime":this._recordPlaybackMaxTime});
}
writeBuffer() {
parseBuffer.writeUint64(123456789, 0).flip();
parseBuffer.writeUint32(22211122, 8).flip();
//根据时间查找数据
_searchMessageFromTime(_timestamp){
let msgDataArr=this._messages[_timestamp];
if(!msgDataArr){
//没有数据,需要查找当前时间点属于哪一个时间戳关键帧
}else {
//把时间点对应的数据发送,同一秒内有存在多个数据的情况
for(let i=0;i<msgDataArr.length;i++){
this._everSocketMsgReceivedHandler(msgDataArr[i].byteData);
}
}
}
//method------------外部接口-------------------------------------
startRecordPlayback(_param) {
this._startTimerCounter();
return {"code": ApeConsts.RETURN_SUCCESS,"data": "ok"};
//this._apes(MessageTypes.RECORD_PLAYBACK_UPDATE,{"status":});
}
stopRecordPlayback(_param) {
this._recordPlaybackTimestamp = 0;
this._stopTimerCounter();
return {"code": ApeConsts.RETURN_SUCCESS,"data": "ok"};
}
pauseRecordPlayback(_param) {
this._stopTimerCounter()
return {"code": ApeConsts.RETURN_SUCCESS,"data": "ok"};
}
seekRecordPlayback(_param) {
if(!_param||!_param.time){
return {"code": ApeConsts.RETURN_FAILED,"data": "参数不正确"};
}
this._stopTimerCounter()
this._recordPlaybackTimestamp = _param.time || 0;
this._startTimerCounter();
return {"code": ApeConsts.RETURN_SUCCESS,"data": "ok"};
}
}
... ...
... ... @@ -32,6 +32,7 @@ class TimerCounter {
}
//停止
stopTimer(){
if(!this.isStart) return;
console.log("stopTimer",this.counter);
this.isStart=false;
this.timerClear();
... ...
... ... @@ -51,7 +51,14 @@ export default class Ape extends Emiter {
//先收到onJoinSessionHandlerSuccess 后收到 onJoinChannelHandlerSuccess
loger.log("APE-->registerApe");
loger.log('APE-->registerApe->',
'SessionId',
this._session_id,
'SessionName',
this._session_name,
'SessionTag',
this._session_tag);
// 监听底层MCU课堂
this.mcu = McuObj;
this.mcu.on(MessageTypes.CLASS_JOIN_MCU_SUCCESS, this._mcuConferenceJoinSuccessHandler.bind(this));
... ...
... ... @@ -176,6 +176,12 @@ class ConferApe extends Ape {
//开启录制
startRecord() {
//如果录制的时间长超出设定的最大录制时间就不再录制
if(GlobalConfig.classTimestamp>=GlobalConfig.allowRecordMaxTime){
loger.warn('不能再录制,录制时间已经达到最大限制',GlobalConfig.classTimestamp);
return;
}
loger.log('startRecord', "isHost", GlobalConfig.isHost, "recordStatus", GlobalConfig.recordStatus);
//如果是host
if (GlobalConfig.isHost) {
... ...