matoken?
-
KenichiroMATOHARA( @matoken )
-
興味
-
PC-UNIX/OSS, OpenStreetMap, 電子工作, 自転車……
-
altanativeが好き,多様性は正義!
-
最近
-
MNPでmvno業者に(mineo)
-
1年は900円引きで410円/月(データ通信+通話) http://mineo.jp/campaign/cp_20170901/
-
Amazonギフト券2k分が貰える紹介URL http://mineo.jp/syokai/?jrp=syokai&kyb=Z2Z9C4S6W8
-
初期費用3k円分が無料になるエントリーコードも余ってるので必要な方は連絡ください
-
ライブストリーミング
-
たまにOSMマッピング配信を
-
JOSMをOBSでYoutubeLiveに配信していた
-
-
Core i7-2620M や Core i7-640LM
-
現在 Core2Duo P8400
-
エンコード遅い……
-
NotePCなのでGPU増設できない
-
Raspberry Piにh.264のハードウェアエンコーダがついてる
-
$5〜$35でお安い
-
標準では標準カメラの入力がハードウェアエンコーディング出来る
-
デスクトップやUSBカメラはそのままでは不可
-
今回は Raspberry Pi 2 B を利用
ffmpegのPi関連らしいconfigure option
$ ./configure --help|grep -i raspberry --enable-mmal enable Broadcom Multi-Media Abstraction Layer (Raspberry Pi) via MMAL [no] --enable-omx-rpi enable OpenMAX IL code for Raspberry Pi [no] $ ./configure --help|grep -i arm --disable-armv5te disable armv5te optimizations --disable-armv6 disable armv6 optimizations --disable-armv6t2 disable armv6t2 optimizations
Raspbian stretchのffmpeg configure
-
--disable-armv5te は入っているけど--enable-mmal/--enable-omx-rpiは無い
-
configure optionを追加してbuildし直す
ffmpeg version 3.2.5-1 Copyright (c) 2000-2017 the FFmpeg developers built with gcc 6.3.0 (Raspbian 6.3.0-18+rpi1) 20170516 configuration: --prefix=/usr --extra-version=1 --toolchain=hardened --libdir=/usr/lib/arm-linux-gnueabihf --incdir=/usr/include/arm-linux-gnueabihf --enable-gpl --disable-stripping --enable-avresample --enable-avisynth --enable-gnutls --enable-ladspa --enable-libass --enable-libbluray --enable-libbs2b --enable-libcaca --enable-libcdio --enable-libebur128 --enable-libflite --enable-libfontconfig --enable-libfreetype --enable-libfribidi --enable-libgme --enable-libgsm --enable-libmp3lame --enable-libopenjpeg --enable-libopenmpt --enable-libopus --enable-libpulse --enable-librubberband --enable-libshine --enable-libsnappy --enable-libsoxr --enable-libspeex --enable-libssh --enable-libtheora --enable-libtwolame --enable-libvorbis --enable-libvpx --enable-libwavpack --enable-libwebp --enable-libx265 --enable-libxvid --enable-libzmq --enable-libzvbi --enable-omx --enable-openal --enable-opengl --enable-sdl2 --enable-libdc1394 --enable-libiec61883 --enable-chromaprint --enable-frei0r --enable-libopencv --enable-libx264 --enable-shared
必要パッケージの導入
$ sudo apt update # パッケージ情報更新 $ sudo apt upgrade # パッケージを最新に $ sudo apt install build-essential devscripts # 開発環境導入 $ sudo apt build-dep ffmpeg # ffmpeg関連パッケージ導入
source入手
$ apt source ffmpeg # source pkg入手 $ cd ffmpeg-3.2.5 $ vi debian/rules # configure option等編集
debian/rules変更部分
@@ -86,6 +86,8 @@ --enable-libzmq \ --enable-libzvbi \ --enable-omx \ + --enalbe-omx-rpi \ + --enable-mmal \ --enable-openal \ --enable-opengl \ --enable-sdl2
dpkg-buildpackage -us -uc -b
real 336m37.830s user 376m25.670s sys 34m12.060s
並列処理忘れたとはいえ遅い……
Rpi3の事例
$ make -j4 コンパイルは30分くらいかかった。 その際に CPU の発熱がすごくて温度警告がでる(初めて見た!)。 温度警告は 80~85℃ で出て 85℃ を超えるとクロックが落ちるらしい。 速く安全に終わらせたいならヒートシンクを付けるなどの熱対策が要る。 自分は放熱できるケースを買っておいたのでそれに入れ替えた。
ちょっとmakeし直してみる
$ make clean $ time ./configure (略 $ time make -j4
結果
-
configure : 5m50.275s
-
make -j4 : 92m19.943s
MURAOKAさんのRPI3の3倍くらい…… 多分CPUだけでなくSDも足を引っ張っている(一応SunDisk Class10)
Raspberry Pi 3 BかRaspberry Pi 2 B 1.2と速いストレージ欲しい
ffmpeg少し試す
-
とりあえずUSBカメラ(ハードオフで500円ほどで入手したLogitech c270)
-
encode optionはffmpeg wikiのstreaming例の適当なものなの
-
IOやNetworkが遅そうなのでとりあえず宛先は /dev/null に
-
video codec h264_omx がキモ
$ /opt/bin/ffmpeg -f v4l2 -framerate 30 -video_size 1280x720 -i /dev/video0 -c:v h264_omx -preset veryfast -maxrate 1984k -bufsize 3968k -vf "format=yuv420p" -g 60 -f null -
解像度だけ変えて何パターンか
frame= 411 fps=6.7 q=-0.0 Lsize=N/A time=00:01:02.93 bitrate=N/A speed=1.02x video:1429kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame= 577 fps=9.5 q=-0.0 Lsize=N/A time=00:01:03.20 bitrate=N/A speed=1.04x video:1410kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame= 558 fps=9.1 q=-0.0 Lsize=N/A time=00:01:03.30 bitrate=N/A speed=1.04x video:1366kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame= 878 fps= 15 q=-0.0 Lsize=N/A time=00:01:02.65 bitrate=N/A speed=1.04x video:1072kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame= 932 fps= 15 q=-0.0 Lsize=N/A time=00:01:04.96 bitrate=N/A speed=1.01x video:758kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
ソフトウェアエンコーディングと比較してみる
video codec h264 -> ソフトウェア : 3.8fps(speed=0.875x) video codec h264_omx -> RPiハードウェア : 6.7fps(speed=1.02x)
-
思ったほど差がないけどCPUの空きは全然違う
-
ソフトウェアでのvmstat(id) → 0〜20
-
ハードウェアでのvmstat(id) → 95〜100
-
frame= 295 fps=3.8 q=-1.0 Lsize=N/A time=00:01:07.86 bitrate=N/A speed=0.875x video:12971kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
frame= 411 fps=6.7 q=-0.0 Lsize=N/A time=00:01:02.93 bitrate=N/A speed=1.02x video:1429kB audio:0kB subtitle:0kB other streams:0kB global headers:0kB muxing overhead: unknown
色々使えるように
-
これまで
-
Raspberry Pi標準カメラモジュール($25〜)からの入力のみ
-
-
今回ので
-
v4l2でUVCなUSBカメラ
-
x11grubでデスクトップ
-
適当な動画ファイル
-
ネットワーク経由でリモートのカメラやデスクトップをリアルタイムエンコード配信
-
等々で使えるように
-
PiCast + UVCとかOBSでの利用とか良さそう
ちなみにGeForce GTX 1080
勉強会中のツッコミ
-
httpsで配信するのであればそっちもボトルネックになるのでは?
-
rtmpsが多いのでSSLの処理はたしかに必要.でもRaspberry Pi 1 B(初代RAM256)でも間に合っていた(VGA 10fpsくらい)ので多分大丈夫
-
license等
-
Copyright: Kenichiro MATOHARA <matoken+kagolug@gmail.com>
-
License : https://creativecommons.org/licenses/by-nc-sa/4.0/(CC BY-NC-SA 4.0)
-
source : https://bitbucket.org/matoken/lu-er-dao-linuxmian-qiang-hui-2017.10
-
2017-10-14(Sat) 鹿児島Linux勉強会 2017.10にて発表