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部分视频类

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