Qt Multimedia GStreamerバックエンド

このページでは、Qt Multimedia の GStreamer バックエンドの制限について説明します。

制限と既知の問題

GStreamer は Qt にバンドルされていませんが、通常 Linux ディストリビューションに同梱されています。

  • 特定のバグは、使用されている GStreamer のバージョンに起因している可能性があります。お使いのプラットフォームで最新のGStreamerバグフィックスリリースを使用することをお勧めします。
  • バグによっては、PulseaudioのようなGStreamerが使用するライブラリに関連している可能性もあります。特にPulseaudio v16には、GStreamerパイプラインをハングアップさせる既知のバグがあり、これら2つのパッチのバックポートが必要です:

    このバグは現在、Ubuntu 22.04、23.10、24.04、Debian 11、12、Fedora 39、40を含むほとんどの主流Linuxディストリビューションに影響を及ぼしている。

  • シーク、再生レート、ループ、シンクの切り替えに既知のバグがあります。

カスタマイズポイント

Qt Multimedia は、基盤となる GStreamer パイプラインにアクセスするためのカスタマイズポイントを提供しています。これらのカスタマイズポイントはプライベート API とみなされ、変更される可能性があります。エントリーポイントはclass QGStreamerPlatformSpecificInterface です。

生のパイプラインへのアクセス

QMediaPlayerQMediaCaptureSession の下にあるGstPipeline にアクセスできます。

警告: パイプラインは Qt の実装によって管理されているため、この API は安全ではありません。このAPIを使用する際には、十分な注意が必要です。

#include <QtMultimedia/private/qgstreamer_platformspecificinterface_p.h>

[...]
QMediaMediaPlayer player;
GstPipeline *pipeline = QGStreamerPlatformSpecificInterface::instance()->gstPipeline(&player);
[...]
QMediaCaptureSession session;
GstPipeline *pipeline = QGSreamerPlatformSpecificInterface::instance()->gstPipeline(&session);

シンクおよびソースとしてのカスタム GStreamer 要素

GStreamer pipeline decription から GStreamer 要素を作成し、QCameraQAudioDevice の内部でラップすることができます:

#include <QtMultimedia/private/qgstreamer_platformspecificinterface_p.h>

[...]
QByteArray pipelineString = "videotestsrc is-live=true ! gamma gamma=2.0";

QMediaCaptureSession session;
session.setVideoSink(wid.videoSink());

QCamera *cam = QGStreamerPlatformSpecificInterface::instance()->makeCustomGStreamerCamera(
         pipelineString, &session);
session.setCamera(cam);

アーキテクチャ上の考慮点

Qt Multimedia は汎用的なストリーミングフレームワークではないため、Qt で GStreamer を使用するアーキテクチャ的に最良の方法とは限りません。GStreamer のパイプラインを高度に制御する必要があるが、Qt でのビデオ出力のみを行いたい開発者は、GStreamer のqml6glsink の使用を検討するとよいでしょう。

©2024 The Qt Company Ltd. 本書に含まれる文書の著作権は、それぞれの所有者に帰属します。 本書で提供されるドキュメントは、Free Software Foundation が発行したGNU Free Documentation License version 1.3に基づいてライセンスされています。 Qtおよびそれぞれのロゴは、フィンランドおよびその他の国におけるThe Qt Company Ltd.の 商標です。その他すべての商標は、それぞれの所有者に帰属します。