logicart
2014年2月14日 19時29分
AXIS製のIPカメラ(P1214-e)からH264形式のストリーミングデータを
AVミドルウェアコーデックを利用して動作再生したいと思っております。
AXIS製のカメラは、RTSPまたはRTPをサポートしていますが
Armadillo840+Gstreamerでストリーミング再生を実現することは
可能でしょうか。
また、その際に参考になるコマンド例の資料などはございますでしょうか。
よろしくお願いいたします。
コメント
logicart
ご返答ありがとうございます。
吉村と申します。
A840のユーザーマニュアルを参考にパイプラインを入力すると
以下のログが表示されます。
A840のファイアウォールが原因かと思い、
RTSPポート(554)を許可しましたが変化はありませんでした。
当方、Gstreamerについての知識に乏しいため調べておりますが
検討がつきません。
こちらから何か分かりますでしょうか。
なお、Linuxカーネル、ユーザランド、ファームウェアは最新のものに
アップデートしております。
よろしくお願いいたします。
gst-launch-1.0 -v rtspsrc location=rtsp://192.168.0.90/axis-media/media.amp ! qtdemux ! queue ! acmh264dec ! acmfbdevsink device=/dev/fb0 Setting pipeline to PAUSED ... Pipeline is live and does not need PREROLL ... Setting pipeline to PLAYING ... New clock: GstSystemClock /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0: latency = 2000 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0: drop-on-latency = false /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0: buffer-mode = Slave receiver to sender clock /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: timeout = 5000000 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: timeout = 0 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0.GstGhostPad:recv_rtp_src_0_2050299576_96: caps = application/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)420029, sprop-parameter-sets=(string)"Z0IAKeKQGQJvy4C3AQEBpB4kRUA\=\,aM48gA\=\=", a-framerate=(string)25.0, a-transform=(string)"1\,0\,0\;0\,1\,0\;0\,0\,1", clock-base=(uint)105111969, seqnum-base=(uint)6911, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0.GstGhostPad:recv_rtp_src_0_2050299576_96: caps = application/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)420029, sprop-parameter-sets=(string)"Z0IAKeKQGQJvy4C3AQEBpB4kRUA\=\,aM48gA\=\=", a-framerate=(string)25.0, a-transform=(string)"1\,0\,0\;0\,1\,0\;0\,0\,1", clock-base=(uint)105111969, seqnum-base=(uint)6911, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0.GstGhostPad:recv_rtp_src_0_2050299576_96.GstProxyPad:proxypad4: caps = application/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)420029, sprop-parameter-sets=(string)"Z0IAKeKQGQJvy4C3AQEBpB4kRUA\=\,aM48gA\=\=", a-framerate=(string)25.0, a-transform=(string)"1\,0\,0\;0\,1\,0\;0\,0\,1", clock-base=(uint)105111969, seqnum-base=(uint)6911, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1 /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstRtpBin:rtpbin0.GstGhostPad:recv_rtp_src_0_2050299576_96.GstProxyPad:proxypad3: caps = application/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(string)H264, packetization-mode=(string)1, profile-level-id=(string)420029, sprop-parameter-sets=(string)"Z0IAKeKQGQJvy4C3AQEBpB4kRUA\=\,aM48gA\=\=", a-framerate=(string)25.0, a-transform=(string)"1\,0\,0\;0\,1\,0\;0\,0\,1", clock-base=(uint)105111969, seqnum-base=(uint)6911, npt-start=(guint64)0, play-speed=(double)1, play-scale=(double)1 ERROR: from element /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: Internal data flow error. Additional debug info: gstbasesrc.c(2812): gst_base_src_loop (): /GstPipeline:pipeline0/GstRTSPSrc:rtspsrc0/GstUDPSrc:udpsrc1: streaming task paused, reason not-linked (-1) Execution ended after 233283917 ns. Setting pipeline to PAUSED ... Setting pipeline to READY ... Setting pipeline to NULL ... Freeing pipeline ...
at_yashi
logicart
吉村です。
ご返答ありがとうございます。
よろしくお願いいたします。
当方では、udpsrcを使用してRTPプロトコルでの再生も試みてみました。
結果は、以下のようにエラーは発生しませんでしたが画像は表示さませんでした。
gst-launch-1.0 -v udpsrc port=1024 multicast-iface="eth0" multicast-group="239.194.197.201" caps="application/x-rtp" ! rtph264depay !h264parse ! acmh264dec ! acmfbdevsink device=/dev/fb0 Setting pipeline to PAUSED ... Pipeline is live and does not need PREROLL ... /GstPipeline:pipeline0/GstUDPSrc:udpsrc0.GstPad:src: caps = application/x-rtp, m edia=(string)video, payload=(int)96, clock-rate=(int)90000, encoding-name=(strin g)H264 /GstPipeline:pipeline0/GstRtpH264Depay:rtph264depay0.GstPad:sink: caps = applica tion/x-rtp, media=(string)video, payload=(int)96, clock-rate=(int)90000, encodin g-name=(string)H264 Setting pipeline to PLAYING ... New clock: GstSystemClock
qtdemuxをパイプラインに使用すると
WARNING: erroneous pipeline: could not link udpsrc0 to qtdemux0
と表示され終了します。
なにか手がかりとなる情報がございましたら
ご教示のほど、よろしくお願いいたします。
logicart
at_yashi
logicart
早速のご返答ありがとうございます。
また、調査のご報告ありがとうございます。
モーションJPEGについての経緯が抜けておりました、申し訳ございません。
GStreamerによるH264のストリーミング再生がうまくいかないため
平行してQtアプリケーションによるモーションJPEG再生を試みております。
Axis製カメラからのモーションJPEG画像をHTTPで受信して表示する
Qtアプリケーションを作成したところ
1280x720画像を1920x1080にQImage::scaled()でリサイズすると5fps
リサイズなしで10fpsほどしかでないため、fps向上の手段を模索しております。
QImage::scaled()の処理に時間(60~80msec)がかかるため、
OpenCVライブラリを使用することで処理速度の向上が見込めるか
ご意見を伺いたいという意図でした。
参考までに、のフレームが落ちるという現状でどの程度のfpsで表示できるか
教えていただくことは可能でしょうか。
安定して10~15fpsで表示可能であればGStreamerの使用を検討したいと思います。
よろしくお願いいたします。
at_makoto.harada
原田です。
AXIS社製のIPカメラ(P1214-e)がようやく入手できましたので実際に動作させてみました。
動作確認を行った際の、AXISカメラの設定、Armadillo-840のgstreamerのパイプラインは以下の通りです。
■AXISカメラ
- 解像度、フレームレート 1280x720(720p),15fps
- 圧縮形式 h.264
- IP address: 172.16.42.6
- アカウント/パスワード root/root
■Armadillo-840
- 720p h264デコード
- 1280x720(720p)->1920x1080へHWリサイズ
- FullHD(1920x1080)ディスプレイにHDMI経由で表示
gst-launch-1.0 -v rtspsrc 'location=rtsp://root:root@172.16.42.6:554/axis-media/media.amp?videocodec=h264' latency=200 '!' \ rtph264depay '!' video/x-h264,framerate=15/1 '!' h264parse config-interval=1 '!' video/x-h264,stream-format=avc,alignment=au '!'\ acmh264dec stride=1080 '!' video/x-raw, width=1920, height=1080 '!' acmfbdevsink max-lateness=2000000000 device=/dev/fb0
※補足事項
1. 標準イメージでは、LCDには/dev/fb1が、HDMIには/dev/fb0がアサインされるようになっております。
2. width, heightの値を変更することで、ディスプレイに描画されるカメラ映像のサイズが調整できます。
特に指定しない場合は、リサイズを実施せず、デコード結果をそのまま描画します。
3. カメラのフレームレートを変更される際は、カメラの設定とあわせて、上記framerateの値を適宜変更する必要があります。
4. 弊社の試験環境では、フレームレートが15fpsを超えてくるあたりから、若干のフレーム落ちが観測されました。
ローカルファイルからの再生は、FullHD 30fpsで問題なく再生できておりますので、SWの問題かと考えております。
詳細が分かり次第報告させて頂きます。
※ディスプレイの表示方法、ビデオの拡大/縮小方法に関しましては、製品マニュアルの以下のページも参考にしてみてください。
http://manual.atmark-techno.com/armadillo-840/armadillo-840_product_man…
logicart
logicart
いつもお世話になっております
吉村と申します。
Armadillo840にてgst-launchを使用してAxis製のIPカメラのストリーミング再生で
ご教示していただいたパイプラインで再生するとGstreamerが停止してしまうという
現象が発生しております。
コーデックの不具合があるとのことで関連があるのかご教示いただきたく思ております。
停止してしまったgst-launchを終了させて再度起動すると、正常にデコードされます。
また、発生頻度は都度異なります。
そのため、「GStreamerのデコード停止について」のスレッドにある
https://armadillo.atmark-techno.com/forum/armadillo/761
> - 当社で確認した条件
> -- gst-launchを使用して再生
> -- デコード停止からの復帰には一旦sysfsからコーデックのモードを
> noneまたはencoderに変更するまでデコード不能
上記の条件に合っていないため関連が不明です。
正常にデコードが行われた場合のgst-launchの標準出力と、停止してしまった場合の
標準出力を添付ファイルにて送付いたします。
ログをみると、デコードに処理が渡るところで停止してしまっているように見えます。
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
正常時ログ.txt | |
無応答ログ.txt |
logicart
いつもお世話になっております
ロジックアートの吉村です。
Armadillo840にてgst-launchを使用してAxis製のIPカメラのストリーミング再生した際の
映像遅延について質問があります。
1280x720の映像を15fpsで再生すると、かなりの遅延(1秒ほど)が発生します。
これを解消しようと試みております。
latency等のパラメータの変更ではこれといった遅延の向上は見られませんでした。
Gstreamerのソフト上の問題であれば、ソースコードの修正を試みたいと思います。
CPUの能力、またはミドルウェアの問題であれば、別のアプローチを考えております。
上記の構成で、これ以上の遅延の解消は難しいでしょうか。
ご意見、アドバイスいただければと思います。
よろしくお願いいたします。
at_yashi
まずはどこがボトルネックになっているかしらべたいので、ログをとってみませんか?
GStreamer でデバッグログを出す方法は、ドキュメント内[1]にあります。Level 4か5で良いと思います。
差し支えなければ、ログを貼ってもらえると嬉しいです。
GST_DEBUG=5 gst-launch-1.0 .....
GStreamer Log Viewer[2] というGUI な解析ツールがあるので、取得したログをグラフィカルに
表示させ、確認することができます。x86上で動かしたものですが、「こんな感じ」という
イメージのためにスクリーンショットを貼っておきます。
[1]: http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/se…
[2]: http://cgit.freedesktop.org/~cymacs/gst-debug-viewer/
ファイル | ファイルの説明 |
---|---|
screenshot.png |
logicart
いつもお世話になっております
吉村です。
ご返答ありがとうございます。
取り急ぎログを添付いたします。
ツールも確認してみます。
Axisのカメラが用意できなかったため、PanasonicのDG-SP102にてログを収集いたしました。
イメージサイズ=640×480、fps=15で1024x768のディスプレイに表示しています。
パイプラインは以下の通りです。
GST_DEBUG=5 GST_DEBUG_FILE=/tmp/gstlog.txt gst-launch-1.0 -v rtspsrc 'location=rtsp://192.168.0.10:554/MediaInput/h264' latency=200 '!' rtph264depay '!' video/x-h264,framerate=15/1 '!' h264parse config-interval=1 '!' video/x-h264,stream-format=avc,alignment=au '!' acmh264dec stride=1024 '!' acmfbdevsink max-lateness=2000000000 device=/dev/fb0
また、遅延の様子を収めたビデオファイルも併せて添付いたします。
よろしくお願いいたします。
ファイル | ファイルの説明 |
---|---|
gstlog.zip | |
IMG_5725.zip |
at_yashi
2014年2月19日 14時23分
GStreamer の rtspsrc[1] を使うのが簡単だと思います。最新の a840用イメー
ジであれば、デフォルトでrtsp が入っています。a840のマニュアルに記載され
ている pipe line の filesrc などを rtspsrc にすることで、表示できません
か?
[1] http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-go…