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
ab6cd16f984ddcfe32da9bccb92179b91e8e6ecd
ab6cd16f
1 parent
1fa8bde7
webRtc-dev
...
20170922-1
20171019-1
20171120-1w
dev
ly20170731-1
ly20170731-2
ly20170801-2
ly20170802-1
ly20170818-1
ly20170818-2
ly20170820-1
ly20170821-1
ly20170824-1
ly20170829-1
ly20170925-1
ly20170926-1
ly20170927-1
ly20170929-1
ly20171011-1
ly20171013-1
ly20171013-2
ly20171016-1
ly20171021-1
ly20171023-1
ly20171024-1w
ly20171025-1w
ly20171026-1w
ly20171027-1w
ly20171030-1
ly20171030-2w
ly20171107-1
ly20171110-1w
ly20171113-1w
ly20171204-1w
ly20171208-1w
ly20171211-1w
ly20171211-2w
ly20171214-1w
v2.38.13.20171216
v2.38.11.20171214
v2.38.3.201712011
v2.38.1.201712011
v2.36.11.20171204
v2.36.8.20171206
v2.36.4.20171201
v2.35.11.20171130
v2.34.16.20171128
v2.34.5.20171127
v2.33.6.20171123
v2.32.1.20171123
v2.31.12.20171122
v2.31.10.20171122
v2.30.5.20171117
v2.30.2.20171117
v2.29.5.20171114
v2.28.1.20171110
v2.27.11.20171109
v2.26.9.20171107
v2.26.6.20171103
v2.26.2.20171102
v2.25.7.20171031
v2.25.6.20171031
v2.25.0.20171030
v2.24.2.20171030
v2.23.0.20171030
v2.22.7.20171026
v2.20.5.20171023
v2.20.0.20171021
v2.19.8.20171020
v2.18.14.20171020
v2.18.10.20171019
v2.17.11.20171014
v2.16.8.20171012
v2.16.5.20171012
v2.15.5.20171001
v2.15.3.20170929
v2.14.5.20170927
v2.13.5.20170927
v2.12.14.20170927
v2.12.8.20170926
v2.12.6.20170925
v2.11.13.20170925
v2.10.7.20170921
v2.10.6.20170921
v2.10.5.20170920
v2.10.4.20170920
v2.9.3.20170919
v2.8.17.20170918
v2.8.8.20170917
v2.8.2.20170916
v2.6.2.20170915
v2.5.12.20170915
v2.5.6.20170914
v2.5.5.20170914
v2.4.4.20170908
v2.4.2.20170908
v2.4.0.20170907
v2.3.6.20170907
v2.2.16.20170905
v2.1.22.20170904
v1.84.0.20170912
v1.83.2.20170831
v1.82.11.20170829
v1.81.19.20170828
v1.80.2.20170824
v1.79.6.20170822
v1.79.5.20170821
v1.79.4.20170821
v1.79.3.20170821
v1.78.4.20170820
v1.77.4.20170819
v1.76.2.20170818
v1.75.0.20170815
v1.74.0.20170814
v1.73.2.20170814
v1.73.1.20170814
v1.71.0.20170813
v1.70.5.20170812
v1.68.2.20170812
v1.66.1.20170809
v1.65.25.20170808
v1.65.24.20170806
v1.63.1.20170731
v1.62.3.20170731
v1.61.0.20170729
v1.60.0.20170729
增加MS地址无效时的判断
隐藏空白字符变更
内嵌
并排对比
正在显示
2 个修改的文件
包含
301 行增加
和
277 行删除
src/EngineEntrance.js
src/apes/MediaModule.js
src/EngineEntrance.js
查看文件 @
ab6cd16
...
...
@@ -35,7 +35,7 @@ import QuestionApe from 'apes/QuestionApe';
import
UTF8
from
'utf-8'
;
let
loger
=
Loger
.
getLoger
(
'McuClient'
);
let
_sdkInfo
=
{
"version"
:
"v1.
59
.0.20170729"
,
"author"
:
"www.3mang.com"
};
let
_sdkInfo
=
{
"version"
:
"v1.
60
.0.20170729"
,
"author"
:
"www.3mang.com"
};
//APE
let
_sass
;
...
...
@@ -907,6 +907,21 @@ 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
){
loger
.
error
(
"推流MS地址地址无效"
);
}
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
}
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
}
if
(
_mcu
)
{
_mcu
.
joinMCU
(
GlobalConfig
.
getClassInfo
());
}
...
...
src/apes/MediaModule.js
查看文件 @
ab6cd16
...
...
@@ -11,299 +11,308 @@ import EngineUtils from 'EngineUtils';
let
loger
=
Loger
.
getLoger
(
'MediaModule'
);
class
MediaModule
{
constructor
()
{
this
.
needPublishMediaChannel
=
{};
//记录准备推流的频道信息
this
.
mediaChannels
=
{};
this
.
maxMediaChannel
=
0
;
this
.
mediaType
=
ApeConsts
.
MEDIA_TYPE_DEFAULT
;
this
.
MEDIA_OBJ_TABLE_ID
=
0
;
this
.
SCREENSHARING_OBJ_TABLE_ID
=
ApeConsts
.
SCREENSHARING_OBJ_TABLE_ID
;
constructor
()
{
this
.
needPublishMediaChannel
=
{};
//记录准备推流的频道信息
this
.
mediaChannels
=
{};
this
.
maxMediaChannel
=
0
;
this
.
mediaType
=
ApeConsts
.
MEDIA_TYPE_DEFAULT
;
this
.
MEDIA_OBJ_TABLE_ID
=
0
;
this
.
SCREENSHARING_OBJ_TABLE_ID
=
ApeConsts
.
SCREENSHARING_OBJ_TABLE_ID
;
}
//获取播流地址
getMediaPlayPath
(
_param
)
{
loger
.
log
(
'获取播放地址->'
);
if
(
_param
==
null
||
_param
.
streamId
==
null
)
{
loger
.
warn
(
'获取播放地址->参数错误'
,
_param
);
//this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return
{
"code"
:
ApeConsts
.
RETURN_FAILED
,
"data"
:
""
};
}
//获取播流地址
getMediaPlayPath
(
_param
)
{
loger
.
log
(
'获取播放地址->'
);
if
(
_param
==
null
||
_param
.
streamId
==
null
)
{
loger
.
warn
(
'获取播放地址->参数错误'
,
_param
);
//this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
return
{
"code"
:
ApeConsts
.
RETURN_FAILED
,
"data"
:
""
};
}
let
path
=
""
;
let
port
=
""
;
let
fileName
=
''
;
if
(
_param
.
type
==
"m3u8"
)
{
//M3U8
//http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/index.m3u8
if
(
GlobalConfig
.
siteId
==
GlobalConfig
.
siteId_letv
){
//乐视的hls地址规则
fileName
=
'desc.m3u8'
;
}
else
{
//fileName='index.m3u8';
fileName
=
'playlist.m3u8'
;
}
port
=
(
GlobalConfig
.
MS_PLAY_HLS_PORT
==
""
||
GlobalConfig
.
MS_PLAY_HLS_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
MS_PLAY_HLS_PORT
;
path
=
"http://"
+
GlobalConfig
.
MS_PLAY_HLS_IP
+
port
+
"/live/"
+
_param
.
streamId
+
".m3u8"
;
//
//+ "/"+fileName;//
}
else
{
//RTMP
port
=
(
GlobalConfig
.
MS_PLAY_RTMP_PORT
==
""
||
GlobalConfig
.
MS_PLAY_RTMP_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
MS_PLAY_RTMP_PORT
;
path
=
"rtmp://"
+
GlobalConfig
.
MS_PLAY_RTMP_IP
+
port
+
"/live/"
+
_param
.
streamId
;
}
path
=
path
.
replace
(
"::"
,
":"
);
//如果ip和port之间有多的:需要去掉
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
""
,
"playUrl"
:
path
};
let
path
=
""
;
let
port
=
""
;
let
fileName
=
''
;
if
(
_param
.
type
==
"m3u8"
)
{
//M3U8
if
(
!
GlobalConfig
.
MS_PLAY_HLS_IP
)
{
loger
.
error
(
"HLS拉流地址地址无效"
);
}
//http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/index.m3u8
if
(
GlobalConfig
.
siteId
==
GlobalConfig
.
siteId_letv
)
{
//乐视的hls地址规则
fileName
=
'desc.m3u8'
;
}
else
{
//fileName='index.m3u8';
fileName
=
'playlist.m3u8'
;
}
port
=
(
GlobalConfig
.
MS_PLAY_HLS_PORT
==
""
||
GlobalConfig
.
MS_PLAY_HLS_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
MS_PLAY_HLS_PORT
;
path
=
"http://"
+
GlobalConfig
.
MS_PLAY_HLS_IP
+
port
+
"/live/"
+
_param
.
streamId
+
".m3u8"
;
//
//+ "/"+fileName;//
}
else
{
//RTMP
if
(
!
GlobalConfig
.
MS_PLAY_RTMP_IP
)
{
loger
.
error
(
"RTMP拉流地址地址无效"
);
}
port
=
(
GlobalConfig
.
MS_PLAY_RTMP_PORT
==
""
||
GlobalConfig
.
MS_PLAY_RTMP_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
MS_PLAY_RTMP_PORT
;
path
=
"rtmp://"
+
GlobalConfig
.
MS_PLAY_RTMP_IP
+
port
+
"/live/"
+
_param
.
streamId
;
}
//获取录制回放时点播的地址,只有m3u8
getMediaRecordPlaybackPath
(
_param
)
{
loger
.
log
(
'获取录制回放时点播的地址->m3u8'
);
if
(
_param
==
null
||
_param
.
streamId
==
null
)
{
loger
.
warn
(
'获取录制回放时点播的地址->参数错误'
,
_param
);
return
{
"code"
:
ApeConsts
.
RETURN_FAILED
,
"data"
:
""
};
}
//M3U8 http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/total.m3u8
let
port
=
(
GlobalConfig
.
RS_RECORD_PLAY_PORT
==
""
||
GlobalConfig
.
RS_RECORD_PLAY_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
RS_RECORD_PLAY_PORT
;
let
path
=
"http://"
+
GlobalConfig
.
RS_RECORD_PLAY_IP
+
port
+
"/live/"
+
_param
.
streamId
+
"/total.m3u8"
;
path
=
path
.
replace
(
"::"
,
":"
);
//如果ip和port之间有多的:需要去掉
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
""
,
"playUrl"
:
path
};
}
path
=
path
.
replace
(
"::"
,
":"
);
//如果ip和port之间有多的:需要去掉
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
""
,
"playUrl"
:
path
};
}
//获取推流地址
getMediaPublishPath
(
_param
)
{
loger
.
log
(
'获取推流地址->'
);
//判断当前开启的视频数量是否已经是最大值,如果已经是最大值,不能再开启
let
freeChannel
=
this
.
getFreeMediaChannel
();
if
(
freeChannel
==
0
)
{
return
{
"code"
:
ApeConsts
.
RETURN_FAILED
,
"data"
:
"不能再打开更多的设备"
,
"mediaChannels"
:
this
.
mediaChannels
};
}
//默认方式推流
let
pubType
=
"live"
;
////flash推流
//if(_param&&_param.type=="flash"){
// pubType ="flash";
//}
//端口,有端口就显示 ":xxx",没有端口就是""
let
port
=
(
GlobalConfig
.
MS_PUBLISH_PORT
==
""
||
GlobalConfig
.
MS_PUBLISH_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
MS_PUBLISH_PORT
;
//时间戳
let
timestamp
=
EngineUtils
.
creatTimestamp
();
let
streamId
=
GlobalConfig
.
siteId
+
"_"
+
GlobalConfig
.
classId
+
"_"
+
GlobalConfig
.
userId
+
"_"
+
freeChannel
+
"_"
+
timestamp
;
//生成推流地址和推流数据(同步数据的时候用)
let
publishUrl
=
"rtmp://"
+
GlobalConfig
.
MS_PUBLISH_IP
+
port
+
"/"
+
pubType
+
"/"
+
streamId
;
publishUrl
=
publishUrl
.
replace
(
"::"
,
":"
);
//如果ip和port之间有多的:需要去掉
this
.
needPublishMediaChannel
[
publishUrl
]
=
{
"channelId"
:
freeChannel
,
"publishUrl"
:
publishUrl
,
"streamId"
:
streamId
,
"timestamp"
:
timestamp
,
"nodeId"
:
GlobalConfig
.
nodeId
};
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
""
,
"mediaId"
:
freeChannel
,
"userId"
:
GlobalConfig
.
userId
,
"userName"
:
GlobalConfig
.
userName
,
"userRole"
:
GlobalConfig
.
userRole
,
"publishUrl"
:
publishUrl
};
//获取录制回放时点播的地址,只有m3u8
getMediaRecordPlaybackPath
(
_param
)
{
loger
.
log
(
'获取录制回放时点播的地址->m3u8'
);
if
(
_param
==
null
||
_param
.
streamId
==
null
)
{
loger
.
warn
(
'获取录制回放时点播的地址->参数错误'
,
_param
);
return
{
"code"
:
ApeConsts
.
RETURN_FAILED
,
"data"
:
""
};
}
//监课获取推流地址
getMediaPublishPathForInVisible
(
_param
)
{
let
mediaLen
=
Object
.
keys
(
MediaModule
.
allMediaChannelsList
).
length
;
let
freeChannel
=
(
this
.
MEDIA_OBJ_TABLE_ID
-
20
-
mediaLen
)
||
GlobalConfig
.
nodeId
;
loger
.
log
(
'监课获取推流地址->'
+
freeChannel
+
" mediaLen:"
+
mediaLen
);
//默认方式推流
let
pubType
=
"live"
;
////flash推流
//if(_param&&_param.type=="flash"){
// pubType ="flash";
//}
//端口,有端口就显示 ":xxx",没有端口就是""
let
port
=
(
GlobalConfig
.
MS_PUBLISH_PORT
==
""
||
GlobalConfig
.
MS_PUBLISH_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
MS_PUBLISH_PORT
;
//时间戳
let
timestamp
=
EngineUtils
.
creatTimestamp
();
let
streamId
=
GlobalConfig
.
siteId
+
"_"
+
GlobalConfig
.
classId
+
"_"
+
GlobalConfig
.
userId
+
"_"
+
freeChannel
+
"_"
+
timestamp
;
//生成推流地址和推流数据(同步数据的时候用)
let
publishUrl
=
"rtmp://"
+
GlobalConfig
.
MS_PUBLISH_IP
+
port
+
"/"
+
pubType
+
"/"
+
streamId
;
publishUrl
=
publishUrl
.
replace
(
"::"
,
":"
);
//如果ip和port之间有多的:需要去掉
this
.
needPublishMediaChannel
[
publishUrl
]
=
{
"channelId"
:
freeChannel
,
"publishUrl"
:
publishUrl
,
"streamId"
:
streamId
,
"timestamp"
:
timestamp
,
"nodeId"
:
GlobalConfig
.
nodeId
};
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
""
,
"userId"
:
GlobalConfig
.
userId
,
"userName"
:
GlobalConfig
.
userName
,
"userRole"
:
GlobalConfig
.
userRole
,
"mediaId"
:
freeChannel
,
"publishUrl"
:
publishUrl
};
//M3U8 http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/total.m3u8
let
port
=
(
GlobalConfig
.
RS_RECORD_PLAY_PORT
==
""
||
GlobalConfig
.
RS_RECORD_PLAY_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
RS_RECORD_PLAY_PORT
;
let
path
=
"http://"
+
GlobalConfig
.
RS_RECORD_PLAY_IP
+
port
+
"/live/"
+
_param
.
streamId
+
"/total.m3u8"
;
path
=
path
.
replace
(
"::"
,
":"
);
//如果ip和port之间有多的:需要去掉
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
""
,
"playUrl"
:
path
};
}
//获取推流地址
getMediaPublishPath
(
_param
)
{
loger
.
log
(
'获取推流地址->'
);
//判断当前开启的视频数量是否已经是最大值,如果已经是最大值,不能再开启
let
freeChannel
=
this
.
getFreeMediaChannel
();
if
(
freeChannel
==
0
)
{
return
{
"code"
:
ApeConsts
.
RETURN_FAILED
,
"data"
:
"不能再打开更多的设备"
,
"mediaChannels"
:
this
.
mediaChannels
};
}
//桌面共享获取推流地址,频道号由外部传入
getMediaPublishPathForScreenShare
(
_shareChannel
,
_publishType
)
{
let
shareChannel
=
_shareChannel
||
this
.
SCREENSHARING_OBJ_TABLE_ID
;
loger
.
log
(
'桌面共享获取推流地址->'
+
shareChannel
);
//默认方式推流
let
pubType
=
"live"
;
//统一使用live 20170615
/*//flash推流
if(_publishType=="live"){
pubType ="live";
}*/
//端口,有端口就显示 ":xxx",没有端口就是""
let
port
=
(
GlobalConfig
.
MS_PUBLISH_PORT
==
""
||
GlobalConfig
.
MS_PUBLISH_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
MS_PUBLISH_PORT
;
//时间戳
let
timestamp
=
EngineUtils
.
creatTimestamp
();
let
streamId
=
GlobalConfig
.
siteId
+
"_"
+
GlobalConfig
.
classId
+
"_"
+
GlobalConfig
.
userId
+
"_"
+
shareChannel
+
"_"
+
timestamp
;
//生成推流地址和推流数据(同步数据的时候用)
let
publishUrl
=
"rtmp://"
+
GlobalConfig
.
MS_PUBLISH_IP
+
port
+
"/"
+
pubType
+
"/"
+
streamId
;
publishUrl
=
publishUrl
.
replace
(
"::"
,
":"
);
//如果ip和port之间有多的:需要去掉
/* this.needPublishMediaChannel[publishUrl]={
"channelId":shareChannel,
"publishUrl":publishUrl,
"streamId":streamId,
"timestamp":timestamp,
"nodeId":GlobalConfig.nodeId
};*/
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
""
,
"mediaId"
:
shareChannel
,
"userId"
:
GlobalConfig
.
userId
,
"userName"
:
GlobalConfig
.
userName
,
"userRole"
:
GlobalConfig
.
userRole
,
"publishUrl"
:
publishUrl
,
"streamId"
:
streamId
};
}
//默认方式推流
let
pubType
=
"live"
;
//获取当前空闲的channel,返回值为0代表没有空闲的,否则返回的就是空闲的channelId
getFreeMediaChannel
()
{
let
counter
=
0
;
for
(
let
key
in
this
.
mediaChannels
)
{
let
item
=
this
.
mediaChannels
[
key
];
if
(
item
&&
item
.
status
==
ApeConsts
.
CHANNEL_STATUS_RELEASED
)
{
loger
.
log
(
"已获取空闲的通道->channelId:"
+
item
.
channelId
);
return
item
.
channelId
;
}
counter
++
;
}
loger
.
log
(
"获取空闲的通道"
,
"mediaChannels"
,
this
.
mediaChannels
,
"counter:"
,
counter
);
//loger.log(this.mediaChannels);
if
(
counter
<
this
.
maxMediaChannel
)
{
return
this
.
MEDIA_OBJ_TABLE_ID
+
(
counter
);
}
return
0
;
//没有空闲的
if
(
!
GlobalConfig
.
MS_PUBLISH_IP
)
{
loger
.
error
(
"MS推流地址地址无效"
);
}
//获取准备推流的频道信息
getNeedPublishMediaChannel
(
_publishUrl
){
return
this
.
needPublishMediaChannel
[
_publishUrl
];
//端口,有端口就显示 ":xxx",没有端口就是""
let
port
=
(
GlobalConfig
.
MS_PUBLISH_PORT
==
""
||
GlobalConfig
.
MS_PUBLISH_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
MS_PUBLISH_PORT
;
//时间戳
let
timestamp
=
EngineUtils
.
creatTimestamp
();
let
streamId
=
GlobalConfig
.
siteId
+
"_"
+
GlobalConfig
.
classId
+
"_"
+
GlobalConfig
.
userId
+
"_"
+
freeChannel
+
"_"
+
timestamp
;
//生成推流地址和推流数据(同步数据的时候用)
let
publishUrl
=
"rtmp://"
+
GlobalConfig
.
MS_PUBLISH_IP
+
port
+
"/"
+
pubType
+
"/"
+
streamId
;
publishUrl
=
publishUrl
.
replace
(
"::"
,
":"
);
//如果ip和port之间有多的:需要去掉
this
.
needPublishMediaChannel
[
publishUrl
]
=
{
"channelId"
:
freeChannel
,
"publishUrl"
:
publishUrl
,
"streamId"
:
streamId
,
"timestamp"
:
timestamp
,
"nodeId"
:
GlobalConfig
.
nodeId
};
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
""
,
"mediaId"
:
freeChannel
,
"userId"
:
GlobalConfig
.
userId
,
"userName"
:
GlobalConfig
.
userName
,
"userRole"
:
GlobalConfig
.
userRole
,
"publishUrl"
:
publishUrl
};
}
//监课获取推流地址
getMediaPublishPathForInVisible
(
_param
)
{
let
mediaLen
=
Object
.
keys
(
MediaModule
.
allMediaChannelsList
).
length
;
let
freeChannel
=
(
this
.
MEDIA_OBJ_TABLE_ID
-
20
-
mediaLen
)
||
GlobalConfig
.
nodeId
;
loger
.
log
(
'监课获取推流地址->'
+
freeChannel
+
" mediaLen:"
+
mediaLen
);
//默认方式推流
let
pubType
=
"live"
;
////flash推流
//if(_param&&_param.type=="flash"){
// pubType ="flash";
//}
//端口,有端口就显示 ":xxx",没有端口就是""
let
port
=
(
GlobalConfig
.
MS_PUBLISH_PORT
==
""
||
GlobalConfig
.
MS_PUBLISH_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
MS_PUBLISH_PORT
;
//时间戳
let
timestamp
=
EngineUtils
.
creatTimestamp
();
let
streamId
=
GlobalConfig
.
siteId
+
"_"
+
GlobalConfig
.
classId
+
"_"
+
GlobalConfig
.
userId
+
"_"
+
freeChannel
+
"_"
+
timestamp
;
//生成推流地址和推流数据(同步数据的时候用)
let
publishUrl
=
"rtmp://"
+
GlobalConfig
.
MS_PUBLISH_IP
+
port
+
"/"
+
pubType
+
"/"
+
streamId
;
publishUrl
=
publishUrl
.
replace
(
"::"
,
":"
);
//如果ip和port之间有多的:需要去掉
this
.
needPublishMediaChannel
[
publishUrl
]
=
{
"channelId"
:
freeChannel
,
"publishUrl"
:
publishUrl
,
"streamId"
:
streamId
,
"timestamp"
:
timestamp
,
"nodeId"
:
GlobalConfig
.
nodeId
};
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
""
,
"userId"
:
GlobalConfig
.
userId
,
"userName"
:
GlobalConfig
.
userName
,
"userRole"
:
GlobalConfig
.
userRole
,
"mediaId"
:
freeChannel
,
"publishUrl"
:
publishUrl
};
}
//桌面共享获取推流地址,频道号由外部传入
getMediaPublishPathForScreenShare
(
_shareChannel
,
_publishType
)
{
let
shareChannel
=
_shareChannel
||
this
.
SCREENSHARING_OBJ_TABLE_ID
;
loger
.
log
(
'桌面共享获取推流地址->'
+
shareChannel
);
//默认方式推流
let
pubType
=
"live"
;
//统一使用live 20170615
/*//flash推流
if(_publishType=="live"){
pubType ="live";
}*/
//端口,有端口就显示 ":xxx",没有端口就是""
let
port
=
(
GlobalConfig
.
MS_PUBLISH_PORT
==
""
||
GlobalConfig
.
MS_PUBLISH_PORT
==
null
)
?
""
:
":"
+
GlobalConfig
.
MS_PUBLISH_PORT
;
//时间戳
let
timestamp
=
EngineUtils
.
creatTimestamp
();
let
streamId
=
GlobalConfig
.
siteId
+
"_"
+
GlobalConfig
.
classId
+
"_"
+
GlobalConfig
.
userId
+
"_"
+
shareChannel
+
"_"
+
timestamp
;
//生成推流地址和推流数据(同步数据的时候用)
let
publishUrl
=
"rtmp://"
+
GlobalConfig
.
MS_PUBLISH_IP
+
port
+
"/"
+
pubType
+
"/"
+
streamId
;
publishUrl
=
publishUrl
.
replace
(
"::"
,
":"
);
//如果ip和port之间有多的:需要去掉
/* this.needPublishMediaChannel[publishUrl]={
"channelId":shareChannel,
"publishUrl":publishUrl,
"streamId":streamId,
"timestamp":timestamp,
"nodeId":GlobalConfig.nodeId
};*/
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
""
,
"mediaId"
:
shareChannel
,
"userId"
:
GlobalConfig
.
userId
,
"userName"
:
GlobalConfig
.
userName
,
"userRole"
:
GlobalConfig
.
userRole
,
"publishUrl"
:
publishUrl
,
"streamId"
:
streamId
};
}
//获取当前空闲的channel,返回值为0代表没有空闲的,否则返回的就是空闲的channelId
getFreeMediaChannel
()
{
let
counter
=
0
;
for
(
let
key
in
this
.
mediaChannels
)
{
let
item
=
this
.
mediaChannels
[
key
];
if
(
item
&&
item
.
status
==
ApeConsts
.
CHANNEL_STATUS_RELEASED
)
{
loger
.
log
(
"已获取空闲的通道->channelId:"
+
item
.
channelId
);
return
item
.
channelId
;
}
counter
++
;
}
//获取当前属于nodeId的已经打开的的channel,返回值为0代表没有打开的,否则返回的就是打开的channelId
getOpeningMediaChannelForNodeId
(
_nodeId
){
loger
.
log
(
"getOpeningMediaChannel"
,
"nodeId"
,
_nodeId
,
"mediaChannels:"
,
this
.
mediaChannels
);
let
channelInfo
=
{};
channelInfo
.
channelId
=
0
;
if
(
_nodeId
==
null
||
_nodeId
==
0
){
return
channelInfo
;
}
for
(
let
key
in
this
.
mediaChannels
)
{
let
item
=
this
.
mediaChannels
[
key
];
if
(
item
&&
item
.
status
==
ApeConsts
.
CHANNEL_STATUS_OPENING
&&
item
.
fromNodeId
==
_nodeId
)
{
return
item
;
}
}
return
channelInfo
;
loger
.
log
(
"获取空闲的通道"
,
"mediaChannels"
,
this
.
mediaChannels
,
"counter:"
,
counter
);
//loger.log(this.mediaChannels);
if
(
counter
<
this
.
maxMediaChannel
)
{
return
this
.
MEDIA_OBJ_TABLE_ID
+
(
counter
);
}
//检查频道是否已经被占用
checkChannelIsOpening
(
_channelId
){
if
(
_channelId
==
null
){
loger
.
warn
(
"checkChannelIsOpening error,channel="
,
_channelId
);
return
true
;
}
let
channelInfo
=
this
.
mediaChannels
[
_channelId
];
if
(
channelInfo
==
null
||
channelInfo
.
status
==
ApeConsts
.
CHANNEL_STATUS_RELEASED
){
return
false
;
}
return
true
;
return
0
;
//没有空闲的
}
//获取准备推流的频道信息
getNeedPublishMediaChannel
(
_publishUrl
)
{
return
this
.
needPublishMediaChannel
[
_publishUrl
];
}
//获取当前属于nodeId的已经打开的的channel,返回值为0代表没有打开的,否则返回的就是打开的channelId
getOpeningMediaChannelForNodeId
(
_nodeId
)
{
loger
.
log
(
"getOpeningMediaChannel"
,
"nodeId"
,
_nodeId
,
"mediaChannels:"
,
this
.
mediaChannels
);
let
channelInfo
=
{};
channelInfo
.
channelId
=
0
;
if
(
_nodeId
==
null
||
_nodeId
==
0
)
{
return
channelInfo
;
}
//获取当前所有频道的信息
getAllMediaChannelInfo
(){
let
channels
=
[];
for
(
let
key
in
this
.
mediaChannels
){
let
channel
=
this
.
mediaChannels
[
key
];
if
(
channel
){
channels
.
push
({
"mediaId"
:
channel
.
channelId
,
"status"
:
channel
.
status
,
"fromNodeId"
:
channel
.
fromNodeId
});
}
}
if
(
channels
.
length
<
this
.
maxMediaChannel
){
for
(
let
i
=
channels
.
length
;
i
<
this
.
maxMediaChannel
;
i
++
){
let
channelId
=
this
.
MEDIA_OBJ_TABLE_ID
+
(
i
);
channels
.
push
({
"mediaId"
:
channelId
,
"status"
:
ApeConsts
.
CHANNEL_STATUS_RELEASED
,
"fromNodeId"
:
0
});
}
}
return
channels
;
for
(
let
key
in
this
.
mediaChannels
)
{
let
item
=
this
.
mediaChannels
[
key
];
if
(
item
&&
item
.
status
==
ApeConsts
.
CHANNEL_STATUS_OPENING
&&
item
.
fromNodeId
==
_nodeId
)
{
return
item
;
}
}
return
channelInfo
;
}
//检查频道是否已经被占用
checkChannelIsOpening
(
_channelId
)
{
if
(
_channelId
==
null
)
{
loger
.
warn
(
"checkChannelIsOpening error,channel="
,
_channelId
);
return
true
;
}
let
channelInfo
=
this
.
mediaChannels
[
_channelId
];
if
(
channelInfo
==
null
||
channelInfo
.
status
==
ApeConsts
.
CHANNEL_STATUS_RELEASED
)
{
return
false
;
}
return
true
;
}
//获取当前所有频道的信息
getAllMediaChannelInfo
()
{
let
channels
=
[];
for
(
let
key
in
this
.
mediaChannels
)
{
let
channel
=
this
.
mediaChannels
[
key
];
if
(
channel
)
{
channels
.
push
({
"mediaId"
:
channel
.
channelId
,
"status"
:
channel
.
status
,
"fromNodeId"
:
channel
.
fromNodeId
});
}
}
//获取默认的频道信息
getDefaultChannelInfo
(){
let
channelInfo
=
{};
channelInfo
.
owner
=
0
;
//这个很重要,释放的时候必须设置为0,占用的时候设置为自己的nodeId
channelInfo
.
status
=
ApeConsts
.
CHANNEL_STATUS_RELEASED
;
channelInfo
.
fromNodeId
=
GlobalConfig
.
nodeId
;
channelInfo
.
channelId
=
0
;
//channelId不能为0
channelInfo
.
streamId
=
""
;
channelInfo
.
classId
=
GlobalConfig
.
classId
;
channelInfo
.
siteId
=
GlobalConfig
.
siteId
;
channelInfo
.
toNodeId
=
0
;
channelInfo
.
userId
=
GlobalConfig
.
userId
;
channelInfo
.
mediaType
=
this
.
mediaType
||
ApeConsts
.
MEDIA_TYPE_DEFAULT
;
return
channelInfo
;
if
(
channels
.
length
<
this
.
maxMediaChannel
)
{
for
(
let
i
=
channels
.
length
;
i
<
this
.
maxMediaChannel
;
i
++
)
{
let
channelId
=
this
.
MEDIA_OBJ_TABLE_ID
+
(
i
);
channels
.
push
({
"mediaId"
:
channelId
,
"status"
:
ApeConsts
.
CHANNEL_STATUS_RELEASED
,
"fromNodeId"
:
0
});
}
}
return
channels
;
}
//获取默认的频道信息
getDefaultChannelInfo
()
{
let
channelInfo
=
{};
channelInfo
.
owner
=
0
;
//这个很重要,释放的时候必须设置为0,占用的时候设置为自己的nodeId
channelInfo
.
status
=
ApeConsts
.
CHANNEL_STATUS_RELEASED
;
channelInfo
.
fromNodeId
=
GlobalConfig
.
nodeId
;
channelInfo
.
channelId
=
0
;
//channelId不能为0
channelInfo
.
streamId
=
""
;
channelInfo
.
classId
=
GlobalConfig
.
classId
;
channelInfo
.
siteId
=
GlobalConfig
.
siteId
;
channelInfo
.
toNodeId
=
0
;
channelInfo
.
userId
=
GlobalConfig
.
userId
;
channelInfo
.
mediaType
=
this
.
mediaType
||
ApeConsts
.
MEDIA_TYPE_DEFAULT
;
return
channelInfo
;
}
}
MediaModule
.
allMediaChannelsList
=
{};
//当前已经创建的所有音视频通道(包含释放或未未释放的)
MediaModule
.
allMediaChannelsList
=
{};
//当前已经创建的所有音视频通道(包含释放或未未释放的)
export
default
MediaModule
;
...
...
请
注册
或
登录
后发表评论