Armadilloフォーラム

Gstramer並列作業

kazu_2012

2014年7月18日 14時18分

お世話になっております。

Gstreamerエンコーダー作業に関して教えてください。
現在、SDカードへh264エンコードしながら保存することが確認できています。
この保存作業を維持しながら、Gstreamerで同時にjpegへエンコードする作業は可能なのでしょうか?
※同じh264エンコーダファイルを分ける作業は可能だと思いますが、同時に違うフォーマットを作成可能かお聞きしたいです。

可能であれば、具体的なコマンド例を提示願えないでしょうか
それとも、ARM側で作成する並列作業になりますでしょうか

宜しくお願い致します。

コメント

at_daisuke.sasaki

2014年7月28日 18時28分

佐々木大輔です。

ひとつのカメラ入力から、H.264エンコードとJPEGエンコードを同時に実行するためには、
以下のようなコマンドを使用してください。

gst-launch-1.0 -e v4l2src device="/dev/video1" ! video/x-raw,format=NV12,width=640,height=480,framerate=30/1 ! tee name=t \ 
   ! acmh264enc ! queue ! qtmux ! filesink location=/mnt/output.mp4 \   
t. ! acmjpegenc  ! queue ! multifilesink location=/mnt/output%d.jpeg

本コマンドでは、GStreamerのteeプラグインを使用し、ひとつのデータを複数に分割しています。
teeプラグインの詳細は以下を参照してください。

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer-plugins/html/gstreamer-plugins-tee.html

本確認をしていてわかったのですが、ストレージによっては
ACMでJPEGエンコードしていると停止してしまうケースがあるようです。

以下のようなエラーが発生し停止した場合には、ストレージが遅い可能性があるので、
USBハードディスクなど早いストレージで試してみて下さい。

ERROR: from element /GstPipeline:pipeline0/GstAcmJpegEnc:acmjpegenc0: Could not encode stream.
Additional debug info:
gstacmjpegenc.c(1394): gst_acm_jpeg_enc_handle_out_frame_with_wait (): /GstPipeline:pipeline0/GstAcmJpegEnc:acmjpegenc0:
timeout with select()

コメントありがとうございます。
ストレージを色々と試しながら、結果を報告したいと思います。