2013-04-03 61 views
9

ローカルにインストールされたLogitech C920カメラからH233ストリームを/dev/video0からGstreamer 1.0v4l2src要素でキャプチャしようとしています。Gstreamerでカメラからh.264ストリームをキャプチャ

v4l2-ctl --list-formatsはカメラがH264にビデオフォーマットを与えることが可能であることを示しています

/GstPipeline:pipeline0/GstV4l2Src:v4l2src0.GstPad:src: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1 
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:src: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1 
/GstPipeline:pipeline0/GstFakeSink:fakesink0.GstPad:sink: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1 
/GstPipeline:pipeline0/GstCapsFilter:capsfilter0.GstPad:sink: caps = video/x-h264, width=(int)800, height=(int)448, interlace-mode=(string)progressive, pixel-aspect-ratio=(fraction)1/1, framerate=(fraction)30/1 
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error. 
Additional debug info: 
gstbasesrc.c(2809): gst_base_src_loop(): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: 
streaming task paused, reason not-negotiated (-4) 
Execution ended after 67687169 ns. 

すべてのヘルプ:

# v4l2-ctl --list-formats 
ioctl: VIDIOC_ENUM_FMT 
     ... 

     Index  : 1 
     Type  : Video Capture 
     Pixel Format: 'H264' (compressed) 
     Name  : H.264 

     ... 

しかし、パイプライン

# gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! video/x-h264, width=800, height=448, framerate=30/1 ! fakesink

は私にnot-negotiated (-4)エラーを与え続け!

答えて

9

は、あなたのニーズに必須gstreamerのですか?私はまた、H264モードとgstreamerでLogitechのC920に多くの問題があります。しかし、私はH264とC920を使用するRTSPサーバとしてVLCを使用するために管理:

$ cvlc -v v4l2:///dev/video0:chroma="H264":width=1024:height=570:fps=30 \ 
     --sout="#rtp{sdp=rtsp://:8554/live}" 

それから私は、URIのRTSPに別のVLCで接続することができます:GStreamerのであれば8554 /ライブ

:// localhostをあなたのために必須ですが、私はここで見つけることができるキャプチャユーティリティでそれを使うことができました:https://github.com/csete/bonecam - ディレクトリ "キャプチャ"

あなたはそれをコンパイルする必要がありますが、プログラミングのスキルがあれば、唯一のCファイルと助けになるスクリプトです。ただ、スクリプトにパラメータとして「ホスト」を渡す:あなたは、フレームの数を指定するには、好きではない場合

$ v4l2-ctl -d /dev/video0 --set-fmt-video=width=1024,height=570,pixelformat=1 
$ v4l2-ctl -d /dev/video0 --set-parm=30 
$ ./bonecam/capture/capture -d /dev/video0 -c 100000 -o | \ 
     gst-launch -e filesrc location=/dev/fd/0 ! legacyh264parse ! rtph264pay ! udpsink host=10.0.0.42 port=5000 

# Get the bonecam/capture content or git clone the directory, and then 
$ cd bonecam/capture 
$ ./build host 

あなたはそのようなものでユーティリティを「キャプチャ」を使用することができますhttps://github.com/DeLaGuardo/bonecam

gstreamer 0.10のuvch264と呼ばれるプラグインが「不良」と分類されていることがわかりましたが、このプラグインは、 C920と連携する必要があります。しかし、gstreamer 1.0についてはわかりません。テストできませんでした。

UPD:

は、デフォルトでは60秒持続するストリーミングこのオプションを指定しない

$ cvlc -v v4l2:///dev/video0:chroma="H264":width=1024:height=570:fps=30 \ 
     --sout="#rtp{sdp=rtsp://:8554/live}" --rtsp-timeout=-1 

よう--rtsp-timeout=-1cvlcへのコマンドラインを追加することを忘れないでください。

+0

ありがとう! 'cvlc'は魅力的に機能します!私はRasperry Piで使用しています。 –

+0

C920はH264モードですか?本気ですか?ラズベリーパイのUSBの問題のために、私はラズベリーパイでカメラのH264モードを有効にすることに多くの問題を抱えていました。いくつかのH264フレームはその問題のために失われるので、ビデオは奇妙です。実際には、そのために、私はBeagleboneでC920を使用しています。 とにかく、それがあなたのために働く場合、私はこの問題を解決するファームウェアの更新があったと思います。 –

+0

私は前にフレームを落とすことにこのようなUSBの問題がありました。私は、ここで(https://github.com/raspberrypi/linux/issues/238)のように新しいRapbianカーネルをインストールしました。ドロップフレームの問題が消えました。今すぐH264ビデオをストリーミングするのは非常にスムーズです。 –

0

現時点では、v4l2srcがh264をサポートしているとは思われません。ここを参照してください:

http://www.oz9aec.net/index.php/gstreamer/473-using-the-logitech-c920-webcam-with-gstreamer

、ここで:

http://kakaroto.homelinux.net/2012/09/uvc-h264-encoding-cameras-support-in-gstreamer/

+1

これらのリンクが1日壊れた場合はどうでしょうか。だから、あなたが引用したリンクを説明してください – Freakyuser

+1

h264は現在v4l2srcによってサポートされています – Ross

1

私は同じことをやろうとしていて、同じエラーが発生しています。 GStreamer 1.0.6を使っていたと思います。

私は何を見つけ、Fergalバトラーの答えにおそらくはおかげで、次のページだった:

http://kakaroto.homelinux.net/2012/09/uvc-h264-encoding-cameras-support-in-gstreamer/

ここYouness Alaouiは、彼がGStreamerのにH264カメラのサポートをもたらすために作られたuvch264_src要素について説明します。

彼はGStreamer 1.0へのポートについて、彼の記事で係争中であると説明しています。だから先週、私はこれを調べてきました。 にはがGStreamer 1.0に移植されましたが、開発者向けリリース(バージョン1.1.2)でのみ使用されています。それが今、 "uvch264src" と呼ばれています

http://gstreamer.freedesktop.org/src/

、そしてそれは、GST-プラグイン-悪いの一部です:

現在のバージョン1.1.2を取得することができます。私はそれがバージョン1.1.1にもあると思いますが、実際にはそれを検討していません。

私はインストールに苦労しましたが、私は主に自分のPCにインストールされているGST 1.0パッケージとの競合が原因だと思います。しかし、libgudev-1.0-devとlibusb-1.0-0-devに依存しているので、これらのパッケージを最初にインストールしてください。ここで

は私がuvch264を使用する動作するようになったパイプラインです:

gst-launch-1.0 uvch264src device=/dev/video0 name=src auto-start=true src.vfsrc ! video/x-raw, format=YUY2, width=160, height=90, framerate=5/1 ! xvimagesink src.vidsrc ! queue ! video/x-h264, width=800, height=448, framerate=30/1 ! h264parse ! avdec_h264 ! xvimagesink

あなたは(vfsrcパッドから)、プレビュー映像を使用したくない場合は、単にストレートまでsrc.vfsrcをフック偽物です。また、このパイプラインが私のために働いていても、「セグメントイベントの前にデータフローを取得しました」という警告が表示されます。だから明らかに私は何か正しいことをしていないが、私は何がわからない。

とにかく、1.1.2とuvch264srcが完全にインストールされ、動作していることを迷惑にしてしまったので、私はv4l2srcにもう一度やり直すことにしました。そして、v4l2srcがH264を正しくサポートしていることが分かりました。 (短い答えを参照してください。)


短い答え:

だからあなたの質問への短い答えは、あなたがソースから1.1.2をインストールするために満足している場合は、正確に何を行うことができるだろうということですあなたはそれをやろうとしているのと同じようにしたい。 uvch264srcは必要ありません。あなたのパイプラインをテストしたところ、私のインストールでうまくいきました。私はまた、画面上の映像を表示するために、この単純なパイプラインを試してみた、そしてそれは同様に私のためにうまく働いた:

gst-launch-1.0 -e v4l2src device=/dev/video0 ! video/x-h264, width=800, height=448, framerate=30/1 ! avdec_h264 ! xvimagesink sync=false

0

てみ使用videoconvertを自動的にビデオが理解できる形式にビデオを変換するために

gst-launch-1.0 -vvv v4l2src device=/dev/video0 ! videoconvert ! ... 
0

は、私はまた、ロジクールC920カメラを持っているシンク、およびカメラからのH.264映像を記録するために、次のパイプラインを使用しています

gst-launch-1.0 v4l2src device=/dev/video0 ! video/x-h264,width=1280,height=720,framerate=30/1 ! mpegtsmux ! filesink location=output.ts 

これはカメラにH.264データを生成するように要求し、次にそれをMPEG transport streamコンテナに多重化してディスクに書き込みます。結果のファイルをTotemで正常に再生できます。

上記パイプラインは720pで記録します。要求されたフォーマットをwidth=1920,height=1080に変更すると、カメラは1080pで記録することもできます。

関連する問題