[英]Troubleshoot GStreamer pipeline freezing
目前,我正在研究android应用,它将播放和录制远程形式的视频
我的管道看起来像这样
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
我不是要修复管道,我只是想了解它,那里有任何通用算法如何解决这种冻结问题?
最好的工具可能是GST_DEBUG_BIN_TO_DOT_FILE
宏。 它会显示您的管道和每个元素的状态。 它确实需要您设置GST_DEBUG_DUMP_DOT_DIR
环境变量。
然后运行这样的命令,从该点创建PNG或其他图像文件。
dot -Tpng pipeline.dot -o pipeline.png
在我们的桌面系统上,我们通常将所有这些打包成一个命令,我们可以将其添加到程序中。 我不确定您最好的路线是在Android中。 也许那里还有一些其他API可以提供帮助。
确定问题元素后,使用GST_DEBUG
环境变量添加其他日志记录。 例如,如果您遇到x264enc
错误,请使用:
GST_DEBUG=2,x264enc:5
这会将除x264enc以外的所有内容的日志记录级别设置为错误,它将作为调试级别。
另外,如果您运行调试器,通常可以浏览所有线程并找到挂起的元素。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.