とりあえずこれでできた。
ffmpeg -re -stream_loop -1 \
-i muon.mp3 -f v4l2 -thread_queue_size 8192 \
-input_format yuyv422 -video_size 1024x768 -framerate 30 -i /dev/video0 \
-c:v h264 -b:v 1024k -bufsize 1024k -g 16 \
-c:a aac -b:a 256k -ar 44100 \
-vf "rotate=180*PI/180" \
-flvflags no_duration_filesize \
-f flv rtmp://a.rtmp.youtube.com/live2/xxxxxxxxxxxx
muon.mp3 というのは自作のmp3ファイル
カメラを上下さかさまにしているので、rotateで180度回転している。
最後の rtmp://... のところはyoutubeのストリームURL/ストリームキー
数年前に試したのだが、その時と同じコマンドではうまくいかなかった。
raspivid -o - -t 0 -vf -hf -fps 30 -b 6000000 | ffmpeg -re -ar 44100 -ac 2 -acodec pcm_s16le -f s16le -ac 2 -i /dev/zero -f h264 -i - -vcodec copy -acodec aac -ab 128k -g 50 -strict experimental -f flv [ストリームURL]/[ストリームキー]
youtube側の設定はそんなに難しくないので割愛。
raspiは5。カメラはUSBにつないだElecomの、型番は見るのがめんどくさいので省くが、1万円くらいで買えるやつ。
ffmpgで送信するところまではすぐできたのだが、youtube側で受信しない。
最後の -f flv rtmp://... のところをローカルファイルにすると動画ファイルとして再生できるので、ffmpgでカメラの画像をエンコードするところまではできているはずだ。
調べていくうちに、「youtubeで配信するときは音声が必要」という情報が。
参考にした人たちは皆 mp3をエンコードしていたが私は音はいらないと思って省いていたのだ。
テキトーなmp3ファイルを指定したら、youtubeで受信できた。
youtube側では、「受信データが少なくて画質が低くなっている」みたいなメッセージが表示される。
パラメータは要調整かもしれない。