繁体   English   中英

解决GStreamer管道冻结问题

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM