如何检查新添加的垫的类型

How to check type of new added pad?

本文关键字:何检查 类型 添加 检查 新添加      更新时间:2023-10-16

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

videotestsrc OR audiotestsrc !decodebin !队列!autovideosink或autoaudiosink

我试图使用这个建议来检查我得到的数据类型(视频/音频),但如果我像demuxer一样使用解码,那么我得到的只是"src_0"而不是"音频""视频"。如何检查pad类型以链接正确的播放元素?也许我可以使用一个通用的元素来播放音频和视频,比如playsink(但它不适用于视频)?

您可以获取新添加的pad的大写字母,并检查它是否包含音频或视频大写字母(或其他内容)。

试一试:

gst_pad_get_current_caps (pad);

或:

gst_pad_get_allowed_caps (pad);

如果您使用的是gstreamer 0.10(已过时3年以上且未维护),则有:

gst_pad_get_caps_reffed (pad);

然后检查返回的caps,如果它是音频或视频,通过从caps中获取结构并检查其名称是否以video或audio开头。

/* 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/")) {
   ...
}