C++ 带有输入选择器的音频曲目--管道不播放
我有一个播放MKV内容的管道 在demuxC++ 带有输入选择器的音频曲目--管道不播放,c++,gstreamer,playback,C++,Gstreamer,Playback,我有一个播放MKV内容的管道 在demuxpad added处理程序中,我使用队列链接video\u 0 以及其余与视频相关的元素(convert、glsink等)/。 audio\u 0通过ac3\u解析、ac3\u解码等连接到队列。 audio_1被忽略 管道运行良好 现在我想能够切换音频曲目。 为此,我创建了一个输入选择器元素 在demux pad添加的处理程序中,audio\u 0链接到输入选择器:sink\u 0 并且audio\u 1链接到输入选择器:sink\u 1 代码如下所示:
pad added
处理程序中,我使用队列链接video\u 0
以及其余与视频相关的元素(convert、glsink等)/。
audio\u 0
通过ac3\u解析、ac3\u解码等连接到队列。
audio_1
被忽略
管道运行良好
现在我想能够切换音频曲目。
为此,我创建了一个输入选择器
元素
在demux pad添加的处理程序中,audio\u 0
链接到输入选择器:sink\u 0
并且audio\u 1链接到输入选择器:sink\u 1
代码如下所示:
GstPadTemplate* padtemplate = gst_element_class_get_pad_template(GST_ELEMENT_GET_CLASS(data->audio_selector),"sink_%u");
sink_pad = gst_element_request_pad(data->audio_selector, padtemplate, NULL, NULL);
g_print("Obtained request pad %s for audio branch.\n", gst_pad_get_name(sink_pad));
sink_pad = gst_element_get_static_pad(data->audio_selector, requested_pad.data());
...
ret = gst_pad_link (new_pad, sink_pad);
if (GST_PAD_LINK_FAILED (ret)) {
g_print ("Type is '%s' but link failed.\n", new_pad_type);
} else {
g_print ("Link succeeded (type '%s').\n", new_pad_type);
// GST_DEBUG_BIN_TO_DOT_FILE(GST_BIN(data->pipeline), GST_DEBUG_GRAPH_SHOW_ALL, "pipeline");
}
g_object_set(data->audio_selector, "active-pad", sink_pad, nullptr);
不幸的是,管道永远不会进入GST\u STATE\u PLAYING
。
我不知道我错过了什么。
知道a队列
元素也位于输入选择器
元素
我已经生成了结果管道的图表
我没有看到相关的日志消息
欢迎提出任何建议