【发布时间】: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 语言解码为任何普通位图的方法吗?
文件是灰度的,不是以恒定值开头的,guvcview 和 mplayer 是我认识的唯一播放器,它们可以在没有伪影的情况下对其进行解码...
【问题讨论】:
标签: ffmpeg video-capture mjpeg libavcodec libavformat