【发布时间】:2013-04-16 14:16:20
【问题描述】:
我的代码已经运行良好很长时间了,但我最近有 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 ...
更新:我已经尝试更换网络层,并看到相同的图像损坏,用完了可以尝试的东西。我还尝试将图像保存到磁盘,它从磁盘加载到已经损坏的浏览器中。如果我将浏览器指向源流,图像到达没有问题。
【问题讨论】:
标签: ios objective-c corruption mjpeg gcdasyncsocket