【ITニュース解説】Tired of complicated compilation?Integrate AeroFFmpeg with one click to make Android audio and video development easier!
2025年09月20日に「Dev.to」が公開したITニュース「Tired of complicated compilation?Integrate AeroFFmpeg with one click to make Android audio and video development easier!」について初心者にもわかりやすく解説しています。
ITニュース概要
AndroidアプリでのFFmpegを使った音声・動画開発は、複雑なコンパイルが課題だった。AeroFFmpegは、FFmpegをAndroid向けに簡単統合できるオープンソースSDKだ。複雑な設定なしにAARファイルとして提供され、ワンクリックで強力な機能をアプリに追加できるため、開発者の手間を大幅に削減する。
ITニュース解説
Androidアプリ開発において、動画や音声の機能を組み込むことは非常に一般的だが、その際に「FFmpeg(エフエフエムペグ)」という強力なツールがよく利用される。FFmpegは動画や音声の形式を変換したり、特定の場面を切り出したり、編集したりと、多岐にわたる処理が可能なオープンソースのツールだ。しかし、これまでAndroidアプリでFFmpegの機能を使えるようにするには、非常に手間のかかる複雑な作業が必要だった。
具体的には、まずFFmpegの元になるプログラムのコード(ソースコード)と、それが動作するために必要な他のプログラム部品(依存ライブラリ)をインターネット上から集める必要があった。次に、WindowsやMacといったパソコン上で、Android端末が理解できる形式のプログラムに変換する「クロスコンパイル」という特別な作業を行うための環境を整えなければならない。この環境設定には、「NDK(Native Development Kit)」と呼ばれる、AndroidでC言語やC++などの低レベルなプログラミング言語を使ってアプリを作るための開発キットの知識も必要となる。さらに、Android端末にはさまざまな種類のCPU(プロセッサ)があり、それぞれのCPUに対応できるように、複雑なコンパイル手順を自動化するための長いスクリプト(プログラムコード)を自分で書く必要があった。しかも、FFmpegの新しいバージョンがリリースされるたびに、これらの手間のかかる作業をすべて最初からやり直さなければならなかったため、非常に時間と労力がかかり、小さなミス一つでエラーが発生しやすい、まさに「悪夢」のようなプロセスだったのだ。
このようなAndroid開発者の悩みを解決するために、「AeroFFmpeg(エアロエフエフエムペグ)」というオープンソースプロジェクトが登場した。AeroFFmpegは、前述したFFmpegの複雑なコンパイル作業をあらかじめ済ませておき、その結果を「AAR(Android Archive)ファイル」という、Androidアプリの部品のように簡単に利用できるパッケージとして提供している。これにより、Android開発者はAeroFFmpegを自分のプロジェクトに組み込むだけで、FFmpegの強力な動画・音声処理機能を複雑な設定なしに利用できるようになる。
AeroFFmpegは現在のところ、AndroidのAPIレベル24(Android 7.0)以降のデバイスで動作し、APIレベル34(Android 14)をターゲットとしている。FFmpegのバージョン4.2.9をベースにしており、MP3、H.264、H.265といった主要な音声・動画形式の処理をサポートしている。対応するCPUアーキテクチャは、現在広く使われている「arm64-v8a」と、一部の「x86」だ。
AeroFFmpegをAndroidプロジェクトに組み込む手順は非常に簡単だ。AeroFFmpegはまだ多くのライブラリが公開されている「Mavenリポジトリ」には登録されていないため、GitHubのプロジェクトページから直接「AeroFFmpeglib-release.aar」というファイルをダウンロードする必要がある。ダウンロードしたAARファイルは、Androidプロジェクトの「app」モジュール内にある「libs」フォルダにコピーする。もし「libs」フォルダがなければ、自分で作成すればよい。
次に、プロジェクトの設定ファイルである「build.gradle」ファイルを編集する。appモジュールの「build.gradle」を開き、Gradle(プロジェクトのビルドを管理するツール)が「libs」フォルダ内のライブラリを見つけられるように「repositories」セクションを設定し、実際にAeroFFmpegを利用することを宣言する「dependencies」セクションに記述を追加する。具体的には、repositoriesブロック内にflatDir { dirs("libs") }を、dependenciesブロック内にimplementation(files("libs/AeroFFmpeglib-release.aar"))を追加する。また、settings.gradle.ktsという別の設定ファイルに特定の記述がある場合、ローカルのライブラリ追加が妨げられることがあるため、指示された内容に変更する必要がある。これらの設定が完了したら、Android Studioで「Sync Now」ボタンをクリックしてプロジェクトを同期する。これでGradleがAARファイルを読み込み、プロジェクトへの組み込みが完了し、FFmpegの機能をすぐに利用できる状態になる。
AeroFFmpegの使い方はシンプルで、アプリ内で「AeroFFmpeg」という特別な部品(シングルトンモデルと呼ばれる、プログラム内でただ一つだけ存在する部品)を通じて操作する。FFmpegのコマンドは、テキスト形式の命令文としてAeroFFmpegに渡すだけで実行できる。これらのコマンドは、アプリのメインの処理を妨げないように、バックグラウンドの「子スレッド」という場所で「非同期」に実行される。ただし、注意点として、AeroFFmpegは複数のFFmpegコマンドを同時に実行することはできない。一つのコマンドが完了するまで、次のコマンドを開始できないため、もし複数の動画や音声の処理を同時に行いたい場合は、アプリ内で複数の独立した処理空間を作る「マルチプロセスプログラミング」という高度な方法を検討する必要がある。
AeroFFmpegは、コマンドの実行だけでなく、タスクの状態管理に必要な様々な機能を提供する。AeroFFmpeg.start()メソッドでFFmpegコマンドを実行し、成功か失敗かの結果を受け取れる。AeroFFmpeg.getTaskState()で現在のタスクが実行中なのか、完了したのか、エラーで終了したのかを確認でき、AeroFFmpeg.cancelTask()で実行中のタスクを中断することも可能だ。また、AeroFFmpeg.getProgressTime()を使えば、タスクの進捗状況をミリ秒単位で取得できる。さらに、AeroFFmpeg.setLogListener()を設定することで、FFmpegの処理中に発生するログメッセージをリアルタイムで受け取り、アプリ内で表示したり、デバッグに利用したりできる。
このAeroFFmpegの機能と、「WorkManager(ワークマネージャー)」というAndroidが推奨するバックグラウンドタスクAPIを組み合わせることで、アプリが一時的に閉じられたり、端末が再起動したりしても、確実に動画や音声の処理をバックグラウンドで実行できる、より信頼性の高いシステムを構築できる。WorkManagerは、バッテリー消費を抑えつつ、指定したタスクを確実に実行するための仕組みだ。
WorkManagerを使ってFFmpegのタスクをバックグラウンドで実行するには、まず「Worker(ワーカー)」と呼ばれるクラスを定義する。このWorkerはCoroutineWorkerという種類で、FFmpegコマンドを受け取って実行する。Workerがタスクを開始すると、ユーザーに現在の状況を知らせるための「フォアグラウンドサービス通知」を表示し、タスクの進捗を通知バーでリアルタイムに更新する。タスクの実行中、WorkerはAeroFFmpegのgetProgressTime()を使って進捗を監視し、通知を更新し続ける。タスクが成功すれば成功の通知を、失敗すれば失敗の通知を表示し、最終的に通知を消去する。
このWorkerを動かすためには、タスクを開始するためのメソッドを用意する。このメソッドでは、WorkManagerに渡すFFmpegコマンドのデータを作成し、タスクの実行条件(例えば、ネットワーク接続が必要かなど)を設定した「OneTimeWorkRequest(一度だけ実行するタスクのリクエスト)」を作成する。そして、WorkManager.getInstance(context).enqueue(ffmpegTaskRequest)というコードで、このタスクをWorkManagerの処理待ちリストに追加する。これにより、WorkManagerが適切なタイミングでタスクを実行してくれる。
さらに、WorkManagerが実行しているタスクの状態や進捗を、アプリの画面にリアルタイムで表示することも可能だ。WorkManagerは「LiveData(ライブデータ)」という仕組みを提供しており、これを使うことで、バックグラウンドで実行されているタスクの最新の情報(タスクの状態や進捗など)を、アプリのUIに自動的に反映させることができる。これにより、ユーザーはアプリを開いている間に、FFmpegの処理がどの段階にあるのかを視覚的に把握できるようになる。
このように、AeroFFmpegを利用することで、これまでAndroid開発者がFFmpegの組み込みに際して直面していた複雑な問題が大幅に解消される。FFmpegが持つ動画の形式変換、編集、録画、ストリーミング、特殊効果の適用など、非常に強力で多岐にわたる機能を、複雑なNDKの設定やコンパイルスクリプトの作成といった手間なしに、Androidアプリに簡単に導入できるようになるのだ。AeroFFmpegは今後も継続的に開発・改善されていく予定であり、Androidアプリでの動画・音声処理の可能性を大きく広げるツールとして期待されている。