问题标签 [mjpeg]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
tcp - 读取 mjpg TCP 流的字节后不需要的“NUL”字符串
我正在尝试将以太网摄像机发送的 jpeg 图像记录在 mjpg 流中。我使用 Borland C++ 应用程序 (VSPCIP) 获得的图像有时会“损坏”:我有一个“损坏的 jpeg 帧”的示例:它有 21690 个字符(对于 640x480 jpeg 图像),其中有一个 5045 的字符串后面有值“NUL”的字符(在 Notepad++ 中显示为 NUL)。而且因为当我达到 mjpg 标头中指定的“内容长度”时我停止读取字节,所以以下字节被切断。
两件事:-我首先想删除这些损坏的帧:我如何(快速)检测到一个字符串,比如“NUL”字符之后的 50 多个(或直接 5000 或 5045)?- 我必须找出为什么我的应用程序会添加这个由“NUL”字符组成的字符串。
php - 如何在 PHP 中禁用输出缓冲
我编写了一个简单的中继脚本,它连接到网络摄像头并从套接字读取数据,并使用打印功能输出这些数据。数据是已设置边界的 MJPG 数据。我只是输出读取的数据。
问题是 PHP 似乎正在缓冲这些数据。当我将相机设置为 1 FPS 时,提要会冻结 7-8 秒,然后快速显示 8 帧。如果我将分辨率设置为很大,相机会以每秒或多或少 1 帧的速度移动。我假设当时正在发生一些缓冲(因为大尺寸会快速填充缓冲区,而小尺寸不会),我不知道如何禁用这种缓冲。有谁知道怎么做?
代码:
silverlight - 访问 IP 网络摄像头流
我被要求调查在 Silverlight 应用程序(在浏览器中运行)中直接使用 IP 摄像机流。据我所知,这似乎意味着我需要能够处理 RTSP 流和 Motion JPEG 流。Silverlight 本身不支持这两者。
我找到了一个用于 MJPEG 解码的库 (http://channel9.msdn.com/coding4fun/articles/MJPEG-Decoder),但它只支持 Silverlight 中的 OOB,这是一个问题。
我只能找到 RTSP 的商业产品,但我还读到您可以使用MediaStreamSource
API 手动执行几乎任何流,但是关于如何在 RTSP 中执行此操作的信息我在任何地方都找不到。
你是怎么做到的?
c++ - 来自 IP 摄像机的 MJPEG 视频速度太快
我只是想从 IP 摄像机 (Basler BIP-1280c) 中读取视频流。我想要的流保存在相机的缓冲区中,长度为 40 秒,并以 MJPEG 格式解码。
现在,如果我通过我的网络浏览器访问流,它会显示 40 秒,没有任何问题。但实际上我需要一个能够自行下载和保存流的应用程序。
相机是通过http访问的,所以我用libcurl
它来访问它。这工作正常,我也可以毫无问题地下载流。我选择将流数据保存到 *.avi 文件中(希望这是正确的……?)。
但现在问题是:我可以打开视频(尝试使用 Totem 视频播放器和 VLC)并查看所有已录制的内容 - 但速度太快了。整个视频持续大约 5 秒(而不是 40 秒)。在 MJPEG 的标头中是否有任何内容可以放置诸如总视频长度或 fps 之类的信息?我的意思是视频播放器必须缺少一些信息,以便他们快速播放?
更新:
正如答案中所建议的,我用十六进制编辑器打开了文件,我发现是这样的:
--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 图片都有这个 Header。
更有趣的JFIF
是在最后一行。正如答案所建议的那样,这可能是文件格式的指标。但是 afaik JFIF 是一种类似于 jpg 的单一图片格式。那么这是否甚至可能意味着整个视频文件只是一些“无脑”的链接图片?而我的玩家只是假设他应该一张一张地显示这些图片,而不知道帧率?
stream - MJPEG 与 MPEG-4 的大小/压缩
MJPEG 和 MPEG-4 编码流之间的差异有多大?我有一个 IP 摄像机,它能够以 MJPEG 格式或 MPEG-4 将数据保存到 32 MB 缓冲区。分辨率为 800x600,30 FPS 现在当我使用 MJPEG 流式传输时,我可以节省 40-50 秒。使用 MPEG-4 流式传输时,我可以节省 8 分钟(如果几乎没有动作),如果有很多动作,我可以节省 3 分钟。
我知道 MPEG-4 的大小取决于有多少运动/变化,但我想知道的是,即使是全运动,MPEG-4 也可以比 MJPEG 保存更多的视频?MJPEG的压缩真的“那么糟糕”吗?
caching - MJPEG(?),浏览器有多智能?
我正在尝试与这种类型的基于 IP 的摄像机接口:
这有两种检索视频源的方法:
第二个只是返回一个 JPG 文件。
然而,第一个是我想知道的。
如果我只是将浏览器指向该 url,它会显示一个不断更新的图像,实际上速度非常快,但该页面似乎从未像预期的那样停止下载。
我的问题是:浏览器会以与考虑无限帧数的动画 gif 相同的方式考虑这一点吗?意思是,它会缓存这张图片并继续下载它,希望在某个时候它可以从头开始“播放”它吗?
简而言之,这会慢慢(或快速)填满我的浏览器内存和/或缓存吗?
我问是因为我想把这个程序放在移动设备上,如果流被缓存,我根本做不到。使用快照图像,我可以简单地检索它并显示它,但我知道除了使用 Web 控件之外没有其他方法可以显示流,因此我的问题是。
我开始下载流提要并暂停它,然后查看它,这是 Google Chrome 临时文件的摘录:
所以,在我看来它是一个 JPG 文件,但它一直在更新,所以我认为这是 MJPEG?
opencv - MJPEG 网络流到 OpenCV 2
谁能向我解释为什么下面的代码不起作用?
此代码确实无法打开流...
该代码基于此线程中的一些代码:OpenCV with Network Cameras
这里的 OpenCV 1 代码对我来说没有任何问题。
非常感谢您提前
c - 使用 opencv 录制时,得到的错误比特率容差太小,无法满足比特率
我是 opencv 新手,写入视频文件时遇到问题。基本上我正在从高清网络摄像头读取并写入 avi。可运行代码:
运行时出现错误
摄像头是 Macbook 上的高清网络摄像头。是那个引起问题的相机吗?如果是这样,我可以将比特率容差设置得更低吗?我是opencv的新手。谢谢!
顺便问一下,当 argv[1].avi 不存在时,CvVideoWriter 可以创建一个新文件吗?
delphi - 以可变帧速率逐帧创建 Motion JPEG
我正在分析我手头的问题的许多解决方案:我正在从设备接收图像,我需要从中制作视频文件。但是,图像到达时会有一些随机延迟,我正在寻找最好的编码方式。我必须逐帧创建这个视频,并且在每一帧之后我必须有一个带有新帧的新视频文件,替换旧的视频文件。
我正在考虑将帧速率固定为比我可能获得的最小延迟“更快”一点,然后重复最后一帧直到新的帧到达,但我猜这个解决方案不是最佳的。
此外,这个项目是用 Delphi 制作的(不,我不能改变它),我需要在每一帧之后将这些帧转换为视频文件。我正在考虑使用mencoder作为外部工具,但我正在阅读文档,但仍然没有找到让它在已经编码的 Motion JPEG 视频文件中插入帧的选项。由于我的图像以 JPEG 格式出现,我认为使用 Motion JPEG 是合理的,但目前还不确定。另外,我不知道 mencoder 是否可以用作库。如果这样做会很有帮助。
你有什么建议?
html - 使用 html5 在浏览器中可视化 mjpeg-over-http 流
好的,我有一台服务器通过 http 提供motion-jpeg流。我想做的是连接到服务器并在浏览器中可视化流,最好是在canvas
元素内。浏览器应该是 Safari Mobile。
是否可以使用 XMLHttpRequest 获取流,取出单个 JPEG 图像并将它们放入canvas
元素中?请记住,流是实时的,因此可能是无穷无尽的。