首页 文章

来自IP Camera的MJPEG视频太快了

提问于
浏览
2

我只是想从IP摄像机(Basler BIP-1280c)中读取视频流 . 我想要的流保存在相机的缓冲区中,长度为40秒,并在MJPEG中解码 .

现在,如果我通过我的webbrowser访问流,它会向我显示40秒没有任何问题 . 但实际上我需要一个能够自行下载和保存流的应用程序 .

相机是通过http访问的,所以我使用 libcurl 来访问它 . 这工作正常,我也可以下载流没有任何麻烦 . 我选择将流数据保存到* .avi文件中(希望这是正确的......?) .

但现在问题是:我可以打开视频(尝试使用图腾视频播放器和VLC)并查看所有已录制的内容 - 但它太快了 . 整个视频持续5秒(而不是40秒) . MJPEG中是否有任何 Headers 可以放置总视频长度或fps等信息?我的意思是视频播放器必须缺少一些信息,以便它们能够快速播放?

Update:

正如答案中所建议的那样,我用hexeditor打开了文件,我发现了这个:

--myboundary..Content-Type: image/jpeg..Content-Length: 39050.........*Exif..II*...............V...........................2...................0210................FrameNr=000398732 6.AOI=(0800x0720)@(0240,0060)/(1280x0720).Motion=00000 (no) [00000 | 00000 | 00000 | 00000 | 00000].Alarm=0000 (no) .IO =000.RtTrigger=0...Basler..BIP2-1280c..1970:01:05 23:08:10.8 98286......JFIF..... . ............................ ....&"((

此标头在文件中重新出现(后面跟着大量的二进制数据字节) . 这实际上没问题,因为我在相机手册中读到所有MJPEG图片都有这个 Headers .

更有趣的是 JFIF 在最后一行 . 如答案所示,这可能是文件格式的指标 . 但afaik JFIF是一个像jpg一样的单一图片格式 . 那么这甚至可能意味着整个视频文件只是一些链式图片?而我的播放器只是假设他应该一个接一个地展示这些图片,而不知道帧率?

3 回答

  • 1

    没有一种格式可以与MJPEG一起使用 . 来自维基百科:

    [...]没有文档定义单一的确切格式,这种格式被普遍认为是用于所有上下文的“Motion JPEG”的完整规范 .

    格式因供应商而异 . 我的建议是仔细检查你下载的文件 . 检查它是否是 really AVI容器 . (某些相机可以发送包含在MIME容器中的帧) .

    container format 清除之后,您可以查看该容器的文档,并查找具有该格式和所需 fps 的文件 . 然后,您可以开始调整下载的文件以获得所需的效果 .

    您可能还会发现此项目很有用:http://mjpeg.sourceforge.net/

    Edit:

    根据您的示例数据,您的相机会将打包的帧发送到MIME容器中 . (第一行是边界,然后是 Headers ,直到遇到空行,然后是文件数据itseld,跟随边界,依此类推) .

    这些是JPEG文件,如 Headers 所示: image/jpeg . JFIF是the standard file format来存储JPEG数据 .

    我建议你:

    这样您也可以指定所需的帧速率 .

    如果相机动态地插入AOI(感兴趣的区域),它可以使事情变得更复杂,这意味着它只能发送更改发生的图像的较小部分 . 但是你应该首先检查简单的方法是否有效 .

  • 6

    在un * x系统(linux,osx,...)上,您可以使用 file cmdline工具对文件格式进行(通常是好的)猜测 .

  • 1

    --myboundary 表示该流是通过HTTP传输为多部分内容的常规M-JPEG . 没有众所周知的文件格式可以保存此流"as is"并且可以播放(即如果您将其重命名为 AVI 它不应该播放) .

    格式本身是 (boundary, subheader, JPEG image)(boundary, subheader, JPEG image)... 等序列 . 流没有时间戳,因此播放速度完全取决于播放器 .

相关问题