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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.31 10:25:17