🐕

ラズパイゼロのffmpegで録画しつつSRTで送信しリトライも行う

2022/06/16に公開

tee + fifo でリトライできる

今回はjetson nanoでなくてラズパイゼロを使用しています。

ffmpegで録画しつつSRTで送信するのはこの記事でやりました。
https://zenn.dev/tetsu_koba/articles/b959bee823e809

しかし、ネットワークが不調になったり、サーバが止まったりしたときに録画は継続されるのですが、その後ネットワークが復活してもSRTの送信は再開されません。
tee muxer と fifo muxerを組み合わせることで、録画を継続しつつネットワークが不調になったらリトライをして再接続するということが実現できました。

サーバを止めて、リトライされることを確認する

中継サーバで

$ docker-compose ps
       Name                     Command               State                                 Ports                               
--------------------------------------------------------------------------------------------------------------------------------
srt_publisher001_1   /root/srt/srt_server.sh 70 ...   Up      0.0.0.0:7001->7001/udp,:::7001->7001/udp,                         
                                                              0.0.0.0:7002->7002/udp,:::7002->7002/udp

サービスを止める。

$ docker-compose stop publisher001
Stopping srt_publisher001_1 ... done

するとラズパイゼロのffmpegのログは以下のようになります。

[srt @ 0xab100470] [error] Connection to srt://xx.yy.zz.ww:7001 failed: Input/output error
[fifo @ 0x34937e0] [error] Error opening srt://xx.yy.zz.ww:7001: Input/output error
[srt @ 0xab100680] [error] Connection to srt://xx.yy.zz.ww:7001 failed: Input/output error
[fifo @ 0x34937e0] [error] Error opening srt://xx.yy.zz.ww:7001: Input/output error

(IPアドレスはxx.yy.zz.wwに置き換えています)
サーバ側のサービスを再開する。

$ docker-compose start publisher001
Starting publisher001 ... done

ffmpegのエラーのログが止まりSRTの接続が再開します。この間も録画は継続しています。

参考

http://underpop.online.fr/f/ffmpeg/help/tee.htm.gz
http://underpop.online.fr/f/ffmpeg/help/fifo.htm.gz

関連

https://zenn.dev/tetsu_koba/articles/763d517484b07f
https://zenn.dev/tetsu_koba/articles/e50d4864dff3a1
https://zenn.dev/tetsu_koba/articles/b959bee823e809
https://zenn.dev/tetsu_koba/articles/1b5b2689fa8b54
https://zenn.dev/tetsu_koba/articles/bbef908f64a28f

Discussion