我正在iOS平台上使用souphttpclient sink插件运行gstreamer管道(带有iOS 10.2的iPhone 6。在多次尝试停止并重新启动管道后,它崩溃了。
这就是我配置souphttpclientsink插件的方式:
souphttpclientsink name=soup_sink location= https://<serverIP:port>/g711.cgi
retries=20 retry-delay=1 max-lateness=250000000
当souphttpclientsink插件获得停止信号时,崩溃就会发生,这会导致souphttpclientsink插件的g_main_loop_run返回。返回时,它似乎执行一些IO读取并尝试重新分配未分配的内存。 以下是我看到的确切消息:
SoupHttpClientApp(1331,0x16e043000) malloc: *** error for object 0x1013437e0: pointer
being realloc'd was not allocated*** set a breakpoint in malloc_error_break to debug
我在Windows平台上运行了相同的测试数小时,并没有重现该问题。在souphttpclientsink插件将设置管道状态的会话中止为NULL之前,似乎有些资源被释放了。
如果您能就如何解决此问题提供任何指示,我将非常感激。
谢谢!
答案 0 :(得分:0)
我修好了。为了其他人的利益,这是修复了iOS平台上的souphttpclientsink崩溃的原因。以下gst_soup_http_client_sink_stop函数的代码片段应该在souphttpclientsink-thread上的g_thread_join后执行。在较慢的移动处理器上解决它的时间问题,并且在会话中止后恰好读取数据。此修复程序基本上允许所有剩余数据由主循环处理并在中止汤会话之前正常返回。
if (souphttpsink->prop_session == NULL) {
soup_session_abort (souphttpsink->session);
g_object_unref (souphttpsink->session); }
希望它能帮助别人!