エンコード サーバー

[ハードウェアエンコード] ラズパイ 64bit 環境でのハードウェアエンコード [Raspberry Pi]

投稿日:

前回セットアップした Raspberry Pi 3 Model B でのハードウェアエンコードについて。
[追記] Raspberry Pi 4 Model B でも同様にできるようです。


 

環境

前回のおさらいになるが、以下の構成。

  • Raspberry Pi 3 Model B
  • Ubuntu Server 20.04 (aarch64; ARM 64bit)

 

調べて分かったこと

  • Raspberry Pi 3 以前は基本的に 32bit 環境で、h264_omx が利用可能だった
  • しかし h264_omx は deprecated; 非推奨扱いになっている模様
  • 64bit 環境では h264_omx は使えず、実装される見込みも無さそう
  • 代わりに h264_v4l2m2m が標準となりそう
  • しかし (Ubuntu などの) ffmpeg v4.2 系にはバグがあり、h264_v4l2m2m の出力が緑色になる問題がある
  • 上記の問題は ffmpeg v4.3 系以降で修正されている

 

ffmpeg のインストール

$ apt show ffmpeg などとすると、確かに v4.2.4 が入りそうなので、
FFMPEG の本家の "Linux Static Builds" から配布元へ飛んで、release-arm64 版をダウンロードする。
# ちなみに armhf, armel はいずれも 32bit版で、それぞれ i686, i386 みたいなイメージのようだ

$ tar Jxvf ffmpeg-...tar.xz で展開、
staticなバイナリなので実行ファイルのみを path の通った場所に置けば良い。

Google Adsense

動作確認

以下のコマンドで簡単な動作確認 (入力は ts 1080p)。
$ ffmpeg -i input.ts -c:v h264_v4l2m2m -b:v 2M -num_capture_buffers 64 -c:a copy out.mp4

当方の環境依存かもしれないが、num_capture_buffers を指定せずに実行すると下記エラーを連発する。

[h264_v4l2m2m @ 0xXXXXXXXX] All capture buffers returned to userspace. Increase num_capture_buffers to prevent device deadlock or dropped packets/frames.

45 fps で x1.5、CPU使用率は 160% 前後なので、基本的にはリアルタイム処理にも使えそう。
audio encode まで入れると x1.25/150% という感じか。

あまり負荷的に余裕が無く、scale, deinterace などのハード処理もできない上に、
そもそも h264_v4l2m2m で使えるオプションもあまり無く(?)、
設定を詰めるところが無さそうな印象。
 

あとがき

あとはストレージさえなんとかできれば、Mirakurun/EPGStation あたりもラズパイにもたせて、
365/24 な常時稼働マシンはこのラズパイだけにできるのだけれど。
別途 NAS を用意するのでは、自前の(ファイル)サーバーと大差ないし、
USB接続の外付けディスクだと拡張性, 冗長性が無いし。。。
オンボードRAID してくれる外付け複スロット 3.5" HDDケース的なものは無いのだろうかと思って調べてみると、
RAID対応, 電源ホストPC連動など結構色々ありますね。
次に更新するときは Raspberry Pi などのシングルボード・コンピュータと、上記のようなHDDケースでも良いかも。
そして 365/24 で常時稼働させない前提なら、操作端末はもっと小型でハイパワーのものにできますね。

[Raspberry Pi] 次期自宅サーバー構想 [Linux]
 

参考

https://denor.jp/Raspberry Pi 4で64ビットハードウェアエンコードを試してみF#comment-137
https://www.willusher.io/general/2020/11/15/hw-accel-encoding-rpi4
 

Google Adsense

Google Adsense

-エンコード, サーバー
-, , , ,

Copyright© P-Life, 2022 All Rights Reserved.