GStreamerを使う
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