React Native WebRTC调用getTracks后报Could not add sender错误及API咨询
React Native WebRTC 问题解析:"Could not add sender" 错误与 API 支持说明
一、"Could not add sender" 错误原因及修复
你遇到的错误是因为在调用addTrack后立刻停止了媒体轨道(tracks.stop())。当轨道被停止后,它处于终止状态,无法被添加到RTCPeerConnection中,导致添加发送者失败。
修复方法:移除addTrack后的tracks.stop()调用,或者调整停止轨道的时机(比如在连接建立完成、不再需要本地流时再停止)。修正后的代码片段如下:
const createOffer = async () => { try { peerConnection = new RTCPeerConnection(server); myremotevideo = new MediaStream(); // 移除tracks.stop(),确保轨道在添加时处于活跃状态 localstream.getTracks().forEach(track => { peerConnection.addTrack(track, localstream); }); const offer = await peerConnection.createOffer(); await peerConnection.setLocalDescription(offer); console.log('myoffer', offer); } catch (error) { console.error('err', error); } };
如果确实需要停止本地轨道(比如不需要本地预览),可以在setLocalDescription完成后再执行:
await peerConnection.setLocalDescription(offer); // 此时再停止本地轨道 localstream.getTracks().forEach(track => track.stop());
二、ontrack 和 onicecandidate API 的可用性
React Native WebRTC完全支持ontrack和onicecandidate这两个标准WebRTC API,但你代码中存在拼写错误:event.stram[0]应该改为event.streams[0]。修正后的完整代码示例:
const createOffer = async () => { try { peerConnection = new RTCPeerConnection(server); myremotevideo = new MediaStream(); localstream.getTracks().forEach(track => { peerConnection.addTrack(track, localstream); }); // 正确使用ontrack监听远端轨道 peerConnection.ontrack = event => { event.streams[0].getTracks().forEach(track => { myremotevideo.addTrack(track); }); }; // 正确使用onicecandidate收集ICE候选 peerConnection.onicecandidate = event => { if (event.candidate) { console.log('candiatemay', event.candidate); } }; const offer = await peerConnection.createOffer(); await peerConnection.setLocalDescription(offer); console.log('myoffer', offer); } catch (error) { console.error('err', error); } };
注意:ontrack事件的event.streams是一个数组,包含了轨道所属的媒体流,因此需要通过event.streams[0]获取第一个流。
内容的提问来源于stack exchange,提问作者Anuj
相关产品推荐
相关产品推荐

