Qt マルチメディア

"image of multimedia icons, courtesy of misirlou from the Noun Project"

Qt Multimedia は、マルチメディアコンテンツを扱うための豊富な QML タイプと C++ クラスを提供するアドオンモジュールです。オーディオファイルやビデオファイルを再生し、画面にレンダリングするための使いやすいAPIと、システムカメラやマイク、画面やウィンドウのキャプチャ、オーディオやビデオのメモリバッファなど、様々なソースからオーディオやビデオを記録するための包括的なAPIが含まれています。

このモジュールの機能は、以下のサブモジュールに分かれています:

Qt マルチメディアマルチメディアに特化したユースケース用の API を提供します。
Qt マルチメディアウィジェットウィジェットベースのマルチメディア API を提供します。
Qt 空間オーディオ3D 空間における音場を実装するための API を提供します。

はじめに

Qt 5 から Qt 6 へ移植する場合は、Qt Multimedia の変更点を参照してください。

Qt Multimedia を初めてお使いになる場合、.qml ファイルに次のように記述することで QML タイプをアプリケーションにインポートすることができます。

import QtMultimedia

C++ ライブラリにリンクするには、プロジェクトのCMakeLists.txt ファイルに以下を追加します。my_project はプロジェクト名で置き換えてください。

find_package(Qt6 REQUIRED COMPONENTS Multimedia)
target_link_libraries(my_project PRIVATE Qt6::Multimedia)

ソースから QtMultimedia をビルドする方法については、「ソースから Qt Multimedia をビルドする」を参照してください。

概要と重要なトピック

QMLタイプ

以下の表は、いくつかの重要なQMLタイプの概要です。

タイプ説明
MediaPlayerシーンにオーディオ/ビデオ再生機能を追加する。
CaptureSessionオーディオ/ビデオをキャプチャするためのセッションを作成する。
Cameraシステムに接続されたカメラへのアクセス
AudioInputシステムに接続されたオーディオ入力(マイク)へのアクセス。
AudioOutputシステムに接続されたオーディオ出力(スピーカー、ヘッドフォン)へのアクセス。
VideoOutputビデオコンテンツを表示する。
MediaRecorderCaptureSession からオーディオ/ビデオを録画する。
ImageCaptureカメラからの静止画キャプチャ。
Videoシーンへのビデオ再生機能の追加。MediaPlayer およびVideoOutput タイプを使用して、ビデオ再生機能を提供する。
ScreenCapture画面のキャプチャ
WindowCaptureトップレベルウィンドウをキャプチャする。

C++ クラス

次の表に、重要な C++ クラスの概要を示します。

クラス説明
QMediaPlayerソースからメディアを再生します。
QVideoWidgetメディア・プレーヤーまたはキャプチャ・セッションからのビデオを表示する。
QMediaCaptureSessionオーディオとビデオのキャプチャ。
QCameraシステムに接続されたカメラへのアクセス
QAudioInputシステムに接続された音声入力(マイク)にアクセスする。
QAudioOutputシステムに接続された音声出力(スピーカー、ヘッドフォン)にアクセスする。
QImageCaptureカメラで静止画をキャプチャする。
QMediaRecorderキャプチャセッションからメディアコンテンツを記録する。
QVideoSink個々のビデオフレームにアクセスし、レンダリングする。
QAudioSink生の音声データを音声出力デバイスに送信する。
QScreenCapture画面のキャプチャ
QWindowCaptureトップレベルウィンドウのキャプチャ
QVideoFrameInputメモリバッファからのビデオフレームの表示または記録
QAudioBufferInputメモリバッファからのオーディオの再生または録音をサポートする。

オーディオとビデオの再生については、QMediaPlayerQAudioOutputQVideoWidget に必要な機能がすべて含まれています。その他のクラスはオーディオやビデオ・コンテンツのキャプチャに特化しており、QMediaCaptureSession はキャプチャと録画のプロセス全体を管理する中心的なクラスとして機能します。

ライセンスと帰属

Qt Multimediaモジュールは、The Qt Companyの商用ライセンスで利用できます。さらに、フリーソフトウェアライセンスでも利用可能です。Qt 5.6以降、これらのフリーソフトウェアライセンスはGNU Lesser General Public License, version 3、またはGNU General Public License, version 2です。詳細はQt ライセンスを参照してください。

さらに、Qt 6.8.0のQt Multimediaは、以下の寛容なライセンスの下で、サードパーティモジュールを含むことができます:

FFmpeg, version n7.0.2

GNU Lesser General Public License v2.1 またはそれ以降、BSD 3-Clause "New" or "Revised" License、BSD 2-Clause "Simplified" License、BSD Source Code Attribution、ISC License、MIT License、Mozilla Public License 2.0 の各ライセンス。

boost

Boost Software License 1.0

libjpeg

Independent JPEG Group ライセンス

zlib

zlib ライセンス

H.264メディア圧縮標準のようなビデオ圧縮標準は、特許でカバーされている可能性があり、ロイヤリティ料が発生する可能性があることに注意してください。これは、実装がオペレーティングシステムのサービスとして提供される場合、サードパーティのライブラリを通して提供される場合、Qt Multimedia のバックエンドのいずれかに適用されます。Qtライセンスはこのような料金をカバーしません。

ターゲットプラットフォームとバックエンド

Qt Multimediaは、メディア再生、録画、デバイス管理のための、ユーザーフレンドリーでクロスプラットフォームなAPIを提供します。QMediaDevicesQAudioDeviceQSoundEffectQAudioSinkQAudioSource を含むコア API の実装は、Qt Multimedia のメインライブラリに統合されているため、追加のライブラリは必要ありません。その他のQtマルチメディアAPIは、メディアバックエンドとして知られるプラグインライブラリを使用して実装されています。FFmpeg 上に構築されたメインのメディアバックエンドは、シームレスなクロスプラットフォーム機能を保証し、WebAssembly と組み込み Linux/Boot2Qt 以外のすべてのプラットフォームでデフォルトとなっています。Boot2Qt では、デフォルトのバックエンドはGStreamer 上に構築されていますが、QT_MEDIA_BACKEND 環境変数を使用して FFmpeg メディアバックエンドを有効にできます。

FFmpeg バックエンド

FFmpeg メディアバックエンドはFFmpeg 7.0ライブラリに依存しており、Qt オンラインインストーラに含まれています。オンラインインストーラからのバイナリパッケージは FFmpeg へのダイナミックリンクを使用します。そのため、アプリケーションはインストーラに FFmpeg のバイナリをバンドルするか、オペレーティングシステムにインストールされている FFmpeg に依存する必要があります。FFmpeg ライブラリは、Linux/X11 を除き、Qt アプリケーションのデプロイメントドキュメントに記載されているように、Qt のデプロイメント ツールを使用して自動的にデプロイされます。アプリケーションは、FFmpeg のメジャーバージョンが Qt で使用されるバージョンと一致していれば、共有ライブラリまたはスタティックライブラリとして、FFmpeg の独自のビルドをデプロイすることもできます。

Qt Multimediaは、ほとんどのオペレーティングシステムでFFmpegメディアバックエンドを利用しますが、異なるプラットフォームのアプリケーション間で、プラットフォーム固有の機能的または視覚的な違いが発生する可能性があります。FFmpeg はすべてのプラットフォームで同一のコーデックとフォーマットのサポートを提供しているわけではなく、Qt Multimedia の機能のパフォーマンスは、特定のプラットフォームでのみ利用可能なハードウェアのサポートに依存する可能性があります。例えば、FFmpeg は ARM アーキテクチャの Linux ターゲットでハードウェアアクセラレーションに特有の問題が発生します。したがって、Qt Multimedia アプリケーションをすべてのターゲットプラットフォームでテストすることをお勧めします。

注意: FFmpeg プロジェクトはさまざまなライセンスで機能を提供しています。オンラインインストーラで提供されるビルド済みの FFmpeg ライブラリには、「ライセンスと属性」に記載されている寛容なライセンスに同意する機能のみが含まれています。

開発とデバッグを容易にするため、一部の FFmpeg 機能はプライベート Qt マルチメディア API の一部である環境変数で設定可能です。

ネイティブバックエンド

既存のアプリケーションとの互換性を保つため、各オペレーティングシステム用のネイティブメディアバックエンドを用意しています:

  • Linux の GStreamer
  • macOS と iOS の AVFoundation
  • Windows の Windows Media Foundation
  • AndroidのMediaCodecフレームワーク

注: FFmpegメディアバックエンドはデフォルトバックエンドですが、ネイティブバックエンドも利用可能です。GStreamerバックエンドはLinuxでのみ利用可能で、組み込みアプリケーションにのみ推奨される。

注意: Android の MediaCodec は Qt 6.8 で非推奨となり、次のメジャーリリースで削除される予定です。

Qt Maintainer はネイティブバックエンドに関する重要な問題を修正するように努めますが、プラットフォーム間で一貫性のない動作を含むマイナーな問題の修正を保証するものではありません。新機能は FFmpeg メディアバックエンドにのみ実装されます。

GStreamerバックエンドには、より細かい制御を可能にするプライベートAPIがいくつかあります。しかし、GStreamer バックエンドには既知のバグがあります。詳細はGStreamerを参照してください。

バックエンドの制限は文書化され、その状態はそれぞれのクラスで管理される。

バックエンドの変更

デフォルトの FFmpeg バックエンドに問題がある場合は、ネイティブのバックエンドでテストすることをお勧めします。QT_MEDIA_BACKEND 環境変数をwindows,GStreamer (on Linux),Darwin (on macOS and iOS), またはandroid に設定することで、ネイティブバックエンドに切り替えることができます:

export QT_MEDIA_BACKEND=darwin

使用するバックエンドとして FFmpeg を強制的に割り当てるには、この変数をffmpeg に設定します:

export QT_MEDIA_BACKEND=ffmpeg

Qt Multimedia のコンパイル段階で、デフォルトのメディアバックエンドは cmake 変数QT_DEFAULT_MEDIA_BACKEND で設定できます。

ターゲットプラットフォームに関する注意

以下のページでは、マルチメディアバックエンドとは関係のない、特定のターゲットプラットフォームに関する問題をリストアップしています。

パーミッション

Qt 6.6 から、Qt Multimedia モジュールは新しいQPermission API を使ってcameramicrophone のパーミッションを扱います。つまり、Qt自身はこれらのパーミッションの問い合わせをしなくなったので、クライアントアプリケーションから直接行う必要があります。

新しいQPermission APIをアプリケーションに統合する方法の例については、Application Permissionsのページを参照してください。

リファレンスと例

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