LoginSignup
1
0

More than 1 year has passed since last update.

SRT(Secure Reliable Transport)について色々ためす(2)

Posted at

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. 配信と再生をやってみる

  1. Listener(Ubuntu)で待ち受け
  2. Raspberry Piで配信開始
  3. 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の送受信ができた。
次回はカメラ映像とかも混ぜて試す。

以上

1
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
0