c - GStreamer 管道卡住故障排除

标签 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 !
    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

我不是要修复我的管道,我只是想了解它是否有任何通用算法来解决这种卡住问题?

最佳答案

您将拥有的最好的工具可能是 gstdebugutils.h 中的 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 之外的所有内容的日志记录级别设置为错误,它将是调试级别。

此外,如果您运行调试器,您通常可以查看所有线程并找到挂起的元素。

关于c - GStreamer 管道卡住故障排除,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33391224/

相关文章:

audio - 重新编码音频:gstreamer中的libav编码器/解码器

android - ProgressDialog 在异步任务中卡住

python-2.7 - Python getpass.getpass()函数调用挂起

c - 使用 openmp 确保缓冲区访问是私有(private)的

c - C中的中止函数

python - python程序中Gst的问题

android - 无法在 vlc 上播放 android h264 编码的视频

delphi - 当程序挂起时如何调试?

c - 添加额外的 printf 行会影响 C 代码

c - c 中带有标识符的结构声明