tkhrsskの日記

技術ネタなど

GStreamerで h264 on RTP の動画データを送受信

macOS上、GStreamerで h264 on RTP の動画データを送受信を試してみる。

RasberyPiでH.264映像配信。Macで受信 - Qiita

を参考にして、、

送り側

gst-launch-1.0 autovideosrc ! vtenc_h264 ! rtph264pay ! gdppay ! tcpserversink host=127.0.0.1 port=5555

受け側

gst-launch-1.0 tcpclientsrc host=127.0.0.1 port=5555 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink

上記で試したところ、コマンド叩いてからバッファリングされていているため、 送り側と受け側のコマンドの実行時間の差だけ動画もずれる。

  • gdppay : Payloads GStreamer Data Protocol buffers
  • avdec_h264 : libav h264 decoder
  • vtenc_h264 : H.264 encoder
  • vtenc_h264_hw : H.264 (HW only) encoder

UDPにしてみよう

送り側

gst-launch-1.0 autovideosrc ! vtenc_h264 ! rtph264pay ! gdppay ! udpsink host=127.0.0.1 port=5555

受け側

gst-launch-1.0 udpsrc port=5555 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink

udpsrcにホスト指定はない。

なんかエラーが出てカクカクしている。動画にならない。

受け側

gst-launch-1.0 udpsrc port=5555 ! gdpdepay ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink

受け側のautovideosinkに、sync=falseを付与し、 受け側から起動すると、遅延がだいぶ減った状態で、ストリーミング再生できた。 受け側から起動しないと、エラーになる。

GStreamerでRaspberry Piからストリーミング配信をする - Qiita

上記ページを参考に、udpsrcにパラメータを付与する。

gst-launch-1.0 udpsrc port=5555 caps="application/x-rtp, media=(string)video, clock-rate=(int)90000, encoding-name=(string)H264" ! rtph264depay ! avdec_h264 ! videoconvert ! autovideosink sync=false

出なくなった。。また、udpsrcにcapsをつけるとgdpdepayにつなげられなくなる模様。

もう少し格闘を続けようかどうしようか。。。

その他、参考

gstreamerでマルチキャストストリームが再生できない | アットマークテクノ ユーザーズサイト

Armadillo-810でのH.264映像のネットワーク配信について | アットマークテクノ ユーザーズサイト

GStreamer で Wireshark の RTP パケットからビデオを再... - Cisco Support Community