Qt 6 で QtMultimedia が生まれ変わります

Qt の開発者用のメーリングリスト に Qt のチーフメンテナから New QtMultimedia という投稿がありました。

Qt Multimedia は Qt 6.0 のリリースには入らず、2021年末にリリース予定の 6.2 で正式リリースとなる予定ですが、大規模な改修がなされ、よりよい形で提供されることになります。

QtMultimedia は、動画や音声の再生、カメラからの画像や映像の取り込み、ラジオなど、マルチメディアの機能を提供するモジュールで、他の Qt のモジュールと同様、クロスプラットフォームの API を提供し、バックエンドは各プラットフォーム固有のマルチメディアのフレームワーク(gstreamer や AVFoundation など)を利用します。

Qt 4 の後期に誕生し、Qt 5 では第一線で活躍してきましたが、設計や実装の問題がそれなりにあり、Qt 6 で大規模に改善することにしたようです。(Lars なんでもやるなー)

現時点で、Qt 5.15 では 140k LOC だったものが 7.3k にまで減らすことに成功し、機能的には 90 % 程度提供できているということで、すごいですね。

変更の概要

  • QMediaDevices クラスを追加し、デバイスの管理や変更通知に対応
  • QMediaFormat クラスを追加し、対応するファイル形式やフォーマットを取得可能に
  • 再生系の API を見直し、QMediaPlayer とプレイリストを完全に分離
  • QMediaPlayList を QUrl ベースの API に書き換えシンプルに
  • 音声/映像/字幕の複数のストリームに対応
  • メタデータまわりの改善
  • QMediaCaptureSession クラスを追加し、キャプチャー関連の機能を集約
  • QCamera と QMediaEncoder、QMediaImageCapture は上記と連携するように
  • QCameraFocus と QCameraExposure、QCameraImageProcessing を削除し機能は QCamera に移行
  • QMediaEncoder でキャプチャした音声/映像をエンコードが可能に
  • QMediaEncoderSettings で上記の設定ができるように
  • QML 向けの API を大規模に改善
  • 動画再生のパイプラインを作り直し、QVideoSink という新しいクラスがその役割を担当するように
  • 非圧縮形式(RGB や YUV)などの QPainter やシェーダーでの描画のビルトイン対応
  • 映像の各フレームを QImage に変換できるように
  • QML の VideoOutput への描画の RHI を使ったハードウェアアクセラレート対応
  • QAudioDecoder で音声のデコードをクロスプラットフォームに対応
  • バックエンドの API を Private 化し、当面は自由に機能の拡張などができるように
  • QMediaService/QMediaObject の抽象クラスを削除
  • バックエンドのプラグイン形式をやめ、コンパイル時に決定するように
  • QAudioProve/QVideoProbe の API の削除
  • QSound も廃止し QSoundEffect へ移行
  • Radio API は削除
  • QAudioRecorder も廃止し QMediaCaptureSession/QMediaEncoder もしくは QMediaRecorder へ移行
  • QAbstractVideoFilter を廃止し、ShederEffects へ移行
  • QAbstractVideoSurface を廃止し QVideoSink へ
  • QVideoSurfaceFormat は QVideoFrameFormat に名前を変えた
  • 40以上あったバックエンド向けの API を 13 個にまで減らした
  • gstreamer のプラグインをゼロから書き直して、base と good にのみ依存するように
  • gstreamer の codec はそれぞれ必要な時にのみ利用するように
  • Windows は WMF を使うようにし、カメラにも対応

現時点ではまだまだやることはたくさん残っていますが、6.2 のリリースに向けて引き続き作業を続けていくとのことです。

個人的にも Qt Multimedia は、そろそろ限界だなと思っていたところなので、こうやって新しく生まれ変わってくれて、本当にうれしいなと思っています。

おすすめ