WebRTC VideoEngine 本地Video数据处理-VideoCaptureInput

本文深入分析了WebRTC中的VideoCaptureInput类,详细阐述了其成员变量的作用,如encoder_thread_用于数据处理,capture_event_用于线程同步,以及frame_callback_用于获取视频数据。接着,介绍了如何创建VideoCaptureInput对象、启动编码线程,以及视频数据的编码处理流程。在数据输入部分,重点讲解了IncomingCapturedFrame如何驱动编码过程。
摘要由CSDN通过智能技术生成
前面我们分析了VideoCaptureInputTest的实现,从中了解到了VideoCaptureInput的基本用法:




这里详细分析VideoCaptureInput的具体实现。

1.VideoCaptureInput类成员分析:

关键成员变量:

  • encoder_thread_,对输入video数据进行处理的主线程
  • capture_event_,控制encoder_thread_执行,通过Wait()函数阻塞线程,当数据ready后,通过Set()函数激活
  • module_process_thread_,没搞明白
  • frame_callback_,通过callback方法获取video数据
  • stats_proxy_,发送端video数据信息的变量,需要即时更新
  • local_renderer_,本地图像渲染
  • incoming_frame_,当前收到的frame
关键成员函数:
  • VideoCaptureInput构造函数,初始化相关变量
  • EncoderThreadFunction,encoder_thread_的具体实现
  • IncomingCapturedFrame,将数据保存至captured_frame_,并驱动EncodeProcess

2. 创建VideoCaptureInput对象

  • ThreadWrapper::CreateThread(EncoderThreadFunction>..)
  • capture_event_(EventWrapper::Create())
VideoCaptureInput::VideoCaptureInput(
    ProcessThread* module_process_thread,
    VideoCaptureCallback* frame_callback,
    VideoRenderer* local_renderer,
    SendStatisticsProxy* stats_proxy,
    CpuOveruseObserver* overuse_observer,
    EncodingTimeObserver* encoding_time_observer)
    : capture_cs_(CriticalSectionWrapper::CreateCriticalSection()),
      module_process_thread_(module_process_thread),
      frame_callback_(frame_callback),
      local_renderer_(local_renderer),
      stats_proxy_(stats_proxy),
      incoming_frame_cs_(CriticalSectionWrapper::CreateCriticalSection()),
      //创建encode thread
      encoder_thread_(ThreadWrapper::CreateThread(E
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值