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
1.server数据不再从本地加载,直接获取从Sass返回的数据;2.增加日志上报;3.人员属性中增加噪音消除的字段和自动调整麦克风音量的字段
隐藏空白字符变更
内嵌
并排对比
正在显示
19 个修改的文件
包含
441 行增加
和
345 行删除
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
;
...
...
@@ -1151,15 +1204,15 @@ export default class MessageEntrance extends Emiter {
GlobalConfig
.
MS_PLAY_RTMP_IP
=
_data
.
ip
||
""
;
GlobalConfig
.
MS_PLAY_RTMP_PORT
=
_data
.
port
||
""
;
}
else
{
//随机选择一个
if
(
GlobalConfig
.
rtmpPullListFinal
&&
GlobalConfig
.
rtmpPullListFinal
.
length
>
0
)
{
let
index
=
parseInt
(
Math
.
random
()
*
GlobalConfig
.
rtmpPullListFinal
.
length
);
GlobalConfig
.
MS_PLAY_RTMP_IP
=
GlobalConfig
.
rtmpPullListFinal
[
index
].
ip
||
""
;
GlobalConfig
.
MS_PLAY_RTMP_PORT
=
GlobalConfig
.
rtmpPullListFinal
[
index
].
port
||
""
;
}
//随机选择一个
if
(
GlobalConfig
.
rtmpPullListFinal
&&
GlobalConfig
.
rtmpPullListFinal
.
length
>
0
)
{
let
index
=
parseInt
(
Math
.
random
()
*
GlobalConfig
.
rtmpPullListFinal
.
length
);
GlobalConfig
.
MS_PLAY_RTMP_IP
=
GlobalConfig
.
rtmpPullListFinal
[
index
].
ip
||
""
;
GlobalConfig
.
MS_PLAY_RTMP_PORT
=
GlobalConfig
.
rtmpPullListFinal
[
index
].
port
||
""
;
}
}
//如果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
;
...
...
@@ -1184,14 +1237,14 @@ export default class MessageEntrance extends Emiter {
GlobalConfig
.
MS_PLAY_HLS_PORT
=
_data
.
port
||
""
;
}
else
{
//随机选择一个
if
(
GlobalConfig
.
hlsPullListFinal
&&
GlobalConfig
.
hlsPullListFinal
.
length
>
0
)
{
let
index
=
parseInt
(
Math
.
random
()
*
GlobalConfig
.
hlsPullListFinal
.
length
);
GlobalConfig
.
MS_PLAY_HLS_IP
=
GlobalConfig
.
hlsPullListFinal
[
index
].
ip
||
""
;
GlobalConfig
.
MS_PLAY_HLS_PORT
=
GlobalConfig
.
hlsPullListFinal
[
index
].
port
||
""
;
}
if
(
GlobalConfig
.
hlsPullListFinal
&&
GlobalConfig
.
hlsPullListFinal
.
length
>
0
)
{
let
index
=
parseInt
(
Math
.
random
()
*
GlobalConfig
.
hlsPullListFinal
.
length
);
GlobalConfig
.
MS_PLAY_HLS_IP
=
GlobalConfig
.
hlsPullListFinal
[
index
].
ip
||
""
;
GlobalConfig
.
MS_PLAY_HLS_PORT
=
GlobalConfig
.
hlsPullListFinal
[
index
].
port
||
""
;
}
}
//如果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,37 +1528,37 @@ 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
);
}
/*
if (_data.msList2) {
GlobalConfig.setMsList(_data.msList2.msList); //储存Sass ms拉流地址
GlobalConfig.setRtmpPullList(_data.msList2.rtmpPullArray); //储存Sass ms拉流地址
GlobalConfig.setHlsPullList(_data.msList2.hlsPullArray); //储存Sass ms拉流地址
GlobalConfig.setRsList(_data.msList2.rsList); //储存Sass 录制回放hls拉流地址
}
//Sass mcu
GlobalConfig.setMcuList(_data.mcuList); //mcu
loger.warn('从Sass获取的推流拉流列表数据:');
loger.warn('Sass->msList->', GlobalConfig.msList);
loger.warn('Sass->rtmpPullList->', GlobalConfig.rtmpPullList);
loger.warn('Sass->hlsPullList->', GlobalConfig.hlsPullList);
loger.warn('Sass->rsList->', GlobalConfig.rsList);
//没有加载server.json之前,最终的服务列表按Sass的为准,server.json加载完成后会选点
GlobalConfig.msListFinal=GlobalConfig.msList;
GlobalConfig.rtmpPullListFinal=GlobalConfig.rtmpPullList;
GlobalConfig.hlsListFinal=GlobalConfig.hlsPullList;
GlobalConfig.rsListFinal=GlobalConfig.rsList;
GlobalConfig.mcuListFinal=GlobalConfig.mcuList;*/
}
if (_data.msList2) {
GlobalConfig.setMsList(_data.msList2.msList); //储存Sass ms拉流地址
GlobalConfig.setRtmpPullList(_data.msList2.rtmpPullArray); //储存Sass ms拉流地址
GlobalConfig.setHlsPullList(_data.msList2.hlsPullArray); //储存Sass ms拉流地址
GlobalConfig.setRsList(_data.msList2.rsList); //储存Sass 录制回放hls拉流地址
}
//Sass mcu
GlobalConfig.setMcuList(_data.mcuList); //mcu
loger.warn('从Sass获取的推流拉流列表数据:');
loger.warn('Sass->msList->', GlobalConfig.msList);
loger.warn('Sass->rtmpPullList->', GlobalConfig.rtmpPullList);
loger.warn('Sass->hlsPullList->', GlobalConfig.hlsPullList);
loger.warn('Sass->rsList->', GlobalConfig.rsList);
//没有加载server.json之前,最终的服务列表按Sass的为准,server.json加载完成后会选点
GlobalConfig.msListFinal=GlobalConfig.msList;
GlobalConfig.rtmpPullListFinal=GlobalConfig.rtmpPullList;
GlobalConfig.hlsListFinal=GlobalConfig.hlsPullList;
GlobalConfig.rsListFinal=GlobalConfig.rsList;
GlobalConfig.mcuListFinal=GlobalConfig.mcuList;*/
}
//课堂获取Sass数据完成
this
.
_emit
(
MessageTypes
.
CLASS_GET_INFO_SUCCESS
,
GlobalConfig
.
getClassInfo
());
...
...
@@ -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
)
{
switch
(
type
)
{
case
Loger
.
LOG
:
console
.
log
(
logMsg
);
Loger
.
LogManager
.
addLog
(
Loger
.
LOG
,
logMsg
);
//如果是debug模式就输出
if
(
Loger
.
IS_DEBUG
)
{
console
.
log
(
logMsg
);
}
break
;
case
Loger
.
WARN
:
console
.
warn
(
logMsg
);
Loger
.
LogManager
.
addLog
(
Loger
.
WARN
,
logMsg
);
//如果是debug模式就输出
if
(
Loger
.
IS_DEBUG
)
{
console
.
warn
(
logMsg
);
}
break
;
case
Loger
.
ERROR
:
console
.
error
(
logMsg
);
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
{
...
...
请
注册
或
登录
后发表评论