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
6d78a0c0f020e31806f39a90812f8816c3f63e90
6d78a0c0
1 parent
5b863c35
新增屏幕共享功能
隐藏空白字符变更
内嵌
并排对比
正在显示
8 个修改的文件
包含
253 行增加
和
24 行删除
dist/McuClient.js
src/EngineEntrance.js
src/MessageTypes.js
src/apes/Ape.js
src/apes/ApeConsts.js
src/apes/MediaModule.js
src/apes/VideoApe.js
src/ss.js
dist/McuClient.js
查看文件 @
6d78a0c
此 diff 太大无法显示。
src/EngineEntrance.js
查看文件 @
6d78a0c
...
...
@@ -28,7 +28,7 @@ import MediaModule from 'apes/MediaModule';
import
UTF8
from
'utf-8'
;
let
loger
=
Loger
.
getLoger
(
'McuClient'
);
let
_sdkInfo
=
{
"version"
:
"v1.2
5.2.201705025
"
,
"author"
:
"www.3mang.com"
};
let
_sdkInfo
=
{
"version"
:
"v1.2
7.10.201705026
"
,
"author"
:
"www.3mang.com"
};
//APE
let
_sass
;
...
...
@@ -149,6 +149,10 @@ export default class MessageEntrance extends Emiter {
//chatApe
this
.
sendChatMsg
=
this
.
_sendChatMsg
.
bind
(
this
);
//屏幕共享
this
.
publishScreenShare
=
this
.
_publishScreenShare
.
bind
(
this
);
this
.
stopPublishScreenShare
=
this
.
_stopPublishScreenShare
.
bind
(
this
);
//videoApe
//this.getVideoPlayPath = this._getVideoPlayPath.bind(this);
this
.
getVideoPublishPath
=
this
.
_getVideoPublishPath
.
bind
(
this
);
...
...
@@ -324,6 +328,7 @@ export default class MessageEntrance extends Emiter {
let
data
=
{
"nodeId"
:
_param
.
nodeId
};
if
(
_video_ape
)
{
_video_ape
.
stopPublishVideo
(
data
);
_video_ape
.
stopPublishScreenShare
(
data
);
}
if
(
_audio_ape
)
{
_audio_ape
.
stopPublishAudio
(
data
);
...
...
@@ -555,7 +560,7 @@ export default class MessageEntrance extends Emiter {
GlobalConfig
.
MS_PLAY_HLS_IP
=
ipItem
;
//ip包含了端口
GlobalConfig
.
MS_PLAY_HLS_PORT
=
""
;
loger
.
log
(
'videoCDNAddr>初始->MSHls'
,
GlobalConfig
.
MS_PLAY_HLS_IP
);
}
else
if
(
ipItem
.
indexOf
(
'rtmppu
sh
'
)
>=
0
){
}
else
if
(
ipItem
.
indexOf
(
'rtmppu
ll
'
)
>=
0
){
//直播的时候rtmp拉流地址
GlobalConfig
.
MS_PLAY_RTMP_IP
=
ipItem
;
//ip包含了端口
GlobalConfig
.
MS_PLAY_RTMP_PORT
=
''
;
...
...
@@ -1067,6 +1072,7 @@ export default class MessageEntrance extends Emiter {
//停止推流
if
(
_video_ape
)
{
_video_ape
.
stopPublishVideo
();
_video_ape
.
stopPublishScreenShare
();
}
if
(
_audio_ape
)
{
_audio_ape
.
stopPublishAudio
();
...
...
@@ -1123,6 +1129,19 @@ export default class MessageEntrance extends Emiter {
}
}
//屏幕共享
//开始屏幕共享
_publishScreenShare
(
_param
){
if
(
_video_ape
){
_video_ape
.
publishScreenShare
(
_param
);
}
}
//停止屏幕共享
_stopPublishScreenShare
(
_param
){
if
(
_video_ape
){
_video_ape
.
stopPublishScreenShare
(
_param
);
}
}
//VidoeApe
videoUpdate
(
_data
)
{
//视频同步的消息发送改变,需要通知ferApe模块中的用户更新状态
...
...
src/MessageTypes.js
查看文件 @
6d78a0c
...
...
@@ -61,6 +61,22 @@ MessageTypes.AUDIO_GET_PUBLISH_PATH= "audio_get_publish_path";//获å–音频推æ
MessageTypes
.
AUDIO_PUBLISH_RESULT
=
"audio_publish_result"
;
//获取音频推流结果
//屏幕共享
MessageTypes
.
SCREEN_SHARE_PLAY
=
"screen_share_play"
;
// 屏幕共享播放视频
MessageTypes
.
SCREEN_SHARE_STOP
=
"screen_share_stop"
;
//屏幕共享停止视频
MessageTypes
.
SCREEN_SHARE_UPDATE
=
"screen_share_update"
;
// //
MessageTypes
.
SCREEN_SHARE_BROADCAST
=
"screen_share_broadcast"
;
//'屏幕共享控制广播消息;
MessageTypes
.
SCREEN_SHARE_GET_PUBLISH_PATH
=
"screen_share_get_publish_path"
;
//获取屏幕共享推流地址
MessageTypes
.
SCREEN_SHARE_PUBLISH_RESULT
=
"screen_share_publish_result"
;
//获取屏幕共享推流结果
//sdk中屏幕共享的事件监听
MessageTypes
.
PUBLISH_SCREEN_SHARE_SUCCESS
=
"publish_screen_share_success"
;
//屏幕共享流发布成
MessageTypes
.
PUBLISH_SCREEN_SHARE_FAILE
=
"publish_screen_share_faile"
;
//屏幕共享流发布失败
MessageTypes
.
PUBLISH_SCREEN_SHARE_CLOSE
=
"publish_screen_share_close"
;
//屏幕共享流关闭
MessageTypes
.
PUBLISH_SCREEN_SHARE_DISCONNECT
=
"publish_screen_share_disconnect"
;
//屏幕共享服务器没有连接
MessageTypes
.
PUBLISH_SCREEN_SHARE_CONNECTED
=
"publish_screen_share_connected"
;
//获取屏幕共享服务器已经连接
//文档模块事件定义
MessageTypes
.
DOC_DELETE
=
"document_delete"
;
//'document.delete';//删除文档
MessageTypes
.
DOC_UPDATE
=
"document_update"
;
// 'document.update';//更新文档(添加、变更)
...
...
src/apes/Ape.js
查看文件 @
6d78a0c
...
...
@@ -380,7 +380,12 @@ export default class Ape extends Emiter {
);
uniformPdu
.
data
=
appPdu
.
toArrayBuffer
();
// Mcu发送
this
.
mcu
.
send
(
uniformPdu
);
if
(
this
.
mcu
){
this
.
mcu
.
send
(
uniformPdu
);
}
else
{
loger
.
warn
(
'MCU为空->无法发送消息'
,
uniformPdu
);
}
}
sendChatUniform
(
appPdu
,
top
)
{
...
...
src/apes/ApeConsts.js
查看文件 @
6d78a0c
...
...
@@ -109,6 +109,7 @@ ApeConsts.CHANNEL_STATUS_OPENING = 1;///< 已经占用成功
ApeConsts
.
MEDIA_TYPE_DEFAULT
=
0
;
//没有类型
ApeConsts
.
MEDIA_TYPE_VIDEO
=
1
;
//视频流(包含音频)
ApeConsts
.
MEDIA_TYPE_AUDIO
=
2
;
//音频流
ApeConsts
.
MEDIA_TYPE_SHARE
=
3
;
//屏幕共享
//return返回值状态
ApeConsts
.
RETURN_SUCCESS
=
0
;
//成功
...
...
src/apes/MediaModule.js
查看文件 @
6d78a0c
...
...
@@ -17,6 +17,7 @@ class MediaModule {
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
;
}
//获取播流地址
...
...
@@ -129,7 +130,7 @@ class MediaModule {
getMediaPublishPathForInVisible
(
_param
)
{
let
mediaLen
=
Object
.
keys
(
MediaModule
.
allMediaChannelsList
=
{}).
length
;
let
freeChannel
=
(
this
.
MEDIA_OBJ_TABLE_ID
-
20
-
mediaLen
)
||
GlobalConfig
.
nodeId
;
loger
.
log
(
'
getMediaPublishPathForInVisible
->'
+
freeChannel
+
" mediaLen:"
+
mediaLen
);
loger
.
log
(
'
监课获取推流地址
->'
+
freeChannel
+
" mediaLen:"
+
mediaLen
);
//默认方式推流
let
pubType
=
"live"
;
//flash推流
...
...
@@ -165,6 +166,47 @@ class MediaModule {
};
}
//桌面共享获取推流地址,频道号由外部传入
getMediaPublishPathForScreenShare
(
_shareChannel
,
_publishType
)
{
let
shareChannel
=
_shareChannel
||
this
.
SCREENSHARING_OBJ_TABLE_ID
;
loger
.
log
(
'桌面共享获取推流地址->'
+
shareChannel
);
//默认方式推流
let
pubType
=
"flash"
;
//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
,
"publishUrl"
:
publishUrl
,
"streamId"
:
streamId
};
}
//获取当前空闲的channel,返回值为0代表没有空闲的,否则返回的就是空闲的channelId
getFreeMediaChannel
()
{
let
counter
=
0
;
...
...
src/apes/VideoApe.js
查看文件 @
6d78a0c
...
...
@@ -10,7 +10,7 @@ import MessageTypes from 'MessageTypes';
import
GlobalConfig
from
'GlobalConfig'
;
import
EngineUtils
from
'EngineUtils'
;
import
MediaModule
from
"./MediaModule"
;
import
ShareApe
from
'./ShareApe'
;
let
loger
=
Loger
.
getLoger
(
'VideoApe'
);
class
VideoApe
extends
Ape
{
...
...
@@ -25,6 +25,13 @@ class VideoApe extends Ape {
this
.
mediaModule
.
MEDIA_OBJ_TABLE_ID
=
ApeConsts
.
VIDEO_OBJ_TABLE_ID
;
this
.
mediaModule
.
mediaChannels
=
{};
this
.
mediaModule
.
mediaType
=
ApeConsts
.
MEDIA_TYPE_VIDEO
;
this
.
shareApe
=
new
ShareApe
();
this
.
shareApe
.
on
(
MessageTypes
.
PUBLISH_SCREEN_SHARE_SUCCESS
,
this
.
onPublishScreenShareSuccess
.
bind
(
this
));
this
.
shareApe
.
on
(
MessageTypes
.
PUBLISH_SCREEN_SHARE_FAILE
,
this
.
onPublishScreenShareFaile
.
bind
(
this
));
this
.
shareApe
.
on
(
MessageTypes
.
PUBLISH_SCREEN_SHARE_CLOSE
,
this
.
onPublishScreenShareClose
.
bind
(
this
));
this
.
shareApe
.
on
(
MessageTypes
.
PUBLISH_SCREEN_SHARE_DISCONNECT
,
this
.
onPublishScreenShareDisconnect
.
bind
(
this
));
this
.
shareApe
.
on
(
MessageTypes
.
PUBLISH_SCREEN_SHARE_CONNECTED
,
this
.
onPublishScreenShareConnected
.
bind
(
this
));
// Ape Models
this
.
registerKey
(
this
.
_session_id
,
this
.
_session_name
,
this
.
_session_tag
,
new
ArrayBuffer
);
...
...
@@ -176,6 +183,117 @@ class VideoApe extends Ape {
this
.
_releaseNodeIdAllChannel
(
nodeId
);
}
}
//==========================屏幕共享=========================================================================
//监听屏幕共享发布成功
onPublishScreenShareSuccess
(){
loger
.
log
(
'屏幕共享推流成功之后才能更新同步消息->'
);
//屏幕共享推流成功之后才能更新同步消息
let
channelInfo
=
this
.
shareApe
.
getPublishChannelInfo
();
this
.
sendTableUpdateHandler
(
channelInfo
);
this
.
_emit
(
MessageTypes
.
PUBLISH_SCREEN_SHARE_SUCCESS
,{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
"桌面共享推流!"
,
"mediaId"
:
channelInfo
.
channelId
});
return
{
"code"
:
ApeConsts
.
RETURN_SUCCESS
,
"data"
:
"桌面共享推流!"
,
"mediaId"
:
channelInfo
.
channelId
};
}
//屏幕共享连接打开
onPublishScreenShareFaile
(){
loger
.
log
(
'屏幕共享推流失败->'
);
this
.
_emit
(
MessageTypes
.
PUBLISH_SCREEN_SHARE_FAILE
);
}
//屏幕共享连接关闭
onPublishScreenShareClose
(){
loger
.
log
(
'屏幕共享推流关闭->'
);
this
.
_emit
(
MessageTypes
.
PUBLISH_SCREEN_SHARE_CLOSE
);
}
//屏幕共享连接失败
onPublishScreenShareDisconnect
(){
loger
.
log
(
'屏幕共享服务器连接失败->'
);
this
.
_emit
(
MessageTypes
.
PUBLISH_SCREEN_SHARE_DISCONNECT
);
}
//屏幕共享连接失败
onPublishScreenShareConnected
(){
loger
.
log
(
'屏幕共享服务器连接成功->'
);
this
.
_emit
(
MessageTypes
.
PUBLISH_SCREEN_SHARE_CONNECTED
);
}
//桌面共享推流
publishScreenShare
(
_param
)
{
if
(
!
this
.
mcu
.
connected
){
loger
.
warn
(
GlobalConfig
.
getCurrentStatus
());
this
.
_emit
(
MessageTypes
.
VIDEO_PUBLISH_RESULT
,{
"code"
:
ApeConsts
.
RETURN_FAILED
,
"data"
:
"已经断开连接!"
,
"mediaId"
:
0
});
return
{
"code"
:
ApeConsts
.
RETURN_FAILED
,
"data"
:
"已经断开连接"
};
}
/* if (_param == null||_param.publishUrl == null)
{
loger.warn('桌面共享推流->参数错误', _param);
this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_APE_INTERFACE_PARAM_WRONG);
this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"桌面共享推流参数错误!","mediaId":0});
return {"code": ApeConsts.RETURN_FAILED, "data": "桌面共享推流参数错误"};
}*/
/*
//根据推流的地址获取对应的频道信息
let needPublishChannelInfo=this.mediaModule.getNeedPublishMediaChannel(_param.publishUrl);
if(needPublishChannelInfo==null){
loger.warn('桌面共享推流->推流数据已经无效', _param);
this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"推流数据已经无效!","mediaId":0});
return {"code": ApeConsts.RETURN_FAILED, "data": "推流数据已经无效"};
}*/
/*//判断当前是否还有空闲的channle
let freeChannel = this.mediaModule.getFreeMediaChannel();
if (freeChannel == 0) {
loger.warn("推流->不能再打开更多的设备 ");
this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"不能再打开更多的设备!","mediaId":0});
return {"code": ApeConsts.RETURN_FAILED, "data": "不能再打开更多的设备","mediaChannels":this.mediaModule.mediaChannels};
}
//判断当前的频道是否已经占用
if(this.mediaModule.checkChannelIsOpening(needPublishChannelInfo.channelId)){
if(needPublishChannelInfo.nodeId==GlobalConfig.nodeId){
loger.warn(needPublishChannelInfo.channelId,"已经推送过消息,不需要再次推送");
this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId});
return {"code": ApeConsts.RETURN_SUCCESS, "data":"已经推送过消息,不需要再次推送!","mediaId":needPublishChannelInfo.channelId};
}else {
loger.warn(needPublishChannelInfo.channelId,"频道已经被占用");
this._emit( MessageTypes.VIDEO_PUBLISH_RESULT,{"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaId":0});
return {"code": ApeConsts.RETURN_FAILED, "data":"频道已经被占用!","mediaChannels":this.mediaModule.mediaChannels};
}
}*/
/* let channelInfo=this.mediaModule.getDefaultChannelInfo();
channelInfo.owner=GlobalConfig.nodeId;
channelInfo.status=ApeConsts.CHANNEL_STATUS_OPENING;
channelInfo.channelId=needPublishChannelInfo.channelId;
channelInfo.streamId=needPublishChannelInfo.streamId;//按规则拼接的流名称
channelInfo.timestamp=needPublishChannelInfo.timestamp;//时间戳
channelInfo.mediaType=ApeConsts.MEDIA_TYPE_SHARE;//类型为屏幕共享*/
let
publishType
=
'flash'
;
if
(
_param
&&
_param
.
type
==
'live'
){
publishType
=
'live'
;
}
//获取屏幕共享推流的地址
let
shareResult
=
this
.
mediaModule
.
getMediaPublishPathForScreenShare
(
this
.
shareApe
.
channelId
,
publishType
);
this
.
shareApe
.
publish
(
shareResult
);
}
//停止桌面共享推流
stopPublishScreenShare
(
_param
)
{
loger
.
log
(
'停止桌面共享推流->'
,
_param
);
//if(!this.mcu.connected){
// loger.warn(GlobalConfig.getCurrentStatus());
// return {"code": ApeConsts.RETURN_FAILED, "data": "已经断开连接"};
//}
let
channelInfo
=
this
.
shareApe
.
getDefaultChannelInfo
();
channelInfo
.
status
=
ApeConsts
.
CHANNEL_STATUS_RELEASED
;
this
.
sendTableUpdateHandler
(
channelInfo
);
this
.
shareApe
.
stopPublish
();
}
//=============================屏幕共享 end=================================================
//释放nodeId占用的指定的channelId频道
_releaseChannelForNodeId
(
nodeId
,
channelId
){
loger
.
log
(
nodeId
,
"_releaseChannelForNodeId-->channelId"
,
channelId
);
...
...
@@ -352,7 +470,7 @@ class VideoApe extends Ape {
tableUpdateHandler
(
owner
,
itemIdx
,
itemData
,
seek
)
{
// debugger;
let
unpackChannelInfo
=
this
.
unPackPdu
(
owner
,
itemIdx
,
itemData
);
loger
.
log
(
"tableUpdateHandler->channel"
,
itemIdx
,
'status->'
,
unpackChannelInfo
.
status
,
"seek->"
,
seek
);
loger
.
log
(
"tableUpdateHandler->channel"
,
itemIdx
,
'
mediaType'
,
unpackChannelInfo
.
mediaType
,
'
status->'
,
unpackChannelInfo
.
status
,
"seek->"
,
seek
);
//****很重要********
//如果owner的值为0,代表的是这个歌频道已经被释放了(mcu服务端对于占用channel的掉线用户,就是把owner设置为0)
...
...
@@ -361,8 +479,10 @@ class VideoApe extends Ape {
unpackChannelInfo
.
status
=
ApeConsts
.
CHANNEL_STATUS_RELEASED
;
unpackChannelInfo
.
streamId
=
""
;
}
this
.
mediaModule
.
mediaChannels
[
itemIdx
]
=
unpackChannelInfo
;
//屏幕共享的流不保存
if
(
unpackChannelInfo
.
mediaType
!=
ApeConsts
.
MEDIA_TYPE_SHARE
){
this
.
mediaModule
.
mediaChannels
[
itemIdx
]
=
unpackChannelInfo
;
}
if
(
unpackChannelInfo
&&
unpackChannelInfo
.
fromNodeId
!=
GlobalConfig
.
nodeId
){
let
receiveChannelInfo
=
{};
...
...
@@ -370,6 +490,7 @@ class VideoApe extends Ape {
receiveChannelInfo
.
fromNodeId
=
unpackChannelInfo
.
fromNodeId
;
receiveChannelInfo
.
userName
=
unpackChannelInfo
.
userName
||
""
;
receiveChannelInfo
.
userRole
=
unpackChannelInfo
.
userRole
||
ApeConsts
.
normal
;
receiveChannelInfo
.
mediaType
=
unpackChannelInfo
.
mediaType
||
ApeConsts
.
MEDIA_TYPE_DEFAULT
;
//消息不是自己同步的,需要处理
if
(
unpackChannelInfo
.
status
==
ApeConsts
.
CHANNEL_STATUS_OPENING
){
//正在推流
...
...
@@ -392,13 +513,27 @@ class VideoApe extends Ape {
if
(
replay
.
code
==
0
){
receiveChannelInfo
.
replay
=
replay
.
playUrl
;
}
loger
.
log
(
"VIDEO_PLAY"
,
receiveChannelInfo
);
//广播播放视频的消息
this
.
_emit
(
MessageTypes
.
VIDEO_PLAY
,
receiveChannelInfo
);
if
(
unpackChannelInfo
.
mediaType
!=
ApeConsts
.
MEDIA_TYPE_SHARE
){
//广播播放视频的消息
loger
.
log
(
"VIDEO_PLAY"
,
receiveChannelInfo
);
this
.
_emit
(
MessageTypes
.
VIDEO_PLAY
,
receiveChannelInfo
);
}
else
{
//停止播放屏幕共享
loger
.
log
(
"SCREEN_SHARE_PLAY"
,
receiveChannelInfo
);
this
.
_emit
(
MessageTypes
.
SCREEN_SHARE_PLAY
,
receiveChannelInfo
);
}
}
else
{
loger
.
log
(
"VIDEO_STOP"
,
receiveChannelInfo
);
//流已经停止
this
.
_emit
(
MessageTypes
.
VIDEO_STOP
,
receiveChannelInfo
);
if
(
unpackChannelInfo
.
mediaType
!=
ApeConsts
.
MEDIA_TYPE_SHARE
){
//停止播放视频
loger
.
log
(
"VIDEO_STOP"
,
receiveChannelInfo
);
this
.
_emit
(
MessageTypes
.
VIDEO_STOP
,
receiveChannelInfo
);
}
else
{
//停止播放屏幕共享
loger
.
log
(
"SCREEN_SHARE_STOP"
,
receiveChannelInfo
);
this
.
_emit
(
MessageTypes
.
SCREEN_SHARE_STOP
,
receiveChannelInfo
);
}
}
}
else
{
loger
.
warn
(
"视频消息是自己发送的或者是视频消息无效,不需要处理,消息内容如下:"
);
...
...
@@ -410,19 +545,29 @@ class VideoApe extends Ape {
GlobalConfig
.
openCamera
=
0
;
GlobalConfig
.
openMicrophones
=
0
;
}
this
.
_emit
(
MessageTypes
.
USER_DEVICE_STATUS_CHAANGE
,{
nodeId
:
GlobalConfig
.
nodeId
,
userRole
:
GlobalConfig
.
userRole
,
userName
:
GlobalConfig
.
userName
,
userId
:
GlobalConfig
.
userId
,
openCamera
:
GlobalConfig
.
openCamera
,
openMicrophones
:
GlobalConfig
.
openMicrophones
//更新用户的摄像头和麦克风状态
if
(
unpackChannelInfo
.
mediaType
!=
ApeConsts
.
MEDIA_TYPE_SHARE
)
{
//非屏幕共享的情况下才更新状态
this
.
_emit
(
MessageTypes
.
USER_DEVICE_STATUS_CHAANGE
,
{
nodeId
:
GlobalConfig
.
nodeId
,
userRole
:
GlobalConfig
.
userRole
,
userName
:
GlobalConfig
.
userName
,
userId
:
GlobalConfig
.
userId
,
openCamera
:
GlobalConfig
.
openCamera
,
openMicrophones
:
GlobalConfig
.
openMicrophones
});
}
}
if
(
unpackChannelInfo
.
mediaType
!=
ApeConsts
.
MEDIA_TYPE_SHARE
){
//非屏幕共享情况的处理
MediaModule
.
allMediaChannelsList
[
itemIdx
]
=
unpackChannelInfo
;
console
.
log
(
'MediaModule.allMediaChannelsList'
,
MediaModule
.
allMediaChannelsList
);
this
.
_emit
(
MessageTypes
.
VIDEO_UPDATE
,
unpackChannelInfo
);
}
MediaModule
.
allMediaChannelsList
[
itemIdx
]
=
unpackChannelInfo
;
console
.
log
(
'MediaModule.allMediaChannelsList'
,
MediaModule
.
allMediaChannelsList
);
this
.
_emit
(
MessageTypes
.
VIDEO_UPDATE
,
unpackChannelInfo
);
}
///////数据的封包和解包/////////////////////////////////////////
...
...
src/ss.js
0 → 100644
查看文件 @
6d78a0c
!
function
(
e
,
t
){
"object"
==
typeof
exports
&&
"object"
==
typeof
module
?
module
.
exports
=
t
():
"function"
==
typeof
define
&&
define
.
amd
?
define
([],
t
):
"object"
==
typeof
exports
?
exports
.
share
=
t
():
e
.
share
=
t
()}(
this
,
function
(){
return
function
(
e
){
function
t
(
n
){
if
(
_
[
n
])
return
_
[
n
].
exports
;
var
a
=
_
[
n
]
=
{
exports
:{},
id
:
n
,
loaded
:
!
1
};
return
e
[
n
].
call
(
a
.
exports
,
a
,
a
.
exports
,
t
),
a
.
loaded
=!
0
,
a
.
exports
}
var
_
=
{};
return
t
.
m
=
e
,
t
.
c
=
_
,
t
.
p
=
""
,
t
(
0
)}([
function
(
e
,
t
,
_
){
e
.
exports
=
_
(
2
)},
function
(
e
,
t
){
"use strict"
;
function
_
(
e
,
t
){
if
(
!
(
e
instanceof
t
))
throw
new
TypeError
(
"Cannot call a class as a function"
)}
Object
.
defineProperty
(
t
,
"__esModule"
,{
value
:
!
0
});
var
n
=
function
(){
function
e
(
e
,
t
){
for
(
var
_
=
0
;
_
<
t
.
length
;
_
++
){
var
n
=
t
[
_
];
n
.
enumerable
=
n
.
enumerable
||!
1
,
n
.
configurable
=!
0
,
"value"
in
n
&&
(
n
.
writable
=!
0
),
Object
.
defineProperty
(
e
,
n
.
key
,
n
)}}
return
function
(
t
,
_
,
n
){
return
_
&&
e
(
t
.
prototype
,
_
),
n
&&
e
(
t
,
n
),
t
}}(),
a
=
function
(){
function
e
(){
_
(
this
,
e
),
this
.
MAPS
=
{}}
return
n
(
e
,[{
key
:
"on"
,
value
:
function
(
e
,
t
){
if
(
e
&&
t
){
var
_
=
this
.
MAPS
[
e
];
if
(
!
_
)
return
this
.
MAPS
[
e
]
=
[
t
];
_
.
push
(
t
)}}},{
key
:
"off"
,
value
:
function
(
e
,
t
){
if
(
e
){
var
_
=
this
.
MAPS
[
e
];
if
(
_
){
if
(
t
)
return
_
.
splice
(
_
.
indexOf
(
t
),
1
);
_
.
length
=
0
}}}},{
key
:
"emit"
,
value
:
function
(
e
,
t
){
if
(
e
){
var
_
=
this
.
MAPS
[
"*"
];
_
&&
_
.
length
&&
_
.
forEach
(
function
(
_
){
_
(
e
,
t
)});
var
n
=
this
.
MAPS
[
e
];
n
&&
n
.
length
&&
n
.
forEach
(
function
(
e
){
e
(
t
)})}}}]),
e
}();
t
.
default
=
a
},
function
(
e
,
t
,
_
){
"use strict"
;
function
n
(
e
){
return
e
&&
e
.
__esModule
?
e
:{
default
:
e
}}
function
a
(
e
){
var
t
,
_
,
n
,
a
;
n
=
e
.
length
,
t
=
new
Uint8Array
(
3
*
n
);
var
r
=
0
;
for
(
_
=
0
;
_
<
n
;
_
++
)
a
=
e
.
charCodeAt
(
_
),
a
>=
1
&&
a
<=
127
?
t
[
r
++
]
=
a
:
a
>
2047
?(
t
[
r
++
]
=
224
|
a
>>
12
&
15
,
t
[
r
++
]
=
128
|
a
>>
6
&
63
,
t
[
r
++
]
=
128
|
a
>>
0
&
63
):(
t
[
r
++
]
=
192
|
a
>>
6
&
31
,
t
[
r
++
]
=
128
|
a
>>
0
&
63
);
return
new
Uint8Array
(
t
.
buffer
,
0
,
r
)}
function
r
(
e
){
var
t
,
_
,
n
,
a
,
r
,
o
;
for
(
t
=
""
,
n
=
e
.
length
,
_
=
0
;
_
<
n
;)
switch
(
a
=
e
[
_
++
],
a
>>
4
){
case
0
:
case
1
:
case
2
:
case
3
:
case
4
:
case
5
:
case
6
:
case
7
:
t
+=
String
.
fromCharCode
(
a
);
break
;
case
12
:
case
13
:
r
=
e
[
_
++
],
t
+=
String
.
fromCharCode
((
31
&
a
)
<<
6
|
63
&
r
);
break
;
case
14
:
r
=
e
[
_
++
],
o
=
e
[
_
++
],
t
+=
String
.
fromCharCode
((
15
&
a
)
<<
12
|
(
63
&
r
)
<<
6
|
(
63
&
o
)
<<
0
)}
return
t
}
function
o
(
e
){
var
t
=
arguments
.
length
>
1
&&
void
0
!==
arguments
[
1
]?
arguments
[
1
]:
""
,
_
=
new
Object
;
if
(
_
.
data_len
=
0
,
_
.
data
=
""
,
_
.
name
=
e
,
"mov_start"
==
e
)
_
.
type
=
1
;
else
if
(
"mov_stop"
==
e
)
_
.
type
=
2
;
else
if
(
"mov_pause"
==
e
){
if
(
_
.
type
=
3
,
pos
=
t
,
pos
.
length
>
0
){
_
.
data_len
=
4
;
var
n
=
new
ArrayBuffer
(
_
.
data_len
),
r
=
new
Uint32Array
(
n
,
0
,
1
);
r
[
0
]
=
parseInt
(
pos
),
_
.
data
=
new
Uint8Array
(
n
,
0
,
4
)}}
else
if
(
"mov_resume"
==
e
)
_
.
type
=
4
;
else
if
(
"mov_seek"
==
e
){
if
(
_
.
type
=
5
,
pos
=
t
,
pos
.
length
>
0
){
_
.
data_len
=
4
;
var
n
=
new
ArrayBuffer
(
_
.
data_len
),
r
=
new
Uint32Array
(
n
,
0
,
1
);
r
[
0
]
=
parseInt
(
pos
),
_
.
data
=
new
Uint8Array
(
n
,
0
,
4
)}}
else
if
(
"ss_start"
==
e
)
_
.
type
=
6
,
_
.
data
=
a
(
t
),
_
.
data_len
=
_
.
data
.
length
;
else
if
(
"ss_stop"
==
e
)
_
.
type
=
7
;
else
if
(
"ss_version"
==
e
)
_
.
type
=
14
;
else
if
(
"get_mic"
==
e
)
_
.
type
=
26
;
else
{
if
(
"ds_start"
==
e
){
_
.
type
=
27
,
_
.
data_len
=
536
;
var
n
=
new
ArrayBuffer
(
_
.
data_len
),
o
=
new
Uint32Array
(
n
,
0
,
6
);
coordstr
=
t
;
var
i
=
coordstr
.
split
(
","
);
if
(
4
!=
i
.
length
)
return
;
o
[
0
]
=
parseInt
(
i
[
0
]),
o
[
1
]
=
parseInt
(
i
[
1
]),
o
[
2
]
=
parseInt
(
i
[
2
]),
o
[
3
]
=
parseInt
(
i
[
3
]);
var
s
=
new
Uint8Array
(
n
,
24
,
256
);
window_name
=
t
;
for
(
var
S
=
a
(
window_name
),
E
=
0
;
E
<
S
.
length
;
E
++
)
s
[
E
]
=
S
[
E
];
o
[
4
]
=
S
.
length
,
o
[
5
]
=
0
;
new
Uint8Array
(
n
,
280
,
256
);
return
_
.
data
=
new
Uint8Array
(
n
,
0
,
_
.
data_len
),
void
A
(
_
)}
if
(
"ds_stop"
==
e
)
_
.
type
=
28
;
else
{
if
(
"aud_start"
==
e
){
_
.
type
=
29
,
_
.
data_len
=
520
;
var
n
=
new
ArrayBuffer
(
_
.
data_len
),
l
=
new
Uint32Array
(
n
,
0
,
1
),
C
=
t
;
l
[
0
]
=
C
.
length
;
var
f
=
new
Uint32Array
(
n
,
4
,
1
);
f
[
0
]
=
0
;
for
(
var
c
=
new
Uint8Array
(
n
,
8
,
256
),
O
=
a
(
C
),
E
=
0
;
E
<
O
.
length
;
E
++
)
c
[
E
]
=
O
[
E
];
new
Uint8Array
(
n
,
264
,
256
);
return
_
.
data
=
new
Uint8Array
(
n
,
0
,
_
.
data_len
),
void
A
(
_
)}
if
(
"aud_stop"
==
e
)
_
.
type
=
30
;
else
if
(
"get_cam"
==
e
)
_
.
type
=
41
;
else
{
if
(
"cam_start"
==
e
){
_
.
type
=
42
,
_
.
data_len
=
520
;
var
n
=
new
ArrayBuffer
(
_
.
data_len
),
I
=
new
Uint32Array
(
n
,
0
,
1
),
T
=
t
;
I
[
0
]
=
T
.
length
;
var
f
=
new
Uint32Array
(
n
,
4
,
1
);
f
[
0
]
=
0
;
for
(
var
U
=
new
Uint8Array
(
n
,
8
,
256
),
u
=
a
(
T
),
E
=
0
;
E
<
u
.
length
;
E
++
)
U
[
E
]
=
u
[
E
];
new
Uint8Array
(
n
,
264
,
256
);
return
_
.
data
=
new
Uint8Array
(
n
,
0
,
_
.
data_len
),
void
A
(
_
)}
"cam_stop"
==
e
?
_
.
type
=
43
:
"set_videoparam"
==
e
?(
_
.
type
=
46
,
_
.
data
=
a
(
t
),
_
.
data_len
=
_
.
data
.
length
):
"get_videoparam"
==
e
?(
_
.
type
=
47
,
_
.
data
=
a
(
t
),
_
.
data_len
=
_
.
data
.
length
):
"start_record"
==
e
?(
_
.
type
=
48
,
_
.
data
=
a
(
t
),
_
.
data_len
=
_
.
data
.
length
):
"stop_record"
==
e
?(
_
.
type
=
49
,
_
.
data
=
a
(
t
),
_
.
data_len
=
_
.
data
.
length
):
"start_push"
==
e
?(
_
.
type
=
50
,
_
.
data
=
a
(
t
),
_
.
data_len
=
_
.
data
.
length
):
"stop_push"
==
e
?(
_
.
type
=
51
,
_
.
data
=
a
(
t
),
_
.
data_len
=
_
.
data
.
length
):
"get_rtmp_port"
==
e
?
_
.
type
=
52
:
"set_mic_vol"
==
e
?(
_
.
type
=
53
,
_
.
data
=
a
(
t
),
_
.
data_len
=
_
.
data
.
length
):
"get_mic_vol"
==
e
&&
(
_
.
type
=
54
)}}}
A
(
_
)}
function
A
(
e
){
var
t
=
8
+
e
.
data_len
,
_
=
new
ArrayBuffer
(
t
),
n
=
new
Uint16Array
(
_
,
0
,
1
),
a
=
new
Uint8Array
(
_
,
2
,
1
),
r
=
new
Uint32Array
(
_
,
4
,
1
);
if
(
n
[
0
]
=
e
.
type
,
a
[
0
]
=
0
,
r
[
0
]
=
e
.
data_len
,
e
.
data_len
>
0
)
for
(
var
o
=
new
Uint8Array
(
_
,
8
,
e
.
data_len
),
A
=
0
;
A
<
e
.
data_len
;
A
++
)
o
[
A
]
=
e
.
data
[
A
];
R
&&
R
.
send
(
_
)}
function
i
(){
try
{
R
&&
(
R
.
close
(),
R
=
R
.
onopen
=
R
.
onclose
=
R
.
onerror
=
R
.
onmessage
=
null
,
C
.
emit
(
C
.
CLOSE
))}
catch
(
e
){
console
.
log
(
e
)}}
function
s
(){
i
()}
function
S
(){
R
&&
i
(),
R
=
new
WebSocket
(
"ws://"
+
p
+
":"
+
L
),
g
=
setTimeout
(
function
(){
clearTimeout
(
g
),
i
()},
1500
),
R
.
timeout
=
1500
,
R
.
binaryType
=
"arraybuffer"
,
R
.
onopen
=
function
(){
clearTimeout
(
g
),
o
(
"get_rtmp_port"
),
o
(
"get_mic"
),
o
(
"get_cam"
),
o
(
"get_mic_vol"
),
C
.
emit
(
C
.
OPEN
)},
R
.
onclose
=
function
(){
i
()},
R
.
onerror
=
function
(){
i
()},
R
.
onmessage
=
function
(
e
){
var
t
=
e
.
data
;
if
(
"string"
==
typeof
e
.
data
)
console
.
log
(
"on message [string] ignore."
);
else
{
var
_
=
new
DataView
(
t
),
n
=
_
.
getUint16
(
0
,
!
0
);
console
.
log
(
"onmessage code->"
,
n
);
var
a
=
(
_
.
getUint8
(
2
,
!
0
),
_
.
getUint32
(
4
,
!
0
));
if
(
n
>=
0
&&
n
<
f
.
length
){
f
[
n
]}
if
(
0
==
n
||
6
==
n
||
8
==
n
)
console
.
log
(
"mov_start,mov_pause,mov_seek success"
);
else
if
(
10
==
n
){
if
(
a
>
36
){
var
o
=
new
Uint32Array
(
t
,
8
,
8
),
A
=
"width:"
+
o
[
0
]
+
" height:"
+
o
[
1
];
A
=
"framerate:"
+
o
[
2
]
+
" duration:"
+
o
[
3
],
A
=
"playpos:"
+
o
[
4
]
+
" filesize:"
+
o
[
5
],
c
=
A
;
var
i
=
o
[
6
],
s
=
new
Uint8Array
(
t
,
40
,
i
),
S
=
r
(
s
);
c
.
filename
=
S
,
C
.
emit
(
C
.
MOVIE_INFO_CHANGE
,
c
)}}
else
if
(
11
==
n
)
console
.
log
(
"ss_start success"
),
C
.
emit
(
C
.
SS_START
);
else
if
(
24
<=
n
&&
26
>=
n
){
if
(
a
>=
4
){
var
E
=
_
.
getUint32
(
8
,
!
0
);
O
=
E
.
toString
(),
C
.
emit
(
C
.
VERSION_INFO_CHANGE
,
O
)}}
else
if
(
55
==
n
)
console
.
log
(
"ds_start success"
);
else
if
(
59
==
n
)
console
.
log
(
"as start success"
);
else
if
(
83
==
n
){
if
(
console
.
log
(
"get camera sucess"
),
a
>
4
){
var
l
=
_
.
getUint32
(
8
,
!
0
),
R
=
12
;
I
.
length
=
0
;
for
(
var
p
=
0
;
p
<
l
;
p
++
){
var
L
=
_
.
getUint32
(
R
,
!
0
);
R
+=
4
;
var
g
=
new
Uint8Array
(
t
,
R
,
L
-
1
);
R
+=
L
;
var
y
=
r
(
g
);
I
.
push
(
y
)}
C
.
emit
(
C
.
CAMERA_INFO_CHANGE
,
I
)}}
else
if
(
53
==
n
){
if
(
a
>
4
){
var
v
=
_
.
getUint32
(
8
,
!
0
),
R
=
12
;
T
.
length
=
0
;
for
(
var
p
=
0
;
p
<
v
;
p
++
){
var
M
=
_
.
getUint32
(
R
,
!
0
);
R
+=
4
;
var
P
=
new
Uint8Array
(
t
,
R
,
M
-
1
);
R
+=
M
;
var
y
=
r
(
P
);
T
.
push
(
y
)}
C
.
emit
(
C
.
MIC_INFO_CHANGE
,
T
)}}
else
if
(
85
==
n
)
console
.
log
(
"cam_share success"
);
else
if
(
95
==
n
){
console
.
log
(
"get_videoparam success"
);
var
N
=
new
Uint8Array
(
t
,
8
,
t
.
byteLength
-
8
-
1
),
y
=
r
(
N
);
U
=
y
,
C
.
emit
(
C
.
VIDEO_INFO_CHANGE
,
U
)}
else
if
(
105
==
n
){
console
.
log
(
"get_rtmp_port_success"
);
var
N
=
new
Uint8Array
(
t
,
8
,
t
.
byteLength
-
8
-
1
),
y
=
r
(
N
);
u
=
y
,
C
.
emit
(
C
.
RTMP_PORT_CHANGE
,
u
)}
else
if
(
109
==
n
){
console
.
log
(
"get_mic_vol success"
);
var
N
=
new
Uint8Array
(
t
,
8
,
t
.
byteLength
-
8
-
1
),
y
=
r
(
N
);
d
=
y
,
C
.
emit
(
C
.
MIC_VOL_CHANGE
,
d
)}
else
if
(
111
<=
n
&&
114
>=
n
){
var
N
=
new
Uint8Array
(
t
,
8
,
t
.
byteLength
-
8
),
V
=
r
(
N
);
console
.
log
(
"url->"
,
V
)}
else
if
(
13
==
n
)
C
.
emit
(
C
.
SS_STOP
);
else
{
var
N
=
new
Uint8Array
(
t
,
8
,
t
.
byteLength
-
8
),
y
=
r
(
N
);
console
.
log
(
"data ->"
,
y
)}}}}
Object
.
defineProperty
(
t
,
"__esModule"
,{
value
:
!
0
});
var
E
=
_
(
1
),
l
=
n
(
E
),
C
=
new
l
.
default
,
f
=
[
"MOV_START_SUC"
,
"MOV_START_FAIL"
,
"MOV_STOP_SUC"
,
"MOV_STOP_FAIL"
,
"MOV_PAUSE_SUC"
,
"MOV_PAUSE_FAIL"
,
"MOV_RESUME_SUC"
,
"MOV_RESUME_FAIL"
,
"MOV_SEEK_SUC"
,
"MOV_SEEK_FAIL"
,
"MOV_PROPERTY"
,
"SS_START_SUC"
,
"SS_START_FAIL"
,
"SS_STOP_SUC"
,
"SS_STOP_FAIL"
,
"REC_START_SUC"
,
"REC_START_FAIL"
,
"REC_STOP_SUC"
,
"REC_STOP_FAIL"
,
"REC_PAUSE_SUC"
,
"REC_PAUSE_FAIL"
,
"REC_RESUME_SUC"
,
"REC_RESUME_FAIL"
,
"MOV_PLAY_FINISH"
,
"MOV_VERSION"
,
"SS_VERSION"
,
"REC_VERSION"
,
"MOV_SELECT_FILE_CANCEL"
,
"QAV_LOGIN_SUC"
,
"QAV_LOGIN_FAIL"
,
"QAV_LOGOUT_SUC"
,
"QAV_LOGOUT_FAIL"
,
"QAV_ENTERROOM_SUC"
,
"QAV_ENTERROOM_FAIL"
,
"QAV_LEAVEROOM_SUC"
,
"QAV_LEAVEROOM_FAIL"
,
"QAV_OPEN_MIC_SUC"
,
"QAV_OPEN_MIC_FAIL"
,
"QAV_OPEN_MIC_NODEV"
,
"QAV_CLOSE_MIC_SUC"
,
"QAV_CLOSE_MIC_FAIL"
,
"QAV_CLOSE_MIC_NODEV"
,
"QAV_OPEN_PLAYER_SUC"
,
"QAV_OPEN_PLAYER_FAIL"
,
"QAV_OPEN_PLAYER_NODEV"
,
"QAV_CLOSE_PLAYER_SUC"
,
"QAV_CLOSE_PLAYER_FAIL"
,
"QAV_CLOSE_PLAYER_NODEV"
,
"QAV_MUTE_AUDIO_SUC"
,
"QAV_MUTE_AUDIO_FAIL"
,
"QAV_UNMUTE_AUDIO_SUC"
,
"QAV_UNMUTE_AUDIO_FAIL"
,
"REC_SAVE_FILE_CANCEL"
,
"GET_MIC_SUC"
,
"GET_MIC_FAIL"
,
"DS_START_SUC"
,
"DS_START_FAIL"
,
"DS_STOP_SUC"
,
"DS_STOP_FAIL"
,
"AUD_START_SUC"
,
"AUD_START_FAIL"
,
"AUD_STOP_SUC"
,
"AUD_STOP_FAIL"
,
"AUD_DATA"
,
"SS_DATA"
,
"MOV_DATA"
,
"PEN_START_SUC"
,
"PEN_START_FAIL"
,
"PEN_STOP_SUC"
,
"PEN_STOP_FAIL"
,
"PEN_VERSION"
,
"QAV_DEVICE_SUC"
,
"QAV_DEVICE_FAIL"
,
"CBD_QUERY_SUC"
,
"CBD_QUERY_FAIL"
,
"CBD_GET_SUC"
,
"CBD_GET_FAIL"
,
"FILE_GET_SUC"
,
"FILE_GET_FAIL"
,
"FILE_SET_SUC"
,
"FILE_SET_FAIL"
,
"RESTART_SUC"
,
"RESTART_FAIL"
,
"GET_CAM_SUC"
,
"GET_CAM_FAIL"
,
"CAM_START_SUC"
,
"CAM_START_FAIL"
,
"CAM_STOP_SUC"
,
"CAM_STOP_FAIL"
,
"SWITCH_SCENE_SUC"
,
"SWITCH_SCENE_FAIL"
,
"PUSH_STREAM_FAIL"
,
"SHOW_UI_SUC"
,
"SET_VIDEO_PARAM_SUC"
,
"SET_VIDEO_PARAM_FAIL"
,
"GET_VIDEO_PARAM_SUC"
,
"GET_VIDEO_PARAM_FAIL"
,
"START_RECORD_SUC"
,
"START_RECORD_FAIL"
,
"STOP_RECORD_SUC"
,
"STOP_RECORD_FAIL"
,
"START_PUSH_SUC"
,
"START_PUSH_FAIL"
,
"STOP_PUSH_SUC"
,
"STOP_PUSH_FAIL"
,
"GET_RTMP_PORT_SUC"
,
"GET_RTMP_PORT_FAIL"
,
"SET_MIC_VOL_SUC"
,
"SET_MIC_VOL_FAIL"
,
"GET_MIC_VOL_SUC"
,
"GET_MIC_VOL_FAIL"
,
"RTMP_CONNECTING"
,
"RTMP_CONNECT_SUC"
,
"RTMP_CONNECT_FAIL"
,
"RTMP_CONNECT_CLOSED"
],
c
=
null
,
O
=
""
,
I
=
[],
T
=
[],
U
=
""
,
u
=
""
,
d
=
""
,
R
=
null
,
p
=
"127.0.0.1"
,
L
=
8090
,
g
=
0
;
C
.
infos
=
{
movieInfo
:
c
,
versionInfo
:
O
,
cameraInfo
:
I
,
micInfo
:
T
,
videoInfo
:
U
,
rtmpPort
:
u
,
micVol
:
d
},
C
.
MOVIE_INFO_CHANGE
=
"MOVIE_INFO_CHANGE"
,
C
.
VERSION_INFO_CHANGE
=
"VERSION_INFO_CHANGE"
,
C
.
CAMERA_INFO_CHANGE
=
"CAMERA_INFO_CHANGE"
,
C
.
MIC_INFO_CHANGE
=
"MIC_INFO_CHANGE"
,
C
.
VIDEO_INFO_CHANGE
=
"VIDEO_INFO_CHANGE"
,
C
.
RTMP_PORT_CHANGE
=
"RTMP_PORT_CHANGE"
,
C
.
MIC_VOL_CHANGE
=
"MIC_VOL_CHANGE"
,
C
.
SS_START
=
"SS_START"
,
C
.
SS_STOP
=
"SS_STOP"
,
C
.
OPEN
=
"OPEN"
,
C
.
CLOSE
=
"CLOSE"
,
C
.
ERROR
=
"ERROR"
,
C
.
getRTMPPort
=
function
(){
o
(
"get_rtmp_port"
)},
C
.
getMicInfo
=
function
(){
o
(
"get_mic"
)},
C
.
getCamInfo
=
function
(){
o
(
"get_cam"
)},
C
.
getMicVol
=
function
(){
o
(
"get_mic_vol"
)},
C
.
start
=
function
(){
var
e
=
arguments
.
length
>
0
&&
void
0
!==
arguments
[
0
]?
arguments
[
0
]:
"127.0.0.1"
,
t
=
arguments
[
1
];
p
=
e
,
L
=
t
,
S
()},
C
.
stop
=
function
(){
s
()},
C
.
startShareScreen
=
function
(){
var
e
=
arguments
.
length
>
0
&&
void
0
!==
arguments
[
0
]?
arguments
[
0
]:
""
;
o
(
"ss_start"
,
e
)},
C
.
stopShareScreen
=
function
(){
o
(
"ss_stop"
)},
t
.
default
=
C
}])});
\ No newline at end of file
...
...
请
注册
或
登录
后发表评论