C GStreamer管道冻结故障排除
目前我正在开发android应用程序,它将从远程源播放和录制视频 我的管道看起来像这样C GStreamer管道冻结故障排除,c,gstreamer,freeze,C,Gstreamer,Freeze,目前我正在开发android应用程序,它将从远程源播放和录制视频 我的管道看起来像这样 videotestsrc do-timestamp=true ! videoscale add-borders=false ! capsfilter ! videoflip method=0 ! tee name=split split. ! queue ! videoconvert ! glupload ! glshader ! autovideosink async=false ! sp
videotestsrc do-timestamp=true ! videoscale add-borders=false ! capsfilter ! videoflip method=0 ! tee name=split
split. ! queue ! videoconvert ! glupload ! glshader ! autovideosink async=false !
split. ! queue ! identity drop-probability=0 ! videoconvert ! timeoverlay ! x264enc key-int-max=10 ! h264parse ! splitmuxsink location=/sdcard/test-%d.mp4
我在日志中看到的唯一问题统计
video_buffer_pool_set_config:<videobufferpool1> no caps in config
video\u buffer\u pool\u set\u config:配置中没有上限
我不是要修复我的管道,我只是想了解一下有什么常见的算法可以解决这种冻结问题吗?您最好的工具可能是gstdebugutils.h中的
GST\u DEBUG\u BIN\u to\u DOT\u文件
宏。它将显示您的管道和每个元素的状态。它确实需要您设置GST\u DEBUG\u DUMP\u DOT\u DIR
环境变量
然后运行这样的命令,从点创建PNG或其他图像文件
dot-Tpng pipeline.dot-o pipeline.png
在我们的桌面系统中,我们通常将所有这些打包成一个命令,然后添加到程序中。我不确定你在安卓系统中的最佳路线是什么。也许还有一些额外的API可以提供帮助
确定问题元素后,使用GST\u DEBUG
环境变量添加其他日志记录。例如,如果出现x264enc
错误,请使用:
GST\u DEBUG=2,x264enc:5
这会将除x264enc之外的所有记录级别设置为错误,x264enc将为调试级别
此外,如果运行调试器,通常可以查看所有线程并找到挂起的元素