使用GstDiscoverer(GStreamer)

时间:2015-12-27 09:42:32

标签: c++ windows segmentation-fault gstreamer

我正在使用Qt for GUI和GStreamer为C ++编写Windows桌面应用程序以进行音频处理。

在我的应用程序中,我需要监控多个互联网aac音频流(如果它们在线),并收听具有最高优先级的可用流。对于这个任务,我使用GStreamer中的GstDiscoverer对象,但是我遇到了一些问题。

我每1-2秒检查一次音频流,因此经常调用GstDiscoverer。 每次我的应用程序运行时,最终它会在GstDiscoverer检查期间因分段错误错误而崩溃。

我尝试了同步和异步方法调用GstDiscoverer(gst_discoverer_discover_uri(),gst_discoverer_discover_uri_async()),两者的工作方式相同。

崩溃发生在第1122行的gsttypefindfunctions.c的aac_type_find()函数中(下面的第二行代码)。

len = ((c.data[offset + 3] & 0x03) << 11) |
       (c.data[offset + 4] << 3) | ((c.data[offset + 5] & 0xe0) >> 5);

在其中一次崩溃期间从调试器收到的局部变量: enter image description here

正如我们所看到的,偏移变量大于c.size,因此c.data [offset]超出范围,我认为这就是分段错误发生的原因。 这种情况不会经常发生该程序可以工作几个小时或十分钟。 但在我看来,如果GstDiscoverer调用之间的时间间隔很小,它会更频繁地发生。因此,有一些崩溃的可能性是调用aac_type_find()。

我尝试过GStreamer版本1.6.1和最新版本1.6.2,两者都存在错误。

有人可以帮我解决这个问题吗?这是Gstreamer的错误还是我做错了什么?

1 个答案:

答案 0 :(得分:2)

此处向GStreamer项目报告了该崩溃的补丁已合并,并将在下一版本中发布:https://bugzilla.gnome.org/show_bug.cgi?id=759910