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

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

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

v4l2 loopback

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

https://github.com/umlaeute/v4l2loopback

具体的な使い方
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で送信するときにマイクの代わりに音声ファイルを使用する

ユーザー登録して、Qiitaをもっと便利に使ってみませんか。
  1. あなたにマッチした記事をお届けします
    ユーザーやタグをフォローすることで、あなたが興味を持つ技術分野の情報をまとめてキャッチアップできます
  2. 便利な情報をあとで効率的に読み返せます
    気に入った記事を「ストック」することで、あとからすぐに検索できます
コメント
この記事にコメントはありません。
あなたもコメントしてみませんか :)
すでにアカウントを持っている方は
ユーザーは見つかりませんでした