Я получаю поток mjpeg от WiRC.
Документ 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
Изменить: изменен код и добавлен результат консоли.