Raspberry Pi + Nginx RTMP + FFmpeg : 音声付きストリーミング
Home > Raspberry Pi >
目次
FFmpeg インストール & コンパイル
こちらを参考にさせて頂きました。
Rapberry Pi 3 のハードウエアエンコーダh264_omxが使えるFFmpegをビルドする
FFmpeg ソース取得
1 2 |
cd /home/pi git clone git://source.ffmpeg.org/ffmpeg.git |
ALSA library コンパイル & インストール
1 2 3 4 5 6 7 |
cd /home/pi wget ftp://ftp.alsa-project.org/pub/lib/alsa-lib-1.1.2.tar.bz2 tar xjvf alsa-lib-1.1.2.tar.bz2 cd alsa-lib-1.1.2 ./configure --prefix=/home/pi/ffmpeg make make install |
FFmpeg コンパイル & インストール
1 2 3 4 |
cd /home/pi/ffmpeg ./configure --enable-gpl --enable-nonfree --enable-mmal --enable-omx-rpi --enable-omx --extra-cflags="-I/home/pi/ffmpeg/include" --extra-ldflags="-L/home/pi/ffmpeg/lib" --extra-libs=-ldl make -j4 sudo make install |
FFmpeg 録画テスト
カメラ確認
1 2 3 |
$ v4l2-ctl --list-device UVC Camera (046d:0825) (usb-3f980000.usb-1.5.3): /dev/video0 |
カメラマイク確認
1 2 3 4 5 |
$ arecord -l **** ハードウェアデバイス CAPTURE のリスト **** カード 1: U0x46d0x825 [USB Device 0x46d:0x825], デバイス 0: USB Audio [USB Audio] サブデバイス: 1/1 サブデバイス #0: subdevice #0 |
録画テスト
~/Documents (任意) に移動
1 |
cd ~Documents |
録画
1 |
ffmpeg -f alsa -i default -f v4l2 -s 640x480 -i /dev/video0 output.mpg |
録画開始!
終了は Control + C で出来ます。
output.mpg をFTPソフトでDLしてみて、macで再生を確認…できてる!
Nginx RTMP で ストリーミング
nginx-rtmp-module でRTMPサーバ
FFmpeg で配信
1 2 3 4 5 6 |
ffmpeg \ -f alsa -ac 1 -thread_queue_size 8192 -i hw:1 \ -f v4l2 -thread_queue_size 8192 -input_format yuyv422 -video_size 1280x720 -framerate 8 -i /dev/video0 \ -c:v h264_omx -b:v 768k -bufsize 768k -vsync 1 -g 16 \ -c:a aac -b:a 128k -ar 44100 \ -f flv rtmp://localhost/live/stream; |
コマンドはこちらを参考にさせていただきました。
Raspberry Pi 3とffmpegでYouTubeへライブ配信をする
私の環境では -ac 1 を指定しないと 下記のエラーが出ました。
1 2 |
[alsa @ 0x1a3a550] cannot set channel count to 2 (Invalid argument) hw:1,0: Input/output error |
こちらの記事を参考に、-alsa の後に -ac 1 を指定することで実行出来ました。cannot set channel count to 2 (Invalid argument) hw:0,0: Input/output error | hirooka.pro
ブラウザからアクセス
できた!音声つき!散らかってる!
何故かAndroidで表示されない・・・課題。
CPU使用率
vmstat
1 2 3 4 |
$ vmstat procs -----------memory---------- ---swap-- -----io---- -system-- ------cpu----- r b swpd free buff cache si so bi bo in cs us sy id wa st 5 0 74652 48048 102704 445508 0 0 12 54 39 84 6 1 93 0 0 |
top
「1」を入力してコア毎のCPU
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 |
top - 10:12:06 up 17:00, 4 users, load average: 0.85, 0.84, 0.53 Tasks: 175 total, 1 running, 174 sleeping, 0 stopped, 0 zombie %Cpu0 : 44.6 us, 4.7 sy, 0.0 ni, 42.0 id, 0.0 wa, 0.0 hi, 8.7 si, 0.0 st %Cpu1 : 0.0 us, 2.0 sy, 0.0 ni, 97.7 id, 0.3 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu2 : 1.0 us, 1.0 sy, 0.0 ni, 98.0 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st %Cpu3 : 2.7 us, 1.7 sy, 0.0 ni, 95.7 id, 0.0 wa, 0.0 hi, 0.0 si, 0.0 st KiB Mem: 882772 total, 850156 used, 32616 free, 103192 buffers KiB Swap: 102396 total, 74644 used, 27752 free. 449188 cached Mem PID USER PR NI VIRT RES SHR S %CPU %MEM TIME+ COMMAND 2951 pi 20 0 249124 74872 67568 S 57.7 8.5 1:29.06 ffmpeg |
音声も出しているのに mgpg-streamer より負荷が少ない
参考にさせて頂きました
FFmpeg
- Rapberry Pi 3 のハードウエアエンコーダh264_omxが使えるFFmpegをビルドする
- Raspberry Pi 3につないだUSBカメラの映像と音声をFFmpegで録画する
- Raspberry Pi 3とffmpegでYouTubeへライブ配信をする
- FFmpeg – ArchWiki
- cannot set channel count to 2 (Invalid argument) hw:0,0: Input/output error | hirooka.pro