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
相关产品推荐
相关产品推荐

