浏览器提示”不允许访问摄像头/麦克风”怎么办?
原因: 浏览器权限被拒绝或页面不在安全上下文(HTTPS / localhost)下。 解决步骤:- 确认页面使用 HTTPS 或 localhost 访问(普通 HTTP 域名无法访问媒体设备)
- 点击浏览器地址栏右侧的摄像头/麦克风图标,将权限改为”允许”
- 如果之前选择了”永久拒绝”,需要在浏览器的站点设置中手动重置权限:
- Chrome:地址栏左侧”🔒”→“网站设置”→“摄像头/麦克风”→“允许”
- 重新刷新页面后再次尝试
srtc.getEnvInfo() 的 secure 和 mediaDevices 字段提前检测环境是否具备采集能力:
本地开发时能收流,但推不了流怎么办?
原因: 大概率是页面在普通 HTTP 下运行,浏览器限制了 WebRTC 推流。 解决方案: 使用http://localhost 或 http://127.0.0.1 访问本地开发环境,不要使用 http://[本机局域网 IP](该协议不支持推流)。
协议与推流支持情况详见 集成 - URL 协议限制。
视频/音频自动播放被浏览器阻止怎么处理?
浏览器的自动播放策略禁止在没有用户手势的情况下播放媒体,表现为调用startPlay() 后无声音或无画面。
SDK 会通过 TRACK_AUTOPLAY_FAIL 事件通知你:
最佳实践: 在用户主动点击”加入”或”开始通话”按钮后再调用join和startPlay,这样的用户手势上下文通常能绕过自动播放限制。
屏幕共享在 Safari 上不可用?
Safari 15.4 及以上版本支持getDisplayMedia(屏幕共享),但有以下限制:
- 不支持采集系统音频(
getAudioTrack()会返回undefined) - 在 iOS Safari 上不支持屏幕共享(系统限制)
- 部分老版本 Safari(< 15.4)完全不支持屏幕共享
srtc.getEnvInfo().screenshare 预先判断当前环境是否支持:
加入频道报 TokenExpired 错误怎么办?
Token 由服务端签发,有效期较短(通常几分钟到几小时不等,具体由签发方决定)。 解决方案:- 在发起
srtc.join()前,从服务端实时获取最新 Token,不要缓存旧 Token - 检查客户端和服务端的系统时间是否同步(时钟偏差会导致 Token 提前失效)
如何同时加入多个频道?
每个SRTC 实例对应一个频道连接。需要同时加入多个频道时,创建多个实例: