正在显示
5 个修改的文件
包含
147 行增加
和
105 行删除
doc/主讲人.docx
0 → 100644
不能预览此文件类型
| @@ -62,7 +62,7 @@ export default class MessageEntrance extends Emiter { | @@ -62,7 +62,7 @@ export default class MessageEntrance extends Emiter { | ||
| 62 | constructor() { | 62 | constructor() { |
| 63 | super(); | 63 | super(); |
| 64 | //sdk 信息 | 64 | //sdk 信息 |
| 65 | - GlobalConfig.sdkVersion = "v2.11.13.20170925"; | 65 | + GlobalConfig.sdkVersion = "v2.12.6.20170925"; |
| 66 | loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); | 66 | loger.warn("sdkVersion:" + GlobalConfig.sdkVersion); |
| 67 | 67 | ||
| 68 | //设置 | 68 | //设置 |
| @@ -1123,91 +1123,6 @@ export default class MessageEntrance extends Emiter { | @@ -1123,91 +1123,6 @@ export default class MessageEntrance extends Emiter { | ||
| 1123 | loger.log("加入视频通话模块->不需要获取channelKey") | 1123 | loger.log("加入视频通话模块->不需要获取channelKey") |
| 1124 | this._joinClassSuccessSeting(); | 1124 | this._joinClassSuccessSeting(); |
| 1125 | } | 1125 | } |
| 1126 | - /* | ||
| 1127 | - //返回给客户端初始化成功的数据 | ||
| 1128 | - let joinClassSuccessCallBackData = {}; | ||
| 1129 | - joinClassSuccessCallBackData.isRecordPlayBack = GlobalConfig.isRecordPlayBack; | ||
| 1130 | - joinClassSuccessCallBackData.DOCServerIP = GlobalConfig.DOCServerIP; | ||
| 1131 | - joinClassSuccessCallBackData.DOCServerPort = GlobalConfig.DOCServerPort; | ||
| 1132 | - | ||
| 1133 | - joinClassSuccessCallBackData.classStatus = GlobalConfig.classStatus; | ||
| 1134 | - joinClassSuccessCallBackData.classId = GlobalConfig.classId; | ||
| 1135 | - joinClassSuccessCallBackData.className = GlobalConfig.className; | ||
| 1136 | - joinClassSuccessCallBackData.h5Module = GlobalConfig.h5Module; | ||
| 1137 | - joinClassSuccessCallBackData.isHost = GlobalConfig.isHost; | ||
| 1138 | - joinClassSuccessCallBackData.maxAudioChannels = GlobalConfig.maxAudioChannels; | ||
| 1139 | - joinClassSuccessCallBackData.maxVideoChannels = GlobalConfig.maxVideoChannels; | ||
| 1140 | - joinClassSuccessCallBackData.maxMediaChannels = GlobalConfig.maxMediaChannels; | ||
| 1141 | - joinClassSuccessCallBackData.mcuDelay = GlobalConfig.mcuDelay; | ||
| 1142 | - | ||
| 1143 | - joinClassSuccessCallBackData.msType = GlobalConfig.msType; | ||
| 1144 | - joinClassSuccessCallBackData.nodeId = GlobalConfig.nodeId; | ||
| 1145 | - joinClassSuccessCallBackData.password = GlobalConfig.password; | ||
| 1146 | - joinClassSuccessCallBackData.passwordRequired = GlobalConfig.passwordRequired; // 老师的默认是true | ||
| 1147 | - //GlobalConfig.passwordRequired 老师的默认是true | ||
| 1148 | - //GlobalConfig.portal=_data.portal; | ||
| 1149 | - joinClassSuccessCallBackData.role = GlobalConfig.role; | ||
| 1150 | - joinClassSuccessCallBackData.siteId = GlobalConfig.siteId; | ||
| 1151 | - joinClassSuccessCallBackData.topNodeID = GlobalConfig.topNodeID; | ||
| 1152 | - joinClassSuccessCallBackData.userId = GlobalConfig.userId; | ||
| 1153 | - joinClassSuccessCallBackData.userName = GlobalConfig.userName; | ||
| 1154 | - joinClassSuccessCallBackData.userRole = GlobalConfig.userRole; | ||
| 1155 | - joinClassSuccessCallBackData.userType = GlobalConfig.userType; | ||
| 1156 | - | ||
| 1157 | - joinClassSuccessCallBackData.siteId = GlobalConfig.siteId; | ||
| 1158 | - joinClassSuccessCallBackData.classId = GlobalConfig.classId; | ||
| 1159 | - joinClassSuccessCallBackData.userRole = GlobalConfig.userRole; | ||
| 1160 | - joinClassSuccessCallBackData.userId = GlobalConfig.userId; | ||
| 1161 | - joinClassSuccessCallBackData.passwordRequired = GlobalConfig.passwordRequired; | ||
| 1162 | - joinClassSuccessCallBackData.classType = GlobalConfig.classType || ApeConsts.CLASS_TYPE_1; | ||
| 1163 | - | ||
| 1164 | - joinClassSuccessCallBackData.country = GlobalConfig.country; //国家 | ||
| 1165 | - joinClassSuccessCallBackData.city = GlobalConfig.city; //城市 | ||
| 1166 | - joinClassSuccessCallBackData.province = GlobalConfig.province; //服务商 | ||
| 1167 | - joinClassSuccessCallBackData.isp = GlobalConfig.isp; //服务商 | ||
| 1168 | - | ||
| 1169 | - joinClassSuccessCallBackData.classTimestamp = GlobalConfig.classTimestamp; //课堂进行的累积时间 | ||
| 1170 | - joinClassSuccessCallBackData.recordTimestamp = GlobalConfig.recordTimestamp; //课堂录制的累积时间 | ||
| 1171 | - joinClassSuccessCallBackData.recordPlaybackMaxTime = GlobalConfig.recordPlaybackMaxTime; //录制回放的总时间 | ||
| 1172 | - | ||
| 1173 | - joinClassSuccessCallBackData.fps = GlobalConfig.fps; | ||
| 1174 | - joinClassSuccessCallBackData.gop = GlobalConfig.gop; | ||
| 1175 | - joinClassSuccessCallBackData.videoQuality = GlobalConfig.videoQuality; | ||
| 1176 | - | ||
| 1177 | - joinClassSuccessCallBackData.ssTunnelAppURL = GlobalConfig.ssTunnelAppURL; | ||
| 1178 | - joinClassSuccessCallBackData.currentSceneTableId = GlobalConfig.currentSceneTableId; //文档区域的模块显示 | ||
| 1179 | - joinClassSuccessCallBackData.serverAndLoacTimeDistanc = GlobalConfig.serverAndLoacTimeDistanc; | ||
| 1180 | - | ||
| 1181 | - joinClassSuccessCallBackData.deviceType = GlobalConfig.deviceType; | ||
| 1182 | - joinClassSuccessCallBackData.language = GlobalConfig.language; | ||
| 1183 | - joinClassSuccessCallBackData.explorer = GlobalConfig.explorer; | ||
| 1184 | - joinClassSuccessCallBackData.explorerVersion = GlobalConfig.explorerVersion; | ||
| 1185 | - joinClassSuccessCallBackData.os = GlobalConfig.os; | ||
| 1186 | - | ||
| 1187 | - joinClassSuccessCallBackData.channelId =GlobalConfig.channelId ; | ||
| 1188 | - joinClassSuccessCallBackData.channelKey =GlobalConfig.channelKey ; | ||
| 1189 | - joinClassSuccessCallBackData.userUid = GlobalConfig.userUid; | ||
| 1190 | - joinClassSuccessCallBackData.appId = GlobalConfig.appId; | ||
| 1191 | - joinClassSuccessCallBackData.appCertificate = GlobalConfig.appCertificate; | ||
| 1192 | - joinClassSuccessCallBackData.appRecordingKey = GlobalConfig.appRecordingKey; | ||
| 1193 | - | ||
| 1194 | - //设置日志上报所需的信息 | ||
| 1195 | - LogManager.serverAndLoacTimeDistanc = GlobalConfig.serverAndLoacTimeDistanc;//本地时间和服务器时间的差值(秒) | ||
| 1196 | - LogManager.classId = GlobalConfig.classId;//课堂号 | ||
| 1197 | - LogManager.userId = GlobalConfig.userId;//userId | ||
| 1198 | - LogManager.nodeId = GlobalConfig.nodeId;//nodeId | ||
| 1199 | - LogManager.userRole = GlobalConfig.userRole;//userRole | ||
| 1200 | - LogManager.userName = GlobalConfig.userName;//用户名称 | ||
| 1201 | - LogManager.logUrl = GlobalConfig.logUrl;//日志服务器地址 //http://log.3mang.com | ||
| 1202 | - LogManager.platform=GlobalConfig.platform; | ||
| 1203 | - loger.log('加入课堂成功->'); | ||
| 1204 | - loger.log(joinClassSuccessCallBackData); | ||
| 1205 | - | ||
| 1206 | - //加入课堂成功,广播消息 | ||
| 1207 | - this._emit(MessageTypes.CLASS_JOIN_SUCCESS, joinClassSuccessCallBackData); | ||
| 1208 | - | ||
| 1209 | - //加入音视频通话模块 | ||
| 1210 | - this._joinChannel({channelId:GlobalConfig.channelId,channelKey:GlobalConfig.channelKey ,uid:GlobalConfig.userUid,info:""+GlobalConfig.userRole});*/ | ||
| 1211 | } | 1126 | } |
| 1212 | //加入课堂成功之后设置本地数据和返回数据给客户端 | 1127 | //加入课堂成功之后设置本地数据和返回数据给客户端 |
| 1213 | _joinClassSuccessSeting(){ | 1128 | _joinClassSuccessSeting(){ |
| @@ -1234,7 +1149,6 @@ export default class MessageEntrance extends Emiter { | @@ -1234,7 +1149,6 @@ export default class MessageEntrance extends Emiter { | ||
| 1234 | //GlobalConfig.passwordRequired 老师的默认是true | 1149 | //GlobalConfig.passwordRequired 老师的默认是true |
| 1235 | //GlobalConfig.portal=_data.portal; | 1150 | //GlobalConfig.portal=_data.portal; |
| 1236 | joinClassSuccessCallBackData.role = GlobalConfig.role; | 1151 | joinClassSuccessCallBackData.role = GlobalConfig.role; |
| 1237 | - joinClassSuccessCallBackData.siteId = GlobalConfig.siteId; | ||
| 1238 | joinClassSuccessCallBackData.topNodeID = GlobalConfig.topNodeID; | 1152 | joinClassSuccessCallBackData.topNodeID = GlobalConfig.topNodeID; |
| 1239 | joinClassSuccessCallBackData.userId = GlobalConfig.userId; | 1153 | joinClassSuccessCallBackData.userId = GlobalConfig.userId; |
| 1240 | joinClassSuccessCallBackData.userName = GlobalConfig.userName; | 1154 | joinClassSuccessCallBackData.userName = GlobalConfig.userName; |
| @@ -1758,13 +1672,14 @@ export default class MessageEntrance extends Emiter { | @@ -1758,13 +1672,14 @@ export default class MessageEntrance extends Emiter { | ||
| 1758 | 1672 | ||
| 1759 | //获取课堂所有参数(20170727新规则) api/meeting/detail.do? flash中的接口文件是 getClassParam.do | 1673 | //获取课堂所有参数(20170727新规则) api/meeting/detail.do? flash中的接口文件是 getClassParam.do |
| 1760 | _sassGetClassParamSuccessHandler(_data) { | 1674 | _sassGetClassParamSuccessHandler(_data) { |
| 1761 | - loger.log('获取课堂课堂信息完成.'); | 1675 | + loger.log('获取课堂课堂信息完成.',_data.appConfig); |
| 1762 | //包含整个课堂最全的信息,储存数据 | 1676 | //包含整个课堂最全的信息,储存数据 |
| 1763 | if (_data) { | 1677 | if (_data) { |
| 1764 | GlobalConfig.mcuDelay = _data.h5Delay || 0; //mcu消息延迟的时间间隔,单位(秒),结合客户端传的messageDelay的值使用 | 1678 | GlobalConfig.mcuDelay = _data.h5Delay || 0; //mcu消息延迟的时间间隔,单位(秒),结合客户端传的messageDelay的值使用 |
| 1765 | GlobalConfig.className = _data.meetingName || ""; | 1679 | GlobalConfig.className = _data.meetingName || ""; |
| 1766 | GlobalConfig.classBeginTime = _data.beginTime || ""; | 1680 | GlobalConfig.classBeginTime = _data.beginTime || ""; |
| 1767 | GlobalConfig.classEndTime = _data.endTime || ""; | 1681 | GlobalConfig.classEndTime = _data.endTime || ""; |
| 1682 | + GlobalConfig.siteId=_data.siteID||"";//这个字段ID是大写的 | ||
| 1768 | GlobalConfig.channelId = ""+GlobalConfig.siteId+"_"+GlobalConfig.classId; | 1683 | GlobalConfig.channelId = ""+GlobalConfig.siteId+"_"+GlobalConfig.classId; |
| 1769 | //sdk获取ip失败就使用saas返回的 | 1684 | //sdk获取ip失败就使用saas返回的 |
| 1770 | if(!GlobalConfig.userIp){ | 1685 | if(!GlobalConfig.userIp){ |
| @@ -1887,7 +1802,7 @@ export default class MessageEntrance extends Emiter { | @@ -1887,7 +1802,7 @@ export default class MessageEntrance extends Emiter { | ||
| 1887 | this._choiceMcuAndMsListFromSass(); | 1802 | this._choiceMcuAndMsListFromSass(); |
| 1888 | //获取MCU和MS 推流拉流、录制回放的默认地址 | 1803 | //获取MCU和MS 推流拉流、录制回放的默认地址 |
| 1889 | this.getMcuAndMsDefaultServerIp(); | 1804 | this.getMcuAndMsDefaultServerIp(); |
| 1890 | - _recordPlayback.readyRecordPlay(); | 1805 | + _recordPlayback.readyLoadRecordPlayData(); |
| 1891 | } else { | 1806 | } else { |
| 1892 | loger.warn("开启录制回放流程失败->还未创建模块"); | 1807 | loger.warn("开启录制回放流程失败->还未创建模块"); |
| 1893 | } | 1808 | } |
| @@ -2707,7 +2622,6 @@ export default class MessageEntrance extends Emiter { | @@ -2707,7 +2622,6 @@ export default class MessageEntrance extends Emiter { | ||
| 2707 | //GlobalConfig.passwordRequired 老师的默认是true | 2622 | //GlobalConfig.passwordRequired 老师的默认是true |
| 2708 | //GlobalConfig.portal=_data.portal; | 2623 | //GlobalConfig.portal=_data.portal; |
| 2709 | joinClassSuccessCallBackData.role = GlobalConfig.role; | 2624 | joinClassSuccessCallBackData.role = GlobalConfig.role; |
| 2710 | - joinClassSuccessCallBackData.siteId = GlobalConfig.siteId; | ||
| 2711 | joinClassSuccessCallBackData.topNodeID = GlobalConfig.topNodeID; | 2625 | joinClassSuccessCallBackData.topNodeID = GlobalConfig.topNodeID; |
| 2712 | joinClassSuccessCallBackData.userId = GlobalConfig.userId; | 2626 | joinClassSuccessCallBackData.userId = GlobalConfig.userId; |
| 2713 | joinClassSuccessCallBackData.userName = GlobalConfig.userName; | 2627 | joinClassSuccessCallBackData.userName = GlobalConfig.userName; |
| @@ -2986,6 +2900,7 @@ export default class MessageEntrance extends Emiter { | @@ -2986,6 +2900,7 @@ export default class MessageEntrance extends Emiter { | ||
| 2986 | GlobalConfig.getChannelToken=_params.getChannelToken||"" | 2900 | GlobalConfig.getChannelToken=_params.getChannelToken||"" |
| 2987 | GlobalConfig.getRecordInfoInterfaces=_params.getRecordInfoInterfaces||""; | 2901 | GlobalConfig.getRecordInfoInterfaces=_params.getRecordInfoInterfaces||""; |
| 2988 | GlobalConfig.stopRecordingInterfaces=_params.stopRecordingInterfaces||""; | 2902 | GlobalConfig.stopRecordingInterfaces=_params.stopRecordingInterfaces||""; |
| 2903 | + GlobalConfig.getTxRecordInfoInterfaces=_params.getTxRecordInfoInterfaces||""; | ||
| 2989 | 2904 | ||
| 2990 | //去掉协议头 | 2905 | //去掉协议头 |
| 2991 | try{ | 2906 | try{ |
| @@ -2997,6 +2912,11 @@ export default class MessageEntrance extends Emiter { | @@ -2997,6 +2912,11 @@ export default class MessageEntrance extends Emiter { | ||
| 2997 | GlobalConfig.getRecordInfoInterfaces=GlobalConfig.getRecordInfoInterfaces.replace('http://',""); | 2912 | GlobalConfig.getRecordInfoInterfaces=GlobalConfig.getRecordInfoInterfaces.replace('http://',""); |
| 2998 | GlobalConfig.getRecordInfoInterfaces=GlobalConfig.getRecordInfoInterfaces.replace('https://',""); | 2913 | GlobalConfig.getRecordInfoInterfaces=GlobalConfig.getRecordInfoInterfaces.replace('https://',""); |
| 2999 | } | 2914 | } |
| 2915 | + if(GlobalConfig.getTxRecordInfoInterfaces){ | ||
| 2916 | + GlobalConfig.getTxRecordInfoInterfaces=GlobalConfig.getTxRecordInfoInterfaces.replace('http://',""); | ||
| 2917 | + GlobalConfig.getTxRecordInfoInterfaces=GlobalConfig.getTxRecordInfoInterfaces.replace('https://',""); | ||
| 2918 | + } | ||
| 2919 | + | ||
| 3000 | if(GlobalConfig.stopRecordingInterfaces){ | 2920 | if(GlobalConfig.stopRecordingInterfaces){ |
| 3001 | GlobalConfig.stopRecordingInterfaces=GlobalConfig.stopRecordingInterfaces.replace('http://',""); | 2921 | GlobalConfig.stopRecordingInterfaces=GlobalConfig.stopRecordingInterfaces.replace('http://',""); |
| 3002 | GlobalConfig.stopRecordingInterfaces=GlobalConfig.stopRecordingInterfaces.replace('https://',""); | 2922 | GlobalConfig.stopRecordingInterfaces=GlobalConfig.stopRecordingInterfaces.replace('https://',""); |
| @@ -602,6 +602,7 @@ GlobalConfig.userUid = 0; | @@ -602,6 +602,7 @@ GlobalConfig.userUid = 0; | ||
| 602 | GlobalConfig.recordInterfaces="";//控制开启录制和录制状态改变的接口 | 602 | GlobalConfig.recordInterfaces="";//控制开启录制和录制状态改变的接口 |
| 603 | GlobalConfig.getRecordInfoInterfaces="";//获取媒体录制信息数据的接口 | 603 | GlobalConfig.getRecordInfoInterfaces="";//获取媒体录制信息数据的接口 |
| 604 | GlobalConfig.stopRecordingInterfaces="";//停止录制的接口 | 604 | GlobalConfig.stopRecordingInterfaces="";//停止录制的接口 |
| 605 | +GlobalConfig.getTxRecordInfoInterfaces="";//获取媒体录制信息数据的接口(tx) | ||
| 605 | 606 | ||
| 606 | GlobalConfig.getChannelToken="";//获取token的地址 | 607 | GlobalConfig.getChannelToken="";//获取token的地址 |
| 607 | export default GlobalConfig; | 608 | export default GlobalConfig; |
| @@ -7,6 +7,7 @@ import pdu from 'pdus/index'; | @@ -7,6 +7,7 @@ import pdu from 'pdus/index'; | ||
| 7 | import PduType from 'pdus/PduType'; | 7 | import PduType from 'pdus/PduType'; |
| 8 | import PduConsts from 'pdus/PduConsts'; | 8 | import PduConsts from 'pdus/PduConsts'; |
| 9 | import ApeConsts from 'apes/ApeConsts'; | 9 | import ApeConsts from 'apes/ApeConsts'; |
| 10 | +import MediaModule from "apes/MediaModule"; | ||
| 10 | 11 | ||
| 11 | import ArrayBufferUtil from 'libs/ArrayBufferUtil'; | 12 | import ArrayBufferUtil from 'libs/ArrayBufferUtil'; |
| 12 | import Base64 from 'base64-js'; | 13 | import Base64 from 'base64-js'; |
| @@ -32,6 +33,9 @@ class RecordPlayBackParse extends Emiter { | @@ -32,6 +33,9 @@ class RecordPlayBackParse extends Emiter { | ||
| 32 | this._recordPlaybackTimestamp = 0;//回放的时间 | 33 | this._recordPlaybackTimestamp = 0;//回放的时间 |
| 33 | this._recordPlaybackMaxTime = 0;//录制回放的总时间 | 34 | this._recordPlaybackMaxTime = 0;//录制回放的总时间 |
| 34 | this._isReady = false;//录制回放是否已经准备完成 | 35 | this._isReady = false;//录制回放是否已经准备完成 |
| 36 | + this.isLoadTxRecordInfo=false;//是否已经加载腾讯云的录制数据 | ||
| 37 | + this.isLoadAgoraRecordInfo=false;//是否已经加载声网的录制数据 | ||
| 38 | + | ||
| 35 | this._apes = {}; | 39 | this._apes = {}; |
| 36 | this._videoApeBroadcastMssages={};//视频模块的广播消息 | 40 | this._videoApeBroadcastMssages={};//视频模块的广播消息 |
| 37 | this.mediaChannleList={}; | 41 | this.mediaChannleList={}; |
| @@ -250,7 +254,7 @@ class RecordPlayBackParse extends Emiter { | @@ -250,7 +254,7 @@ class RecordPlayBackParse extends Emiter { | ||
| 250 | } | 254 | } |
| 251 | 255 | ||
| 252 | //加载录制文件rec | 256 | //加载录制文件rec |
| 253 | - readyRecordPlay() { | 257 | + readyLoadRecordPlayData() { |
| 254 | this.initReplay(); | 258 | this.initReplay(); |
| 255 | loger.log("读取录制回放数据"); | 259 | loger.log("读取录制回放数据"); |
| 256 | //let url = `http://123.56.73.119:80/h5dev/20170306/1357644520_20170306.rec`; | 260 | //let url = `http://123.56.73.119:80/h5dev/20170306/1357644520_20170306.rec`; |
| @@ -277,7 +281,6 @@ class RecordPlayBackParse extends Emiter { | @@ -277,7 +281,6 @@ class RecordPlayBackParse extends Emiter { | ||
| 277 | if (ret) { | 281 | if (ret) { |
| 278 | loger.log('读取回放数据-完成'); | 282 | loger.log('读取回放数据-完成'); |
| 279 | this._loadRecordDataSuccess(ret); | 283 | this._loadRecordDataSuccess(ret); |
| 280 | - this.getMediaRecrodInfo(); | ||
| 281 | } else { | 284 | } else { |
| 282 | loger.warn('读取回放数据-失败.'); | 285 | loger.warn('读取回放数据-失败.'); |
| 283 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_RECORD_PLAY_BACK_DATA_FAILED); | 286 | this._emit(MessageTypes.MCU_ERROR, MessageTypes.ERR_GET_RECORD_PLAY_BACK_DATA_FAILED); |
| @@ -294,21 +297,37 @@ class RecordPlayBackParse extends Emiter { | @@ -294,21 +297,37 @@ class RecordPlayBackParse extends Emiter { | ||
| 294 | if (parseBuffer) { | 297 | if (parseBuffer) { |
| 295 | parseBuffer.clear(); | 298 | parseBuffer.clear(); |
| 296 | parseBuffer.append(arrayBuffer); | 299 | parseBuffer.append(arrayBuffer); |
| 297 | - //解析数据 | ||
| 298 | - this.parseArrayBuf(); | 300 | + //rec数据加载完成后,继续加载音视频相关的录制数据,然后再解析rec数据 |
| 301 | + this.getMediaRecrodInfoFromTx(()=>{ | ||
| 302 | + //解析录制的rec数据 | ||
| 303 | + this.isLoadTxRecordInfo=true; | ||
| 304 | + if(this.isLoadTxRecordInfo&&this.isLoadAgoraRecordInfo){ | ||
| 305 | + this.parseArrayBuf(); | ||
| 306 | + } | ||
| 307 | + }); | ||
| 308 | + this.getMediaRecrodInfoFromAgora(()=>{ | ||
| 309 | + this.isLoadAgoraRecordInfo=true; | ||
| 310 | + //解析录制的rec数据 | ||
| 311 | + if(this.isLoadTxRecordInfo&&this.isLoadAgoraRecordInfo){ | ||
| 312 | + this.parseArrayBuf(); | ||
| 313 | + } | ||
| 314 | + }); | ||
| 299 | } | 315 | } |
| 300 | } | 316 | } |
| 301 | 317 | ||
| 302 | //获取媒体录制信息 | 318 | //获取媒体录制信息 |
| 303 | - getMediaRecrodInfo(){ | 319 | + getMediaRecrodInfoFromAgora(_callback){ |
| 304 | //获取课堂录制信息 get localhost:3000/recordInfo/getRecordInfo/7d72365eb9834353397e3e3f9d460bdda | 320 | //获取课堂录制信息 get localhost:3000/recordInfo/getRecordInfo/7d72365eb9834353397e3e3f9d460bdda |
| 305 | //localhost:3000/recordInfo/getRecordInfo/ 后面直接添加课堂号 channel | 321 | //localhost:3000/recordInfo/getRecordInfo/ 后面直接添加课堂号 channel |
| 306 | if(!GlobalConfig.getRecordInfoInterfaces){ | 322 | if(!GlobalConfig.getRecordInfoInterfaces){ |
| 307 | - loger.log("获取媒体录制信息->失败->接口地址无效"); | 323 | + loger.log("AG-获取媒体录制信息->失败->接口地址无效"); |
| 324 | + if(_callback){ | ||
| 325 | + _callback(); | ||
| 326 | + } | ||
| 308 | return ; | 327 | return ; |
| 309 | } | 328 | } |
| 310 | let url = `${GlobalConfig.locationProtocol+GlobalConfig.getRecordInfoInterfaces}/${GlobalConfig.channelId}`; | 329 | let url = `${GlobalConfig.locationProtocol+GlobalConfig.getRecordInfoInterfaces}/${GlobalConfig.channelId}`; |
| 311 | - loger.log('获取媒体录制信息.', url); | 330 | + loger.log('AG-获取媒体录制信息.', url); |
| 312 | fetch(url, { | 331 | fetch(url, { |
| 313 | timeout: 15000 | 332 | timeout: 15000 |
| 314 | }) | 333 | }) |
| @@ -316,25 +335,118 @@ class RecordPlayBackParse extends Emiter { | @@ -316,25 +335,118 @@ class RecordPlayBackParse extends Emiter { | ||
| 316 | if (ret.ok) { | 335 | if (ret.ok) { |
| 317 | return ret.json(); | 336 | return ret.json(); |
| 318 | } else { | 337 | } else { |
| 319 | - loger.error(`获取媒体录制信息-网络异常.状态码:${ret}`); | 338 | + loger.error(`AG-获取媒体录制信息-网络异常.状态码:${ret}`); |
| 339 | + if(_callback){ | ||
| 340 | + _callback(); | ||
| 341 | + } | ||
| 320 | throw ''; | 342 | throw ''; |
| 321 | } | 343 | } |
| 322 | }) | 344 | }) |
| 323 | .then(ret => { | 345 | .then(ret => { |
| 324 | - loger.log('获取媒体录制信息-完成',ret); | ||
| 325 | - /* if (ret.errorCode == 0) { | ||
| 326 | - loger.log('获取媒体录制信息-完成'); | ||
| 327 | - | 346 | + loger.log('AG-获取媒体录制信息-完成',ret); |
| 347 | + if(_callback){ | ||
| 348 | + _callback(); | ||
| 349 | + } | ||
| 350 | + }) | ||
| 351 | + .catch(err => { | ||
| 352 | + loger.error(`AG-获取媒体录制信息-异常.状态码:${err}`); | ||
| 353 | + if(_callback){ | ||
| 354 | + _callback(); | ||
| 355 | + } | ||
| 356 | + }); | ||
| 357 | + } | ||
| 358 | + //获取媒体录制信息 | ||
| 359 | + getMediaRecrodInfoFromTx(_callback){ | ||
| 360 | + if(!GlobalConfig.getTxRecordInfoInterfaces){ | ||
| 361 | + loger.log("TX-获取媒体录制信息->失败->接口地址无效"); | ||
| 362 | + if(_callback){ | ||
| 363 | + _callback(); | ||
| 364 | + } | ||
| 365 | + return ; | ||
| 366 | + } | ||
| 367 | + let url = `${GlobalConfig.locationProtocol+GlobalConfig.getTxRecordInfoInterfaces}`; | ||
| 368 | + loger.log('TX-获取媒体录制信息.', url); | ||
| 369 | + //接口中用的是GET | ||
| 370 | + fetch(encodeURI(url), { | ||
| 371 | + method: 'POST', | ||
| 372 | + headers: { | ||
| 373 | + "Content-Type": "application/x-www-form-urlencoded; charset=utf-8" | ||
| 374 | + }, | ||
| 375 | + body: `channelId=${ GlobalConfig.channelId}`, | ||
| 376 | + timeout: 5000 | ||
| 377 | + }) | ||
| 378 | + .then(ret => { | ||
| 379 | + if (ret.ok) { | ||
| 380 | + return ret.json(); | ||
| 328 | } else { | 381 | } else { |
| 329 | - loger.warn('获取媒体录制信息-失败.'); | 382 | + loger.error(`TX-获取媒体录制信息-网络异常.状态码:${ret}`); |
| 383 | + if(_callback){ | ||
| 384 | + _callback(); | ||
| 385 | + } | ||
| 386 | + throw ''; | ||
| 387 | + } | ||
| 388 | + }) | ||
| 389 | + .then(ret => { | ||
| 390 | + loger.log('TX-获取媒体录制信息-完成',ret); | ||
| 391 | + /* {"code": 200, | ||
| 392 | + "returnData":{ | ||
| 393 | + "data":[ | ||
| 394 | + { | ||
| 395 | + "id": "0zo9GALQdmkwrJVYxqgaE6xM7j8yvOZN", | ||
| 396 | + "channelId": "marketflashtest_1966232762", | ||
| 397 | + "recordInfo": "", | ||
| 398 | + "createTime": "" | ||
| 399 | + }] | ||
| 400 | + } | ||
| 330 | }*/ | 401 | }*/ |
| 402 | + if(ret&&ret.code==200){ | ||
| 403 | + if(ret.returnData&&ret.returnData.data){ | ||
| 404 | + this.parseAndSavaStreamInfoFromTx(ret.returnData.data); | ||
| 405 | + } | ||
| 406 | + } | ||
| 407 | + if(_callback){ | ||
| 408 | + _callback(); | ||
| 409 | + } | ||
| 331 | }) | 410 | }) |
| 332 | .catch(err => { | 411 | .catch(err => { |
| 333 | loger.error(`获取媒体录制信息-异常.状态码:${err}`); | 412 | loger.error(`获取媒体录制信息-异常.状态码:${err}`); |
| 413 | + if(_callback){ | ||
| 414 | + _callback(); | ||
| 415 | + } | ||
| 334 | }); | 416 | }); |
| 335 | } | 417 | } |
| 336 | 418 | ||
| 337 | - //解析数据 | 419 | + //解析腾讯云录制的视频数据,数组[] |
| 420 | + parseAndSavaStreamInfoFromTx(_dataArr){ | ||
| 421 | + /* "id": "0zo9GALQdmkwrJVYxqgaE6xM7j8yvOZN", | ||
| 422 | + "channelId": "marketflashtest_1966232762", | ||
| 423 | + "recordInfo":"xxxxx", | ||
| 424 | + "createTime":"xxxx"*/ | ||
| 425 | + if(!_dataArr){ | ||
| 426 | + loger.log("TX-外部录制的视频数据无效"); | ||
| 427 | + return; | ||
| 428 | + } | ||
| 429 | + let item; | ||
| 430 | + let itemJson; | ||
| 431 | + loger.log("TX-外部录制的视频数据-length="+_dataArr.length) | ||
| 432 | + for(let i=0;i<_dataArr.length;i++){ | ||
| 433 | + item=_dataArr[i]; | ||
| 434 | + if(item){ | ||
| 435 | + itemJson=item.recordInfo; | ||
| 436 | + try{ | ||
| 437 | + itemJson=JSON.parse(itemJson); | ||
| 438 | + }catch (err){ | ||
| 439 | + | ||
| 440 | + } | ||
| 441 | + if(itemJson&&itemJson.video_url){ | ||
| 442 | + MediaModule.streams[itemJson.stream_id]=itemJson.video_url; | ||
| 443 | + } | ||
| 444 | + } | ||
| 445 | + } | ||
| 446 | + console.log(" MediaModule.streams", MediaModule.streams); | ||
| 447 | + } | ||
| 448 | + | ||
| 449 | + //解析录制的rec数据 | ||
| 338 | parseArrayBuf() { | 450 | parseArrayBuf() { |
| 339 | //this._messages = {}; | 451 | //this._messages = {}; |
| 340 | let byteLength = parseBuffer.offset; | 452 | let byteLength = parseBuffer.offset; |
| @@ -717,7 +829,7 @@ class RecordPlayBackParse extends Emiter { | @@ -717,7 +829,7 @@ class RecordPlayBackParse extends Emiter { | ||
| 717 | let object_id = regUpdatedItem.objId; | 829 | let object_id = regUpdatedItem.objId; |
| 718 | let user_data = regUpdatedItem.userData; | 830 | let user_data = regUpdatedItem.userData; |
| 719 | 831 | ||
| 720 | - console.log('RCRegistryUpdateObjPdu',regUpdatedItem) | 832 | + //console.log('RCRegistryUpdateObjPdu',regUpdatedItem) |
| 721 | 833 | ||
| 722 | switch (sub_type) { | 834 | switch (sub_type) { |
| 723 | case pdu.RCPDU_REG_ROSTER_INSERT_PDU: | 835 | case pdu.RCPDU_REG_ROSTER_INSERT_PDU: |
| @@ -101,6 +101,14 @@ class MediaModule { | @@ -101,6 +101,14 @@ class MediaModule { | ||
| 101 | loger.warn('获取录制回放时点播的地址->参数错误', _param); | 101 | loger.warn('获取录制回放时点播的地址->参数错误', _param); |
| 102 | return {"code": ApeConsts.RETURN_FAILED, "data": ""}; | 102 | return {"code": ApeConsts.RETURN_FAILED, "data": ""}; |
| 103 | } | 103 | } |
| 104 | + | ||
| 105 | + //如果是外部的流地址,不需要拼接,直接使用就可以,是完整的地址 | ||
| 106 | + let streamPlayUrl=MediaModule.streams[_param.streamId] | ||
| 107 | + if(streamPlayUrl){ | ||
| 108 | + loger.log("使用外部的流地址->",streamPlayUrl); | ||
| 109 | + return {"code": ApeConsts.RETURN_SUCCESS, "data": "", "playUrl":streamPlayUrl}; | ||
| 110 | + } | ||
| 111 | + | ||
| 104 | //M3U8 http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/total.m3u8 | 112 | //M3U8 http://123.56.73.119:6001/live/h5dev_2106728010_8ab3b0ed5a3a9220015a3a958f0d0003_983041_1489113860/total.m3u8 |
| 105 | let port = (GlobalConfig.RS_RECORD_PLAY_PORT == "" || GlobalConfig.RS_RECORD_PLAY_PORT == null) ? "" : ":" + GlobalConfig.RS_RECORD_PLAY_PORT; | 113 | let port = (GlobalConfig.RS_RECORD_PLAY_PORT == "" || GlobalConfig.RS_RECORD_PLAY_PORT == null) ? "" : ":" + GlobalConfig.RS_RECORD_PLAY_PORT; |
| 106 | //let path = "http://" + GlobalConfig.RS_RECORD_PLAY_IP | 114 | //let path = "http://" + GlobalConfig.RS_RECORD_PLAY_IP |
| @@ -411,5 +419,6 @@ class MediaModule { | @@ -411,5 +419,6 @@ class MediaModule { | ||
| 411 | } | 419 | } |
| 412 | } | 420 | } |
| 413 | MediaModule.allMediaChannelsList = {};//当前已经创建的所有音视频通道(包含释放或未未释放的) | 421 | MediaModule.allMediaChannelsList = {};//当前已经创建的所有音视频通道(包含释放或未未释放的) |
| 422 | +MediaModule.streams={};//记录流名称对应的数据 | ||
| 414 | export default MediaModule; | 423 | export default MediaModule; |
| 415 | 424 |
-
请 注册 或 登录 后发表评论