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