本页内容

QGStreamerInterface Class

为Qt Multimedia 提供GStreamer专用的集成点。更多内容...

标题: #include <QGStreamerInterface>
CMake: find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(mytarget PRIVATE Qt6::Multimedia)
qmake: QT += multimedia
自: Qt 6.12

公共函数

virtual ~QGStreamerInterface()
virtual QVideoFrame createFrameFromGstBuffer(GstBuffer *buffer, const GstVideoInfo &videoInfo) = 0
virtual QVideoFrame createFrameFromGstBuffer(GstBuffer *buffer, const GstVideoInfoDmaDrm &videoInfo) = 0
virtual GstBuffer *gstBuffer(const QVideoFrame &frame) = 0
virtual GstPipeline *gstPipeline(QMediaCaptureSession *session) = 0
virtual GstPipeline *gstPipeline(QMediaPlayer *player) = 0
virtual QAudioDevice makeCustomGStreamerAudioInput(const QByteArray &gstreamerPipeline) = 0
virtual QAudioDevice makeCustomGStreamerAudioOutput(const QByteArray &gstreamerPipeline) = 0

静态公共成员

QGStreamerInterface *instance()

详细说明

警告: QGStreamerInterface 类提供的 兼容性保证有限。此 API 不提供源代码或二进制兼容性保证,这意味着仅保证其可在应用程序所基于的 Qt 版本上运行。不兼容的更改将尽量控制在最低限度,且仅会在次要版本中进行。

要在应用程序中使用此类,请链接到Qt::MultimediaPrivate (若使用 CMake),并包含头文件#include <QtMultimedia/spi/qgstreamerinterface.h> 。

QGStreamerInterface 是自定义 GStreamer 后端的入口点:它可将自定义管道元素封装为 Qt 音频和视频设备,访问高级 Qt 对象底层的GstPipeline ,并在QVideoFrame 与 GStreamer 缓冲区之间进行转换。

默认情况下,该类在 meta-qt6 构建中可用。在支持 GStreamer 的自定义构建中,可通过启用gstreamer_qt_api 功能来使用它。

QtMultimedia 必须配合gstreamer 媒体后端运行,才能获取该类的有效实例。

成员函数文档

[virtual noexcept] QGStreamerInterface::~QGStreamerInterface()

销毁该接口。

[pure virtual] QVideoFrame QGStreamerInterface::createFrameFromGstBuffer(GstBuffer *buffer, const GstVideoInfo &videoInfo)

创建一个QVideoFrame ,该对象通过videoInfo 中描述的格式,将buffer 进行封装。

生成的帧与调用方共同拥有指定的GstBuffer 。

另请参阅 createFrameFromGstBuffer(GstBuffer *, const GstVideoInfoDmaDrm &) 和gstBuffer()。

[pure virtual] QVideoFrame QGStreamerInterface::createFrameFromGstBuffer(GstBuffer *buffer, const GstVideoInfoDmaDrm &videoInfo)

创建一个QVideoFrame 对象,该对象封装了一个由DMA-BUF支持的buffer ,其格式如videoInfo 中所述。

需要支持 DMA-BUF 视频格式的 GStreamer 1.24 或更高版本。如果不支持,则返回一个无效的 `QVideoFrame ` 并记录一条警告。

创建的帧与调用方共享指定GstBuffer 的所有权。

另请参阅 createFrameFromGstBuffer(GstBuffer *, const GstVideoInfo &) 和gstBuffer()。

[pure virtual] GstBuffer *QGStreamerInterface::gstBuffer(const QVideoFrame &frame)

返回作为frame 后端支持的GStreamer缓冲区,或者如果frame 未持有由GStreamer支持的视频内存,则返回nullptr 。

返回缓冲区的所有权不会发生转移。

另请参阅 createFrameFromGstBuffer()。

[pure virtual] GstPipeline *QGStreamerInterface::gstPipeline(QMediaCaptureSession *session)

返回session 对应的底层GStreamer管道;如果session 未由GStreamer媒体后端支持,则返回nullptr 。

警告:该 管道仍由Qt Multimedia 拥有并控制。若未与捕获会话协调即修改其状态或拓扑,可能会导致未定义的行为。

另请参阅 QMediaCaptureSession 。

[pure virtual] GstPipeline *QGStreamerInterface::gstPipeline(QMediaPlayer *player)

返回player 对应的底层GStreamer管道;若player 未由GStreamer媒体后端支持,则返回nullptr 。

警告:该 管道仍由Qt Multimedia 拥有和控制。若未与QMediaPlayer 协调即修改其状态或拓扑,可能会导致未定义的行为。

另请参阅 QMediaPlayer 。

[static] QGStreamerInterface *QGStreamerInterface::instance()

返回当前活动的Qt Multimedia 后端的GStreamer接口;如果未使用GStreamer后端,则返回nullptr 。

[pure virtual] QAudioDevice QGStreamerInterface::makeCustomGStreamerAudioInput(const QByteArray &gstreamerPipeline)

根据 GStreamer 管道描述创建一个自定义音频输入设备。

将字符串gstreamerPipeline 解析为GStreamer二进制描述。当将返回的QAudioDevice 传递给QAudioInput 并使用QMediaCaptureSession::setAudioInput()进行绑定时,解析出的元素将作为QMediaCaptureSession 的音频源进行连接。

描述中的元素名称可在捕获会话激活后,通过gst_bin_get_by_name() 定位会话管道中的节点。

#include <QtMultimedia/spi/qgstreamerinterface.h>

QMediaCaptureSession session;
QAudioInput input{
    QGStreamerInterface::instance()->makeCustomGStreamerAudioInput(
        "audiotestsrc wave=2 freq=200 ! identity name=myConverter") };
session.setAudioInput(&input);

另请参阅 makeCustomGStreamerAudioOutput()、QAudioInput 以及QMediaCaptureSession 。

[pure virtual] QAudioDevice QGStreamerInterface::makeCustomGStreamerAudioOutput(const QByteArray &gstreamerPipeline)

根据 GStreamer 管道描述创建一个自定义音频输出设备。

将字符串gstreamerPipeline 解析为GStreamer二进制描述。当返回的QAudioDevice 被传递给QAudioOutput 并使用QMediaCaptureSession::setAudioOutput()进行分配时,生成的元素将作为QMediaCaptureSession 的音频接收端进行连接。

另请参阅 makeCustomGStreamerAudioInput()、QAudioOutput 以及QMediaCaptureSession 。

© 2026 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.