FFmpeg-over-IP – リモートFFmpegサーバーに接続する
50日前原文(github.com)
概要
- GPU搭載マシン上でffmpegをサーバー化し、クライアントからGPUトランスコードを利用可能
- DockerやVM、リモートマシンでもGPUパススルーや共有ファイルシステム不要
- クライアントはffmpeg互換のバイナリで、引数やI/Oをサーバーに転送
- サーバー側でffmpegが実際にGPU処理を実行、ファイルはクライアントに留まる
- NVENC/QSV/VAAPI/AMF/VideoToolboxなど幅広いHWアクセラレーション対応
GPUアクセラレートffmpegをどこからでも利用する方法
- GPUトランスコードは高性能だが、アクセス構築が難題
- Dockerでは**--runtime=nvidia**やデバイスマウント、ドライバーバージョンの調整が必要
- VMではPCIeパススルーやSR-IOVなど複雑な構成、GPUがVMにロックされる問題
- リモート利用時はNFS/SMB等の共有ファイルシステム、パスや権限管理の手間
- インフラ構成を大幅変更せずにGPUトランスコードを利用したいニーズ
ffmpeg-over-ipによる解決策
- GPU搭載マシンでffmpeg-over-ipサーバーを起動
- アプリケーションはffmpeg-over-ipクライアントをffmpegとして利用
- クライアントはffmpegの引数をそのままサーバーへ転送
- サーバーはパッチ済みffmpegで実処理、ファイルI/Oは全てクライアント経由でトンネリング
- ファイルはサーバーに保存されず、TCPポート1本のみで通信
- GPUパススルー不要、NFS不要、SMB不要のシンプル構成
システム構成
- クライアント(ファイル保有・GPUなし)
- ffmpeg-over-ip-clientをffmpeg互換で実行
- サーバー(GPU搭載)
- ffmpeg-over-ip-serverがTCP:5050で待機
- パッチ済みffmpegがI/Oをクライアントにトンネリング
主な特徴
- リリースバイナリにffmpeg/ffprobe同梱、NVENC/QSV/VAAPI/AMF/VideoToolbox等幅広いHWアクセラ対応
- ffmpegの別途インストール不要、両側でセットアップ簡単
- 同時に複数クライアント接続可能、各セッションごとに独立したffmpegプロセス起動
- **Linux(x86_64/arm64)、macOS(x86_64/arm64)、Windows(x86_64)**に対応
導入・運用情報
- クイックスタート:docs/quick-start.md参照、数分で導入可能
- バージョンアップガイド:docs/upgrading.md参照
- 詳細設定:docs/configuration.md参照、設定ファイル探索パスや各種オプション
- Docker統合:docs/docker.md参照、UNIXソケット利用やデバッグも解説
- トラブルシューティング:docs/troubleshooting.md参照、よくある問題やデバッグ方法
- ビルドガイド:CONTRIBUTING.md参照、ソースからのビルドやテスト方法
セキュリティ・ライセンス
- 認証:HMAC-SHA256による共有シークレット署名、全コマンドをサイン
- 通信:サーバーのみがポートを待ち受け、クライアントはアウトバウンド接続のみ
- ライセンス:fioレイヤーとffmpegパッチ(fio/, patches/)はGPL v3、他はMITライセンス(詳細はLICENSE.md参照)
まとめ
- GPU搭載マシンをサーバー化し、どこからでもffmpegのGPUトランスコードを利用可能
- Docker/VM/リモート環境でのGPU利用の障壁を解消
- シンプルなTCP接続のみで、安全かつ柔軟に運用可能