1. 概要
SRTを使った映像伝送に関して、色々を実験したい。そこで、手ごろな環境でどのようなことができるのか調べていく。とりあえずの目標は以下のような構成とする。
┌──────────────────┐ ┌────────────┐ ┌──────────────────────┐
│CAM = Caller(RPI) │-LAN- │Listener(PC)│-LAN-│Caller(RPI) : Monitor │ > 人
└──────────────────┘ └────────────┘ └──────────────────────┘
前回、Raspberry Pi+GStreamerでSRT配信できることがわかったので、今回はListenerを含む構成を試す。
2. 機材
- Raspberry Pi 3B もしくはZero WH
- OSはBuster(Debian 10), Liteではない
- Linux PC(仮想マシン)
- ホストPCのWindows11
3. 準備
3.1 Linux(仮想マシン)
VMwareにUbuntu-ja 20.04をインストールした。22系でもよかったのだが、手元にあったISOが20系だったため。実験なのでNICはブリッジとした。
インストール直後に確認したところGStreamerは1.16.2だった。
$ gst-inspect-1.0 --version
gst-inspect-1.0 version 1.16.2
GStreamer 1.16.2
SRTはbad pluginなので、インストールされていなかった。以下のコマンドでインストール。
$ sudo apt install libgstreamer-plugins-bad1.0-dev gstreamer1.0-plugins-bad
インストールされているか確認。SRTのsinkとsourceがあるのでOK。
$ gst-inspect-1.0 | grep srt
srtp: srtpdec: SRTP decoder
srtp: srtpenc: SRTP encoder
srt: srtserversink: SRT sink
srt: srtclientsink: SRT sink
srt: srtserversrc: SRT source
srt: srtclientsrc: SRT source
srt: srtsink: SRT sink
srt: srtsrc: SRT source
subenc: srtenc: Srt encoder
dtls: dtlssrtpdemux: DTLS SRTP Demultiplexer
dtls: dtlssrtpenc: DTLS-SRTP Encoder
dtls: dtlssrtpdec: DTLS-SRTP Decoder
subparse: subparse_typefind: srt, sub, mpsub, mdvd, smi, txt, dks, vtt
3.2 Raspberry Pi
前回から引き継ぎのRaspberry Pi 3B
3.3 Windows11
別にWindows10でもなんでもいいが、同じネットワークのVLC Playerが動くマシン
4. 配信と再生をやってみる
- Listener(Ubuntu)で待ち受け
- Raspberry Piで配信開始
- Windows11のVLC Playerで再生
今回の構成
┌─────────────┐ ┌──────────────────────────────┐ ┌─────────────┐
│192.168.1.128│ │ 192.168.1.2 │ │ 192.168.1.1 │
│Caller(RPI) │-LAN-│:17001 Listener(Ubuntu) :17002│-LAN-│Caller(Win11)│ > 人
└─────────────┘ └──────────────────────────────┘ └─────────────┘
Listenerで待ち受け状態を作る。
srtserversrcにポート17001で受信させる。
srtserversinkからポート17002で送信させる。
gst-launch-1.0 -v srtserversrc uri="srt://:17001" latency=100 ! srtserversink uri="srt://:17002"
次にRaspberry Piからテスト映像(カラーバー)を送信する。送信先はIPアドレス 192.168.1.2 のListener(Ubuntu)
gst-launch-1.0 videotestsrc ! videoconvert ! x264enc key-int-max=15 \
! mpegtsmux ! srtclientsink uri="srt://192.168.1.2:17001" latency=100
映像を再生してみる。
VLC Player で「ネットワークストリームを開く」に以下をいれる。IPアドレスは当然Listenerのもの。
srt://192.168.1.2:17002
4.1 エラー?
listner側でいっぱい出る。一度再生して、停止すると出てくるようだ。また、各機器のlatencyが大きく違ったりしても出るようだ。
原因は調べていない。
06:00:19 AM.952163/SRT:RcvQ:worker*E:SRT.c: %1071413438:No room to store incoming packet: offset=0 avail=0 ack.seq=1443803767 pkt.seq=1443803767 rcv-remain=8191
5. まとめ
とりあえずCallerとListenerを使ってSRTの送受信ができた。
次回はカメラ映像とかも混ぜて試す。
以上