1

我的代码已经运行了很长时间,但我最近有 2 台新的网络摄像机通过 HTTP 运行高分辨率 MJPEG 图像流,并且我看到两台摄像机的损坏 JPEG 如下所示。所以很确定它与硬件无关。较旧的低分辨率相机仍然可以正常工作。

到目前为止我一直在使用的方法:

UIImage *image = [UIImage imageWithData:data]

这一直工作正常,我一直在确保我的 JPEG 以 0xff 0xd8 开头并以 0xff 0xd9 结尾。

有了更大的图像,我现在得到:

<Error>: ImageIO: JPEG Corrupt JPEG data: bad Huffman code
<Error>: ImageIO: JPEG Corrupt JPEG data: premature end of data segment

所以我决定试试 libturbojpeg,它显示了类似的解码视觉伪影,但没有错误消息。

流似乎可以通过浏览器正常工作......但是如果我从模拟器中保存一个帧,然后加载到浏览器中,工件就在那里。

我正在使用 GCDAsyncSocket 进行网络连接,它也可以正常工作很长时间了。

所以我想知道是否有人可以阐明事情可能在哪里被破坏了。如果网络数据丢失了,我怀疑我会得到完整的帧,或者预期的 15fps,(虽然我不知道 JPEG 对丢失有多敏感......)但我想不出还有什么可能导致这种问题。

1001 0x0D 0x0A--ThisString 0x0AContent-type:image/jpeg 0x0AContent-Length:17137 0x0A 0x0A 0xFF 0xD8 ...

... 0xFF 0xD9 0x0D 0x0A103f 0x0D 0x0A--ThisString 0x0AContent-type:image/jpeg 0x0AContent-Length:17894 0x0A 0x0A 0xFF 0xD8 ...

更新:我已经尝试更换网络层,并看到相同的图像损坏,用完了可以尝试的东西。我还尝试将图像保存到磁盘,它从磁盘加载到已经损坏的浏览器中。如果我将浏览器指向源流,图像到达没有问题。

示例 jpeg

4

1 回答 1

0

原来传输编码是问题所在。

于 2013-05-08T14:25:46.443 回答