Qt 6.5が新しいマルチメディアバックエンドとして、FFmpegライブラリを導入しました。
Qt 6.5.2以降、これがAndroid版Qtにも導入されました!では、Qt for Androidが新しいFFmpegマルチメディアバックエンドを持つことの意味はどうでしょう?そして、それが提供するのは?
このブログ記事では、これらの疑問にお答えしようと思います。もしご質問があれば、どうぞコメントでお知らせください。
FFmpegを使ったメディア再生
新しいマルチメディアバックエンドの中核機能は、もちろん動画ファイルの再生です。
FFmpegマルチメディアバックエンドを導入することで、動画ファイル再生において以下の3つの主な利点が生まれました:
-
異なるファイルフォーマットとの互換性 - これまで利用できなかったさまざまなコーデックやファイルフォーマットをサポートします。
-
デバイス間の違い - 異なるデバイスが異なる動画フォーマットをサポートします。これはベンダーや提供されているコーデックに依存します。すべてのデバイスで再生するのは難しいファイルもありますが、FFmpegを利用することで、ハードウェア再生が不可能な場合でもソフトウェア再生を可能にします。
- パフォーマンス向上 - 高速な読み込みを実現しながら、依然としてハードウェアアクセラレーションを活用します。
さらに、FFmpegはクロスプラットフォームライブラリでもあります。これをAndroid版Qtで活用することで、他のプラットフォームでお馴染みの機能を取り込むことができます。
Camera2 API
新しいメディアバックエンドの開発により、Androidが提供するAPIに関する技術的な課題を解消しました。以前はCamera APIを使用していましたが、Camera2 APIへの対応に切り替えました。
Camera APIは非常に安定しており、通常のアプリ開発には適しています。しかし、最新のAndroid APIレベルで利用可能な機能をサポートするには、Camera2 APIの活用が重要です。これにより、キャプチャパイプラインをより細かく制御し、新たな可能性が広がります。
古い・新しいカメラオプションの両方をサポートする開発は進行中です。現時点ではQtの最終形態で利用できる変更ではなく、むしろ将来の新機能への足掛かりとして位置づけています。
FFmpegを使ったメディアエンコーディング
Camera2 APIを使用した新しいパイプラインを設定した後、Camera APIとFFmpegのエンコーディングを結びつける必要がありました。
Android上でのFFmpegを使ったメディアエンコーディングは、以前は課題でした。多くのモバイルデバイスでは、メモリや処理の制約からソフトウェアエンコーディングは性能が十分でない場合があります。
以前のFFmpegではAndroidでのハードウェアエンコーディングは提供されていませんでしたが、FFmpeg 6.0の「Von Neumann」メジャーリリースによってその状況が変わりました。
私たちはFFmpegのハードウェアアクセラレーション機能の開発に熱心に取り組み、そのリリース以降、FFmpegメディアライブラリへいくつかのパッチを貢献しました。
これらのパッチによって、AV1、VP9、VP8コーデックのエンコーディングがハードウェアアクセラレーションを使用して行えるようになりました。これらのパッチは既にマスターブランチに統合されていますが、まだリリースされていません。これらのパッチは今後のFFmpegおよびQtのリリースで利用できるようになる予定です。