LoginSignup
13
16

More than 3 years have passed since last update.

カメラ無しのラズパイとmomoでテスト映像をWebRTCで配信する

Last updated at Posted at 2019-08-31

momoを使ったアプリのテストをするときに、常に動きのある映像が流れている状態にしたい。
映像が止まったらハングアップしているとすぐにわかるので。

そのために実際のカメラの映像でなくて決まったテストパターンを繰り返し配信できると嬉しい。
momoのソースコードを修正せずにそれが実現できた。

v4l2 loopback

この記事でテスト音声を流したときにはALSAのloopbackデバイスを使用した。
ALSAのloopbackがあるなら、v4l2にも同様なものがないか探したらドンピシャのものが見つかった。

具体的な使い方
https://github.com/umlaeute/v4l2loopback/wiki

インストール

sudo apt install v4l2loopback-dkms

これで現在のカーネルのバージョンに合わせたv4l2loopback.ko をビルドしてインストールしてくれる。

テスト

webcamや専用カメラモジュールをつけない状態でラズパイを起動する。

sudo modprobe v4l2loopback

これで /dev/video0 ができる。

テストパターンを流す。

ffmpeg -re -f lavfi -i testsrc=size=640x480:rate=10 -pix_fmt yuv420p -f v4l2 /dev/video0

これでmomoを実行するとテストパターンを/dev/video0 から読み取って配信することができる。
しかしこれは負荷が高くてラズパイ2ではVGAの解像度でフレームレートを10fpsまで下げる必要があった。

あらかじめデコードした動画ファイルを作っておいてそれを流す

10秒間のテストデータを作る。

ffmpeg -f lavfi -i testsrc=duration=10:size=640x480:rate=30 -pix_fmt yuv420p -f rawvideo testsrc.yuv420p

これを /dev/video0 に流し込む。

ffmpeg -stream_loop -1 -re -f rawvideo -pix_fmt yuv420p -s 640x480 -r 30 -i testsrc.yuv420p -c copy -f v4l2 /dev/video0

-stream_loop -1 をつけると無限に繰り返す。
これでmomoを起動するとラズパイ2でもVGAの解像度で30fpsで配信することができた。

momoでのビデオデバイスの選択

タイミングよくリリースされた momo 19.08.1 で --video-device オプションが追加された。
これでビデオデバイスが複数あるときでも明示的にビデオデバイスを指定できるようになった。
なのでv4l2loopback を使用するときにわざわざカメラを外さなくてもよくなった。

関連

ラズパイ+momoでWebRTCで送信するときにマイクの代わりに音声ファイルを使用する

13
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
16