从 gstreamer 记录相机流

Luc*_*uca 2 video-capture gstreamer

我有一个完美运行的 gstreamer 管道,它可以接收摄像头流,将其编码为 H.264 视频,将其保存到一个文件中,并将其显示在屏幕上,如下所示:

gst-launch-1.0 -v autovideosrc ! tee name = t ! queue ! omxh264enc ! 
'video/x-h264, stream-format=(string)byte-stream' ! h264parse ! qtmux ! 
filesink location=test.mp4 t. ! queue ! videoscale ! video/x-raw, 
width=480,height=270 ! xvimagesink -e sync=false
Run Code Online (Sandbox Code Playgroud)

现在,我正在尝试做一些更简单的事情,只需将流记录到文件中(不显示在屏幕上),这似乎不起作用!它写入文件但无法播放。到目前为止我尝试过的是:

gst-launch-1.0 -v autovideosrc ! queue ! omxh264enc ! 'video/x-h264, 
stream-format=(string)byte-stream' ! h264parse ! qtmux ! filesink 
location=test.mp4 sync=false
Run Code Online (Sandbox Code Playgroud)

我也可以删除队列元素,但结果相同:

gst-launch-1.0 -v autovideosrc ! omxh264enc ! 'video/x-h264, 
stream-format=(string)byte-stream' ! h264parse ! qtmux ! filesink 
location=test.mp4 sync=false
Run Code Online (Sandbox Code Playgroud)

它似乎没有给出任何错误,但只是没有将有效的流写入我的文件接收器。

Flo*_*och 6

你如何停止流?相机会正确注入 EOS 信号吗?如果没有,您只需按下ctrl-c即可停止操作,.mp4 文件将丢失正确播放所需的重要标题。

添加-e到您的命令行。在这种情况下,当您按下ctrl-c管道时,管道不仅会停止,而且会通过管道发送 EOS 信号而正确关闭。