【发布时间】:2015-08-13 19:32:50
【问题描述】:
伙计们,
我正在 GStreamer 管道中测试计算机视觉元素;我的元素从网络摄像头接收实时视频流并在其上运行一些图像处理代码并将结果保存到数据库中。当使用调试标志编译时,它还会使用一些调试标记更新视频流。为了调试和开发,我也从录制的视频中运行它。
我从录制的视频中进行实时调试的管道(有效):
gst-launch filesrc location=test-16.avi ! h264parse ! ffdec_h264 ! people-heatmap db-path=test-16.sqlite ! xvimagesink
当我尝试“盲调试”(即将数据保存到数据库,但没有视频输出)时,我会这样做:
gst-launch filesrc location=test-16.avi ! h264parse ! ffdec_h264 ! people-heatmap db-path=test-16.sqlite ! fakesink sync=true
注意 fakesink 中的“sync=true”。没有它,代码会以非常高的帧率运行,并且我的视觉算法会丢失(因为它取决于运行的系统时钟)。
但是,当我尝试将带有调试标记的视频重新编码为文件(供以后分析)时:
gst-launch filesrc location=test-16.avi ! h264parse ! ffdec_h264 ! people-heatmap db-path=test-16.sqlite ! ffmpegcolorspace ! ffenc_mpeg4 ! ffmux_avi ! filesink location="debug-test-16.avi"
我的代码以高帧速率运行(我想这是我的 CPU 支持的最大帧速率)。
我认为这与我在盲调试情况下使用“sync=true”解决的问题相同,但将此选项放在 filesink 元素中没有得到任何结果。
那么,在将视频编码为文件时,如何强制整个管道实时运行(根据视频帧率)?
提前致谢,
【问题讨论】:
标签: video computer-vision gstreamer video-processing frame-rate