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
3abfe5f43985ca642466f8a5456fb4655db23e58
3abfe5f4
1 parent
100f8d66
webRtc-dev
...
20170922-1
20171019-1
20171120-1w
dev
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
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
1.server数据不再从本地加载,直接获取从Sass返回的数据;2.增加日志上报;3.人员属性中增加噪音消除的字段和自动调整麦克风音量的字段
显示空白字符变更
内嵌
并排对比
正在显示
19 个修改的文件
包含
402 行增加
和
306 行删除
src/EngineEntrance.js
src/EverSocket.js
src/GlobalConfig.js
src/IpManager.js
src/LogManager.js
src/Loger.js
src/RecordPlayBackParse.js
src/apes/Ape.js
src/apes/ConferApe.js
src/apes/CursorApe.js
src/apes/DocApe.js
src/apes/MediaSharedApe.js
src/apes/MusicSharedApe.js
src/apes/QuestionApe.js
src/apes/ShareApe.js
src/apes/VideoApe.js
src/apes/WhiteBoardApe.js
src/mcu.js
src/pdus/pro.js
src/EngineEntrance.js
查看文件 @
3abfe5f
...
...
@@ -33,6 +33,7 @@ import MediaSharedApe from 'apes/MediaSharedApe';
import
MusicSharedApe
from
'apes/MusicSharedApe'
;
import
QuestionApe
from
'apes/QuestionApe'
;
import
UTF8
from
'utf-8'
;
import
LogManager
from
'LogManager'
;
let
loger
=
Loger
.
getLoger
(
'McuClient'
);
...
...
@@ -57,8 +58,8 @@ export default class MessageEntrance extends Emiter {
constructor
()
{
super
();
//sdk 信息
GlobalConfig
.
sdkVersion
=
"v1.63.1.20170731"
;
loger
.
warn
(
"sdkVersion:"
+
GlobalConfig
.
sdkVersion
);
GlobalConfig
.
sdkVersion
=
"v1.65.24.20170806"
;
loger
.
warn
(
"sdkVersion:"
+
GlobalConfig
.
sdkVersion
);
//获取设备和系统信息
SystemConfig
.
getSystemInfo
();
...
...
@@ -258,8 +259,14 @@ export default class MessageEntrance extends Emiter {
this
.
switchServer
=
this
.
_switchMcuIpHandler
.
bind
(
this
);
//切换mcu服务器
this
.
switchMediaServer
=
this
.
_switchMediaServer
.
bind
(
this
);
//手动切换ms服务器
this
.
setDebugInfo
=
this
.
_setDebugInfo
.
bind
(
this
);
//设置debug信息
this
.
setOpenSendLogToServer
=
this
.
_setOpenSendLogToServer
.
bind
(
this
);
//设置是否上报日志
this
.
addLog
=
this
.
_addLog
.
bind
(
this
);
this
.
addWarn
=
this
.
_addWarn
.
bind
(
this
);
this
.
addError
=
this
.
_addError
.
bind
(
this
);
}
//设置是否输出日志
_setDebugInfo
(
_data
)
{
loger
.
log
(
"设置debug信息-->"
,
_data
);
if
(
_data
)
{
...
...
@@ -267,6 +274,37 @@ export default class MessageEntrance extends Emiter {
}
}
//设置是否上报日志
_setOpenSendLogToServer
(
_data
)
{
loger
.
log
(
"设置日志上报状态-->"
,
_data
);
if
(
_data
)
{
LogManager
.
IS_OPEN_SEND_LOG
=
_data
.
isOpen
}
}
//--------------外部上传日志的接口------------------------
//上传log日志
_addLog
(
_data
)
{
if
(
_data
)
{
LogManager
.
addLog
(
LogManager
.
LOG
,
_data
);
}
}
//上传warn日志
_addWarn
(
_data
)
{
if
(
_data
)
{
LogManager
.
addLog
(
LogManager
.
WARN
,
_data
);
}
}
//上传error日志
_addError
(
_data
)
{
if
(
_data
)
{
LogManager
.
addLog
(
LogManager
.
ERROR
,
_data
);
}
}
//--------------外部上传日志的接口--END ----------------------
//设置设备信息
_setDeviceInfo
(
_data
)
{
loger
.
log
(
"设置设备信息-->"
,
_data
);
...
...
@@ -276,6 +314,8 @@ export default class MessageEntrance extends Emiter {
GlobalConfig
.
videoQuality
=
parseInt
(
_data
.
videoQuality
);
GlobalConfig
.
curVideoQuality
=
parseInt
(
_data
.
curVideoQuality
);
GlobalConfig
.
micGain
=
_data
.
micGain
||
50
;
GlobalConfig
.
micNoise
=
_data
.
micNoise
||
50
;
GlobalConfig
.
autoGain
=
_data
.
autoGain
||
false
;
GlobalConfig
.
speakerVolume
=
_data
.
speakerVolume
||
50
;
GlobalConfig
.
micCode
=
_data
.
micCode
||
0
;
GlobalConfig
.
curCamera
=
_data
.
curCamera
||
''
;
...
...
@@ -301,18 +341,18 @@ export default class MessageEntrance extends Emiter {
//mcu异常监听
_mcuErrorHandler
(
_data
)
{
let
errorMessage
=
{};
let
errorMessage
=
{};
//目前只有 userId和身份相同时被踢的时候有type值判断
switch
(
_data
.
type
){
switch
(
_data
.
type
)
{
case
MessageTypes
.
ERR_CLASS_KICK_OUT
:
case
MessageTypes
.
ERR_CLASS_REMOTE_LANDING
:
if
(
_data
){
errorMessage
=
{
"code"
:
_data
.
type
,
"reson"
:
MessageTypes
.
ErrorReson
[
_data
.
type
],
"data"
:
_data
.
data
};
if
(
_data
)
{
errorMessage
=
{
"code"
:
_data
.
type
,
"reson"
:
MessageTypes
.
ErrorReson
[
_data
.
type
],
"data"
:
_data
.
data
};
}
break
;
default
:
errorMessage
=
{
"code"
:
_data
,
"reson"
:
MessageTypes
.
ErrorReson
[
_data
],
"data"
:
{}};
errorMessage
=
{
"code"
:
_data
,
"reson"
:
MessageTypes
.
ErrorReson
[
_data
],
"data"
:
{}};
break
;
}
...
...
@@ -580,17 +620,21 @@ export default class MessageEntrance extends Emiter {
//先加载本地Server.json文件,然后获取userIp新
_ipManager
.
loadServerJosn
(
function
(
_callbackData
)
{
//本地Server.json加载后需要判断是否有数据,如果没有数据就用Sass的
//_callbackData.data=ret;
//_callbackData.ret=1;
ServerConfig
.
localServerJson
=
_callbackData
.
data
;
console
.
warn
(
"本地SERVER数据"
,
_callbackData
);
if
(
!
ServerConfig
.
localServerJson
||!
ServerConfig
.
localServerJson
.
MCU
||!
ServerConfig
.
localServerJson
.
MS
){
ServerConfig
.
serverList
=
ServerConfig
.
sassServerJson
;
//本地JSON数据加载完数据无效,使用Sass的
if
(
_callbackData
)
{
ServerConfig
.
localServerJson
=
_callbackData
.
data
;
console
.
warn
(
"本地SERVER数据"
,
_callbackData
);
}
else
{
ServerConfig
.
localServerJson
=
{};
}
if
(
!
ServerConfig
.
localServerJson
||
!
ServerConfig
.
localServerJson
.
MCU
||
!
ServerConfig
.
localServerJson
.
MS
)
{
ServerConfig
.
serverList
=
ServerConfig
.
sassServerJson
;
//本地JSON数据加载完数据无效,使用Sass的
loger
.
warn
(
"使用从Sass获取的server"
);
}
else
{
ServerConfig
.
serverList
=
ServerConfig
.
localServerJson
;
}
else
{
ServerConfig
.
serverList
=
ServerConfig
.
localServerJson
;
loger
.
warn
(
"使用从本地获取的server"
);
}
//通过userIp获取用户的信息
_ipManager
.
getUserIpInfo
(
""
,
GlobalConfig
.
userIp
,
_this
.
_getUserIpCallbackHandler
.
bind
(
_this
),
2000
);
})
}
...
...
@@ -618,7 +662,7 @@ export default class MessageEntrance extends Emiter {
}
//开始加入课堂前第一次测速
_startFirstTestBestServer
(){
_startFirstTestBestServer
()
{
//加入课堂之前开始第一次选点
let
_this
=
this
;
//推流地址测速
...
...
@@ -749,9 +793,9 @@ export default class MessageEntrance extends Emiter {
GlobalConfig
.
hlsPullListFinal
=
GlobalConfig
.
rsPullListFinal
;
}
if
(
!
ServerConfig
.
localServerJson
||!
ServerConfig
.
localServerJson
.
MCU
||!
ServerConfig
.
localServerJson
.
MS
)
{
if
(
!
ServerConfig
.
localServerJson
||
!
ServerConfig
.
localServerJson
.
MCU
||
!
ServerConfig
.
localServerJson
.
MS
)
{
loger
.
warn
(
"课堂最终使用的服务列表->来自Sass"
);
}
else
{
}
else
{
loger
.
warn
(
"课堂最终使用的服务列表->来自本地Server.json"
);
}
...
...
@@ -761,6 +805,7 @@ export default class MessageEntrance extends Emiter {
loger
.
warn
(
"hlsListFinal"
,
GlobalConfig
.
hlsPullListFinal
);
loger
.
warn
(
"rsListFinal"
,
GlobalConfig
.
rsPullListFinal
);
}
//从Sass中选择的mcu、ms列表
_choiceMcuAndMsListFromSass
()
{
//1.根据user信息获取服务器列表
...
...
@@ -781,7 +826,7 @@ export default class MessageEntrance extends Emiter {
GlobalConfig
.
isp
,
ServerConfig
.
serverList
);
GlobalConfig
.
rtmpPullListFinal
=
_ipManager
.
getServerListForUserInfo
(
GlobalConfig
.
rtmpPullListFinal
=
_ipManager
.
getServerListForUserInfo
(
"RTMP_PULL"
,
GlobalConfig
.
country
,
GlobalConfig
.
province
,
...
...
@@ -797,7 +842,7 @@ export default class MessageEntrance extends Emiter {
GlobalConfig
.
isp
,
ServerConfig
.
serverList
);
GlobalConfig
.
hlsPullListFinal
=
_ipManager
.
getServerListForUserInfo
(
GlobalConfig
.
hlsPullListFinal
=
_ipManager
.
getServerListForUserInfo
(
"HLS_PULL"
,
GlobalConfig
.
country
,
GlobalConfig
.
province
,
...
...
@@ -925,19 +970,19 @@ export default class MessageEntrance extends Emiter {
loger
.
warn
(
'HLS拉流地址->HLS->'
,
GlobalConfig
.
MS_PLAY_HLS_IP
,
GlobalConfig
.
MS_PLAY_HLS_PORT
);
loger
.
warn
(
'HLS录制回放拉流地址->HLS->'
,
GlobalConfig
.
RS_RECORD_PLAY_IP
,
GlobalConfig
.
RS_RECORD_PLAY_PORT
);
if
(
!
GlobalConfig
.
MS_PUBLISH_IP
)
{
if
(
!
GlobalConfig
.
MS_PUBLISH_IP
)
{
loger
.
error
(
"推流MS地址地址无效"
);
}
if
(
!
GlobalConfig
.
MS_PLAY_RTMP_IP
)
{
if
(
!
GlobalConfig
.
MS_PLAY_RTMP_IP
)
{
loger
.
warn
(
"RTMP拉流地址无效->使用推流地址作为RTMP拉流地址"
);
GlobalConfig
.
MS_PLAY_RTMP_IP
=
GlobalConfig
.
MS_PUBLISH_IP
;
GlobalConfig
.
MS_PLAY_RTMP_PORT
=
GlobalConfig
.
MS_PUBLISH_PORT
GlobalConfig
.
MS_PLAY_RTMP_IP
=
GlobalConfig
.
MS_PUBLISH_IP
;
GlobalConfig
.
MS_PLAY_RTMP_PORT
=
GlobalConfig
.
MS_PUBLISH_PORT
}
if
(
!
GlobalConfig
.
MS_PLAY_HLS_IP
)
{
if
(
!
GlobalConfig
.
MS_PLAY_HLS_IP
)
{
loger
.
warn
(
"HLS拉流地址无效->使用HLS回放地址作为HLS拉流地址"
);
GlobalConfig
.
MS_PLAY_HLS_IP
=
GlobalConfig
.
MS_PLAY_HLS_PORT
;
GlobalConfig
.
RS_RECORD_PLAY_IP
=
GlobalConfig
.
RS_RECORD_PLAY_PORT
GlobalConfig
.
MS_PLAY_HLS_IP
=
GlobalConfig
.
MS_PLAY_HLS_PORT
;
GlobalConfig
.
RS_RECORD_PLAY_IP
=
GlobalConfig
.
RS_RECORD_PLAY_PORT
}
if
(
_mcu
)
{
...
...
@@ -1023,6 +1068,14 @@ export default class MessageEntrance extends Emiter {
joinClassSuccessCallBackData
.
explorerVersion
=
GlobalConfig
.
explorerVersion
;
joinClassSuccessCallBackData
.
os
=
GlobalConfig
.
os
;
//设置日志上报所需的信息
LogManager
.
serverAndLoacTimeDistanc
=
GlobalConfig
.
serverAndLoacTimeDistanc
;
//本地时间和服务器时间的差值(秒)
LogManager
.
classId
=
GlobalConfig
.
classId
;
//课堂号
LogManager
.
userId
=
GlobalConfig
.
userId
;
//userId
LogManager
.
nodeId
=
GlobalConfig
.
nodeId
;
//nodeId
LogManager
.
userName
=
GlobalConfig
.
userName
;
//用户名称
LogManager
.
logUrl
=
GlobalConfig
.
logUrl
;
//日志服务器地址 //http://log.3mang.com:8888
loger
.
log
(
'加入课堂成功->'
);
loger
.
log
(
joinClassSuccessCallBackData
);
...
...
@@ -1141,7 +1194,7 @@ export default class MessageEntrance extends Emiter {
loger
.
warn
(
'录制回放->不进行MS-PULL动态选点'
);
return
;
}
if
(
!
GlobalConfig
.
rtmpPullListFinal
||
GlobalConfig
.
rtmpPullListFinal
.
length
<
1
)
{
if
(
!
GlobalConfig
.
rtmpPullListFinal
||
GlobalConfig
.
rtmpPullListFinal
.
length
<
1
)
{
return
;
}
let
_this
=
this
;
...
...
@@ -1159,7 +1212,7 @@ export default class MessageEntrance extends Emiter {
}
}
//如果RTMP没有配置地址,那么还是使用推流的地址
if
(
!
GlobalConfig
.
MS_PLAY_RTMP_IP
)
{
if
(
!
GlobalConfig
.
MS_PLAY_RTMP_IP
)
{
GlobalConfig
.
MS_PLAY_RTMP_IP
=
GlobalConfig
.
MS_PUBLISH_IP
;
GlobalConfig
.
MS_PLAY_RTMP_PORT
=
GlobalConfig
.
MS_PUBLISH_PORT
;
}
...
...
@@ -1173,7 +1226,7 @@ export default class MessageEntrance extends Emiter {
loger
.
warn
(
'录制回放->不进行MS-HLS动态选点'
);
return
;
}
if
(
!
GlobalConfig
.
hlsPullListFinal
||
GlobalConfig
.
hlsPullListFinal
.
length
<
1
)
{
if
(
!
GlobalConfig
.
hlsPullListFinal
||
GlobalConfig
.
hlsPullListFinal
.
length
<
1
)
{
return
;
}
let
_this
=
this
;
...
...
@@ -1191,7 +1244,7 @@ export default class MessageEntrance extends Emiter {
}
}
//如果HLS没有配置地址,那么还是使用推流的地址
if
(
!
GlobalConfig
.
MS_PLAY_HLS_IP
)
{
if
(
!
GlobalConfig
.
MS_PLAY_HLS_IP
)
{
GlobalConfig
.
MS_PLAY_HLS_IP
=
GlobalConfig
.
RS_RECORD_PLAY_IP
;
GlobalConfig
.
MS_PLAY_HLS_PORT
=
GlobalConfig
.
RS_RECORD_PLAY_PORT
;
}
...
...
@@ -1406,6 +1459,7 @@ export default class MessageEntrance extends Emiter {
callBack
.
type
=
0
;
}
loger
.
warn
(
'离开课堂->'
,
MessageTypes
.
CLASS_EXIT
,
callBack
);
LogManager
.
sendLogToServer
();
this
.
_emit
(
MessageTypes
.
CLASS_EXIT
,
callBack
);
//断开MCU连接
...
...
@@ -1430,6 +1484,7 @@ export default class MessageEntrance extends Emiter {
GlobalConfig
.
maxAudioChannels
=
_data
.
maxAudioChannels
;
GlobalConfig
.
maxMediaChannels
=
Math
.
max
(
GlobalConfig
.
maxVideoChannels
,
GlobalConfig
.
maxAudioChannels
);
loger
.
warn
(
"当前课堂允许最大推流数量-"
+
GlobalConfig
.
maxMediaChannels
+
" 视频频:"
+
GlobalConfig
.
maxVideoChannels
+
" 音频:"
+
GlobalConfig
.
maxAudioChannels
);
GlobalConfig
.
ssTunnelAppURL
=
_data
.
ssTunnelAppURL
||
''
;
//屏幕共享插件的地址
//视频质量相关设置,每次加入课堂都按最新的获取设置
...
...
@@ -1440,7 +1495,7 @@ export default class MessageEntrance extends Emiter {
//是否自动开始(身份是host的时候才用到的)
GlobalConfig
.
isAutoStartClass
=
_data
.
autoRecord
||
0
;
GlobalConfig
.
logUrl
=
_data
.
logUrl
||
""
;
GlobalConfig
.
logUrl
=
_data
.
logUrl
||
""
;
GlobalConfig
.
serverTime
=
_data
.
serverTime
||
new
Date
().
getTime
();
//获取服务器时间戳
GlobalConfig
.
serverAndLoacTimeDistanc
=
(
new
Date
().
getTime
()
-
GlobalConfig
.
serverTime
)
/
1000
;
//当前系统时间和服务器时间的差值 (秒)
loger
.
warn
(
"服务器时间:"
+
GlobalConfig
.
serverTime
+
" 系统时间:"
+
new
Date
().
getTime
()
+
" 时间差:"
+
GlobalConfig
.
serverAndLoacTimeDistanc
);
...
...
@@ -1473,11 +1528,11 @@ export default class MessageEntrance extends Emiter {
//存从Sass获取的MS和MCU服务列表
let
serverJsonStr
=
_data
.
serverJson
;
try
{
ServerConfig
.
sassServerJson
=
JSON
.
parse
(
serverJsonStr
);
///Sass返回的Server数据
}
catch
(
err
){
loger
.
error
(
"从SASS获取的SERVER数据解析失败"
,
err
.
message
);
let
serverJsonStr
=
_data
.
serverJson
;
try
{
ServerConfig
.
sassServerJson
=
JSON
.
parse
(
serverJsonStr
);
///Sass返回的Server数据
}
catch
(
err
)
{
loger
.
error
(
"从SASS获取的SERVER数据解析失败"
,
err
.
message
);
}
/*
...
...
@@ -1530,7 +1585,7 @@ export default class MessageEntrance extends Emiter {
//开启录制回放流程
loger
.
warn
(
"开启录制回放流程"
);
//根据用户的userIp信息从sever.json和Sass中选择最终mcu和推流拉流数据列表
ServerConfig
.
serverList
=
ServerConfig
.
sassServerJson
;
ServerConfig
.
serverList
=
ServerConfig
.
sassServerJson
;
this
.
_choiceMcuAndMsListFromSass
();
//获取MCU和MS 推流拉流、录制回放的默认地址
this
.
getMcuAndMsDefaultServerIp
();
...
...
@@ -1603,184 +1658,6 @@ export default class MessageEntrance extends Emiter {
}
//获取课堂所有参数 api/meeting/detail.do? flash中的接口文件是 getClassParam.do(20170727之前的规则)
/*_sassGetClassParamSuccessHandler(_data) {
loger.log('获取课堂课堂信息完成.');
//包含整个课堂最全的信息,储存数据
if (_data) {
GlobalConfig.mcuDelay = _data.h5Delay || 0; //mcu消息延迟的时间间隔,单位(秒),结合客户端传的messageDelay的值使用
GlobalConfig.className = _data.meetingName || "";
GlobalConfig.classBeginTime = _data.beginTime || "";
GlobalConfig.classEndTime = _data.endTime || "";
GlobalConfig.userIp = _data.userIp || "";
GlobalConfig.maxVideoChannels = _data.maxVideoChannels;
GlobalConfig.maxAudioChannels = _data.maxAudioChannels;
GlobalConfig.maxMediaChannels = Math.max(GlobalConfig.maxVideoChannels, GlobalConfig.maxAudioChannels);
GlobalConfig.ssTunnelAppURL = _data.ssTunnelAppURL || ''; //屏幕共享插件的地址
//视频质量相关设置,每次加入课堂都按最新的获取设置
GlobalConfig.fps = _data.fps || 15;
GlobalConfig.gop = _data.gop || 3;
GlobalConfig.videoQuality = parseInt(_data.videoQuality);
GlobalConfig.curVideoQuality = GlobalConfig.videoQuality;
//是否自动开始(身份是host的时候才用到的)
GlobalConfig.isAutoStartClass = _data.autoRecord || 0;
GlobalConfig.serverTime = _data.serverTime || new Date().getTime(); //获取服务器时间戳
GlobalConfig.serverAndLoacTimeDistanc = (new Date().getTime() - GlobalConfig.serverTime) / 1000; //当前系统时间和服务器时间的差值 (秒)
loger.warn("服务器时间:" + GlobalConfig.serverTime + " 系统时间:" + new Date().getTime() + " 时间差:" + GlobalConfig.serverAndLoacTimeDistanc);
GlobalConfig.setDocListPrepare(_data.docListPrepare); //提前上传的文档列表
GlobalConfig.setRecordList(_data.recordList); //录制回放地址
GlobalConfig.setDocList(_data.docList); //文档地址
GlobalConfig.setMsList(_data.msList); //推流播流服务器地址(需要对列表中的地址进行分类,里面包含了推流和拉流的地址,目前主要是乐视的需要区分开)
GlobalConfig.setRsList(_data.rsList); //播放m3u8格式的地址(录制回放时使用)
GlobalConfig.setMcuList(_data.mcuList); //mcu
GlobalConfig.setMusicList(_data.musicList); //
GlobalConfig.setMusicListPrepare(_data.musicListPrepare); //提前上传的声音文件列表
GlobalConfig.setVideoCDNAddr(_data.videoCDNAddr); //cdn加速的拉流地址,直播的时候才使用
GlobalConfig.setMediaShareList(_data.sharedMediaList); //提前上传的媒体共享文件列表
//MCU地址
if (_data.mcuList && _data.mcuList.length > 0) {
//随机选择一个
let index = parseInt(Math.random() * _data.mcuList.length);
GlobalConfig.MCUServerIP = _data.mcuList[index].ip || "";
GlobalConfig.MCUServerPort = _data.mcuList[index].port || "";
loger.log('初始->MCU->.', GlobalConfig.MCUServerIP, GlobalConfig.MCUServerPort);
}
//录制回放时m3u8播流地址
if (_data.rsList && _data.rsList.length > 0) {
let index = parseInt(Math.random() * _data.rsList.length);
GlobalConfig.RS_RECORD_PLAY_IP = _data.rsList[index].ip || "";
GlobalConfig.RS_RECORD_PLAY_PORT = _data.rsList[index].port || "";
loger.log('初始->RS->.', GlobalConfig.RS_RECORD_PLAY_IP, GlobalConfig.RS_RECORD_PLAY_PORT);
}
//上课中音视频推流地址
if (GlobalConfig.msList && GlobalConfig.msList.length > 0) {
let index = parseInt(Math.random() * GlobalConfig.msList.length);
GlobalConfig.MS_PUBLISH_IP = GlobalConfig.msList[index].ip || "";
GlobalConfig.MS_PUBLISH_PORT = GlobalConfig.msList[index].port || "";
}
loger.log('初始->MS->.', GlobalConfig.MS_PUBLISH_IP, GlobalConfig.MS_PUBLISH_PORT);
//播流的地址和推流地址需要分开的时候,单独设置拉流的地址 rtmp(目前乐视使用)
if (GlobalConfig.rtmpPullList && GlobalConfig.rtmpPullList.length > 0) {
//有单独的rtmp拉流地址
let index = parseInt(Math.random() * GlobalConfig.rtmpPullList.length);
GlobalConfig.MS_PLAY_RTMP_IP = GlobalConfig.rtmpPullList[index].ip || "";
GlobalConfig.MS_PLAY_RTMP_PORT = GlobalConfig.rtmpPullList[index].port || "";
} else {
//如果没有单独的rtmp拉流地址,和推流地址一样即可
GlobalConfig.MS_PLAY_RTMP_IP = GlobalConfig.MS_PUBLISH_IP;
GlobalConfig.MS_PLAY_RTMP_PORT = GlobalConfig.MS_PUBLISH_PORT;
}
loger.log('初始->MSPull->.', GlobalConfig.MS_PLAY_RTMP_IP, GlobalConfig.MS_PLAY_RTMP_PORT);
//播流的地址和推流地址需要分开的时候,单独设置拉流的地址 hls(目前乐视使用)
if (GlobalConfig.hlsList && GlobalConfig.hlsList.length > 0) {
//有单独的hls拉流地址
let index = parseInt(Math.random() * GlobalConfig.hlsList.length);
GlobalConfig.MS_PLAY_HLS_IP = GlobalConfig.hlsList[index].ip || "";
GlobalConfig.MS_PLAY_HLS_PORT = GlobalConfig.hlsList[index].port || "";
} else {
//没有单独的hls拉流地址,和录制回放地址一样即可
GlobalConfig.MS_PLAY_HLS_IP = GlobalConfig.RS_RECORD_PLAY_IP;
GlobalConfig.MS_PLAY_HLS_PORT = GlobalConfig.RS_RECORD_PLAY_PORT;
}
loger.log('初始->MSHls->.', GlobalConfig.MS_PLAY_HLS_IP, GlobalConfig.MS_PLAY_HLS_PORT);
//直播的时候,拉流(rtmp和hls)需要从 videoCDNAddr中获取
//20170531-新规则,所有课堂类型都支持加速
// if(GlobalConfig.classType==ApeConsts.CLASS_TYPE_2&&GlobalConfig.videoCDNAddrList.length>0){
//20170629-直播课堂和移动端设备的时候支持
if (GlobalConfig.classType == ApeConsts.CLASS_TYPE_2 || GlobalConfig.isMobile) {
if (GlobalConfig.videoCDNAddrList.length > 0) {
//videoCDNAddrList中rtmppush和hls是混在一起的,需要分离开;
let listLen = GlobalConfig.videoCDNAddrList.length;
for (let i = 0; i < listLen; i++) {
let ipItem = GlobalConfig.videoCDNAddrList[i];
if (ipItem) {
if (ipItem.indexOf('hls') >= 0) {
//直播的时候m3u8拉流地址
GlobalConfig.MS_PLAY_HLS_IP = ipItem; //ip包含了端口
GlobalConfig.MS_PLAY_HLS_PORT = "";
loger.log('videoCDNAddr>初始->MSHls', GlobalConfig.MS_PLAY_HLS_IP);
}
if (ipItem.indexOf('rtmppull')>= 0) {
//直播的时候rtmp拉流地址
GlobalConfig.MS_PLAY_RTMP_IP = ipItem; //ip包含了端口
GlobalConfig.MS_PLAY_RTMP_PORT = '';
loger.log('videoCDNAddr->初始->MSPull', GlobalConfig.MS_PLAY_RTMP_IP);
}
}
}
} else {
loger.error('videoCDNAddr数据无效->', GlobalConfig.videoCDNAddr);
}
} else {
loger.warn('非直播课堂或不是移动端->不需要videoCDN加速');
}
//文档地址
if (_data.docList && _data.docList.length > 0) {
//doc上传地址,随机获取一个
let index = parseInt(Math.random() * _data.docList.length);
loger.log("docServer->", _data.docList[index]);
GlobalConfig.DOCServerIP = _data.docList[index].ip || "";
GlobalConfig.DOCServerPort = _data.docList[index].port || "";
loger.log('初始->DOC->.', GlobalConfig.DOCServerIP, GlobalConfig.DOCServerPort);
}
//record
if (_data.recordList && _data.recordList.length > 0) {
let index = parseInt(Math.random() * _data.recordList.length);
GlobalConfig.RecordServerIP = _data.recordList[index].ip || "";
GlobalConfig.RecordServerPort = _data.recordList[index].port || "";
loger.log('初始->RECORD->.', GlobalConfig.RecordServerIP, GlobalConfig.RecordServerPort);
}
}
//这里需要考虑是否加延迟处理,课堂信息刚获取完成,客户端需要根据数据创建界面UI,等创建完成后再加入课堂是最合适的(目前没有加延迟)
this._emit(MessageTypes.CLASS_GET_INFO_SUCCESS, GlobalConfig.getClassInfo());
if (_data.currentInfo) {
//根据从Sass获取的数据信息,同步最后一次保存的课堂状态信息
loger.log("本地同步最后一次保存过的课堂状态信息");
try {
GlobalConfig.setClassStatusInfo(JSON.parse(_data.currentInfo));
} catch (err) {
loger.warn("从Sass获取的课堂数据JSON转换失败->");
console.log("currentInfo", _data.currentInfo);
GlobalConfig.setClassStatusInfo(_data.currentInfo);
}
loger.log(GlobalConfig.classStatusInfo);
} else {
loger.log("还没有保存过课堂状信息");
}
//录制回放不需要获取ip信息和选点
if (GlobalConfig.isRecordPlayBack) {
if (_recordPlayback) {
//开启录制回放流程
loger.log("开启录制回放流程");
_recordPlayback.readyRecordPlay();
} else {
loger.warn("开启录制回放流程失败->还未创建模块");
}
} else {
//根据用户的userIp获取信息,选点
this.getUserIpInfo();
}
}*/
//ChatApe
// 发送聊天消息
_sendChatMsg
(
_messageInfo
)
{
...
...
@@ -2330,7 +2207,7 @@ export default class MessageEntrance extends Emiter {
"fileId"
:
""
+
value
.
id
,
"fileName"
:
value
.
name
,
"seek"
:
0
,
"duration"
:
parseInt
(
value
.
duration
)
||
0
"duration"
:
parseInt
(
value
.
duration
)
||
0
};
this
.
_sendMusicSharedUpload
(
paramInfo
);
}
...
...
@@ -2356,7 +2233,7 @@ export default class MessageEntrance extends Emiter {
"fileId"
:
""
+
value
.
id
,
"fileName"
:
value
.
name
,
"seek"
:
0
,
"duration"
:
parseInt
(
value
.
duration
)
||
0
"duration"
:
parseInt
(
value
.
duration
)
||
0
};
this
.
_sendMediaSharedUpload
(
paramInfo
);
}
...
...
@@ -2440,6 +2317,7 @@ export default class MessageEntrance extends Emiter {
//录制回放加入 课堂成功
_joinRecordPlaybackSuccessHandler
(
_data
)
{
loger
.
log
(
'加入录制回放成功.'
);
LogManager
.
IS_OPEN_SEND_LOG
=
false
;
//录制回放不需要上报日志
GlobalConfig
.
setCurrentStatus
(
GlobalConfig
.
statusCode_2
);
//返回给客户端初始化成功的数据
...
...
src/EverSocket.js
查看文件 @
3abfe5f
...
...
@@ -29,6 +29,9 @@ class EverSocket extends Emiter {
begin
(
ip
,
port
)
{
this
.
_clearHistory
();
loger
.
log
(
'开始WebSocket应用.'
);
if
(
!
ip
){
loger
.
error
(
'开始MCU连接->MCU连接地址无效'
);
}
this
.
_enableEverSocket
=
true
;
this
.
wsURL
=
'ws://'
+
ip
+
':'
+
port
;
this
.
_newConnection
();
...
...
@@ -51,10 +54,8 @@ class EverSocket extends Emiter {
send
(
data
)
{
if
(
this
.
_connected
)
{
if
(
data
)
{
loger
.
log
(
'SEND MESSAGE-->byteLength->'
,
data
.
byteLength
);
}
else
{
loger
.
log
(
'SEND MESSAGE---->'
);
if
(
data
&&
data
.
byteLength
>
1024
)
{
loger
.
warn
(
'发送到MCU的数据文件超过1k-->byteLength->'
,
data
.
byteLength
);
}
this
.
websocket
.
send
(
data
);
}
else
{
...
...
@@ -168,7 +169,7 @@ class EverSocket extends Emiter {
_onMessage
(
messageEvent
)
{
this
.
_lastActiveTime
=
Date
.
now
();
const
bufferData
=
messageEvent
.
data
;
loger
.
log
(
'RECEIVE MESSAGE-->byteLength->'
,
bufferData
.
byteLength
);
//
loger.log('RECEIVE MESSAGE-->byteLength->',bufferData.byteLength);
if
(
bufferData
.
byteLength
>
0
)
{
this
.
_emit
(
EverSocket
.
MESSAGE
,
bufferData
);
}
...
...
src/GlobalConfig.js
查看文件 @
3abfe5f
...
...
@@ -452,7 +452,9 @@ GlobalConfig.microphones = []; //麦克风列表
GlobalConfig
.
curCamera
=
""
;
//当前选择的摄像头
GlobalConfig
.
curMicrophone
=
''
;
//当前选择的麦克风
GlobalConfig
.
micGain
=
50
;
//音量(0-80)
GlobalConfig
.
micGain
=
50
;
//音量(0-100)
GlobalConfig
.
micNoise
=
50
;
//(0-100)
GlobalConfig
.
autoGain
=
false
;
//自动调节麦克风音量
GlobalConfig
.
speakerVolume
=
50
;
//扬声器音量(0-80)
GlobalConfig
.
micCode
=
0
;
//麦克风模式
...
...
src/IpManager.js
查看文件 @
3abfe5f
...
...
@@ -24,6 +24,14 @@ class IpManager extends Emiter {
}
//获取本地Server JSON
loadServerJosn
(
_callback
){
//20170803-不再加载本地的server.json数据,以后都从Sass获取
if
(
_callback
)
{
_callback
(
serverInfo
);
return
;
}
return
;
//-------------加载本地数据的代码-------------------
let
serverInfo
=
{
ret
:
-
1
};
...
...
src/LogManager.js
0 → 100644
查看文件 @
3abfe5f
/**
*
* LOG 信息管理(上传和输出)
* */
class
LogManager
{
constructor
()
{
}
/*
* 添加需要上报的日志信息到队列中
* _type
* _msg
* */
static
addLog
(
_type
,
_msg
)
{
//无效的数据不上报
if
(
!
_msg
)
{
return
;
}
if
(
this
.
IS_OPEN_SEND_LOG
==
true
||
this
.
IS_OPEN_SEND_LOG
==
"true"
)
{
//显示格式20170729 16:42:00 INFO _msg
let
sendMsgStr
=
""
;
switch
(
_type
)
{
case
this
.
ERROR
:
sendMsgStr
=
this
.
getCurrentDateTime
()
+
" ERROR "
+
_msg
;
//this.errorList.push(sendMsgStr);
break
;
case
this
.
WARN
:
sendMsgStr
=
this
.
getCurrentDateTime
()
+
" WARN "
+
_msg
;
//this.warnList.push(sendMsgStr);
break
;
case
this
.
LOG
:
sendMsgStr
=
this
.
getCurrentDateTime
()
+
" INFO "
+
_msg
;
// this.logList.push(sendMsgStr);
break
;
default
:
sendMsgStr
=
this
.
getCurrentDateTime
()
+
" INFO "
+
_msg
;
// this.logList.push(sendMsgStr);
break
;
}
this
.
allLogList
.
push
(
sendMsgStr
);
let
_this
=
this
;
clearTimeout
(
this
.
logDelayTimer
);
this
.
logDelayTimer
=
setTimeout
(
function
()
{
_this
.
checkAndSendLog
();
},
1600
);
}
}
static
checkAndSendLog
()
{
//发送日志
/*this.sendLogToServer(LogManager.ERROR);
this.sendLogToServer(LogManager.WARN);
this.sendLogToServer(LogManager.LOG);*/
//不区分日志类型,按时间先后顺序发送
this
.
sendLogToServer
(
-
1
);
}
//发送log到服务器
static
sendLogToServer
(
_msgType
)
{
if
(
!
this
.
logUrl
)
{
console
.
warn
(
"日志服务器地址无效->无法上传日志"
);
return
;
}
const
msgType
=
_msgType
;
let
msgData
=
""
;
let
tempArr
=
[];
let
msgLen
=
0
;
/* switch (msgType) {
case LogManager.ERROR:
msgLen = this.errorList.length;
for (let i = 0; i < msgLen; i++) {
let item = this.errorList.shift();
if (item) {
tempArr.push(item);
msgData += item + " \n ";
}
}
break;
case LogManager.WARN:
msgLen = this.warnList.length;
for (let i = 0; i < msgLen; i++) {
let item = this.warnList.shift();
if (item) {
tempArr.push(item);
msgData += item + " \n ";
}
}
break;
case LogManager.LOG:
msgLen = this.logList.length;
for (let i = 0; i < msgLen; i++) {
let item = this.logList.shift();
if (item) {
tempArr.push(item);
msgData += item + " \n ";
}
}
break;
default:
msgLen = this.allLogList.length;
for (let i = 0; i < msgLen; i++) {
let item = this.allLogList.shift();
if (item) {
tempArr.push(item);
msgData += item + " \n ";
}
}
break;
}
*/
msgLen
=
this
.
allLogList
.
length
;
for
(
let
i
=
0
;
i
<
msgLen
;
i
++
)
{
let
item
=
this
.
allLogList
.
shift
();
if
(
item
)
{
tempArr
.
push
(
item
);
msgData
+=
item
+
" \n "
;
}
}
if
(
tempArr
.
length
<
1
||
!
msgData
)
{
//console.log("没有数据->不需要上报");
return
;
}
//console.log("上报的日志->", tempArr, msgData);
//需要过滤掉&字符,否则Sass无法取数据
msgData
=
msgData
.
replace
(
/&/g
,
"#"
);
fetch
(
encodeURI
(
this
.
logUrl
),
{
method
:
'POST'
,
headers
:
{
"Content-Type"
:
"application/x-www-form-urlencoded; charset=utf-8"
},
body
:
`
classId
=
$
{
this
.
classId
}
&
userId
=
$
{
this
.
userId
}
&
nodeId
=
$
{
this
.
nodeId
}
&
type
=
$
{
msgType
}
&
data
=
$
{
msgData
}
`
,
timeout
:
3000
})
.
then
(
ret
=>
{
if
(
ret
.
ok
)
{
return
ret
.
json
();
}
else
{
console
.
error
(
`保存日志信息
-
网络异常
.
状态码
:
$
{
ret
.
status
}
`
);
throw
''
;
}
})
.
then
(
ret
=>
{
if
(
ret
==
0
)
{
console
.
log
(
'保存日志信息 完成'
);
tempArr
=
[];
}
else
{
console
.
warn
(
'保存日志信息 失败.'
,
ret
);
this
.
allLogList
=
tempArr
.
concat
(
this
.
allLogList
);
tempArr
=
[];
}
})
.
catch
(
err
=>
{
console
.
error
(
`保存日志信息
.
状态码
:
$
{
err
}
`
);
this
.
allLogList
=
tempArr
.
concat
(
this
.
allLogList
);
tempArr
=
[]
});
}
//计算当前服务器时间
static
getCurrentDateTime
()
{
let
currentServerTime
=
new
Date
().
getTime
()
-
this
.
serverAndLoacTimeDistanc
*
1000
;
//计算当前服务器时间
let
timeStr
=
new
Date
(
currentServerTime
).
toLocaleString
();
if
(
timeStr
)
{
timeStr
=
timeStr
.
replace
(
/年|月/g
,
"-"
).
replace
(
/日/g
,
" "
);
}
return
timeStr
;
}
}
LogManager
.
allLogList
=
[];
//所有需要上报的日志列表
LogManager
.
logList
=
[];
//日志上报列表
LogManager
.
warnList
=
[];
//警告日志上报列表
LogManager
.
errorList
=
[];
//错误日志上报列表
LogManager
.
serverAndLoacTimeDistanc
=
0
;
//本地时间和服务器时间的差值(秒)
LogManager
.
classId
=
0
;
//课堂号
LogManager
.
userId
=
""
;
//userId
LogManager
.
nodeId
=
0
;
//nodeId
LogManager
.
userName
=
""
;
//用户名称
LogManager
.
logUrl
=
""
;
//日志服务器地址 //http://log.3mang.com:8888
LogManager
.
ERROR
=
1
;
LogManager
.
WARN
=
2
;
LogManager
.
LOG
=
3
;
LogManager
.
DATA
=
5
;
LogManager
.
logDelayTimer
=
0
;
LogManager
.
IS_OPEN_SEND_LOG
=
true
;
//是否上报日志
export
default
LogManager
;
...
...
src/Loger.js
查看文件 @
3abfe5f
...
...
@@ -13,6 +13,8 @@
//
// //////////////////////////////////////////////////////////////////////////////
import
LogManager
from
"./LogManager"
;
class
Loger
{
constructor
(
info
)
{
this
.
sdkInfo
=
info
||
''
;
...
...
@@ -20,8 +22,8 @@ class Loger {
}
initId
()
{
if
(
!
this
.
sdkInfo
){
console
.
log
(
"this.sdkInfo无效-->"
,
this
.
sdkInfo
);
if
(
!
this
.
sdkInfo
)
{
console
.
log
(
"this.sdkInfo无效-->"
,
this
.
sdkInfo
);
return
''
;
}
const
infoType
=
Object
.
prototype
.
toString
.
call
(
this
.
sdkInfo
);
...
...
@@ -32,15 +34,6 @@ class Loger {
return
this
.
sdkInfo
.
mid
||
''
;
}
return
''
;
/* const infoType = this.sdkInfo.constructor.name.toLowerCase();
if (infoType === 'string') {
return this.sdkInfo;
}
if (infoType === 'object') {
return this.sdkInfo.mid || '';
}
return '';*/
}
log
(...
msg
)
{
...
...
@@ -54,40 +47,57 @@ class Loger {
error
(...
msg
)
{
this
.
_log
(
Loger
.
ERROR
,
msg
);
}
data
(...
msg
)
{
this
.
_log
(
Loger
.
DATA
,
msg
);
}
_log
(
type
,
msg
)
{
if
(
!
Loger
.
IS_DEBUG
){
return
;
}
msg
=
JSON
.
stringify
(
msg
);
let
logMsg
=
`
$
{
this
.
id
}
->
$
{
msg
}
`
;
if
(
type
>=
Loger
.
logLevel
)
{
switch
(
type
)
{
case
Loger
.
LOG
:
Loger
.
LogManager
.
addLog
(
Loger
.
LOG
,
logMsg
);
//如果是debug模式就输出
if
(
Loger
.
IS_DEBUG
)
{
console
.
log
(
logMsg
);
}
break
;
case
Loger
.
WARN
:
Loger
.
LogManager
.
addLog
(
Loger
.
WARN
,
logMsg
);
//如果是debug模式就输出
if
(
Loger
.
IS_DEBUG
)
{
console
.
warn
(
logMsg
);
}
break
;
case
Loger
.
ERROR
:
Loger
.
LogManager
.
addLog
(
Loger
.
ERROR
,
logMsg
);
//如果是debug模式就输出
if
(
Loger
.
IS_DEBUG
)
{
console
.
error
(
logMsg
);
}
break
;
case
Loger
.
DATA
:
//如果是debug模式就输出
if
(
Loger
.
IS_DEBUG
)
{
console
.
log
(
logMsg
);
break
;
}
break
;
default
:
break
;
}
}
}
Loger
.
IS_DEBUG
=
true
;
Loger
.
LOG
=
0
;
Loger
.
WARN
=
1
;
Loger
.
ERROR
=
2
;
Loger
.
IS_DEBUG
=
true
;
Loger
.
LOG
=
3
;
Loger
.
WARN
=
2
;
Loger
.
ERROR
=
1
;
Loger
.
NO
=
Infinity
;
Loger
.
logLevel
=
Loger
.
LOG
;
Loger
.
logLevel
=
0
;
Loger
.
DATA
=
5
;
Loger
.
LogManager
=
LogManager
;
export
default
{
getLoger
:
function
getLoger
(
info
)
{
return
new
Loger
(
info
);
...
...
@@ -103,6 +113,7 @@ export default {
ERROR
:
Loger
.
ERROR
,
NO
:
Loger
.
NO
,
DATA
:
Loger
.
DATA
,
IS_DEBUG
:
Loger
.
IS_DEBUG
,
IS_DEBUG
:
Loger
.
IS_DEBUG
,
LogManager
:
LogManager
};
...
...
src/RecordPlayBackParse.js
查看文件 @
3abfe5f
...
...
@@ -221,7 +221,7 @@ class RecordPlayBackParse extends Emiter {
_timerCounterUptate
()
{
this
.
_recordPlaybackTimestamp
=
this
.
_recordPlaybackTimestamp
+
1
;
//计时
loger
.
log
(
"录制回放中..."
,
this
.
_recordPlaybackTimestamp
);
//
loger.log("录制回放中...", this._recordPlaybackTimestamp);
this
.
_emit
(
MessageTypes
.
CLASS_UPDATE_TIMER
,
{
"classTimestamp"
:
this
.
_recordPlaybackTimestamp
});
if
(
this
.
_recordPlaybackTimestamp
>=
this
.
_recordPlaybackMaxTime
)
{
...
...
src/apes/Ape.js
查看文件 @
3abfe5f
...
...
@@ -118,11 +118,11 @@ export default class Ape extends Emiter {
let
object_id
=
regUpdatedItem
.
objId
;
let
user_data
=
regUpdatedItem
.
userData
;
loger
.
log
(
'REG OBJECT EVENT ->'
,
pdu
.
id2type
(
sub_type
));
//
loger.log('REG OBJECT EVENT ->', pdu.id2type(sub_type));
switch
(
sub_type
)
{
case
pdu
.
RCPDU_REG_ROSTER_INSERT_PDU
:
//let rosterInsertData = pdu['RCRegstryRosterInsertItemPdu'].decode(user_data);
loger
.
log
(
'RCPDU_REG_ROSTER_INSERT_PDU---->'
);
//
loger.log('RCPDU_REG_ROSTER_INSERT_PDU---->');
console
.
log
(
user_data
);
let
rosterInsertData
=
pdu
[
'RCRegistryRosterInsertItemPdu'
].
decode
(
user_data
);
let
rosterInsertItems
=
rosterInsertData
.
items
;
...
...
@@ -329,7 +329,7 @@ export default class Ape extends Emiter {
}
send
(
appPdu
)
{
loger
.
log
(
'Ape发送数据NORMAL PDU'
);
//
loger.log('Ape发送数据NORMAL PDU');
//console.log(appPdu);
//loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code);
if
(
GlobalConfig
.
getCurrentStatus
().
code
==
0
||
GlobalConfig
.
getCurrentStatus
().
code
==
1
)
{
...
...
@@ -359,14 +359,6 @@ export default class Ape extends Emiter {
// 发送当前APE(session uniform包)
sendUniform
(
appPdu
,
top
)
{
loger
.
log
(
'Ape发送数据UNIFORM PDU'
);
//console.log(appPdu);
//loger.log('当前的状态============',GlobalConfig.getCurrentStatus().code);
//if (GlobalConfig.getCurrentStatus().code == 0 || GlobalConfig.getCurrentStatus().code == 1) {
// this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_SEND_FAILED_NO_JOIN);
// return;
//}
if
(
!
this
.
_classInfo
){
loger
.
warn
(
'Ape发送数据UNIFORM PDU->失败->ape课堂数据无效->'
,
this
.
_classInfo
);
return
;
...
...
@@ -412,7 +404,7 @@ export default class Ape extends Emiter {
PduConsts
.
SEG_ONCE
);
uniformPdu
.
data
=
appPdu
.
toArrayBuffer
();
loger
.
log
(
'Ape发送数据UNIFORM PDU'
,
uniformPdu
);
//
loger.log('Ape发送数据UNIFORM PDU',uniformPdu);
// Mcu发送
this
.
mcu
.
send
(
uniformPdu
);
}
...
...
src/apes/ConferApe.js
查看文件 @
3abfe5f
...
...
@@ -67,7 +67,7 @@ class ConferApe extends Ape {
nodeInfoRecordPdu
.
userData
=
userDataPdu
.
toArrayBuffer
();
nodeInfoRecordPdu
.
deviceType
=
GlobalConfig
.
deviceType
;
//设备类型
loger
.
log
(
'开始加入->'
,
nodeInfoRecordPdu
);
//
loger.log('开始加入->', nodeInfoRecordPdu);
let
item
=
new
pdu
[
'RCRegistryRosterItemPdu'
];
item
.
nodeId
=
nodeInfoRecordPdu
.
nodeId
;
...
...
@@ -118,6 +118,8 @@ class ConferApe extends Ape {
nodeInfoRecordPdu
.
curVideoQuality
=
GlobalConfig
.
curVideoQuality
;
nodeInfoRecordPdu
.
micGain
=
GlobalConfig
.
micGain
;
nodeInfoRecordPdu
.
micNoise
=
GlobalConfig
.
micNoise
;
nodeInfoRecordPdu
.
autoGain
=
GlobalConfig
.
autoGain
;
nodeInfoRecordPdu
.
speakerVolume
=
GlobalConfig
.
speakerVolume
;
nodeInfoRecordPdu
.
micCode
=
GlobalConfig
.
micCode
;
nodeInfoRecordPdu
.
curCamera
=
GlobalConfig
.
curCamera
;
...
...
@@ -151,14 +153,13 @@ class ConferApe extends Ape {
nodeInfoRecordPdu
.
explorerVersion
=
GlobalConfig
.
explorerVersion
;
nodeInfoRecordPdu
.
os
=
GlobalConfig
.
os
;
nodeInfoRecordPdu
.
sdkVersion
=
GlobalConfig
.
sdkVersion
||
"未知版本"
;
return
nodeInfoRecordPdu
;
}
//更新角色数据
updateUserInfo
()
{
let
nodeInfoRecordPdu
=
this
.
getNodeInfo
();
loger
.
log
(
'更新用户信息->'
,
nodeInfoRecordPdu
);
//
loger.log('更新用户信息->', nodeInfoRecordPdu);
let
userDataPdu
=
new
pdu
[
'RCNodeInfoUserDataPdu'
];
userDataPdu
.
qq
=
''
;
userDataPdu
.
skype
=
''
;
...
...
@@ -646,8 +647,6 @@ class ConferApe extends Ape {
tableUpdateHandler
(
owner
,
itemIdx
,
itemData
)
{
try
{
let
model
=
this
.
unPackPdu
(
owner
,
itemIdx
,
itemData
);
console
.
log
(
'课堂数据更新->'
,
model
);
//处理课堂更新的信息
if
(
model
&&
model
.
classStatusInfo
)
{
try
{
...
...
@@ -663,10 +662,10 @@ class ConferApe extends Ape {
this
.
_emit
(
MessageTypes
.
STOP_ALL_MEDIA_PUBLISH
);
}
}
// loger.log('课堂数据更新->');
//通知应用层更新课堂状态
let
classInfo
=
GlobalConfig
.
classStatusInfo
;
loger
.
log
(
'通知应用层更新课堂状态->CLASS_UPTATE_STATUS'
)
//
loger.log('通知应用层更新课堂状态->CLASS_UPTATE_STATUS')
this
.
_emit
(
MessageTypes
.
CLASS_UPTATE_STATUS
,
classInfo
);
//如果MCU已经断开连接,停止计时器
...
...
@@ -923,7 +922,7 @@ class ConferApe extends Ape {
this
.
rosterLen
=
Object
.
keys
(
this
.
rosters
).
length
;
GlobalConfig
.
rosterNumber
=
this
.
rosterLen
;
//记录当前的总人数
newNodeData
.
rosterLen
=
this
.
rosterLen
;
loger
.
log
(
"人员加入->"
,
newNodeData
);
//
loger.log("人员加入->", newNodeData);
this
.
_emit
(
MessageTypes
.
CLASS_INSERT_ROSTER
,
{
"nodeId"
:
nodeId
,
"nodeData"
:
newNodeData
});
this
.
emitRosterChange
();
}
else
{
...
...
@@ -1001,7 +1000,7 @@ class ConferApe extends Ape {
}
else
{
let
user
=
this
.
rosters
[
nodeId
];
if
(
user
)
{
loger
.
log
(
nodeId
,
"->离开课堂->身份->"
,
user
.
r
ole
);
loger
.
log
(
nodeId
,
"->离开课堂->身份->"
,
user
.
userR
ole
);
}
delete
this
.
rosters
[
nodeId
];
this
.
rosterLen
=
Object
.
keys
(
this
.
rosters
).
length
;
...
...
@@ -1040,7 +1039,7 @@ class ConferApe extends Ape {
///////数据的封包和解包/////////////////////////////////////////
packPdu
(
_param
,
_itemIdx
)
{
loger
.
log
(
"课堂===packPdu "
);
//
loger.log("课堂===packPdu ");
//验证坐标点集合数组是否合法
if
(
_param
==
null
||
_itemIdx
==
null
)
{
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_APE_INTERFACE_PARAM_WRONG
);
...
...
@@ -1071,7 +1070,7 @@ class ConferApe extends Ape {
classStatusInfo
.
currentSceneTableId
=
GlobalConfig
.
currentSceneTableId
;
classStatusInfo
.
silence
=
GlobalConfig
.
silence
;
classStatusInfo
.
silenceUsers
=
JSON
.
stringify
(
GlobalConfig
.
silenceUsers
);
loger
.
log
(
"classStatusInfo--->"
,
classStatusInfo
);
//
loger.log("classStatusInfo--->", classStatusInfo);
/*
optional uint32 item_idx=1;
...
...
@@ -1091,7 +1090,7 @@ class ConferApe extends Ape {
}
unPackPdu
(
owner
,
itemIdx
,
itemData
)
{
loger
.
log
(
"课堂数据->unPackPdu "
);
//
loger.log("课堂数据->unPackPdu ");
if
(
owner
==
null
||
itemIdx
==
null
||
itemData
==
null
)
{
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_APE_INTERFACE_PARAM_WRONG
);
return
null
;
...
...
src/apes/CursorApe.js
查看文件 @
3abfe5f
...
...
@@ -43,7 +43,7 @@ class CursorApe extends Ape {
}
_joinSessionHandler
(
_data
)
{
loger
.
log
(
"RCPDU_SESSION_JOIN_RESPONSE"
);
//
loger.log("RCPDU_SESSION_JOIN_RESPONSE");
}
// 添加鼠标
...
...
src/apes/DocApe.js
查看文件 @
3abfe5f
...
...
@@ -100,7 +100,7 @@ class DocApe extends Ape {
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_APE_INTERFACE_PARAM_WRONG
);
return
null
;
}
loger
.
log
(
"文档->updaterDoc "
,
_docDataModel
);
//
loger.log("文档->updaterDoc ", _docDataModel);
let
docDataModelPdu
=
this
.
packPdu
(
_docDataModel
,
_itemIdx
);
let
tableItemPdu
=
new
pdu
[
'RCRegistryTableItemPdu'
];
...
...
@@ -130,7 +130,7 @@ class DocApe extends Ape {
adapterPdu
.
type
=
pdu
.
RCPDU_REG_ADAPTER
;
adapterPdu
.
item
.
push
(
adapterItemPdu
);
loger
.
log
(
"发送更新文档.itemIdx="
+
tableItemPdu
.
itemIdx
);
//
loger.log("发送更新文档.itemIdx=" + tableItemPdu.itemIdx);
this
.
sendUniform
(
adapterPdu
,
true
);
}
//获取文档的完整地址和所有图片
...
...
@@ -296,6 +296,7 @@ class DocApe extends Ape {
_docPackFullInfo
(
_itemDataInfo
){
let
itemDataInfo
=
_itemDataInfo
;
let
getDocAddress
=
this
.
getDocFullAddress
(
_itemDataInfo
);
loger
.
log
(
'docPackFullInfo->'
,
itemDataInfo
);
if
(
getDocAddress
.
code
==
ApeConsts
.
RETURN_SUCCESS
){
itemDataInfo
.
images
=
getDocAddress
.
docFullAddress
.
images
||
[];
itemDataInfo
.
pdf
=
getDocAddress
.
docFullAddress
.
pdf
||
""
;
...
...
@@ -305,7 +306,7 @@ class DocApe extends Ape {
itemDataInfo
.
pdf
=
''
;
itemDataInfo
.
html
=
''
;
}
loger
.
log
(
'docPackFullInfo->'
,
itemDataInfo
);
return
itemDataInfo
;
}
//更新文档模块的录制信息,每次开启录制的时候需要把当前文档的信息更新一次
...
...
@@ -439,7 +440,6 @@ class DocApe extends Ape {
loger
.
log
(
'文档切换显示模式'
,
paramInfo
);
//获取已经存在的数据
let
docDataModel
=
this
.
docList
[
paramInfo
.
itemIdx
];
if
(
docDataModel
==
null
)
{
loger
.
log
(
'文档切换显示模式->文档不存在'
,
paramInfo
);
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_APE_INTERFACE_PARAM_WRONG
);
...
...
@@ -459,13 +459,16 @@ class DocApe extends Ape {
//获取已经存在的数据
let
docDataModel
=
this
.
docList
[
paramInfo
.
itemIdx
];
if
(
docDataModel
==
null
)
{
loger
.
log
(
'
documentCommand失败,
文档不存在'
,
paramInfo
);
loger
.
log
(
'
文档显示控制失败->
文档不存在'
,
paramInfo
);
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_APE_INTERFACE_PARAM_WRONG
);
return
;
}
//更新数据的字段
docDataModel
.
action
=
ApeConsts
.
DOC_ACTION_COMMAND
;
docDataModel
.
showType
=
parseInt
(
paramInfo
.
showType
)
||
0
;
//0;//完整显示;1;//按宽度显示;2;//按高度显示
docDataModel
.
curV
=
parseInt
(
paramInfo
.
curV
)
||
0
;
//垂直方向的滚动条进度百分比 0-100
docDataModel
.
curH
=
parseInt
(
paramInfo
.
curH
)
||
0
;
//水平方向的滚动条进度百分比 0-100
docDataModel
.
scale
=
parseInt
(
paramInfo
.
scale
)
||
100
;
//文档缩放百分比 0-100
this
.
updaterDoc
(
docDataModel
,
docDataModel
.
itemIdx
);
}
...
...
@@ -598,7 +601,7 @@ class DocApe extends Ape {
tableUpdateApeHandler
(
_tableUpdateItems
,
_seekTime
)
{
let
tableUpdateItemsLen
=
_tableUpdateItems
.
length
;
loger
.
log
(
'更新文档->'
,
"activeDocId->"
,
GlobalConfig
.
activeDocId
,
"更新的数量->"
,
tableUpdateItemsLen
);
//
loger.log('更新文档->', "activeDocId->", GlobalConfig.activeDocId, "更新的数量->", tableUpdateItemsLen);
for
(
let
i
=
0
;
i
<
tableUpdateItemsLen
;
++
i
)
{
let
tableItem
=
_tableUpdateItems
[
i
];
if
(
tableItem
)
{
...
...
@@ -689,7 +692,7 @@ class DocApe extends Ape {
///////数据的封包和解包/////////////////////////////////////////
packPdu
(
_param
,
_itemIdx
)
{
loger
.
log
(
"文档->packPdu"
);
//
loger.log("文档->packPdu");
//验证坐标点集合数组是否合法
if
(
_param
==
null
||
_itemIdx
==
null
)
{
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_APE_INTERFACE_PARAM_WRONG
);
...
...
@@ -706,8 +709,8 @@ class DocApe extends Ape {
docModelPdu
.
creatUserId
=
_param
.
creatUserId
||
"0"
;
docModelPdu
.
url
=
_param
.
url
||
""
;
//这个地址没用到,数据太长占用资源 暂停使用//"http://101.200.150.192/DocSharing/data/h5test/20170206-171100025/7e9c4178cac1133e0dd9d5b583439122.jpg";
docModelPdu
.
relativeUrl
=
_param
.
relativeUrl
||
""
;
//"/DocSharing/data/h5test/20170206-171100025/7e9c4178cac1133e0dd9d5b583439122.jpg";
docModelPdu
.
curV
=
_param
.
curV
||
0
;
docModelPdu
.
curH
=
_param
.
curH
||
0
;
docModelPdu
.
curV
=
parseInt
(
_param
.
curV
)
||
0
;
docModelPdu
.
curH
=
parseInt
(
_param
.
curH
)
||
0
;
docModelPdu
.
scale
=
_param
.
scale
||
100
;
//按百分比
docModelPdu
.
visible
=
_param
.
visible
||
false
;
docModelPdu
.
action
=
_param
.
action
||
ApeConsts
.
DOC_ACTION_NORMAL
;
//0,无操作, 1翻页、2.显示/隐藏, 3缩放/滚动
...
...
@@ -728,7 +731,7 @@ class DocApe extends Ape {
}
try
{
let
docModelPdu
=
pdu
[
'RCDocSendDataModelPdu'
].
decode
(
itemData
);
loger
.
log
(
"文档===>unPackPdu"
);
//
loger.log("文档===>unPackPdu");
return
docModelPdu
;
}
catch
(
err
)
{
loger
.
log
(
"文档===>unPackPdu->Pdu解析错误->itemIdx="
+
itemIdx
+
"->err:"
+
err
.
message
);
...
...
src/apes/MediaSharedApe.js
查看文件 @
3abfe5f
...
...
@@ -470,7 +470,7 @@ class MediaSharedApe extends Ape {
}
onJoinChannelHandlerSuccess
()
{
loger
.
log
(
this
.
_session_name
+
' 媒体共享加入频道成功'
);
//
loger.log(this._session_name + ' 媒体共享加入频道成功');
if
(
this
.
_apeDelayed
)
{
setTimeout
(()
=>
{
this
.
_emit
(
MediaSharedApe
.
MEDIASHARED_JOIN_CHANNEL_SUCCESS
);
...
...
@@ -503,7 +503,7 @@ class MediaSharedApe extends Ape {
///////数据的封包和解包/////////////////////////////////////////
packPdu
(
_param
,
_itemIdx
)
{
loger
.
log
(
"媒体文件->packPdu"
);
//
loger.log("媒体文件->packPdu");
//验证坐标点集合数组是否合法
if
(
_param
==
null
||
_itemIdx
==
null
)
{
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_APE_INTERFACE_PARAM_WRONG
);
...
...
@@ -544,7 +544,7 @@ class MediaSharedApe extends Ape {
}
try
{
let
pduDataModel
=
pdu
[
'RCMediaSharedSendDataModelPdu'
].
decode
(
itemData
);
loger
.
log
(
"媒体文件===>unPackPdu"
);
//
loger.log("媒体文件===>unPackPdu");
return
pduDataModel
;
}
catch
(
err
)
{
loger
.
log
(
"媒体文件===>unPackPdu->Pdu解析错误->itemIdx="
+
itemIdx
+
"->err:"
+
err
.
message
);
...
...
src/apes/MusicSharedApe.js
查看文件 @
3abfe5f
...
...
@@ -466,7 +466,7 @@ class MusicSharedApe extends Ape {
}
onJoinChannelHandlerSuccess
()
{
loger
.
log
(
this
.
_session_name
+
' 伴音模块共享加入频道成功'
);
//
loger.log(this._session_name + ' 伴音模块共享加入频道成功');
if
(
this
.
_apeDelayed
)
{
setTimeout
(()
=>
{
this
.
_emit
(
MusicSharedApe
.
MUSICSHARED_JOIN_CHANNEL_SUCCESS
);
...
...
@@ -499,7 +499,7 @@ class MusicSharedApe extends Ape {
///////数据的封包和解包/////////////////////////////////////////
packPdu
(
_param
,
_itemIdx
)
{
loger
.
log
(
"伴音伴音文件->packPdu"
);
//
loger.log("伴音伴音文件->packPdu");
//验证坐标点集合数组是否合法
if
(
_param
==
null
||
_itemIdx
==
null
)
{
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_APE_INTERFACE_PARAM_WRONG
);
...
...
@@ -540,7 +540,7 @@ class MusicSharedApe extends Ape {
}
try
{
let
pduDataModel
=
pdu
[
'RCMusicSharedSendDataModelPdu'
].
decode
(
itemData
);
loger
.
log
(
"伴音文件===>unPackPdu"
);
//
loger.log("伴音文件===>unPackPdu");
return
pduDataModel
;
}
catch
(
err
)
{
loger
.
log
(
"伴音文件===>unPackPdu->Pdu解析错误->itemIdx="
+
itemIdx
+
"->err:"
+
err
.
message
);
...
...
src/apes/QuestionApe.js
查看文件 @
3abfe5f
...
...
@@ -277,7 +277,7 @@ class QuestionApe extends Ape {
}
unPackPdu
(
owner
,
itemIdx
,
itemData
)
{
loger
.
log
(
"答题卡->unPackPdu "
);
//
loger.log("答题卡->unPackPdu ");
if
(
owner
==
null
||
itemIdx
==
null
||
itemData
==
null
)
{
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_APE_INTERFACE_PARAM_WRONG
);
return
null
;
...
...
src/apes/ShareApe.js
查看文件 @
3abfe5f
...
...
@@ -15,12 +15,16 @@ class ShareApe extends Emiter {
super
();
this
.
channelId
=
ApeConsts
.
SCREENSHARING_OBJ_TABLE_ID
;
this
.
streamId
=
''
;
this
.
publishUrl
=
''
;
//rtmp://123.56.205.116/live/alexwang
this
.
publishUrl
=
''
;
this
.
isConnect
=
false
;
this
.
isStopPublish
=
false
;
//this.shareScreen=new ShareScreen();
this
.
shareScreen
=
ShareScreen
;
this
.
ip
=
'127.0.0.1'
;
this
.
port
=
8090
;
this
.
defaultPort
=
'605'
;
//以前用的是8089
this
.
defaultIp
=
'127.0.0.1'
;
this
.
ip
=
this
.
defaultIp
;
this
.
port
=
this
.
defaultPort
;
this
.
init
();
}
init
(){
...
...
@@ -122,11 +126,14 @@ class ShareApe extends Emiter {
"data":"",
"mediaId":shareChannel,
"publishUrl": publishUrl,
"streamId":streamId
"streamId":streamId,
"port":""
};*/
if
(
_result
){
this
.
publishUrl
=
_result
.
publishUrl
||
''
;
this
.
streamId
=
_result
.
streamId
||
''
this
.
streamId
=
_result
.
streamId
||
''
;
this
.
port
=
_result
.
port
||
this
.
defaultPort
;
this
.
ip
=
_result
.
ip
||
this
.
defaultIp
;
}
clearTimeout
(
this
.
reConnectTimer
);
if
(
!
this
.
isConnect
){
...
...
@@ -151,7 +158,6 @@ class ShareApe extends Emiter {
this
.
shareScreen
.
stopShareScreen
();
}
catch
(
err
){
console
.
log
(
'关闭屏幕共享->失败'
,
err
.
message
);
}
}
this
.
publishUrl
=
''
...
...
src/apes/VideoApe.js
查看文件 @
3abfe5f
...
...
@@ -239,6 +239,8 @@ class VideoApe extends Ape {
if
(
GlobalConfig
.
isHost
)
{
//获取屏幕共享推流的地址
let
shareResult
=
this
.
mediaModule
.
getMediaPublishPathForScreenShare
(
this
.
shareApe
.
channelId
,
publishType
);
shareResult
.
ip
=
_param
.
ip
||
""
;
//外部可以设置屏幕共享的IP
shareResult
.
port
=
_param
.
port
||
""
;
//外部可以设置屏幕共享的端口
this
.
shareApe
.
publish
(
shareResult
);
}
}
...
...
@@ -372,7 +374,7 @@ class VideoApe extends Ape {
}
//发送到mcu同步(更新数据)
sendTableUpdateHandler
(
_channelInfo
)
{
loger
.
log
(
"video===sendTableUpdateHandler "
);
//
loger.log("video===sendTableUpdateHandler ");
let
updateModelPdu
=
this
.
packPdu
(
_channelInfo
,
_channelInfo
.
channelId
);
//let updateModelPdu=this.packPdu({},ApeConsts.VIDEO_OBJ_TABLE_ID+2);
if
(
updateModelPdu
==
null
){
...
...
src/apes/WhiteBoardApe.js
查看文件 @
3abfe5f
...
...
@@ -54,7 +54,7 @@ class WhiteBoardApe extends Ape {
}
_joinSessionHandler
(
_data
)
{
loger
.
log
(
"RCPDU_SESSION_JOIN_RESPONSE"
);
//
loger.log("RCPDU_SESSION_JOIN_RESPONSE");
this
.
insertHistory
=
[];
}
...
...
@@ -345,7 +345,7 @@ class WhiteBoardApe extends Ape {
//文档更新,白板也要更新
docUpdateHandler
(
_data
)
{
loger
.
log
(
"白板收到文档更新的消息"
);
//
loger.log("白板收到文档更新的消息");
//loger.log(_data);
//如果切换了文档或翻页,清除之前的添加步骤记录
...
...
@@ -380,7 +380,7 @@ class WhiteBoardApe extends Ape {
"isFresh"
:
false
,
"annotaionItems"
:
annotaionItems
};
loger
.
log
(
"新增一条标注数据->显示到界面"
);
//
loger.log("新增一条标注数据->显示到界面");
this
.
_emit
(
MessageTypes
.
WHITEBOARD_ANNOTATION_UPDATE
,
updateObj
);
}
...
...
@@ -450,7 +450,7 @@ class WhiteBoardApe extends Ape {
unPackPdu
(
owner
,
itemIdx
,
itemData
)
{
try
{
loger
.
log
(
"白板标注数据->unPackPdu"
);
//
loger.log("白板标注数据->unPackPdu");
let
whiteBoardModelPdu
=
pdu
[
'RCWhiteBoardDataModelPdu'
].
decode
(
itemData
);
let
_pointGroup
=
EngineUtils
.
arrayFromJsonString
(
whiteBoardModelPdu
.
pointGroup
);
whiteBoardModelPdu
.
pointGroup
=
_pointGroup
;
...
...
src/mcu.js
查看文件 @
3abfe5f
...
...
@@ -184,10 +184,10 @@ class MCU extends Emiter {
// 课堂发送消息 -- 消息同意序列号
send
(
msg
)
{
if
(
this
.
connected
)
{
loger
.
log
(
'发送数据到服务端-------------------->'
);
//
loger.log('发送数据到服务端-------------------->');
this
.
_everSocket
.
send
(
msg
.
toArrayBuffer
());
}
else
{
loger
.
log
(
'发送数据到服务端-------------------->失败->未连接到服务端'
);
loger
.
warn
(
'发送数据到服务端-------------------->失败->未连接到服务端'
);
this
.
_emit
(
MessageTypes
.
MCU_ERROR
,
MessageTypes
.
ERR_SOCKET_DISCONNECT
);
}
}
...
...
@@ -206,9 +206,6 @@ class MCU extends Emiter {
// 主动建立MCU连接
joinMCU
(
_classInfo
)
{
loger
.
log
(
'开始建立EverSocket通道.'
);
if
(
!
this
.
classInfo
||!
this
.
classInfo
.
MCUServerIP
){
loger
.
error
(
'建立MCU连接->地址无效.'
);
}
GlobalConfig
.
classJoinSuccess
=
false
;
loger
.
log
(
_classInfo
);
_classInfo
.
classId
=
parseInt
(
_classInfo
.
classId
);
// classId 必须整形
...
...
src/pdus/pro.js
查看文件 @
3abfe5f
...
...
@@ -901,7 +901,7 @@ message RCNodeInfoRecordPdu {
repeated
string
cameras
=
14
;
optional
uint32
openCamera
=
15
;
optional
uint32
openMicrophones
=
16
;
optional
uint32
videoQuality
=
17
;
//
设置分辨率的
optional
uint32
videoQuality
=
17
;
//
画质对应分辨率
optional
string
userIp
=
18
;
optional
uint32
curVideoQuality
=
19
;
optional
uint32
micGain
=
20
;
...
...
@@ -921,6 +921,8 @@ message RCNodeInfoRecordPdu {
optional
string
explorerVersion
=
34
;
//浏览器版本
optional
string
os
=
35
;
//系统版本
optional
string
sdkVersion
=
36
;
//SDK版本
optional
uint32
micNoise
=
37
;
optional
bool
autoGain
=
38
;
}
message
RCVotingPollSettingsPdu
{
...
...
请
注册
或
登录
后发表评论