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:~ $