WebRTCDemo.apk代码走读(七):线程关系

转载注明出处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打包,发送

时间: 2024-11-05 15:55:33

WebRTCDemo.apk代码走读(七):线程关系的相关文章

WebRTCDemo.apk代码走读(八):代码目录结构

转载注明出处http://blog.csdn.net/wanghorse ├── ./base //基础平台库,包括线程.锁.socket等 ├── ./build //编译脚本,gyp ├── ./common_audio //基础公共的音频处理 │ ├── ./common_audio/include //就一个类型转换头文件 │ ├── ./common_audio/resampler //音频重采样代码 │ ├── ./common_audio/signal_processing //音

WebRTCDemo.apk代码走读(三):音频接收流程

收到音频包 UdpSocketManagerPosixImpl::Run UdpSocketManagerPosixImpl::Process UdpSocketPosix::HasIncoming(recvfrom) UdpTransportImpl::IncomingRTPCallback UdpTransportImpl::IncomingRTPFunction VoiceChannelTransport::IncomingRTPPacket VoENetworkImpl::Receive

WebRTCDemo.apk代码走读(二):发送Call

转载注明出处http://blog.csdn.net/wanghorse VoiceEngine_startListen VoEBaseImpl::StartReceive channelPtr->StartReceiving设置channel的receiving的状态 VoiceEngine_startPlayout VoEBaseImpl::StartPlayout VoEBaseImpl::StartPlayout--没有channelId,涉及到硬件,所以是唯一全局的 AudioDevi

WebRTCDemo.apk代码走读(九):VoiceEngine和VideoEngine主要的控制类说明

转载注明出处http://blog.csdn.net/wanghorse 1. VideoEngineImpl VideoEngine对外提供的集成接口实现类, 其继承了VideoEngine对外提供的所有接口实现类,包括 ViEBaseImpl/ViECaptureImpl/ViEFileImpl/ViEImageProcessImpl/ViENetworkImpl/ViERTP_RTCPImpl/ViEExternalCodecImpl/VideoEngine 2. ViEBaseImpl

WebRTCDemo.apk代码走读(六):视频发送流程

转载注明出处http://blog.csdn.net/wanghorse JNI调用 ProvideCameraFrame VideoCaptureAndroid::OnIncomingFrame VideoCaptureImpl::IncomingFrame 申请内存,转换层I420 VideoCaptureImpl::DeliverCapturedFrame 计算时间戳 ViECapturer::OnIncomingCapturedFrame OveruseFrameDetector::Fr

WebRTCDemo.apk代码走读(一):初始化

MediaEngine.java:MediaEngine初始化 转载注明出处http://blog.csdn.net/wanghorse new VoiceEngine/VoiceEngine_create new VoiceEngineData webrtc::VoiceEngine::Create GetVoiceEngine new VoiceEngineImpl 初始化SharedData ProcessThread::CreateProcessThread OutputMixer::C

WebRTCDemo.apk代码走读(四):音频发送流程

转载注明出处http://blog.csdn.net/wanghorse 发送音频 OpenSlesInput::RecorderSimpleBufferQueueCallback OpenSlesInput::RecorderSimpleBufferQueueCallbackHandler,保存数据 OpenSlesInput::CbThreadImpl AudioDeviceBuffer::SetRecordedBuffer, 复制数据 AudioDeviceBuffer::SetVQEDa

WebRTCDemo.apk代码走读(五):视频接受流程

转载注明出处http://blog.csdn.net/wanghorse 收到视频包 UdpSocketManagerPosixImpl::Run UdpSocketManagerPosixImpl::Process UdpSocketPosix::HasIncoming(recvfrom) UdpTransportImpl::IncomingRTPCallback UdpTransportImpl::IncomingRTPFunction VideoChannelTransport::Inco

【详解】消息队列和线程关系

1.进程-线程-消息队列 简单的来说,什么是进程?什么是线程?打个比方,你的程序要执行,操作系统就会把你的exe文件加载到内存中,那就生成一个进程了(当然还包含分配到的资源等):对于线程,你可以理解成是一个程序里的不同部分,这有点类似函数,所不同的是各个线程是同时执行的. 例如,你的主线程创建了另一个副线程,那么这两个线程是同时在工作的,不存在调用 - 返回的概念. 一个进程里可以有多个线程在执行,称为执行实例. shining:因为线程的资源是从进程资源中分配出来的,因此同一个进程中的多个线程