Qt Multimedia

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

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

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

Qt Multimediaマルチメディアに特化したユースケースのためのAPIを提供します。
Qt Multimedia ウィジェットウィジェットベースのマルチメディアAPIを提供する。
Qt Spatial Audio3D空間に音場を実装するための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)

ソースからQt Multimedia をビルドする方法については、「ソースから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.2のQt Multimedia 、以下の寛容なライセンスの下でサードパーティモジュールを含むことができます:

FFmpeg, version n7.1

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 を提供します。 、 、 、 、 を含むコアAPIの実装は、メインの ライブラリに統合されているため、追加ライブラリは必要ありません。その他の APIは、メディアバックエンドとして知られるプラグインライブラリを使用して実装される。QMediaDevices QAudioDevice QSoundEffect QAudioSink QAudioSource Qt Multimedia Qt Multimedia FFmpeg上に構築されたメインのメディアバックエンドは、シームレスなクロスプラットフォーム機能を保証し、WebAssemblyと組み込みLinux/Boot2Qtを除くすべてのプラットフォームでデフォルトとなっています。Boot2Qt では、デフォルトのバックエンドはGStreamer 上に構築されていますが、FFmpeg メディアバックエンドは 環境変数を使って有効にできます。QT_MEDIA_BACKEND

FFmpeg バックエンド

FFmpeg メディアバックエンドはFFmpeg 7.1ライブラリに依存しており、Qt Online Installer に含まれ、メンテナによってテストされています。オンライン・インストーラからのバイナリ・パッケージは 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 Multimedia API の一部である環境変数で設定できます。

ネイティブバックエンド

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

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

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

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

Qt Maintainers はネイティブバックエンドに関する重要な問題の修正に努めますが、プラットフォーム間で一貫性のない動作を含むマイナーな問題の修正を保証するものではありません。新機能は 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 のページを参照してください。

リファレンスと例

© 2025 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.