2013-04-16 33 views
1

我的代碼長期以來一直運行良好,但最近我有兩臺新的網絡攝像機通過HTTP運行高分辨率MJPEG圖像流,而且我看到兩個不同的JPEG相機。所以很確定它沒有硬件相關。較老的較低分辨率相機仍然正常工作。我一直使用至今在iOS下使用2個不同的庫損壞的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 ... 

更新:因爲我已經嘗試更換網絡層,並看到相同的圖像腐敗,跑出來的東西嘗試。我也嘗試將圖像保存到磁盤,並從磁盤加載到已損壞的瀏覽器中。如果我將瀏覽器指向源流,則圖像沒有問題。

example jpeg

回答

0

原來,傳輸編碼是問題。