🏝️

jetson nanoのgstreamerでSRTを使えるようにする

2022/05/22に公開

jetson nanoのgstreamerにはSRTのエレメントが含まれていなかったので、追加しました。

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

$ git clone https://github.com/Haivision/srt.git
$ cd srt

タグを確認。

$ git tag
 ...
v1.4.3
v1.4.3-rc.0
v1.4.3-rc.1
v1.4.4
v1.4.4-rc.0
v1.4.4-rc.1
v1.5.0-rc.0

最初はv1.4.4で試したが、試行錯誤の結果、v1.4.1を使うことにした。(後述)

$ git checkout -b w1.4.1 v1.4.1

ビルドしてインストール。

$ sudo apt-get install tclsh pkg-config cmake libssl-dev build-essential
$ ./configure
$ make -j`nproc`
$ sudo make install
$ sudo ldconfig

/usr/local/lib, /usr/local/include に必要なファイルがインストールされた。

gstreamerのビルド

SRTのプラグインはgst-plugins-badに入っている。

$ git clone git://anongit.freedesktop.org/gstreamer/gst-plugins-bad
cd gst-plugins-bad

現在使用しているgstreamerのバージョンを確認。

$ gst-inspect-1.0 --version
connect /tmp/.X11-unix/X0: No such file or directory
nvbuf_utils: Could not get EGL display connection
gst-inspect-1.0 version 1.14.5
GStreamer 1.14.5
https://launchpad.net/distros/ubuntu/+source/gstreamer1.0
$ git checkout -b w1.14.5 1.14.5
$ NOCONFIGURE=1 ./autogen.sh 
$ ./configure

NOCONFIGURE=1をつけて、別に./configureを実行したのは、ドキュメントなど今回は必要のないものまでビルドしないため。

srtだけをビルドする。

$ cd ext/srt
$ make

インストール

$ cd .libs/
$ sudo install -m 644 libgstsrt.so /usr/lib/aarch64-linux-gnu/gstreamer-1.0/

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

もし入っていなかったら、以下を実行してキャッシュを削除してから試す。

$ rm ~/.cache/gstreamer-1.0/registry.aarch64.bin
$ gst-inspect-1.0 |grep srt:

libsrtを1.4.1に戻した理由

GStreamer 1.14.5 ではSRTO_TSBPDDELAYの定数を使用しているが、libsrt v1.4.4ではこれが定義されておらずコンパイルエラーになる。
これは想定しているlibsrtのバージョンが合わないため。どこまで戻すべきかをgit diffで探した。

$ git diff v1.4.1 v1.4.4 |grep SRTO_TSBPDDELAY
-   SRTO_TSBPDDELAY = 23,     // DEPRECATED. ALIAS: SRTO_LATENCY
-#define SRT_TSBPDDELAY SRTO_TSBPDDELAY

関連

https://qiita.com/tetsu_koba/items/c4a277b24c4b4a30afae

Discussion