mpvがJetpack ComposeでモダンなAndroidインターフェースを獲得した方法

Androidで重い動画ファイルや複雑な字幕を再生しようとしたことがある方は、mpv-androidを使ったことがあるかもしれません。このプレイヤーのエンジンは多彩で高速であり、実績のあるFFmpegライブラリを内部で使用しています。しかし、従来のクライアントのインターフェースは長い間簡素なままで、Android 7時代のまま停滞しているかのようでした。
最近、GitHubでmpvEx(mpvExtended)というフォークが人気を集めています。開発者はmpvKtとmpv-androidプロジェクトのコードベースを基盤として、Jetpack ComposeとMaterial 3 Expressiveを使ってインターフェースを書き直し、日常的な視聴に便利な機能を多数追加しました。
なぜまたmpvのフォークなのか
元のプレイヤーはそのミニマリズムにおいて優れていますが、モバイルユーザーは基本的な快適さを欠いていることが多いです。mpvExでは、開発者は3つのことに焦点を当てました:FFmpegのレンダリング capabilitiesを維持すること、UIの近代化、そしてホームサーバーへの適切なサポートです。
このアプリには広告、トラッカー、マニフェスト内の不必要なパーミッションは一切ありません。コードはApache 2.0ライセンスの下で完全にオープンソースです。
プレイヤーの中身を実践的に見る
箱から出したネットワークプロトコル
サードパーティのファイルマネージャーを通じてLAN経由で動画ファイルを引っ張るのは不便です。mpvExにはSMB、FTP、WebDAVプロトコルの組み込みサポートが含まれています。ホームNASやルーター接続のドライブに直接プレイヤ内で接続でき、手机の内部ストレージに先にダウンロードすることなく動画を開けます。
完全なフレーム単位ナビゲーション
動画をフレーム単位で分析したり、録画内の特定の瞬間を探している人のために、専用のフレーム単位ナビゲーションインターフェースがあります。ボタンをタップするだけで、バッファリングの遅延なく前後にステップできます。
柔軟なメディア処理
おなじみのピクチャーインピクチャー(PiP)モードと画面オフでのバックグラウンドオーディオ再生に加えて、このプレイヤーは以下が可能です:
- 外部字幕トラックとオーディオファイルを添付
- ピンチズームジェスチャーで動画をスケール
- フォルダツリーとフラットリストの切り替え
- プレイリストとチャプターナビゲーションの管理
内部構造
このプロジェクトはKotlinで書かれており、Jetpack Composeを広く使用しています。ネイティブレイヤーとFFmpegライブラリとの統合はJNIを通じて実装されています。
アプリのビルドにはJDK 17と、Android SDKのビルドツールバージョン34.0.0以上が必要です。リポジトリにはGitHub Actionsパイプラインが設定されており、異なるアーキテクチャ用のAPKを自動的にビルドします:
- モダンなスマートフォン用のarm64-v8a
- 古い32ビットチップ用のarmeabi-v7a
- エミュレーターと珍しいIntelベースデバイス用のx86とx86_64
- すべてのライブラリがバンドルされたuniversalパッケージ
独自の署名でソースからビルドしたい場合は、リポジトリにはGitHub Secretsを通じてキーを渡す手順が説明されています:
Windows PowerShellでは、組み込みの.NETメソッドを使用します:
現在の状態と結論
プロジェクトは積極的に開発されています:リポジトリにはすでに2400以上のスターがありますが、トラッカーには約250の未解決の問題があります。開発者は非標準のシナリオでバグが発生する可能性があることを正直に警告しています。
VLCなどの標準プレイヤーが複雑に感じられ、plain mpv-androidのデザインが古臭く感じる場合、mpvExは優れた代替手段となります。GitHubのリリースページまたはIzzyOnDroidカタログから готовыеビルドを試すことができます。Android開発者にとって、このリポジトリは重いC/C++ライブラリをモダンなCompose UIでラップする良い例としても役立ちます。
関連プロジェクト