LoginSignup
4
0

More than 1 year has passed since last update.

ラズパイにWEBカメラを接続してGStreamerを使った際に小一時間ハマった話

Posted at

はじめに

先日、ジャンク品のWEBカメラを手に入れたので、手元にあったラズパイに接続して遊んでみようと思い、その過程で「GStreamer」を使ってみました。
その時に小一時間ハマった事がありましたので、ここにまとめておきたいと思います。

環境

  • ラズパイ 3 Model B+
    • Raspbian GNU/Linux 10 (buster))
  • GStreamer 1.14.4
  • WEBカメラ(300円のジャンク品)

ハマった事

以下のコマンドはWEBカメラの映像を画面に表示するコマンドで、このコマンドを実行するだけで、カメラの映像を画面に表示することができます。
※WEBカメラでGStreamerの公式サイトのトップページを撮影している際のスクリーンショットです。

gst-launch-1.0 v4l2src ! videoconvert ! ximagesink

2021-12-12-210433_1280x1024_scrot.png

そして、例えば、任意のサイズやフレームレートでキャプチャを行いたい場合は、video/x-raw,width=1280,height=720,framerate=30/1 のような指定を行います。

gst-launch-1.0 v4l2src ! videoconvert ! video/x-raw,width=1280,height=720,framerate=30/1 ! ximagesink

ただし、サイズやフレームレートを指定する場合、当然ではありますが、そのWEBカメラが対応している値を指定する必要があり、カメラが対応していない値を指定した場合はエラーとなります。

具体的に言うと、今回手に入れたWEBカメラは最大解像度が 640x480 なのですが、それを把握せずに上記のように 1280x720 でキャプチャしようとしたため、エラーになっていました。

以下のようなエラーメッセージが表示されるのですが、サイズ指定が原因だとは気づかず、小一時間ハマってしまいました。。

$ gst-launch-1.0 v4l2src ! videoconvert ! video/x-raw,width=1280,height=720,framerate=30/1 ! ximagesink
パイプラインを一時停止 (PAUSED) にしています...
Pipeline is live and does not need PREROLL ...
パイプラインを再生中 (PLAYING) にしています...
ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data stream error.
追加のデバッグ情報:
gstbasesrc.c(3055): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming stopped, reason not-negotiated (-4)
Execution ended after 0:00:00.000240937
パイプラインを一時停止 (PAUSED) にしています...
Setting pipeline to READY ...
Setting pipeline to NULL ...
Freeing pipeline ...

最後に

とりあえず、GStreamer で(上記みたいな)streaming stopped, reason not-negotiated (-4) エラーが表示される場合は、サイズやフレームレートの指定を確認してみると良いかも知れません。

今回手に入れたWEBカメラ、調べてみたら2008年頃に発売開始されたものらしく、既に販売終了になっているようです。
カメラが古すぎて、(今では当たり前に対応しているであろう)1280x720 に対応していなかったというオチでした。

4
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
0