使用gstreamer将网络摄像头jpeg流保存到多个文件

使用gstreamer将网络摄像头jpeg流保存到多个文件,gstreamer,webcam,mjpeg,matroska,Gstreamer,Webcam,Mjpeg,Matroska,我正在尝试将一个MJPEG流从logitech C920网络摄像头保存到多个视频文件(matroska) 我有这个管道:(每60秒1个mkv文件) 正如预期的那样,它输出多个文件,但这些文件有错误,因此像avidemux这样的工具无法播放它们。mkvalidator报告以下内容: WRN080: Unknown element [FF] at 293 size 88 WRN080: Unknown element [FF] at 494 size 64 WRN080: Unknown eleme

我正在尝试将一个MJPEG流从logitech C920网络摄像头保存到多个视频文件(matroska)

我有这个管道:(每60秒1个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
顺便说一句,使用FileLink保存到单个文件会生成一个没有错误的mkv文件

有没有办法正确保存多个mkv文件? 任何其他容器也可以,但我不能转码(需要低CPU负载),也不能使用raw(需要高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
进行拆分

以下是引用自:

无法使用此元素独立创建 可播放的mp4文件,请改用splitmuxsink元素


我成功地升级了GStreamer(Ubuntu 18.04)

这是一个带有AVI容器的管道,其中每10秒生成一个新文件:

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。

是否重新编码?我不能那样做。另外,我想用Matroska/MP4容器而不是h.264来录制原始MJPEG视频。如果您只想将MJPEG流放入Matroska容器中,可以删除x264enc。我只是把它放在我的网络摄像头上,它没有mjpeg功能。很抱歉我的回复太晚了。我尝试不使用
x264enc
元素,但它不起作用。我将用这个问题更新这个问题。@我们不能指定视频文件以什么帧速率转储吗?将流转储到文件时是否有任何帧率标志尝试以下操作:gst-launch-1.0-e v4l2src device=/dev/video1!图像/jpeg,宽度=1280,高度=720,帧速率=24/1!JPEG解析!splitmuxsink muxer=matroskamux location='test1-%02d.mkv'最大大小时间=1000000000
$ gst-launch-1.0 --gst-version
GStreamer Core Library version 1.14.1
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