webrtc部分视频类

作者: ai___believe | 来源:发表于2017-03-23 14:16 被阅读201次

编码类相关

通过VideoEngineImpl分别继承 ViEBaseImpl,ViECodecImpl,ViECaptureImpl,ViERenderImpl等来实现所有继承的类。
编码部分在ViECodecImpl分支,调用ViEEncoder的实例,ViEEncoder类中调用VideoCodingModule实例,VideoCodingModule调用VideoSender实例,而VideoSender调用VCMGenericEncoder实例,VCMGenericEncoder调用VideoEncoder实例。
而VideoEncoder实例为H264Encoder实例、VP9Encoder实例、VP8Encoder实例中的一个,这些类又分别对应自己的实现类,在其中实现具体的编码器。

编码相关类

在VideoEngine类中

VideoEngine* VideoEngine::Create() {
return new VideoEngineImpl(new Config(), true /* owns_config */);
}

所以,创建视频相关所有对象的方法如下:

_videoEngine = VideoEngine::Create();
_vieBase = ViEBase::GetInterface(_videoEngine);
_vieCapture = ViECapture::GetInterface(_videoEngine);
_vieRTPRTCP = ViERTP_RTCP::GetInterface(_videoEngine);
_vieRender = ViERender::GetInterface(_videoEngine);
_vieCodec = ViECodec::GetInterface(_videoEngine);
_vieNetwork = ViENetwork::GetInterface(_videoEngine);
_vieFile=ViEFile::GetInterface(_videoEngine);
_vieImageProc = ViEImageProcess::GetInterface(_videoEngine);

采集到编码

VideoCaptureAndroid.java 的 onPreviewFrame(),调用ProvideCameraFrame()。
video_capture_android.cc文件中int32_t VideoCaptureAndroid::OnIncomingFrame(),调用int32_t VideoCaptureAndroid::OnIncomingFrame(),调用IncomingFrame()。
video_capture_impl.cc 文件中 int32_t VideoCaptureImpl::IncomingFrame(),调用int32_t VideoCaptureImpl::DeliverCapturedFrame(),调用void ViECapturer::OnIncomingCapturedFrame()。
bool ViECapturer::ViECaptureProcess()函数中处理capture_event_,当有新的帧来时,则触发事件。
调用void ViECapturer::DeliverI420Frame(),做一些色彩等方面的前处理。
调用void ViEFrameProviderBase::DeliverFrame(),这里分别对应render和encoder,即将视频帧分别给到渲染和编码器。
对于编码器:调用void ViEEncoder::DeliverFrame(),会做丢帧和重采样的处理,后面调用流程从上图中可以清晰看清楚。
对于渲染:调用void ViERenderer::DeliverFrame(),后面与ViEEncoder及以后类似。

onPreviewFrame()
->int32_t VideoCaptureAndroid::OnIncomingFrame()
->int32_t VideoCaptureAndroid::OnIncomingFrame()
-> int32_t VideoCaptureImpl::IncomingFrame()
->int32_t VideoCaptureImpl::DeliverCapturedFrame()
->void ViECapturer::OnIncomingCapturedFrame()
|||||
->bool ViECapturer::ViECaptureProcess()
->void ViECapturer::DeliverI420Frame()
->void ViEFrameProviderBase::DeliverFrame()
->void ViEEncoder::DeliverFrame()或者void ViERenderer::DeliverFrame()

对于ViEEncoder::DeliverFrame()之后:

int32_t AddVideoFrame()
->int32_t VideoSender::AddVideoFrame //有丢帧处理
->int32_t VCMGenericEncoder::Encode()
->int H264EncoderImpl::Encode()


类似音频相关介绍:

http://www.jianshu.com/p/e88aec0d1de1

相关文章

  • webrtc部分视频类

    编码类相关 通过VideoEngineImpl分别继承 ViEBaseImpl,ViECodecImpl,ViEC...

  • 音视频学习笔记-WebRTC协商过程

    音视频学习笔记 - WebRTC协商过程 RTCPeerConnection 它是WebRTC中最关键的一个类, ...

  • 低时延传输协议

    webrtc / srt / quic . webrtc 无疑是使用最广泛的. 大部分视频会议基于此. 其中srt...

  • iOS下 WebRTC 视频渲染

    iOS下 WebRTC 视频渲染 iOS下 WebRTC 视频渲染

  • WebRTC源码阅读之 rtc::Thread

    rtc::Thread 为 WebRTC内部实现的线程类,在 WebRTC中有广泛的应用,WebRTC内部 net...

  • WebRTC知识整理

    WebRTC WebRTC实现了跨平台的音视频通话 WebRTC的架构 WebRTC的底层代码是C++实现的 并通...

  • iOS 音视频通话及会议2

    iOS webRTC + webSocket 实现音视频会议 webRTC在上一篇,已经给大家对webRTC做...

  • webrtc

    使用WebRTC搭建前端视频聊天室——入门篇使用WebRTC搭建前端视频聊天室——信令篇Android之WebRTC介绍

  • WebRTC学习(一)

    WebRTC 什么是WebRTC音视频处理+即时通讯的开源库 WebRTC能干什么音视频实时互动游戏、即时通讯、文...

  • webrtc源码分析之视频采集之二

    在webrtc源码分析之视频采集之一中,主要分析了视频采集与分发的流程以及涉及到的主要类,接下来分析一下这些主要类...

网友评论

本文标题:webrtc部分视频类

本文链接:https://www.haomeiwen.com/subject/buwznttx.html