我正在编写一个应用程序来制作从iPhone到服务器的MJPEG-Stream . 我的问题是,我看到的JPEG是一个奇怪的彩色线条集合 . 如果需要更多信息,我可以发布特定代码 .
这些是步骤:
-
通过
AVCaptureVideoDataOutput
获取帧 -
将它们转换为
UIImage
-
从中获取
NSData
UIImageJPEGRepresentation()
-
创建
NSMutableData
并使用"Content-Type: image/jpeg"和--BOUNDARY包装图像
现在我想将它们作为UDP数据包发送到我的服务器 . 我在iPhone上使用asyncudpsocket,在PC上使用小型java datagrammserver . 第一个问题是mtu . 如果 nsdata
大于9kb,Asyncudpsocket表示消息太长 . 因此:
-
将图像拆分为9kb块
-
使用asyncudp套接字发送它们
-
在PC上接受端口2020上的TCP套接字
-
接收DatagrammPackets并将它们流式传输到连接的TCP套接字
-
使用localhost:2020打开Firefox并观看MJPEG
我've tested each part seperated and can tell that they'好的 . 我可以在 UIImageView
中显示图像,我可以从套接字发送,接收和显示字节,我可以通过serversocket流式传输JPEG并在Firefox中观看它们 .
如果图像足够小(有时就是这种情况),图像会适合一个datagrammpacket,我可以看到 Headers ,字节和边界..但为什么我的MJPEG流仍然显示一个奇怪的彩色图像(而不是黑色)或白色图像,应该是这种情况)?
1 回答
我终于完成了这个应用程序 .
我的问题是我首先将
DatagrammPacket.getBytes()
转换为String
而不是使用writeBytes()
来编写它 . 现在我用OutputStream
直接写字节 .