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

Expo开发环境React-Native WebRTC升级后remoteStream为空求助

排查方向及解决建议

一、API版本适配问题(核心排查点)

从react-native-webrtc@1.9.4到111.0.3版本跨度极大,多个核心API已被废弃或变更,这是远程流为空的最常见原因:

  • 废弃的流监听事件:旧版本使用onaddstream监听远程流,新版本已完全废弃,需替换为ontrack事件。
    错误示例(旧代码):
    peerConnection.onaddstream = (event) => setRemoteStream(event.stream);
    
    正确写法:
    peerConnection.ontrack = (event) => {
      const [remoteStream] = event.streams;
      if (remoteStream) setRemoteStream(remoteStream);
    };
    
  • 废弃的流添加方法:旧版本的addStream已被废弃,需改为遍历本地流的tracks逐个添加:
    错误示例(旧代码):
    peerConnection.addStream(localStream);
    
    正确写法:
    localStream.getTracks().forEach(track => {
      peerConnection.addTrack(track, localStream);
    });
    

二、信令数据完整性检查

信令交换的SDP/ICE Candidate格式在新版本中可能有变更,需确认:

  • 打印Offer/Answer的SDP内容,检查是否包含m=audio和m=video媒体行,缺失则说明媒体描述未正确生成。
  • 检查ICE Candidate的传递:确认远端Candidate的sdpMid、sdpMLineIndex参数完整,且收到后正确调用peerConnection.addIceCandidate(candidate)。

三、连接状态与错误监听

添加连接状态监听,排查ICE连接是否成功建立:

// 监听ICE连接状态
peerConnection.oniceconnectionstatechange = () => {
  console.log('ICE状态:', peerConnection.iceConnectionState);
};
// 监听Peer连接状态
peerConnection.onconnectionstatechange = () => {
  console.log('Peer连接状态:', peerConnection.connectionState);
};
// 监听ICE错误
peerConnection.onicecandidateerror = (event) => {
  console.error('ICE候选错误:', event);
};
  • 若ICE状态停留在checking或变为failed,说明网络连通性或Candidate交换有问题。
  • 若Peer连接状态为disconnected/failed,需排查信令或网络问题。

四、Expo环境配置验证

基于Expo SDK 49,需确保环境配置适配新版本:

  • 权限配置:在app.json中确认摄像头、麦克风权限已正确声明:
    "ios": {
      "infoPlist": {
        "NSCameraUsageDescription": "用于视频通话",
        "NSMicrophoneUsageDescription": "用于语音通话"
      }
    },
    "android": {
      "permissions": [
        "android.permission.CAMERA",
        "android.permission.RECORD_AUDIO",
        "android.permission.INTERNET"
      ]
    }
    
  • 版本兼容性:确认react-native-webrtc@111.0.3与Expo SDK 49无版本冲突,可尝试切换为expo-webrtc(官方适配Expo的WebRTC封装),版本需与SDK 49匹配。

五、媒体流调试

在ontrack事件中打印详细信息,确认是否收到有效媒体轨道:

peerConnection.ontrack = (event) => {
  console.log('收到轨道:', event.track);
  console.log('关联流:', event.streams);
  const [remoteStream] = event.streams;
  if (remoteStream) setRemoteStream(remoteStream);
};
  • 若event.track为null或event.streams为空,说明远端未正确发送媒体轨道,需排查远端的track添加逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.07 08:03:12