【问题标题】:Saving webcam jpeg stream to multiple files with gstreamer使用 gstreamer 将网络摄像头 jpeg 流保存到多个文件
【发布时间】:2017-05-27 17:47:53
【问题描述】:

我正在尝试将来自罗技 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 负载),也无法使用 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 device=/dev/video1 !图像/JPEG,宽度=1280,高度=720,帧率=24/1! JPEG解析! splitmuxsink muxer=matroskamux location='test1-%02d.mkv' max-size-time=10000000000

标签: gstreamer webcam mjpeg matroska


【解决方案1】:

我已经成功升级了 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。

【讨论】:

    【解决方案2】:

    以下管道似乎有效:

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

    这是来自multifilesink doc的引用:

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

    【讨论】:

    • x264enc key-int-max=10 不是重新编码吗?我不能那样做。另外,我想使用 Matroska/MP4 容器录制原始 MJPEG 视频,而不是 h.264。
    • 啊,如果您只想将 mjpeg 流放在 Matroska 容器中,可以删除 x264enc。我只是把它放在我的网络摄像头上,它没有 mjpeg 功能。
    • 抱歉回复晚了。我尝试不使用x264enc 元素,但它不起作用。我会用问题更新问题。
    • @All 我们不能指定要转储视频文件的帧速率吗?像将流转储到文件时是否有任何帧速率标志
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-12-28
    • 2020-03-22
    • 2022-06-13
    • 2023-01-17
    • 2012-08-16
    • 1970-01-01
    相关资源
    最近更新 更多