目前我正在开发 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/