1. 概要
SRTを使った映像伝送に関して、色々を実験したい。そこで、手ごろな環境でどのようなことができるのか調べていく。とりあえずの目標は以下のような構成とする。
┌──────────────────┐ ┌────────────┐ ┌──────────────────────┐
│CAM = Caller(RPI) │-LAN- │Listener(PC)│-LAN-│Caller(RPI) : Monitor │ > 人
└──────────────────┘ └────────────┘ └──────────────────────┘
2. 機材
- Raspberry Pi 3B もしくはZero WH
- OSはBuster(Debian 10), Liteではない
- UVCカメラ: Buffalo BSW500M
- PCはLinux(仮想マシン)
3. 環境
3.1. Raspberry Pi
今のところ、Busterをインストールした環境が安定的に動作できているので、それを使う。以下の記事などで使った環境。
4. Gstreamer
gstreamerはとあるバージョン以降、SRTに対応しているらしい。プラグインがあるか確認してみる。
$ gst-inspect-1.0 | grep srt
srt: srtclientsrc: SRT client source
srt: srtserversrc: SRT Server source
srt: srtclientsink: SRT client sink
srt: srtserversink: SRT server sink
dtls: dtlssrtpdemux: DTLS SRTP Demultiplexer
dtls: dtlssrtpenc: DTLS-SRTP Encoder
dtls: dtlssrtpdec: DTLS-SRTP Decoder
subenc: srtenc: Srt encoder
subparse: subparse_typefind: srt, sub, mpsub, mdvd, smi, txt, dks, vtt
srtp: srtpdec: SRTP decoder
srtp: srtpenc: SRTP encoder
srtclientsrc : SRT経由でネットワーク経由でデータを受信
srtserversrc : SRT経由でネットワーク経由でデータを受信
srtclientsink : SRT 経由でネットワーク経由でデータを送信する
srtserversink : SRT 経由でネットワーク経由でデータを送信する
カラーバーを配信するコマンド
gst-launch-1.0 videotestsrc ! videoconvert ! x264enc key-int-max=15 ! mpegtsmux ! srtserversink uri="srt://:15000"
srtclientsinkではうまくいかない。説明は同じなんだけど。
gst-launch-1.0 videotestsrc ! videoconvert ! x264enc key-int-max=15 ! mpegtsmux ! srtclientsink uri="srt://:15000"
PCのVLCプレイヤーで再生できるか試す。192.168.1.128はRPIのIPアドレス、15000は適当なポート番号。
思ったより単純に配信と再生ができるようだ。
gst-launch-1.0 -v srtserversrc uri="srt://:7001" latency=$RECVLATENCY ! srtserversink uri="srt://:7002"
5. 結論
Raspberry Pi 3B、Raspberry Pi OS(Buster)、GStreamerを使うと実験レベルであれば、SRT配信は簡単にできる。
今後、CallerやListenerについて調べていきたい。
以上