什么是gstreamer caps语法?

时间:2010-03-04 15:45:38

标签: gstreamer

在gstreamer中,cap的语法是什么,指定媒体功能? Caps是指定允许的媒体类型的字符串,看起来像“audio / x-raw-int,...”但是我无法找到关于cap字符串中允许的确切内容的良好文档。

7 个答案:

答案 0 :(得分:10)

语法为:

<type>[,<property>=<value>]...

请注意,该类型是一种MIME类型,无论它看起来多么类似。

您可以使用gst-inspect找出哪些大写属性元素支持。它将为元素的焊盘提供“焊盘模板”,它将指定支持的焊盘范围。

GStreamer插件编写者指南还包含list of defined types,其中描述了常见音频,视频和图像格式的属性。

答案 1 :(得分:6)

我看到你在听音频。

我只会给你长版本,你可以删除或更改你不需要的部分。它在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

for GStreamer 1.0:

audio/x-raw,format=S16LE,channels=2,layout=interleaved

如您所见,使用1.0,您需要结合音频格式。 S16LE表示signed + int + 16 width + little endian(= 1234)。

答案 2 :(得分:4)

这就是我在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

答案 3 :(得分:4)

据我所知,这是格式:

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>, ...}

答案 4 :(得分:3)

在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 );

然后您可以将这些添加到bin并使用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...");
}

答案 5 :(得分:1)

部分答案,我相信你已经解决了这个问题:

"MIMETYPE,PROPERTY1=VALUE1,PROPERTY2=VALUE2,..."

正式地说,大写字母不是由字符串表示,而是由包含GstStructures数组的GstCaps对象表示。请参阅文档here

也许如果我们在这里找到明确的答案,我们可以提交函数gst_caps_from_string()的文档补丁

答案 6 :(得分:1)

由于您的问题与语法有关,我不确定,但"list of defined types"可能会有所帮助。