zoukankan      html  css  js  c++  java
  • TSINGSEE青犀视频开发webrtc项目如何实现Windows视频采集?

    视频都是通过平台系统提供的API来实现视频采集,对于TSINGSEE青犀视频正在开发的webrtc项目来说,也有一套标准。

    Webrtc windows的视频采集有一套抽象函数:webrtc::VideoCaptureModule。函数在其中定义了启动采集和启动时设置的各种参数,并且视频数据调用的接口;内部其实还有个DeviceInfo函数类,定义来获取各种相机设备信息的接口。

    Webrtc中有很多的函数继承;webrtc::VideoCaptureModule::VideoCaptureImpl是webrtc::VideoCaptureModule的子类,其中是和DeviceInfo的二个接口配合使用,而这二个接口函数的实现都和平台相关。

    Windows平台相关的逻辑在VideoCaptureImpl的子类中实现。Windows平台的实现是webrtc::VideoCaptureModule::VideoCaptureDS代码中,利用DirectShow实现视频采集功能。

    VideoCaptureModule的基本使用相关代码可以参照webrtc自带的测试代码(test/vcm_capturer.cc)中的部分代码:

    代码基本流程为:

    A、首先调用VideoCaptureFactory::CreateDeviceInfo来创建DeviceInfo对象

    B、再次调用m_deviceInfo->GetDeviceName来获取设备的唯一标识

    C、调用VideoCaptureFactory::Create来创建,使用deviceUTF8创建VideoCaptureModule对象

    D、调用m_vcm->RegisterCaptureDataCallback设置视频数据的回调

    E、采集的参数(如宽高等信息)设置到VideoCapture对象中去

    F、最后调用m_vcm->StartCapture启动采集

    视频数据采集之后,将数据通过OnFrame回调抛出,视频数据封装在VideoFrame中,之后可以进行本地预览和编码的发送到远端。

    如果停止采集,其实也很简单,只需要调用m_vcm->StopCapture,并释放m_vcm=nullptr即可,这样其里面的析构函数中会进行其他的资源释放操作来防止内泄漏。

  • 相关阅读:
    POJ 3140 Contestants Division (树dp)
    POJ 3107 Godfather (树重心)
    POJ 1655 Balancing Act (树的重心)
    HDU 3534 Tree (经典树形dp)
    HDU 1561 The more, The Better (树形dp)
    HDU 1011 Starship Troopers (树dp)
    Light oj 1085
    Light oj 1013
    Light oj 1134
    FZU 2224 An exciting GCD problem(GCD种类预处理+树状数组维护)同hdu5869
  • 原文地址:https://www.cnblogs.com/TSINGSEE/p/15011484.html
Copyright © 2011-2022 走看看