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
36bb1e1d5b34ecfdc9fed76e5bdca8d174998bf1
36bb1e1d
1 parent
4cfde16a
1.处理设置旁路地址后30秒内不推流地址失效的问题,超过30秒后推流会重新加入频道再推流
隐藏空白字符变更
内嵌
并排对比
正在显示
3 个修改的文件
包含
49 行增加
和
61 行删除
src/EngineEntrance.js
src/LogManager.js
src/apes/WebRtcApe.js
src/EngineEntrance.js
查看文件 @
36bb1e1
...
...
@@ -63,7 +63,7 @@ export default class MessageEntrance extends Emiter {
super
();
this
.
lastClassActiveTime
=
0
;
//最后一次课堂激活的时间戳
//sdk 信息
GlobalConfig
.
sdkVersion
=
"v2.25.
0.20171030
"
;
GlobalConfig
.
sdkVersion
=
"v2.25.
6.20171031
"
;
loger
.
warn
(
"sdkVersion:"
+
GlobalConfig
.
sdkVersion
);
console
.
log
(
"sdkVersion:"
+
GlobalConfig
.
sdkVersion
);
//设置
...
...
@@ -101,6 +101,7 @@ export default class MessageEntrance extends Emiter {
_webRtc
.
on
(
'*'
,
(
type
,
data
)
=>
this
.
_emit
(
type
,
data
));
_webRtc
.
on
(
MessageTypes
.
USER_DEVICE_STATUS_CHAANGE
,
this
.
userDeviecStatusChange
.
bind
(
this
));
//监听摄像头和麦克风的开启状态
_webRtc
.
on
(
MessageTypes
.
MEDIA_PUBLISH_STATUS_CHANGE
,
this
.
mediaPublishStatusChange
.
bind
(
this
));
//webRtc推流状态发生改变
_webRtc
.
on
(
WebRtcApe
.
RE_JOIN_CHANNEL
,
this
.
_webRtcRejoinChannel
.
bind
(
this
));
//重先加入音视频频道
// Sass平台层
_sass
=
Sass
;
...
...
@@ -1070,7 +1071,7 @@ export default class MessageEntrance extends Emiter {
clearTimeout
(
this
.
saveClassStatusTimer
);
this
.
saveClassStatusTimer
=
setTimeout
(()
=>
{
_sass
.
saveClassStatusInfo
({
"classStatusInfo"
:
GlobalConfig
.
classStatusInfo
});
//保存课堂状态信息
},
1
0
00
);
},
1
6
00
);
}
else
{
loger
.
log
(
"没有保存课堂状态信息的权限->当前身份->"
+
GlobalConfig
.
userRole
);
}
...
...
@@ -1922,6 +1923,7 @@ export default class MessageEntrance extends Emiter {
dataObj
.
recordStatus
=
false
;
GlobalConfig
.
setClassStatusInfo
(
dataObj
);
this
.
lastClassActiveTime
=
dataObj
.
lastClassActiveTime
||
0
;
loger
.
log
(
dataObj
);
}
catch
(
err
)
{
loger
.
warn
(
"getClassRecordInfo获取的课堂数据JSON转换失败->"
);
}
...
...
@@ -2089,6 +2091,13 @@ export default class MessageEntrance extends Emiter {
}
}
/*
* 监听webRtc
* */
_webRtcRejoinChannel
(
_data
){
this
.
_reJoinChannel
(
_data
)
}
//监听摄像头麦克风状态
userDeviecStatusChange
(
_data
)
{
/* nodeId:GlobalConfig.nodeId,
...
...
@@ -2508,12 +2517,13 @@ export default class MessageEntrance extends Emiter {
//文档加入频道成功,同步到MCU服务器上的数据
docJoinChannelSuccess
()
{
let
distance
=
new
Date
().
getTime
()
-
parseInt
(
this
.
lastClassActiveTime
);
loger
.
log
(
"最后一次记录的时间->"
+
this
.
lastClassActiveTime
,
"当前时间:"
+
new
Date
().
getTime
(),
"间隔:"
+
distance
/
1000
);
let
interval
=
new
Date
().
getTime
()
-
parseInt
(
this
.
lastClassActiveTime
);
loger
.
log
(
"最后一次记录的时间->"
+
this
.
lastClassActiveTime
,
"当前时间:"
+
new
Date
().
getTime
(),
"间隔:"
+
interval
/
1000
);
loger
.
log
(
"文档加入频道成功->isHost="
,
GlobalConfig
.
isHost
,
"当前总人数:"
,
GlobalConfig
.
rosterNumber
,
"sassDoclength="
,
GlobalConfig
.
docListPrepare
.
length
);
//如果当前课堂内只有自己或者离开上次课堂的时间大于15分钟,需要停止服务端的视频录制
if
(
GlobalConfig
.
rosterNumber
<=
1
||
distance
>=
(
15
*
60
)){
//如果当前课堂内只有自己或者离开上次课堂的时间大于8分钟,需要停止服务端的视频录制
if
(
GlobalConfig
.
rosterNumber
<=
1
&&
interval
>=
(
8
*
60
)){
loger
.
log
(
"调用服务端音视频停止录制->interval:"
+
interval
);
this
.
_mediaRecordControl
({
"status"
:
WebRtcApe
.
RECORD_STATUS_2
});
}
...
...
@@ -3010,19 +3020,25 @@ export default class MessageEntrance extends Emiter {
* 重新加入频道
* */
_reJoinChannel
(
_params
)
{
//{publish:false}
if
(
GlobalConfig
.
appId
&&
!
GlobalConfig
.
openFlash
)
{
//获取当前用户的推流状态,重新加入频道之后如果之前正在推流,重连后需要自动重推
//1.获取当前用户的推流状态,重新加入频道之后如果之前正在推流,重连后需要自动重推
let
isPublish
=
false
;
if
(
_webRtc
){
isPublish
=
_webRtc
.
isPublish
||
false
;
}
//2.检测是否调用接口的时候传入了开启推流的参数
if
(
_params
&&
_params
.
publish
==
true
){
isPublish
=
true
;
}
loger
.
log
(
"离开视频通话频道时的推流状态->"
+
isPublish
);
//先离开频道
this
.
_leaveChannel
();
//主讲人和老师可以设置旁录
//加入之前先设置旁录地址,只有直播支持旁路(1路流)
if
(
_webRtc
&&
GlobalConfig
.
isTeachOrAssistant
&&
GlobalConfig
.
maxMediaChannels
==
1
)
{
if
(
_webRtc
&&
GlobalConfig
.
isTeachOrAssistant
)
{
let
curTimestamp
=
new
Date
().
getTime
();
let
streamId
=
GlobalConfig
.
siteId
+
"_"
+
GlobalConfig
.
classId
+
"_"
+
GlobalConfig
.
userId
+
"_"
+
curTimestamp
;
//传入固定的流Id
...
...
@@ -3045,7 +3061,7 @@ export default class MessageEntrance extends Emiter {
info
:
""
+
GlobalConfig
.
userRole
,
immediatePublish
:
isPublish
});
},
1
6
00
);
},
1
0
00
);
}
}
...
...
src/LogManager.js
查看文件 @
36bb1e1
...
...
@@ -46,7 +46,7 @@ class LogManager {
clearTimeout
(
this
.
logDelayTimer
);
this
.
logDelayTimer
=
setTimeout
(
function
()
{
_this
.
checkAndSendLog
();
},
16
00
);
},
20
00
);
}
}
...
...
@@ -69,50 +69,6 @@ class LogManager {
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
();
...
...
@@ -165,12 +121,6 @@ class LogManager {
//计算当前服务器时间
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;*/
let
currentServerTime
=
new
Date
().
getTime
()
-
this
.
serverAndLoacTimeDistanc
*
1000
;
//计算当前服务器时间
let
time
=
new
Date
(
currentServerTime
);
//显示格式20170729 16:42:00 INFO _msg
...
...
src/apes/WebRtcApe.js
查看文件 @
36bb1e1
...
...
@@ -24,6 +24,7 @@ class WebRtcApe extends Emiter {
this
.
appCertificate
=
""
;
this
.
appRecordingKey
=
""
;
this
.
setConfigTimestamp
=
0
;
//设置旁路地址的时间戳
this
.
configPublisherUrl
=
""
;
//旁路地址;
this
.
m3u8Url
=
""
;
//旁路拉流地址
this
.
rtmpUrl
=
""
;
//旁路拉流地址
...
...
@@ -57,6 +58,8 @@ class WebRtcApe extends Emiter {
this
.
videoResolution
=
"240P"
;
this
.
isOpenVideo
=
true
;
this
.
firstPublishSuccess
=
false
;
//记录加入频道成功之后是否推流成功过,离开频道之后需要设置为false
this
.
isPublish
=
false
;
//当前是否正在推流
this
.
videoScale
=
1
;
//视图的缩放比例,默认为1;
...
...
@@ -143,6 +146,7 @@ class WebRtcApe extends Emiter {
this
.
client
.
on
(
'stream-published'
,
(
evt
)
=>
{
loger
.
log
(
"webRtc->推流成功->"
,
new
Date
().
getTime
());
this
.
isPublish
=
true
;
this
.
firstPublishSuccess
=
true
;
GlobalConfig
.
openCamera
=
EngineUtils
.
creatTimestamp
();
GlobalConfig
.
openMicrophones
=
GlobalConfig
.
openCamera
;
this
.
_emit
(
MessageTypes
.
USER_DEVICE_STATUS_CHAANGE
,
{
...
...
@@ -389,7 +393,7 @@ class WebRtcApe extends Emiter {
clearTimeout(this.rePublishDelay);
this.rePublishDelay=setTimeout(()=>{
this.publish();
},
6
00);
},
2
00);
}
}, (err)=> {
loger.error("
加入视频通话频道
->
失败
->
", err);
...
...
@@ -439,6 +443,7 @@ class WebRtcApe extends Emiter {
if (!this.client) {
return;
}
this.firstPublishSuccess=false;
this.unpublish();
this.client.leave(() => {
loger.log("
离开视频通话频道
->
成功
");
...
...
@@ -465,6 +470,8 @@ class WebRtcApe extends Emiter {
* 设置旁录地址
* */
setConfigPublisherUrl(_publishUrl){
this.firstPublishSuccess=true;
this.setConfigTimestamp=new Date().getTime()/1000;
this.configPublisherUrl=_publishUrl;
if(this.client&& this.configPublisherUrl){
let configObj={width: parseInt(this.pWidth), height: parseInt(this.pHeight), framerate: parseInt(this.pFrameRate), bitrate: parseInt(this.pBitrate), publishUrl:""+this.configPublisherUrl};
...
...
@@ -491,6 +498,19 @@ class WebRtcApe extends Emiter {
if (!this.client || !this.localStream) {
return;
}
//老师-助教-主讲人-->设置旁路大于30秒没有推流,推流服务会停止,需要重设旁录和重加频道;
if(this.setConfigTimestamp>0&&GlobalConfig.isTeachOrAssistant){
//如果间隔大于28秒并且没有推过流需要重新加入频道,推成功一次之后就不需要
let interval=parseInt(new Date().getTime()/1000-this.setConfigTimestamp);
loger.log("
设置旁路的时间和推流时间的间隔
->
"+interval+"
秒
firstPublishSuccess
:
"+ this.firstPublishSuccess);
if(interval>=28&&!this.firstPublishSuccess){
loger.warn("
设置旁路大于
30
秒没有推流,推流服务会停止,需要重设旁录和重加频道
");
this._emit(WebRtcApe.RE_JOIN_CHANNEL,{publish:true});
return;
}
}
this.localStream.init(()=> {
this.clearLocalView();
let viewName = 'localVideoBox_' + this.uid;
...
...
@@ -877,6 +897,8 @@ class WebRtcApe extends Emiter {
WebRtcApe.prototype.RECORD_STATUS_0 = WebRtcApe.RECORD_STATUS_0 = 0; //停止推流
WebRtcApe.prototype.RECORD_STATUS_1 = WebRtcApe.RECORD_STATUS_1 = 1; //开始推流
WebRtcApe.prototype.RECORD_STATUS_2 = WebRtcApe.RECORD_STATUS_2 = 2; //停止录制
WebRtcApe.prototype.RE_JOIN_CHANNEL = WebRtcApe.RE_JOIN_CHANNEL = "
reJoninChanel
"
;
//重加入频道
export
default
new
WebRtcApe
;
...
...
请
注册
或
登录
后发表评论