Armadilloフォーラム

カメラ画像をUDPでサーバーにあげる方法

miyauchi

2016年4月11日 17時42分

Armadillo-840 に接続したUSBカメラの画像をUDPでサーバー(Linux)に送信しようとしています。

Armadillo-840側は AlmadilloClient.sh です。
Linux(Ubuntu)側は LinuxServer.sh です。

実行すると、Armadillo-840側で almadillo_error.txt のようなエラーが出力されて画像が送信されません。
このエラーはなんでしょうか?

ファイル ファイルの説明
almadiilo_error.txt
LinuxServer.sh
AlmadilloClient.sh
コメント

at_yashi

2016年4月12日 14時02分

ERROR: from element /GstPipeline:pipeline0/GstV4l2Src:v4l2src0: Internal data flow error.
Additional debug info:
gstbasesrc.c(2812): gst_base_src_loop (): /GstPipeline:pipeline0/GstV4l2Src:v4l2src0:
streaming task paused, reason not-linked (-1)

v4l2src で Internal data flow error ですね。

... v4l2src device=/dev/video0 ! image/jpeg ...

つないでいるでいるカメラが、jpeg で出せないとか?

at_shota.tamura

2016年4月12日 14時23分

田村です。

gst-launch-1.0 -e --gst-debug-level=3 \
v4l2src device=/dev/video0 \
! image/jpeg,width=800,height=600,framerate=60/1 \
! fakesink

で同じ現象は再現しますか?

at_yashi さんの通り jpeg を出せないカメラの可能性のほか、
v4l2src の後の Caps filter が悪さしている可能性も考えられます。

image/jpeg,width=800,height=600,framerate=60/1

Caps filter に、カメラが出力できないパラメータを与えると、同じようなエラーを吐くと記憶しています。
お使いのカメラが出力できる解像度・フレームレートを知るには以下のコマンドが便利です。

v4l2-ctl --list-formats-ext --device=/dev/videoN

miyauchi

2016年4月12日 19時44分

添付したシェルを実行してファイルに変換すると、画像ファイルとして表示されます。
添付したエラーは出力されますが。

『v4l2src で Internal data flow error 』ですが、Internal data flow error はどのような時に出力されるのでしょうか?

JPEGをNV12に変換したりしていますが、単純に処理能力不足ということでしょうか?

> 田村です。
>
>

> gst-launch-1.0 -e --gst-debug-level=3 \
> v4l2src device=/dev/video0 \
> ! image/jpeg,width=800,height=600,framerate=60/1 \
> ! fakesink
> 

>
> で同じ現象は再現しますか?
>
> at_yashi さんの通り jpeg を出せないカメラの可能性のほか、
> v4l2src の後の Caps filter が悪さしている可能性も考えられます。
>
>

> image/jpeg,width=800,height=600,framerate=60/1
> 

>
> Caps filter に、カメラが出力できないパラメータを与えると、同じようなエラーを吐くと記憶しています。
> お使いのカメラが出力できる解像度・フレームレートを知るには以下のコマンドが便利です。
>
>

> v4l2-ctl --list-formats-ext --device=/dev/videoN
> 
ファイル ファイルの説明
AlmadiiloClientFile.sh
AlmadilloClientFile_Error.txt

at_yashi

2016年4月13日 10時53分

> 『v4l2src で Internal data flow error 』ですが、Internal data flow error はどのような時に出力されるのでしょうか?

GStreamer は、各エレメントを繋いで pipeline を作成するのですが、 つなぐことに失敗すると出ることが多いです。パフォーマンスが足りないときに出るわけではありません。

見直してみたのですが、↓このエラーもでてますね。

0:00:02.352716833  4024    0xce320 WARN            videoencoder gstvideoencoder.c:1783:gst_video_encoder_finish_frame:<acmh264enc0> keyframe PTS != DTS
0:00:02.354633333  4024    0xce320 WARN              rtph264pay gstrtph264pay.c:831:gst_rtp_h264_pay_send_sps_pps: Problem pushing SPS
0:00:02.354804583  4024    0xce320 WARN              rtph264pay gstrtph264pay.c:842:gst_rtp_h264_pay_send_sps_pps: Problem pushing PPS
0:00:02.354895583  4024    0xce320 ERROR             acmh264enc gstacmh264enc.c:2487:gst_acm_h264_enc_handle_out_frame:<acmh264enc0> gst_video_encoder_finish_frame() returns not-linked
0:00:02.354966583  4024    0xce320 WARN              acmh264enc gstacmh264enc.c:2538:gst_acm_h264_enc_handle_out_frame:<acmh264enc0> failed gst_video_encoder_finish_frame() - not link or flushing
0:00:02.355027333  4024    0xce320 WARN              acmh264enc gstacmh264enc.c:2253:gst_acm_h264_enc_handle_out_frame_with_wait:<acmh264enc0> failed handle out - not link or flushing