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



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

我有这个管道:(每 1 秒 60 个 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 这样的工具无法播放它们。 MK验证器报告这些:

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 进行拆分。

以下是多文件墨水文档的引述:

不能使用此元素独立创建 可播放的 MP4 文件,请改用 splitmuxsink 元素。

我在升级的 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。

相关内容

  • 没有找到相关文章

最新更新