【问题标题】:How to decode in C a stream from this noname almost-UVC grayscale camera如何在 C 中解码来自这个无名的几乎 UVC 灰度相机的流
【发布时间】:2019-06-09 17:35:33
【问题描述】:

编辑:我找到了原因。流总是以非 JPEG 格式开始。只有在它之后才有正常的 MJPEG 流。有趣的是,并非所有使用 V4L2/MJPEG 解码器的小例子都能将相机生成的内容正确划分为帧。一个叫做capturev4l2.c 的东西是一个罕见的例子。可能有一些细节决定了相机的问题是否得到解决。

我有一个几乎符合 UVC 标准的无名相机(它未能通过多项兼容性测试)。这是一个相对便宜的全局快门相机,因此我想使用它而不是正确记录的东西。它将mplayer 报告(并正确播放)的内容输出为

Opening video decoder: [ffmpeg] FFmpeg's libavcodec codec family
libavcodec version 57.107.100 (external)
Selected video codec: [ffmjpeg] vfm: ffmpeg (FFmpeg MJPEG)

ffprobe 显示如下:

[mjpeg @ 0x55c086dcc080] Format mjpeg detected only with low score of 25, misdetection possible!
Input #0, mjpeg, from '/home/sc/Desktop/a.raw':
  Duration: N/A, bitrate: N/A
    Stream #0:0: Video: mjpeg, yuvj422p(pc, bt470bg/unknown/unknown), 640x480, 25 tbr, 1200k tbn, 25 tbc

但相对于mplayer,它无法播放。

我从mjpegtools 尝试了decode_jpeg_raw,它抱怨标题,似乎随着每个捕获的流而改变。所以看起来不像是展开的 JPEG 图像流。

因此,我尝试了来自 libavcodec/libavformat 的 0_hello_world.c,但它在 avformat_open_input() 处停止,并出现错误 Invalid data found when processing input。一个 100 帧的示例文件位于此处 a.raw。您知道如何确定一种将 C 语言解码为任何普通位图的方法吗?

文件是灰度的,不是以恒定值开头的,guvcviewmplayer 是我认识的唯一播放器,它们可以在没有伪影的情况下对其进行解码...

【问题讨论】:

    标签: ffmpeg video-capture mjpeg libavcodec libavformat


    【解决方案1】:

    由于您有原始流,我认为您需要的是带有解析器的解码器。
    在 ffmpeg 上查看此 decode_video.c 示例:
    https://github.com/FFmpeg/FFmpeg/blob/master/doc/examples/decode_video.c

    相应地更改必要的部分,例如avcodec_find_decoder(...)

    希望对您有所帮助。

    【讨论】:

    • 它显示“未找到编解码器”。另一个不适用于相机的程序。就像设备有故障或其他什么。尽管如此,mplayer 还是可以使用它。
    • 你试过avcodec_find_decoder(AV_CODEC_ID_MJPEG) 吗?
    • 是的,没用。但我找到了原因,请参阅编辑。
    猜你喜欢
    • 1970-01-01
    • 2011-03-26
    • 2023-02-20
    • 1970-01-01
    • 2020-08-27
    • 2019-09-29
    • 1970-01-01
    • 1970-01-01
    • 2010-09-25
    相关资源
    最近更新 更多