webrtc api

176 阅读1分钟

webrtc添加媒体流方式

官方建议:for (const track of mediaStream.getTracks()) {
        localPeerConnection.addTrack(track);
    }
    
官方不建议: localPeerConnection.addStream(mediaStream);

在实际使用中会发现如果媒体流有视频和音频俩个track,通过addTrack方式添加流的话,在对端会触发俩次track事件,每次获取到一个track,而原来播放远端流的方法是:

  remoteVideo.value.srcObject = streams[0];
  或者remoteVideo.value.srcObject = track;
  
  streams[0]只有对端使用 localPeerConnection.addStream(mediaStream) 时才有效
  track 这种会触发俩次,结果肯定是少了一条track
  android端是没有问题的,android的视频流和音频流本来就是分别处理的,
  所以第一次android和浏览器webrtc通信时总是莫名奇妙的不对
  

这个问题我目前是new了一个MediaStream对象指定给video对象,每次track事件时 MediaStream.addTrack

   var remoteStream:MediaStream = new MediaStream();
   
   remoteVideo.value.srcObject = remoteStream;
   
   localPeerConnection.addEventListener('track', (event)=>{
        console.log('localPeerConnection track: ', event);
        remoteStream.addTrack(event.track)
    });