webrtc onAddStream回調流程

背景

webrtc代碼基於M59

正文

1. 回調設置和處理

(1)java層先在監聽器中實現回調處理函數,如下所示:

private class PCObserver implements PeerConnection.Observer {
    @Override
    public void onAddStream(final MediaStream stream) {
          if (peerConnection == null || isError) {
            return;
          }

         if (stream.audioTracks.size() > 1 || stream.videoTracks.size() > 1) {
            Log.i(TAG,"leo ------------err onAddStream");
            reportError("Weird-looking stream: " + stream);
            return;
          }

          if (stream.videoTracks.size() == 1) {
            remoteVideoTrack.setEnabled(renderVideo);
            if(remoteRenders != null){
              for (VideoRenderer.Callbacks remoteRender : remoteRenders) {
                remoteVideoTrack.addRenderer(new VideoRenderer(remoteRender));
              }
            }
          }
    }

}

(2)傳入監聽器,監聽器是在createPeerConnection的時候設置的,代碼如下:

peerConnection = factory.createPeerConnection(rtcConfig, pcConstraints, pcObserver);

 

2. 回調流程

SetRemoteDescription的時候根據sdp創建new_streams,然後回調,主要流程如下:

PeerConnection::SetRemoteDescription-》創建new_stream (new_streams(StreamCollection::Create()))-》OnAddStream(peerconnection_jni.cc)-》onAddStream(java層回調處理函數)

回調代碼如下:

for (size_t i = 0; i < new_streams->count(); ++i) {
    MediaStreamInterface* new_stream = new_streams->at(i);
    stats_->AddStream(new_stream);
    observer_->OnAddStream(
        rtc::scoped_refptr<MediaStreamInterface>(new_stream));
  }

注意:

同個MediaStrem如果先創建了audioTrack,下次相同的stream只添加videoTrack,不會回調回去

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章