web-dev-qa-db-ja.com

Webカメラからネットワークにh264ビデオをストリーミングする方法は?

H264ビデオのストリーミングに使用したいウェブカメラがあります。現在、mjpg-streamerを使用してmjpgビデオをストリーミングしています。そして今、私はh264をストリーミングしたいと思います。これはgstreamerで実行できることを発見しましたが、まったく新しいものです。また、ブログや記事などを読んだ後、h264とgstreamerに問題があったようです。それは本当ですか?

これを行うには、gstreamer以外にもいくつかの方法があるのでしょうか?

どんな情報も参考になります。前もって感謝します。

4
Val

Gstreamerを使ってh264をストリーミングする方法を説明します。

まず、v4l2ドライバーで「H264ピクセル形式」をサポートするには、Linuxカーネル3.2以降が必要です。

V4l2-ctlを使用して、カメラがH.264で適切にサポートされていることを確認します。

#v4l2-ctl --list-formats 
#v4l2-ctl --list-formats-ext 

次に、video4linuxライブラリとユーティリティが必要になります。これらには以下が含まれます:

 libv4lおよびlibv4l-dev 
 v4l-utils 
 qv4l2(v4l-utilsの一部である可能性があります)
 v4l2ucp 

フレームレートの設定:

#v4l2-ctl --set-fmt-video = width = 800、height = 448、pixelformat = 1 
#v4l2-ctl --set-parm = 30 

Gstreamerにはv4l2src入力要素がありますが、まだvideo/x-264形式をサポートしていません。

ただし、ファイルソースを使用してgstreamerパイプラインの標準入力にパイプするだけで、H.264ストリームをキャプチャしてファイルまたは標準出力に送信できます。

#./capture -c 100000 -o | gst-launch -v -e filesrc location =/dev/fd/0! h264parse! decodebin2! xvimagesink sync = false 

エンコードされたビデオストリームは、Gstreamerを使用してネットワーク経由で送信できます。

#gst-launch -v udpsrc port = 4000 caps = 'application/x-rtp、media =(string)video、clock-rate =(int)90000、encoding-name =(string)H264'!\
 rtph264depay! ffdec_h264! xvimagesink sync = false 
 
#./capture -c 10000 -o | gst-launch -v -e filesrc location =/dev/fd/0! h264parse! rtph264pay! udpsink Host = host_IP port = 4000 

これがお役に立てば幸いです。

3
Mansab Uppal