ffmpeg - 如何在 C 中解码来自这个无名的几乎 UVC 灰度相机的流

标签 ffmpeg video-capture mjpeg libavcodec libavformat

编辑:我找到了原因。流总是以非 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 不同,无法播放。

我试过decode_jpeg_raw来自 mjpegtools ,它提示标题,似乎随着每个捕获的流而变化。所以看起来不像是展开的 JPEG 图像流。

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

该文件是灰度文件,不以常数值开头,guvcviewmplayer是我认识的唯一可以在没有文物的情况下对其进行解码的玩家...

最佳答案

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

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

希望有帮助。

关于ffmpeg - 如何在 C 中解码来自这个无名的几乎 UVC 灰度相机的流,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54203397/

相关文章:

Node.js - 我不断收到以下错误 : Error: ffmpeg stream: write EPIPE

java - jpeg 字节到十六进制值

colors - 为什么要审查 MJPEG 视频而不是(比如说)H.264 中的合成工作?

android - 使用安卓进行视频通话

java - 从实时视频设备捕获图像以供基于 Java 的应用程序使用的最佳方法是什么?

iphone - 从 iPhone 上传近乎实时的视频

xcode - 如何在 Mac 中流式传输 MJPEG 格式的视频

android - 如何通过将 FFMPEG lib 用于 android 来减小 mp4 大小

ffmpeg - 拼命寻找可以从实时源(而不是文件)流式传输的 RTSP 服务器

ffmpeg - 让 ffmpeg 在视频上添加重复的文本覆盖