Raspberry Pi Zero, Pi 3 で動画をHWaccel 利用して配信 覚書

Raspberry Pi Zero と Pi 3で Ustream 配信テストを行ったので覚書。
なおコマンドの出力結果は末尾にまとめています。

環境:
OS:Raspbian jessie release_date 2017-02-16  full desktop version
カメラ・マイク: 手持ちのWebカメラ利用。Microsoft Corp. LifeCam HD-3000

1)Webカメラ画像は、ハードウェアエンコードはツールのコンパイル必要。apt-get では利用できない。
・Raspi カメラモジュール標準の raspivid コマンドでは ハードウェアエンコード可能(未確認)
・Raspiで対応している ハードウェアエンコードは OpenMAX IL 。略称omx
・apt-get で入手でき、Webカメラのエンコード可能なプログラムはavconvが一般的。
・avconv は ffmpeg の派生でほぼ一緒。ごたごたがあるらしいが、まあ。。。
・apt-get 入手可能なavconv では -encoders (show available encoders)でomxが出てこない。h.264 関係は libx264のみ。
・ffmpeg をraspberry pi zero でコンパイルして利用。コンパイルに9時間ぐらいかかりました。
もうやりたくない。
コンパイル方法:Signal Flag Zの記事と hirooka.pro の記事を参考に実施させていただきました。
alsa-lib をコンパイルしてから ffmpeg をコンパイル。configure オプションは ffmpeg コマンド実行時に出てくる。
2)Webカメラのマイクインプットは ALSA利用。デバイス名は arecord -l で確認可能
3)ffmpeg で出る ALSAのエラー 「ALSA buffer xrun.」は -thread_queue_size 128 でほぼ出なくなった。起動時に1回だけ出る。(1回出るのは未解決)
4)ustreamへは簡単にアップロード可能。約25秒差で表示。
Ustream関連:Ustream の資料を参考に実施させていただきました。
5)ハードウェアエンコードすごい。
raspi 3/zero どちらも fps=15,bitrate=151kbits,speed=1x 程度。
topで確認したところapt-get でのavconv だと raspi 3 でCPU利用率が idle 5%位しか残らない。
コンパイルした ffmpeg では raspi Zero で idle 40-50%程度、raspi 3 で idle 95%程度。
load averate は raspi 3 で 0.3程度。Zeroだと 0.9-1.1 位。
ちょっとZeroにはきついか。

ffmpeg のオプション:

pi@raspberrypi:~ $ more ustream
#!/bin/bash
RTMP_URL=rtmp://xxxxxx.ustream.tv/ustreamVideo/qqqqqq
STREAM_KEY=xFooKeyxxXXXxxxxXXXX
ffmpeg -f alsa -ac 1 -ar 11025 -thread_queue_size 128 -i default:HD3000 -f video4linux2 -thread_queue_size 256 -i /dev/video0 -f flv -c:v h264 $RTMP_URL/$STREAM_KEY

オプション説明

(global部分) *なし。ログ指定とかエラー率指定とか。
(infile 1部分)
-f alsa ALSA指定
-ac 1 1チャンネルのみ
-ar 11025 11025Hzサンプリング
-thread_queue_size 128 サウンドのキューを128に。デフォルト8
-i default:HD3000 サウンド入力デバイス指定。arecord -l で確認
(infile 2部分)
-f video4linux2 V4L2 利用
-thread_queue_size 256 ビデオのキューを256に。デフォルト8
-i /dev/video0 ビデオ入力デバイス指定。arecord -l で確認
(outfile 部分)
-c:v h264 ビデオエンコードを h264に。正しくコンパイルすればh264_omx が利用される
-f flv flash video 形式、広く利用される。ustreamとかyoutube とか。
* 画面サイズ指定は-s 640x360 とか。
* fps 指定は -r 10 とか。
RTMP_URL,STREAM_KEY は ustream で取得。
取得方法はUstream の資料(*上)とか。

環境の確認コマンドなど
USBデバイス確認

pi@raspberrypi:~ $ lsusb
Bus 001 Device 004: ID 045e:0779 Microsoft Corp. LifeCam HD-3000
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp. SMSC9512/9514 Fast Ethernet Adapter
Bus 001 Device 002: ID 0424:9514 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

ALSA(サウンド)デバイス確認

pi@raspberrypi:~ $ arecord -l
**** ハードウェアデバイス CAPTURE のリスト ****
カード 1: HD3000 [MicrosoftR LifeCam HD-3000], デバイス 0: USB Audio [USB Audio]
サブデバイス: 1/1
サブデバイス #0: subdevice #0

ビデオデバイスのモード一覧確認

pi@raspberrypi:~ $ avprobe -f video4linux2 -list_formats all /dev/video0
avprobe version 11.8-6:11.8-1~deb8u1+rpi1, Copyright (c) 2007-2016 the Libav developers
built on Oct 8 2016 02:37:00 with gcc 4.9.2 (Raspbian 4.9.2-10)
[video4linux2 @ 0x870ce0] R : yuyv422 : YUYV 4:2:2 : 640x480 1280x720 960x544 800x448 640x360 424x240 352x288 320x240 800x600 176x144 160x120 1280x800
[video4linux2 @ 0x870ce0] C : mjpeg : Motion-JPEG : 640x480 1280x720 960x544 800x448 640x360 800x600 416x240 352x288 176x144 320x240 160x120
/dev/video0: Immediate exit requested
# avprobe output

OSバージョン確認

pi@raspberrypi:~ $ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 8.0 (jessie)
Release: 8.0
Codename: jessie

h264対応encoder確認(avconv)

pi@raspberrypi:~ $ avconv -encoders | grep 264
avconv version 11.8-6:11.8-1~deb8u1+rpi1, Copyright (c) 2000-2016 the Libav developers
built on Oct 8 2016 02:37:00 with gcc 4.9.2 (Raspbian 4.9.2-10)
V... libx264 libx264 H.264 / AVC / MPEG-4 AVC / MPEG-4 part 10 (codec h264)
pi@raspberrypi:~ $

h264対応encoder確認(ffmpeg)

pi@raspberrypi:~ $ ffmpeg -encoders | grep 264
ffmpeg version N-84293-g5e3a418 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.9.2 (Raspbian 4.9.2-10)
configuration: --enable-gpl --enable-nonfree --enable-omx-rpi --enable-omx --enable-mmal --enable-hwaccels --extra-cflags=-I/usr/src/ffmpeg/include --extra-ldflags=-L/usr/src/ffmpeg/lib --extra-libs=-ldl
libavutil 55. 50.100 / 55. 50.100
libavcodec 57. 83.100 / 57. 83.100
libavformat 57. 66.104 / 57. 66.104
libavdevice 57. 3.100 / 57. 3.100
libavfilter 6. 78.100 / 6. 78.100
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
V..... h264_omx OpenMAX IL H.264 video encoder (codec h264)

ffmpeg HWアクセラレータ一覧(OMXは出てこない)

pi@raspberrypi:~ $ ffmpeg -hwaccels
ffmpeg version N-84293-g5e3a418 Copyright (c) 2000-2017 the FFmpeg developers
built with gcc 4.9.2 (Raspbian 4.9.2-10)
configuration: --enable-gpl --enable-nonfree --enable-omx-rpi --enable-omx --enable-mmal --enable-hwaccels --extra-cflags=-I/usr/src/ffmpeg/include --extra-ldflags=-L/usr/src/ffmpeg/lib --extra-libs=-ldl
libavutil 55. 50.100 / 55. 50.100
libavcodec 57. 83.100 / 57. 83.100
libavformat 57. 66.104 / 57. 66.104
libavdevice 57. 3.100 / 57. 3.100
libavfilter 6. 78.100 / 6. 78.100
libswscale 4. 3.101 / 4. 3.101
libswresample 2. 4.100 / 2. 4.100
libpostproc 54. 2.100 / 54. 2.100
Hardware acceleration methods:
pi@raspberrypi:~ $

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

CAPTCHA