背景
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,不會回調回去