Ionic集成cordova-plugin-opentok订阅流报1600 OTSubscriberWebRTCError
OpenTok 1600错误(OTSubscriberWebRTCError)修复方案
错误根因
该错误为移动端WebRTC流协商失败,项目搁置期间运行环境(系统WebView、移动端系统版本、浏览器版本)发生迭代,旧版cordova-plugin-opentok@3.4.1适配性不足导致,以下按优先级给出修复方案:
1. 优先修复:编码不兼容问题
当前新版Chrome浏览器默认推VP9编码的视频流,而cordova-plugin-opentok@3.4.1仅支持H264编码,导致移动端无法识别医护端推送的流:
- 在医护端
localMediaOptions配置中新增强制H264编码参数:
var localMediaOptions = { // 原有配置保留 publishAudio: publishAudio, publishVideo: true, // 新增以下2行 videoEncoding: 'H264', audioEncoding: 'opus' };
2. 次优先级修复:患者端代码适配
cordova-plugin-opentok@3.4.1存在已知参数校验BUG,调整2处代码即可:
- 给患者端
remoteMediaOptions新增name参数,空值即可:
let remoteMediaOptions = { // 原有配置保留 subscribeToAudio: true, subscribeToVideo: true, // 新增以下行 name: '' };
- 注释掉患者端订阅成功回调中的
OT.updateViews()方法,该方法会打断移动端流渲染流程,旧版插件调用必引发重绘异常:
consultationSession.subscribe(event.stream, 'remoteMedia', remoteMediaOptions, (error: any) => { if (error) { // **** 此处触发错误:{"code": 1600,"message": "OTSubscriberWebRTCError"} **** return; } // 注释掉该行 // OT.updateViews(); });
3. 系统权限适配
项目搁置期间移动端系统版本升级,新增WebRTC必要权限,需要在config.xml中补充配置:
- 安卓端补充权限:
<uses-permission android:name="android.permission.MODIFY_AUDIO_SETTINGS" /> <uses-permission android:name="android.permission.NEARBY_WIFI_DEVICES" android:usesPermissionFlags="neverForLocation" /> <application android:usesCleartextTraffic="true">
- iOS端补充权限:
<key>NSLocalNetworkUsageDescription</key> <string>需要本地网络权限进行视频通话</string> <key>NSBonjourServices</key> <array> <string>_http._tcp</string> </array>
4. 最终兜底方案
如果以上方案均无效,说明当前打包使用的Cordova平台版本过高,和cordova-plugin-opentok@3.4.1不兼容:
- 安卓打包降级使用
cordova-android@8.1.0 - iOS打包降级使用
cordova-ios@6.2.0
内容的提问来源于stack exchange,提问作者DCC
相关产品推荐
相关产品推荐

