Tob*_*oby 2 c++ video mjpeg ip-camera
我只是想从IP摄像机(Basler BIP-1280c)中读取视频流.我想要的流保存在相机的缓冲区中,长度为40秒,并在MJPEG中解码.
现在,如果我通过我的webbrowser访问流,它会向我显示40秒没有任何问题.但实际上我需要一个能够自行下载和保存流的应用程序.
相机是通过http访问的,所以我libcurl用来访问它.这工作正常,我也可以下载流没有任何麻烦.我选择将流数据保存到*.avi文件中(希望这是正确的......?).
但现在问题是:我可以打开视频(尝试使用图腾视频播放器和VLC)并查看所有已录制的视频 - 但它太快了.整个视频持续5秒(而不是40秒).MJPEG中是否有任何标题可以放置总视频长度或fps等信息?我的意思是视频播放器必须缺少一些信息,以便它们能够快速播放?
更新:
正如答案中所建议的那样,我用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图片都有这个标题.
更有趣的JFIF是在最后一行.在建议的答案中,这可能是文件格式的指标.但afaik JFIF是一种像jpg一样的单一图片格式.那么这甚至可能意味着整个视频文件只是一些"无脑"的链式图片?而我的播放器只是假设他应该一个接一个地展示这些图片,而不知道帧率?
没有一种格式可以与MJPEG一起使用.来自维基百科:
[...]没有文档定义单一的确切格式,这种格式被普遍认为是用于所有上下文的"Motion JPEG"的完整规范.
格式因供应商而异.我的建议是仔细检查你下载的文件.检查它是否真的是一个AVI容器.(某些相机可以发送包含在MIME容器中的帧).
之后,容器格式是明确的,你可以检查出该容器的文件和寻找具有这种格式和所需文件FPS.然后,您可以开始调整下载的文件以获得所需的效果.
您可能还会发现此项目很有用:http://mjpeg.sourceforge.net/
编辑:
根据您的示例数据,您的相机会将打包的帧发送到MIME容器中.(第一行是边界,然后是标题,直到遇到一个空行,然后是文件数据itseld,跟随边界,依此类推).
这些是JPEG文件,如标题所示:image/jpeg.JFIF是存储JPEG数据的标准文件格式.
我建议你:
这样您也可以指定所需的帧速率.
如果相机动态地插入AOI(感兴趣的区域),它可以使事情变得更复杂,这意味着它只能发送更改发生的图像的较小部分.但是,如果简单方法有效,您应首先检查.
| 归档时间: |
|
| 查看次数: |
4279 次 |
| 最近记录: |