🙆

GStreamerを使う

2023/02/01に公開

GStreamerはいろいろ便利なのですが、日本語の情報が少ないので躊躇している人は多いと思います。

Windows関連の日本語の知見が少ないので私も往生していますので。
さすがにインストールとかビルドの説明は今はしませんが、取り急ぎパイプラインを何個かメモ代わりに放置して、軽く説明します。
Gstreamerのバージョンは1.22で行きます。最新だし早い。CPUはWindows11対応のIntelCPUとなります。OSはWindows11ですが10でも問題ないはずです。

1.rtsp表示

gst-launch-1.0 rtspsrc location=rtsp://localhost:8554/test ! rtph264depay ! parsebin ! qsvh264dec ! autovideosink sync=false

このパイプラインの特徴
a. qsvh264decを使っているのでcpu負荷が低い
b. autovideosinkでsync=falseを入れているので遅延がほとんどない。
以上の特徴があります。

a.
デコーダーはavdec_h264が有名で、qsvh264より1フレームくらい早い気がしますが、CPUパワーを使うので複数画面表示ならたぶんqsvの方がメリットがあると思います。
qsvはintelcpuでしか使えないので注意してください。
NVDECも早そうですがテストする環境がないのでご容赦願います。
b.
autovideosinkのsync=falseを指定すると低遅延になります。たぶんバッファやフレームカウントを無視するからだと思います。個人の推測です。

* qsvh264dec ! autovideosink ですが、gstreamerの本家マニュアルにはvideoconvertが間に挟まっているのですが、いつのバージョンからか、videoconvertは入れなくても表示できるようになりました。リリースノートに書いてあったような気がします。

2. RTSPサーバー x264
test-launch "( mfvideosrc ! x264enc tune=zerolatency ! rtph264pay name=pay0 pt=96 )"

a.
test-launchは、gst-rtsp-serverのソースのサンプルに入っているので自力でビルドします。ビルド方法は検索すると出てきます。
b.
mfvideosrcですが、Windowsのオーディオやビデオの画像から、USBカメラの画像をソースにします。従来はkmvideosrcを使いましたが、そのうち廃止とのことです。
c.
x264encでtune=zerolatencyを入れるとほぼ遅延がない感じになります。
x264encはソフトウエアエンコードなのでCPUパワーは必要です。
tune=zerolatencyを入れないと遅延が秒単位になります。これを知らないと、gstreamerでRTSPやると遅い、というイメージになってしまうと思います。

3.RTSPサーバー qsv
test-launch "( mfvideosrc ! qsvh264enc ! rtph264pay name=pay0 pt=96 )"

a.qsvh264enc 
x264encより3フレームくらい遅い感じがしますがCPUパワーの消費は少ないです。
tue=zerolatencyというオプションは、ないです。
十分低遅延なので、検討すべきオプションです。

以上の説明で、Windows環境で、十分低遅延なRTSP対応ネットワークカメラとビューアの構築の実験がスムーズにできると思います。

以上。

Discussion