Qt 实现的万能采集库( 屏幕/相机/扬声器/麦克风采集)

【写在前面】

之前应公司需要,给公司写过一整套直播的库( 推拉流,编解码),类似于 libobs。

结果后来因为没有相关项目,便停止开发&维护了。

不过里面很多有用的组件,然后也挺好用的,遂开源出来一部分。

因此,本篇就简单讲一下用法。


【正文开始】

关于 AnyCapture:

AnyCapture 是一个基于 Qt 的回调式采集库。

它简化了各类采集实现(包装),提供相当方便的接口,旨在能够轻松集成以实现采集相关工作。

采集目标:

  • 轻松采集屏幕, ScreenCapture 提供多种采集模式(GDI/DX9/DXGI),AnyCapture 默认将自动选择。

  • 轻松采集相机, CameraCapture 使用 Qt Multimedia 完成采集工作。

  • 轻松采集音频输入&输出, AudioCapture 使用 WASAPI(Windows)。

最多支持采集1个屏幕&1个相机&1个音频输入&1个音频输出, 然而可简单实例多个(无需担心资源占用)实现多路采集。

如何构建:

1、构建 libyuvconvertor, 为 libyuv 浅包装, 构建文件 /libyuvconvertor/libyuvconvertor.pro。

2、构建 anycapture, 构建文件 anycapture.pro

如何使用:

1、使用 availableCameras() / availableScreens() / availableAudioInputs() / availableAudioOutputs() 获取有效设备。

2、使用 startCapture*() 开启采集, 采集到的资源将通过回调传递。

3、使用 stopCapture*() 停止采集。

AnyCapture 接口说明:

cpp 复制代码
    /**
     * @brief 获取有效的相机列表
     * @return QList<CameraDevice>
     */
    static QList<any_capture::CameraDevice> availableCameras();

    /**
     * @brief 开始采集相机
     * @param info 要采集的相机信息{使用 @link availableCameras() 获取}
     * @param settings 相机设置
     * @param format 输出图像格式
     * @param callback 采集回调{为空则可使用 @link grabCameraFrame() 抓取}
     * @param master 采集回调指针
     * @return bool{true:成功; false:失败}
     */
    bool startCaptureCamera(const QCameraInfo &info, const QCameraViewfinderSettings &settings, any_capture::OutputVideoFormat format
                            , any_capture::capture_callback callback, void *master);

    /**
     * @brief 抓取一帧相机帧
     * @warning 需要先使用{@link startCaptureCamera()}
     * @return QVideoFrame
     */
    QVideoFrame grabCameraFrame() const;

    /**
     * @brief 停止采集相机
     */
    void stopCaptureCamera();

    /**
     * @brief 获取有效的屏幕列表
     * @return QList<QScreen *>
     */
    static QList<QScreen *> availableScreens();

    /**
     * @brief 开始采集屏幕
     * @param captureScreen 要采集的屏幕{使用 @link availableScreens() 获取}
     * @param captureFrameRate 捕获帧率
     * @param captureCursor 是否捕获光标
     * @param format 输出图像格式
     * @param callback 采集回调{为空则不会采集,但可使用 @link grabScreen() 抓取}
     * @param master 采集回调指针
     * @return bool{true:成功; false:失败}
     */
    bool startCaptureScreen(QScreen *captureScreen, int captureFrameRate, bool captureCursor, any_capture::OutputVideoFormat format
                            , any_capture::capture_callback callback, void *master);

    /**
     * @brief 抓取一帧屏幕
     * @warning 需要先使用{@link startCaptureScreen()}
     * @return QImage
     */
    QImage grabScreen() const;

    /**
     * @brief 停止采集屏幕
     */
    void stopCaptureScreen();

    /**
     * @brief 获取有效的音频输入
     * @return QList<any_capture::AudioDevice>
     */
    static QList<any_capture::AudioDevice> availableAudioInputs();

    /**
     * @brief 开始采集音频输入
     * @param input 要采集的音频输入
     * @param callback 采集回调
     * @param master 采集回调指针
     * @return bool{true:成功; false:失败}
     */
    bool startCaptureAudioInput(const any_capture::AudioDevice &input, any_capture::capture_callback callback, void *master);

    /**
     * @brief 停止采集音频输入
     */
    void stopCaptureAudioInput();

    /**
     * @brief 获取有效的音频输出
     * @return QList<any_capture::AudioDevice>
     */
    static QList<any_capture::AudioDevice> availableAudioOutputs();

    /**
     * @brief 开始采集音频输出
     * @param output 要采集的音频输出
     * @param callback 采集回调
     * @param master 采集回调指针
     * @return bool{true:成功; false:失败}
     */
    bool startCaptureAudioOutput(const any_capture::AudioDevice &output, any_capture::capture_callback callback, void *master);

    /**
     * @brief 停止采集音频输出
     */
    void stopCaptureAudioOutput();

【结语】

注意:AudioCapture / ScreenCapture / CameraCapture 都可以单独使用。

项目链接(多多star呀..⭐_⭐):

CSDN 的:https://download.csdn.net/download/u011283226/89067080?spm=1001.2014.3001.5501https://download.csdn.net/download/u011283226/89067080?spm=1001.2014.3001.5501 Github 的:https://github.com/mengps/AnyCapturehttps://github.com/mengps/AnyCapture

相关推荐
ajassi20003 小时前
开源 C++ QT Widget 开发(十五)多媒体--音频播放
linux·c++·qt·开源
悟乙己4 小时前
Github | MoneyPrinterTurbo:自动化视频内容生成系统
自动化·github·音视频
零点零一4 小时前
VS+QT的编程开发工作:关于QT VS tools的使用 qt的官方帮助
开发语言·qt
wan5555cn4 小时前
多张图片生成视频模型技术深度解析
人工智能·笔记·深度学习·算法·音视频
AI360labs_atyun10 小时前
2025世界智博会,揭幕AI触手可及的科幻生活
人工智能·ai·音视频·生活
骄傲的心别枯萎11 小时前
RV1126 NO.16:通过多线程同时获取H264和H265码流
linux·c++·音视频·rv1126
牵牛老人12 小时前
Qt C++ 复杂界面处理:巧用覆盖层突破复杂界面处理难题之一
数据库·c++·qt
ChindongX13 小时前
CString(MFC/ATL 框架)和 QString(Qt 框架)
qt·mfc
清朝牢弟13 小时前
Win系统下配置PCL库第一步之下载Visual Studio和Qt 5.15.2(超详细)
c++·qt·visual studio
QT 小鲜肉14 小时前
【QT随笔】结合应用案例一文完美概括QT中的队列(Queue)
c++·笔记·qt·学习方法·ai编程