使用 gstreamer 将网络摄像头 jpeg 流保存到多个文件
Saving webcam jpeg stream to multiple files with gstreamer
我正在尝试将来自罗技 C920 网络摄像头的 MJPEG 流保存到多个视频文件 (matroska)。
我有这个管道:(每 60 秒 1 个 mkv 文件)
gst-launch-1.0 -ev v4l2src device=/dev/video0 \
! image/jpeg,width=1280,height=720,framerate=24/1 \
! matroskamux ! multifilesink next-file=max-duration max-file-duration=60000000000 location='test1-%02d.mkv'
它输出了几个文件,正如预期的那样,但是文件有错误,所以像 avidemux 这样的工具无法播放它们。 mkvalidator 报告这些:
WRN080: Unknown element [FF] at 293 size 88
WRN080: Unknown element [FF] at 494 size 64
WRN080: Unknown element [7D][01] at 566 size w98603107602
WRN801: The segment has no SeekHead section
WRN0B8: Track #1 is defined but has no frame
顺便说一句,使用 filesink 保存到单个文件会生成一个没有错误的 mkv 文件。
有没有办法正确保存多个mkv文件?
任何其他容器也可以,但我无法转码(需要低 CPU 负载)并且我不能使用原始文件(需要高 fps 的高清)。
我在 Ubuntu 16.04.1.
上使用 GStreamer 1.8.2
谢谢。
更新:
按照下面的建议,我尝试使用 splitmuxsink:
gst-launch-1.0 -e v4l2src device=/dev/video1 \
! image/jpeg,width=1280,height=720,framerate=24/1 \
! splitmuxsink muxer=matroskamux location='test1-%02d.mkv' \
max-size-time=10000000000
但它不起作用:文件永远不会拆分并且大小不断增加。
以下管道似乎有效:
gst-launch-1.0 -e v4l2src ! x264enc key-int-max=10 ! h264parse ! splitmuxsink muxer=matroskamux location='test1-%02d.mkv' max-size-time=60000000000
multifilesink
对容器格式一无所知,所以必须使用 splitmuxsink
进行拆分。
It is not possible to use this element to create independently
playable mp4 files, use the splitmuxsink element for that instead.
我已成功使用升级后的 GStreamer (Ubuntu 18.04)
$ gst-launch-1.0 --gst-version
GStreamer Core Library version 1.14.1
这是一个带有 AVI 容器的管道,每十秒生成一个新文件:
gst-launch-1.0 -e v4l2src device=/dev/video1 \
! image/jpeg,width=1280,height=720,framerate=24/1 \
! splitmuxsink muxer=avimux location='test1-%02d.avi' max-size-time=10000000000
它也适用于 matroskamux。
我正在尝试将来自罗技 C920 网络摄像头的 MJPEG 流保存到多个视频文件 (matroska)。
我有这个管道:(每 60 秒 1 个 mkv 文件)
gst-launch-1.0 -ev v4l2src device=/dev/video0 \
! image/jpeg,width=1280,height=720,framerate=24/1 \
! matroskamux ! multifilesink next-file=max-duration max-file-duration=60000000000 location='test1-%02d.mkv'
它输出了几个文件,正如预期的那样,但是文件有错误,所以像 avidemux 这样的工具无法播放它们。 mkvalidator 报告这些:
WRN080: Unknown element [FF] at 293 size 88
WRN080: Unknown element [FF] at 494 size 64
WRN080: Unknown element [7D][01] at 566 size w98603107602
WRN801: The segment has no SeekHead section
WRN0B8: Track #1 is defined but has no frame
顺便说一句,使用 filesink 保存到单个文件会生成一个没有错误的 mkv 文件。
有没有办法正确保存多个mkv文件? 任何其他容器也可以,但我无法转码(需要低 CPU 负载)并且我不能使用原始文件(需要高 fps 的高清)。
我在 Ubuntu 16.04.1.
上使用 GStreamer 1.8.2谢谢。
更新: 按照下面的建议,我尝试使用 splitmuxsink:
gst-launch-1.0 -e v4l2src device=/dev/video1 \
! image/jpeg,width=1280,height=720,framerate=24/1 \
! splitmuxsink muxer=matroskamux location='test1-%02d.mkv' \
max-size-time=10000000000
但它不起作用:文件永远不会拆分并且大小不断增加。
以下管道似乎有效:
gst-launch-1.0 -e v4l2src ! x264enc key-int-max=10 ! h264parse ! splitmuxsink muxer=matroskamux location='test1-%02d.mkv' max-size-time=60000000000
multifilesink
对容器格式一无所知,所以必须使用 splitmuxsink
进行拆分。
It is not possible to use this element to create independently playable mp4 files, use the splitmuxsink element for that instead.
我已成功使用升级后的 GStreamer (Ubuntu 18.04)
$ gst-launch-1.0 --gst-version
GStreamer Core Library version 1.14.1
这是一个带有 AVI 容器的管道,每十秒生成一个新文件:
gst-launch-1.0 -e v4l2src device=/dev/video1 \
! image/jpeg,width=1280,height=720,framerate=24/1 \
! splitmuxsink muxer=avimux location='test1-%02d.avi' max-size-time=10000000000
它也适用于 matroskamux。