转载注明出处http://blog.csdn.net/wanghorse
webrtc实际的ProcessThreadImpl线程主要有:
1. VoiceChannelTransport下的CreateThread(UdpSocketManagerPosixImpl::Run), 用于收发网络包
2. AudioTrackJni::PlayThreadProcess,用于播放
3. OpenSlesInput下的SLAndroidSimpleBufferQueueItf的内部线程,主要是抓取音频
4. VoiceEngine_startSend的线程OpenSlesInput::StartRecording,CreateThread(CbThread)创建硬件资源,用于处理硬件抓取的音频包
5. ViEChannel下的ThreadWrapper::CreateThread(ChannelDecodeThreadFunction),用于视频解码
6. VideoEngine_startRender的线程CreateThread(IncomingVideoStream::IncomingVideoStreamProcess),用来出来已经解码完成的视频数据
7. VideoEngine_startRender的线程CreateThread(VideoRenderAndroid::JavaRenderThreadProcess),用于硬件层面的Render
8. JAVA线程,调用ProvideCameraFrame
9. VideoEngine_allocateCaptureDevice的线程CreateThread(ViECapturer::ViECaptureProcess),用于处理抓取的探头桢
1. 如果是音频接收, 则直接在线程1中收取网络音频包,RTP包解析,NETEQ处理,队列等等; 在线程2中解码,语音合成,放音等
2. 如果是音频发送,则在线程3中(系统API内部)完成音频抓取,并放入webrtc的程序队列; 在线程4中处理音频、编码、打包、发送等
3. 如果是视频发送, 则在线程1中收取网络视频包,解析RTP等; 在线程5中做视频解码; 在线程6中处理解码数据; 在线程7中完成硬件层面的Render
4. 如果是视频发送, 在线程8中抓取硬件摄像头数据,线程9用于处理摄像头数据,编码,RTP打包,发送