You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Flutter WebRTC跨平台视频通话在苹果设备无法正常收发音视频

解决方案:Flutter WebRTC苹果端无法接收音视频问题

1. 规范媒体流初始化时机

苹果WebKit要求媒体相关操作必须触发在**用户主动交互(如按钮点击)**中,禁止页面加载时自动执行:

  • 将getUserMedia、addTrack等媒体API调用,绑定到「创建房间」「加入房间」这类用户点击事件的回调内
  • 移除initState等页面初始化生命周期中自动执行的媒体初始化逻辑

2. 明确SDP协商的媒体接收配置

生成Offer时显式声明接收音视频,避免依赖默认值导致苹果端协商失败:

final offer = await pc.createOffer({
  'offerToReceiveAudio': true,
  'offerToReceiveVideo': true,
});

接收远端SDP后,检查是否包含完整的音频、视频m-line字段,若缺失需手动补充完整的媒体类型声明。

3. 优化ICE候选的发送逻辑

苹果设备ICE候选收集速度较慢,需确保收集完成后再发送远端:

  • 监听onIceCandidate事件,仅当收到null候选(表示收集完成)时,再将所有候选打包发送
  • 避免仅收到部分候选就触发SDP确认,导致苹果端无法建立完整的P2P连接

4. 强制启用RTCP多路复用

苹果WebRTC对非多路复用的RTCP支持存在兼容性问题,需在PeerConnection配置中强制开启:

final configuration = <String, dynamic>{
  'iceServers': [{'urls': 'stun:stun.l.google.com:19302'}],
  'rtcpMuxPolicy': 'require', // 强制启用RTCP多路复用
};
final pc = createPeerConnection(configuration);

5. 调整媒体渲染逻辑

苹果端对VideoRenderer的渲染有特殊要求:

  • 不要在媒体流未初始化完成时挂载Video组件
  • 等待VideoRendererController的onStream回调触发后,再设置视频源

6. 验证运行环境

苹果要求WebRTC必须在HTTPS环境下运行(localhost除外),线上部署需使用合法SSL证书,否则媒体流会被浏览器拦截。


内容的提问来源于stack exchange,提问作者Adrian

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 05:39:58