如何检查新添加的打击垫的类型?

时间:2015-07-26 16:54:03

标签: c++ audio video gstreamer glib

我的管道方案(动态链接):

  

videotestsrc或audiotestsrc! decodebin!排队! autovideosink或   autoaudiosink

我尝试使用this advice来检查我获得的数据类型(视频/音频),但如果我使用像解复用器这样的解码器,那么我只需“src_0”而不是“音频”“视频”。如何检查我的打击垫类型以链接正确的元素进行播放?可能我可以使用一个通用元素进行音频播放和视频播放,例如playink(但它不适用于视频)?

1 个答案:

答案 0 :(得分:2)

您可以获取新添加的打击垫的大写,并检查它是否包含音频或视频上限(或其他内容)。

尝试:

gst_pad_get_current_caps (pad);

或:

gst_pad_get_allowed_caps (pad);

如果您使用gstreamer 0.10(已过时3年未使用),您可以:

gst_pad_get_caps_reffed (pad);

然后只需检查返回的大写字母(如果是音频或视频),方法是从大写字母中获取结构并检查其名称是否以视频或音频开头。

/* There might be multiple structures depending on how you do it,
 * but usually checking one in this case is enough */
structure = gst_caps_get_structure (caps, 0);
name = gst_structure_get_name (structure);
if (g_str_has_prefix (name, "video/")) {
   ...
} else if (g_str_has_prefix (name, "audio/")) {
   ...
}