如何检查新添加的垫的类型
How to check type of new added pad?
我的管道方案(动态链接):
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/")) {
...
}
相关文章:
- 键入特征以检查类型是否可从流和 MSVC 读取
- 在编译时检查类型是否为 std::basic_string<T> C++
- 检查类型 T 是否具有成员函数 SFINAE 的任何重载
- 检查类型是否为模板的实例化
- 如何检查类型 'T' 是否具有'T(std::initializer_list<U>)'构造函数
- 使用 python 绑定来检查 C++ 类型是否是规范方式的指针、引用等?
- 检查类型的相等性
- C++编译时检查类型
- 使用模板C++检查类型
- 如何检查类型 T 是否在参数包 Ts 中
- 如何使用条件来检查类型名 T 是否是 C++ 中浮点类型的整数类型
- 检查类型是否在 C++ 中定义了 [][]
- 是否有类型特征检查类型之间的包含
- 如何在运行时检查类型
- 使用SFINAE检查类型是否可以绑定到模板模板参数
- 如何检查类型是否是给定类模板的实例化
- 如何在编译时检查类型
- 检查类型是否可以作为 boost::lexical_cast <string>的参数
- 如何检查类型是通过 typedef 定义的还是在模板参数中使用定义的
- 检查类型是否为地图