我正在接收来自 WiRC 的 mjpeg 流。
WiRC 文档描述了有关流的以下内容:
Camera image format JPEG
Camera image resolution CIF: 352 × 288
该文档描述了以下内容:
数据包规格
该协议使用 UDP 数据包传输 MJPEG 流。MJPEG 流由独立的 JPEG 帧组成。JPEG 帧以多个数据包的形式发送。片段大小由服务器应用程序确定。
数据包的前 16 个字节是包头。包头有四个字段,包含网络字节顺序(大端)的 32 位字。
name offset width description
version 0 32 bit protocol version and flags
frame num 4 32 bit bit index of the JPEG frame in the stream
offset 8 32 bit offset of the packet data in the JPEG frame
length 12 32 bit number of data bytes in the packet beyond the header
版本字段
标志在版本字段的高 16 位中编码,低 16 位包含版本号(在解释版本字段时请注意主机字节顺序)。
name bits description
reserved flag bits 31..17 these bits shall be ignored
last packet flag 16 if set this is the last packet of a JPEG frame
version information 15..0 Protocol version, expected value is 0x5503
我正在使用以下代码将流解码为图像:
int offset = ((int)(bytes[8] & 255) << 24) |
((int)(bytes[9] & 255) << 16) |
((int)(bytes[10] & 255) << 8) |
((int)(bytes[11] & 255));
int length = ((bytes[12] & 255) << 24) |
((bytes[13] & 255) << 16) |
((bytes[14] & 255) << 8) |
((bytes[15] & 255));
long frame = ((bytes[4] & 255) << 24) |
((bytes[5] & 255) << 16) |
((bytes[6] & 255) << 8) |
((bytes[7] & 255));
System.out.printf("Version: 0x%02X 0x%02X", bytes[2], bytes[3]);
Boolean last = (bytes[1] & 1) == 1 ? true : false;
System.out.println(" Offset: "+offset+" Length: "+length);
System.out.println("Lastpacket: "+last + " framenum: "+frame);
System.out.println();
Bitmap bmp=BitmapFactory.decodeByteArray(bytes,32,length);
但是,这会不断返回 BitmapFactory 失败的消息
有什么想法或建议吗?
我在控制台上得到以下响应:
UDP received stuff
Version: 0x5503 Offset: 0 Length: 7584
Lastpacket: true framenum: 223
编辑:更改代码并添加控制台结果