ffmpeg - 通过 ffplay 播放 USB 网络摄像头流时获取 "unable to decode APP fields"

标签 ffmpeg video-streaming webcam

我正在尝试在 Windows 中使用 ffplay 播放 USB 网络摄像头流(不确定它是什么格式..)。我可以毫无问题地观看视频,但我在控制台中不断收到以下错误。

ffplay.exe -f dshow -i video="Logitech HD Webcam C615" -loglevel debug

[mjpeg @97a118cc80] 无法解码 APP 字段:处理输入时发现无效数据 check logs for more details

我真的需要担心这个错误吗?或者我需要在命令中提供的任何过滤器来消除此错误。

注意:我尝试使用 ffmpeg 将流保存到文件中,但遇到了同样的问题。

提前致谢。

最佳答案

那些APP字段消息不是错误。您所看到的是罗技专有的 Motion-jpeg 格式,他们在许多网络摄像机中使用该格式。例如,我在 C270 和较新的 c922 中看到过它。 mjpeg流包含一系列jpeg图像,有些是关键帧,完整的图像,有些是其他帧如增量帧,描述帧之间的差异。 Logitech 所做的是将 H264 数据作为 APP 附件附加到 jpeg 帧上,从而将 H264 流嵌入到 mjpeg 流中,即它是流中的流。当您播放或转码 mjpeg 流中的数据时,ffmpeg 会遇到这些 APP 附件,并且不知道如何处理它们。我相信像 Skype 这样的程序能够读取外部 mjpeg 流和内部 H264 流。

如果您想亲自看到这一点,您可以从摄像机的 mjpeg 流中编码一个小视频,然后提取 jpeg 图像,然后查看 jpeg 图像的结构,您将看到嵌入的视频。

# create a small mp4, copying mjpeg stream off the cam for a second or two
$ ffmpeg -f v4l2 -input_format mjpeg -i /dev/video0 -c:v copy test.mp4

# extract the unaltered jpeg files inside the stream
$ ffmpeg -i test.mp4 -vcodec copy %03d.jpg

# view any of the jpeg files for APP attachments
$ exiv2 -pS 001.jpg

STRUCTURE OF JPEG FILE: 001.jpg address | marker       |  length | data
   0 | 0xffd8 SOI  
   2 | 0xffe0 APP0  |      33 | AVI1.....x.x....................
  37 | 0xffdb DQT   |      67 
 106 | 0xffdb DQT   |      67 
 175 | 0xffdd DRI   |       4 
 181 | 0xffe0 APP0  |       4 | ....
 187 | 0xffc0 SOF0  |      17 
 206 | 0xffda SOS  

看到 jpeg 上的那些 APP0 附件了吗?这就是解码器/播放器提示的嵌入式 H264 数据。

关于ffmpeg - 通过 ffplay 播放 USB 网络摄像头流时获取 "unable to decode APP fields",我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55439184/

相关文章:

java - 处理视频库在 Linux (Ubuntu 13.04) 上不起作用

javascript - 从 HTML5 网络摄像头获取图像的 src

opencv - 解决相机不良的反馈(水平线上下移动几条阴影)

android - mpeg2 ts android ffmpeg openmax

java - 安卓错误 : FFMPEG No such file or directory error

C++ - 在 ffmpeg 中应用过滤器

python - Popen.write - 对已关闭文件的操作 |使用 FFmpeg 将图像转为视频

iphone - 在电影之间切换时 AirPlay 闪烁

c++ - 传输流和 mpeg 文件格式

ios - Apple 对 http 直播应用程序的政策