Toggle navigation
Toggle navigation
此项目
正在载入...
Sign in
李勇
/
McuClient
转到一个项目
Toggle navigation
项目
群组
代码片段
帮助
Toggle navigation pinning
Project
Activity
Repository
Pipelines
Graphs
Issues
0
Merge Requests
0
Wiki
Network
Create a new issue
Builds
Commits
Authored by
李勇
8 years ago
Browse Files
Options
Browse Files
Download
Email Patches
Plain Diff
Commit
8ff455ef5f14bf692e387c84db663ef52be7591b
8ff455ef
1 parent
8574b321
解决录制回放时多路音视频显示不完整的问题
隐藏空白字符变更
内嵌
并排对比
正在显示
3 个修改的文件
包含
20 行增加
和
46 行删除
dist/McuClient.js
src/EngineEntrance.js
src/RecordPlayBackParse.js
dist/McuClient.js
查看文件 @
8ff455e
此 diff 太大无法显示。
src/EngineEntrance.js
查看文件 @
8ff455e
...
...
@@ -28,7 +28,7 @@ import MediaModule from 'apes/MediaModule';
import
UTF8
from
'utf-8'
;
let
loger
=
Loger
.
getLoger
(
'McuClient'
);
let
_sdkInfo
=
{
"version"
:
"v1.23.
2
.201705018"
,
"author"
:
"www.3mang.com"
};
let
_sdkInfo
=
{
"version"
:
"v1.23.
3
.201705018"
,
"author"
:
"www.3mang.com"
};
//APE
let
_sass
;
...
...
src/RecordPlayBackParse.js
查看文件 @
8ff455e
...
...
@@ -61,6 +61,7 @@ class RecordPlayBackParse extends Emiter {
this
.
_chatApeMssages
=
{};
//聊天数据
this
.
_videoApeMssages
=
{};
//视频数据
this
.
_audioApeMssages
=
{};
//音频数据
this
.
mediaChannleList
=
{};
this
.
_docApeMssages
=
{};
//文档数据
this
.
_whiteApeMssages
=
{};
//白板数据
}
...
...
@@ -119,7 +120,7 @@ class RecordPlayBackParse extends Emiter {
//解析和储存,录制回放EverSocket底层消息处理 data-数据;timestamp-数据对应的时间戳
_parseSaveSocketMsgReceivedHandler
(
data
,
timestamp
)
{
loger
.
log
(
'解析和储存
,录制回放EverSocket底层消息处理
'
);
loger
.
log
(
'解析和储存
录制回放数据->
'
);
let
pduMsg
=
pdu
.
decode_pdu
(
data
);
let
pduType
=
pduMsg
.
get
(
"type"
);
let
pduData
=
pduMsg
.
get
(
"data"
);
...
...
@@ -172,11 +173,11 @@ class RecordPlayBackParse extends Emiter {
break
;
case
ApeConsts
.
VIDEO_SESSION_ID
:
this
.
saveParseData
(
data
,
timestamp
,
this
.
_videoApeMssages
);
this
.
_
pduRegAdapterHandler
(
pduMsg
.
data
,
timestamp
,
data
,
ApeConsts
.
VIDEO_SESSION_ID
)
this
.
unPack
pduRegAdapterHandler
(
pduMsg
.
data
,
timestamp
,
data
,
ApeConsts
.
VIDEO_SESSION_ID
)
break
;
case
ApeConsts
.
AUDIO_SESSION_ID
:
this
.
saveParseData
(
data
,
timestamp
,
this
.
_audioApeMssages
);
this
.
_
pduRegAdapterHandler
(
pduMsg
.
data
,
timestamp
,
data
,
ApeConsts
.
AUDIO_SESSION_ID
)
this
.
unPack
pduRegAdapterHandler
(
pduMsg
.
data
,
timestamp
,
data
,
ApeConsts
.
AUDIO_SESSION_ID
)
break
;
default
:
break
;
...
...
@@ -188,7 +189,7 @@ class RecordPlayBackParse extends Emiter {
}
}
//保存数据
//保存
各个模块的MCU原始
数据
saveParseData
(
data
,
timestamp
,
apeMessages
)
{
let
messageItem
=
apeMessages
[
timestamp
];
if
(
!
messageItem
)
{
...
...
@@ -293,9 +294,9 @@ class RecordPlayBackParse extends Emiter {
let
byteData
=
parseBuffer
.
buffer
.
slice
(
position
,
(
position
+
byteLen
));
position
+=
byteLen
;
//按时间戳解保存数据
this
.
_parseSaveSocketMsgReceivedHandler
(
byteData
,
timestamp
);
//记录最后一个数据的时间戳作为整个录制回放的总时间戳
this
.
_recordPlaybackMaxTime
=
timestamp
;
}
...
...
@@ -330,19 +331,6 @@ class RecordPlayBackParse extends Emiter {
}
}
}
/*_searchMessageFromTime(_timestamp,_apeMessages){
let msgDataArr=this._messages[_timestamp];
if(!msgDataArr){
//没有数据,需要查找当前时间点属于哪一个时间戳关键帧
}else {
//把时间点对应的数据发送,同一秒内有存在多个数据的情况
for(let i=0;i<msgDataArr.length;i++){
this._everSocketMsgReceivedHandler(msgDataArr[i].byteData);
}
}
}*/
//method------------外部接口-------------------------------------
//开始播放
...
...
@@ -397,9 +385,13 @@ class RecordPlayBackParse extends Emiter {
this
.
_searchApeMessageKeyfram
(
this
.
_conferApeMssages
,
ApeConsts
.
CONFERENCE_SESSION_ID
);
this
.
_searchApeMessageKeyfram
(
this
.
_docApeMssages
,
ApeConsts
.
DOCSHARING_SESSION_ID
);
/*
//旧的音视频查找关键帧数据,多路音视频的时候存在显示问题,已经废弃
//this._searchApeMessageKeyfram(this._videoApeMssages, ApeConsts.VIDEO_SESSION_ID);
//this._searchApeMessageKeyfram(this._audioApeMssages, ApeConsts.AUDIO_SESSION_ID);
*/
//音视频模块的查找规则和其他模块不一样,音视频按频道查找,如果课堂内存在多个频道,都要查
this
.
searchMediaApeMessageKeyfram
(
this
.
mediaChannleList
);
//聊天模块、白板标注模块的比较特殊,消息是累计的,默认最多30条
...
...
@@ -435,9 +427,9 @@ class RecordPlayBackParse extends Emiter {
loger
.
log
(
"SEEK->APE"
,
ApeConsts
(
_apeId
),
this
.
_recordPlaybackTimestamp
,
"没有查找到相连的数据"
);
}
//音视频模块seek的时候,查找当前seek点的关键帧数据
//音视频模块seek的时候,查找当前seek点的关键帧数据
,所有频道的数据都需要查一下,否则多路视频的时候会显示不全
searchMediaApeMessageKeyfram
(
_apeMessages
){
loger
.
log
(
"
searchMediaApeMessageKeyfram->SEEK->APE"
)
loger
.
log
(
"
SEEK->查找音视频模块数据"
);
if
(
_apeMessages
)
{
for
(
let
k
in
_apeMessages
)
{
let
channelInfos
=
_apeMessages
[
k
];
...
...
@@ -447,7 +439,7 @@ class RecordPlayBackParse extends Emiter {
messageItem
=
channelInfos
[
i
];
if
(
messageItem
)
{
keyFrameSeekTime
=
(
this
.
_recordPlaybackTimestamp
-
i
);
loger
.
log
(
"
searchMediaApeMessageKeyfram->SEEK->APE->messageItem
"
,
messageItem
,
'keyFrameSeekTime->'
,
keyFrameSeekTime
)
loger
.
log
(
"
SEEK->查找音视频模块数据->
"
,
messageItem
,
'keyFrameSeekTime->'
,
keyFrameSeekTime
)
this
.
_everSocketMsgReceivedHandler
(
messageItem
.
byteData
,
keyFrameSeekTime
);
break
;
}
...
...
@@ -505,9 +497,10 @@ class RecordPlayBackParse extends Emiter {
}
}
}
// 数据同步处理 regBuffer已经解开的数据,timestamp 时间戳,data原始数据 ApeConsts.VIDEO_SESSION_ID
_pduRegAdapterHandler
(
regBuffer
,
timestamp
,
data
,
sessionId
)
{
//音视频的数据需要解析,然后按频道储存数据
// 解析pdu RCAdapterPdu的数据: regBuffer(RCAdapterPdu数据),timestamp(时间戳), data(mcu的原始数据) sessionId(类型)
unPackpduRegAdapterHandler
(
regBuffer
,
timestamp
,
data
,
sessionId
)
{
let
regPdu
;
let
regItems
;
let
regItemSize
;
...
...
@@ -521,18 +514,12 @@ class RecordPlayBackParse extends Emiter {
console
.
warn
(
'RCAdapterPdu->unpack-error->type类型不对'
)
return
;
}
//onsole.log('RCAdapterPdu',regPdu)
//loger.log(this._session_name + '数据同步消息');
//loger.log(this._session_name + '数据同步消息.同步条数', regItemSize,"seekTime->",seekTime);
for
(
var
i
=
0
;
i
<
regItemSize
;
++
i
)
{
let
regItem
=
regItems
[
i
];
let
regItemType
=
regItem
.
type
;
let
regItemData
=
regItem
.
itemData
;
//根据数据包中的type处理数据是否同步
if
(
pdu
.
RCPDU_REG_UPDATE_OBJ
!==
regItemType
)
{
if
(
pdu
.
RCPDU_REG_RESPONSE_OBJ
==
regItemType
)
{
let
regResponsePdu
=
pdu
[
'RCRegistryResponseObjPdu'
].
decode
(
regItemData
);
...
...
@@ -552,25 +539,19 @@ class RecordPlayBackParse extends Emiter {
switch
(
sub_type
)
{
case
pdu
.
RCPDU_REG_ROSTER_INSERT_PDU
:
//let rosterInsertData = pdu['RCRegstryRosterInsertItemPdu'].decode(user_data);
// loger.log('RCPDU_REG_ROSTER_INSERT_PDU---->');
let
rosterInsertData
=
pdu
[
'RCRegistryRosterInsertItemPdu'
].
decode
(
user_data
);
// console.log('RCRegistryRosterInsertItemPdu',rosterInsertData)
let
rosterInsertItems
=
rosterInsertData
.
items
;
let
rosterInsertItemsLen
=
rosterInsertItems
.
length
;
for
(
let
i
=
0
;
i
<
rosterInsertItemsLen
;
++
i
)
{
let
record
=
rosterInsertItems
[
i
];
let
recordId
=
record
.
item_id
;
let
recordData
=
pdu
[
'RCNodeInfoRecordPdu'
].
decode
(
record
.
item_data
);
//this.rosterInsertHandler(recordId, recordData);
//console.log('RCNodeInfoRecordPdu',recordData)
}
break
;
case
pdu
.
RCPDU_REG_ROSTER_DELETE_PDU
:
let
rosterDelData
=
pdu
[
'RCRegistryRosterDeleteItemPdu'
].
decode
(
user_data
);
// console.log('RCRegistryRosterDeleteItemPdu',rosterDelData)
// this.rosterDelHandler(rosterDelData.nodeId);
break
;
case
pdu
.
RCPDU_REG_ROSTER_UPDATE_PDU
:
let
rosterUpdateData
=
pdu
[
'RCRegistryRosterUpdateItemPdu'
].
decode
(
user_data
);
...
...
@@ -582,7 +563,6 @@ class RecordPlayBackParse extends Emiter {
let
nodeId
=
node
.
nodeId
;
let
nodeData
=
pdu
[
'RCNodeInfoRecordPdu'
].
decode
(
node
.
nodeData
);
// console.log('RCNodeInfoRecordPdu',nodeData)
//this.rosterUpdateHandler(nodeId, nodeData);
}
break
;
case
pdu
.
RCPDU_REG_TABLE_INSERT_PDU
:
...
...
@@ -595,15 +575,10 @@ class RecordPlayBackParse extends Emiter {
//loger.log("insertItem",insertItem);
//this.tableInsertHandler(insertItem.owner, insertItem.itemIdx, insertItem.itemData);
}
//文档数据数组内部自己处理数组
//this.tableInsertApeHandler(tableInsertItems);
break
;
case
pdu
.
RCPDU_REG_TABLE_DELETE_PDU
:
let
tableDeleteData
=
pdu
[
'RCRegistryTableDeleteItemPdu'
].
decode
(
user_data
);
//console.log("tableDeleteData",object_id,tableDeleteData);
// console.log('RCRegistryTableDeleteItemPdu',tableDeleteData)
//this.tableDeleteHandler(object_id, tableDeleteData);
break
;
case
pdu
.
RCPDU_REG_TABLE_UPDATE_PDU
:
let
tableUpdateData
=
pdu
[
'RCRegistryTableUpdateItemPdu'
].
decode
(
user_data
);
...
...
@@ -638,7 +613,6 @@ class RecordPlayBackParse extends Emiter {
loger
.
log
(
"RCAudioChannelInfoPdu->unPackPdu->error->"
+
tableItem
.
itemIdx
+
" err:"
+
err
.
message
);
}
}
}
break
;
case
pdu
.
RCPDU_REG_QUEUE_UPDATE_PDU
:
...
...
@@ -646,11 +620,11 @@ class RecordPlayBackParse extends Emiter {
case
pdu
.
RCPDU_REG_QUEUE_INSERT_PDU
:
loger
.
warn
(
'REG QUEUE ARE IGNORED'
);
break
;
default
:
break
;
}
}
}
}
RecordPlayBackParse
.
prototype
.
CLASS_JOIN_RECORD_PLAYBACK_SUCCESS
=
RecordPlayBackParse
.
CLASS_JOIN_RECORD_PLAYBACK_SUCCESS
=
'class_join_recordPlayback_success'
;
//加入录制回放成功
...
...
请
注册
或
登录
后发表评论