Help us understand the problem. What is going on with this article?

新しい映像伝送プロトコルSRTをgstreamerとVLCで試す

More than 1 year has passed since last update.

SRTはgstreamerとVLCの最近のバージョンでサポートされているということなので、実際に試してみました。

gstreamer のSRTプラグインをビルドする

gstreamer 1.14.0 からSRTがサポートされたそうです。
Ubuntu 18.04 ではgstreamer 1.14.0が入っていますが、SRTのプラグインは含まれていませんでした。なので、ソースからビルドします。

ビルド環境の準備

Ubuntu 18.04 のGCE(Google Compute Engine)の仮想マシンを作成。
まずはgstreamerのインストール。
sudo apt install gstreamer1.0-* では依存関係が壊れていてインストールできなかったので、必要そうなものだけをインストール。

sudo apt update
sudo apt upgrade
sudo apt install gstreamer1.0-plugins-bad gstreamer1.0-tools gstreamer1.0-plugins-good gstreamer1.0-plugins-ugly

libsrt のビルドとインストール

こちら を参照。

ソースコードの取得

gstreamer全てをビルドするのは大変なので、SRTのプラグインが含まれているソースコードだけをとってきて、バージョンを1.14.0 に合わせます。

git clone git://anongit.freedesktop.org/gstreamer/gst-plugins-bad
cd gst-plugins-bad/
git checkout -b 1.14.0 1.14.0

コンフィグしてmake

ビルドに必要なライブラリとヘッダファイルはsudo apt build-dep gstreamer1.0-plugins-bad を実行すれば一発で揃います。

sudo apt build-dep gstreamer1.0-plugins-bad
./autogen.sh 
make

SRTのプラグインがどこにできているかさがします。

$ find . -name "*.so" |grep srt
./ext/srt/.libs/libgstsrt.so
./ext/srtp/.libs/libgstsrtp.so

SRTのプラグインだけビルドする方法がわからなかったので全部ビルドしたけど、実はext/srt の下でmakeすればよいだけでした。

インストール

SRTのプラグインの共有ライブラリだけをgstreamerのディレクトリにコピーします。

sudo cp ext/srt/.libs/libgstsrt.so /usr/lib/x86_64-linux-gnu/gstreamer-1.0/

gst-inspect-1.0 でSRTのプラグインが認識されているか確認します。

$ gst-inspect-1.0 |grep srt
srt:  srtserversink: SRT server sink
srt:  srtclientsink: SRT client sink
srt:  srtserversrc: SRT Server source
srt:  srtclientsrc: SRT client source
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

最初の4行がSRTのプラグイン。
これでSRTのプラグインがインストール完了。

VLC

VLCは3.0からSRTがサポートされました。
Mac用のVLCのバイナリ Version 3.0.2 Vetinari (Intel 64bit) を以下のサイトからダウンロードしました。
https://www.videolan.org/vlc/index.ja.html

なお、VLCではSRTはmode=callerとしてしか動作しません。(ソースコードをみて確認しました。)
つまり、映像の送り側がsocketをlistenしているところにVLCで接続して再生するという使用形態になります。

gstreamerからテストパターンを送ってVLCで再生する

GCEのファイアウォールの設定を変更して、udpの7000-7100 を開けました。
そして以下のスクリプトを実行。

#!/bin/sh

gst-launch-1.0 -v \
  videotestsrc is-live=true pattern=ball \
! video/x-raw,width=640,height=360,framerate=30/1 \
! x264enc tune=zerolatency key-int-max=60 \
! mpegtsmux \
! srtserversink  uri="srt://:7002" latency=500

手元のMacBook ProからVLCを起動して "srt://ipaddr:7002" を開くとボールが動き回るテストパターンが見られました。
ipaddrは仮想マシンの外部IPアドレス。

今回使用した仮想マシンはアメリカの東海岸にあり、ネットワーク的に遠いです。

$ ping -c 5 ipaddr
PING i2 (35.231.224.199): 56 data bytes
64 bytes from 35.231.224.199: icmp_seq=0 ttl=53 time=198.849 ms
64 bytes from 35.231.224.199: icmp_seq=1 ttl=53 time=169.214 ms
64 bytes from 35.231.224.199: icmp_seq=2 ttl=53 time=168.658 ms
64 bytes from 35.231.224.199: icmp_seq=3 ttl=53 time=269.872 ms
64 bytes from 35.231.224.199: icmp_seq=4 ttl=53 time=168.521 ms

--- i2 ping statistics ---
5 packets transmitted, 5 packets received, 0.0% packet loss
round-trip min/avg/max/stddev = 168.521/195.023/269.872/39.193 ms

SRTのデフォルトのlatencyは125ms なのですが、これだとパケットの再送が間に合わないので、500ms に伸ばしました。srtserversink のlatency=500

また、この状態で別のマシンから

ffplay -i srt://ipaddr:7002

で再生することもできました。つまり複数のクライアントと接続できました。

参考

SRT in GStreamer
ffmpeg 4.0 に入った新しい映像伝送プロトコルSRTを試す
ffmpeg 4.0 をlibsrtを有効にしてビルドする

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
Comments
No comments
Sign up for free and join this conversation.
If you already have a Qiita account
Why do not you register as a user and use Qiita more conveniently?
You need to log in to use this function. Qiita can be used more conveniently after logging in.
You seem to be reading articles frequently this month. Qiita can be used more conveniently after logging in.
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
ユーザーは見つかりませんでした