我正在编写用于C ++的Windows桌面应用程序,使用Qt GUI和GStreamer进行audio处理。
在我的应用程序中,我需要监视几个互联网和audiostream,如果他们在线,并听优先级最高的可用stream。 对于这个任务我使用GStreamer的GstDiscoverer对象,但是我有一些问题。
我每隔1-2秒检查一次audiostream,所以GstDiscoverer被经常调用。 每当我的应用程序正在运行,最终在GstDiscoverer检查过程中,它将会出现分段错误错误。
我尝试了调用GstDiscoverer(gst_discoverer_discover_uri(),gst_discoverer_discover_uri_async())的同步和asynchronous方法,两者都以相同的方式工作。
崩溃发生在1122行(下面第二行代码)的gsttypefindfunctions.c的aac_type_find()函数中。
len = ((c.data[offset + 3] & 0x03) << 11) | (c.data[offset + 4] << 3) | ((c.data[offset + 5] & 0xe0) >> 5);
崩溃期间从debugging器接收的局部variables:
正如我们所看到的,偏移量variables大于c.size,所以c.data [偏移量]超出范围,我认为这就是分段错误发生的原因。 这种情况不经常发生。 该程序可以工作几个小时或十分钟。 但是在我看来,如果GstDiscoverer的调用之间的时间间隔很小,则更经常发生这种情况。 所以,调用aac_type_find()会有一些崩溃的可能性。
我尝试了GStreamer版本1.6.1和最新的1.6.2,两者都存在缺陷。
有人可以帮我解决这个问题吗? 这是Gstreamer错误还是我做错了什么?
据报道,GStreamer项目在这里和崩溃的补丁被合并,将在下一个版本: https : //bugzilla.gnome.org/show_bug.cgi?id=759910