2011-07-26 6 views
6

gst-launchユーティリティを使用してGStreamerでいくつかの実験を行っています。しかし、究極的には、GStreamerライブラリを使用して、この同じ機能を自分のアプリケーションに実装することが目的です。Gstreamer - コマンドラインのgst-launchをCコードに変換する

問題は、(少なくともGStreamer APIに慣れていない人にとっては)コマンドラインでC/C++コードにテストしたものを「移植」するのは難しいということです。

私はポートに必要がある場合がありますコマンドの例は次のとおりです。

gst-launch filesrc location="CLIP8.mp4" ! decodebin2 ! jpegenc ! multifilesink location="test%d.jpg" 

このようなコマンドを取ると、自分のアプリにC言語でそれを書くためにほとんどの「まっすぐ」方法/アプローチ何ですか。

また、マルチファイルシンクをメモリ上で置き換えることができます(私はOpenCVを使ってビデオから抽出すべき所定の画像を計算しています)。最初にファイルシステムに保存することなくメモリに直接デコードし、すぐに使用することは可能ですか?それは連続している可能性があります(そしてすべきです)。私は現在のフレームを処理した後、次のフレームに移動するだけで、何千ものフレームをメモリに保持する必要はありません。

あなたはどう思いますか?

答えて

10

解決策が見つかりました。 GStreamerには、gst-launch引数を解析してパイプラインを返す関数が組み込まれています。この関数はgst_parse_launchと呼ばれ、ここに文書化されています:http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gstreamer/html/gstreamer-GstParse.html 私はそれをテストしていませんが、コマンドラインでテストされたものをC/C++コードに変換するのが最も速い解決策です。あなたは基本的に取得することができ、このいずれかでappsink

http://gstreamer.freedesktop.org/data/doc/gstreamer/head/gst-plugins-base-libs/html/gst-plugins-base-libs-appsink.html

:ところで

3

いつでも開いてthe source of gst-launchを開いて、コマンドラインを解析してGStreamerパイプラインに変換するビットをつかむことができます。

こうすれば、 "コマンドライン"を文字列として渡すだけで、関数が完全なパイプラインを返します。

+0

興味深い可能性があります。むしろ、Cで同等のパイプラインをコーディングするためのコマンドラインを読むことから、いくつかの簡単なステップを踏んでいきます。 GStreamerのドキュメントはあまり「開発者に親しみやすい」ものではないので、 – petersaints

1

は、あなたの(C/C++)アプリケーションに処理パイプラインを統合するための良い方法を提供し、興味深いのGStreamer要素がありますパイプラインからのフレームを大きなC配列に入れて、あなたが望むものを何でもしてください。あなたは、新しいフレームがパイプラインスレッドから利用可能になるたびにアクティブになるコールバック関数を設定します。

関連する問題