gstreamerでメディア機能を指定するcapsの構文は何ですか? Caps は、許可されるメディアの種類を指定する文字列であり、「audio/x-raw-int,...」のように見えますが、caps 文字列で何が許可されているかについての適切なドキュメントを見つけることができませんでした。
8 に答える
構文は次のとおりです。
<type>[,<property>=<value>]...
このタイプはMIME タイプではないことに注意してください。
を使用して、どの caps プロパティ要素がサポートしているかを調べることができますgst-inspect
。サポートされるキャップの範囲を指定する要素のパッドの「パッド テンプレート」を提供します。
GStreamer プラグイン作成者のガイドには、一般的なオーディオ、ビデオ、および画像形式のプロパティを説明する定義済みの型のリストも含まれています。
私が理解している限り、フォーマットは次のとおりです。
caps = <caps_name>, <field_name>=<field_value>[; <caps>]
<caps_name> = image/jpeg etc
<field_name> = width etc
<field_value> = <fixed_field_value>|<ranged_field_value>|<multi_field_value>
<fixed_field_value> = 800 etc
<ranged_field_value> = [<lower_value>, <upper_value>]
<multi_field_value> = {<fixed_field_value>, <fixed_field_value>, <fixed_field_value>, ...}
Java では、gstreamer-java の場合
final Element videofilter = ElementFactory.make("capsfilter", "flt");
videofilter.setCaps(Caps.fromString("video/x-raw-yuv, width=720, height=576"
+ ", bpp=32, depth=32, framerate=25/1"));
Cでは、ビデオスケールキャップフィルターが必要だとします
GstElement *videoscale_capsfilter;
GstCaps* videoscalecaps;
...
...
videoscale = gst_element_factory_make ("videoscale", "videoscale");
g_assert (videoscale);
videoscale_capsfilter = gst_element_factory_make ("capsfilter", "videoscale_capsfilter");
g_assert (videoscale_capsfilter);
...
...
次にプロパティを設定します
g_object_set( G_OBJECT ( videoscale_capsfilter ), "caps", videoscalecaps, NULL );
次に、これらをビンに追加し、gst-launch を使用してメディア パイプラインを構築した方法でリンクすることができます
/* Add Elements to the Bin */
gst_bin_add_many (GST_BIN (pipeline),source ,demux ,decoder ,videoscale ,videoscale_capsfilter ,ffmpegcolorspace ,ffmpegcolorspace_capsfilter,autovideosink,NULL);
/* Link confirmation */
if (!gst_element_link_many (demux, decoder,videoscale, videoscale_capsfilter ,ffmpegcolorspace, ffmpegcolorspace_capsfilter, autovideosink, NULL)){
g_warning ("Main pipeline link Fail...");
}
/* Dynamic Pad Creation */
if(! g_signal_connect (source, "pad-added", G_CALLBACK (on_pad_added),demux))
{
g_warning ("Linking Fail...");
}
あなたはオーディオを求めているようです。
長いバージョンのみを提供します。不要な部分を削除または変更できます。ただし、GStreamer 0.10 と GStreamer 1.0 の間で変更されます。私は両方を与えます:
GStreamer 0.10 の場合:
audio/x-raw-int,rate=44100,channels=2,width=16,depth=16,endianness=1234,signed=true
GStreamer 1.0 の場合:
audio/x-raw,format=S16LE,channels=2,layout=interleaved
ご覧のとおり、1.0 ではオーディオ形式を組み合わせる必要があります。S16LE は、signed + int + 16 width + little endian (=1234) を意味します。
これは私がPythonでそれを使用する方法です... HTH
caps = gst.Caps("video/x-raw-yuv,format=(fourcc)AYUV,width=704,height=480")
capsFilter = gst.element_factory_make("capsfilter")
capsFilter.props.caps = caps
あなたの質問は構文に関するものなのでわかりませんが、 「定義された型のリスト」が役立つ場合があります。
部分的な答え、私はあなたがすでに解決したと確信しています:
"MIMETYPE,PROPERTY1=VALUE1,PROPERTY2=VALUE2,..."
正式には、キャップは文字列ではなく、GstStructures の配列を含む GstCaps オブジェクトによって表されます。こちらのドキュメントを参照してください。
おそらく、ここで決定的な答えが得られれば、関数のドキュメント パッチを送信できます。gst_caps_from_string()