Я получил движущиеся jpeg-кадры от ip-камеры по потоку RTP, и я пытаюсь преобразовать кадры в действительные изображения jpg. Моя модель камеры — Secubest PXN-0512P. Он осуществляет многоадресную передачу видео движения jpeg по потоку RTP. Теперь я расшифровал поток RTP и получил каждый кадр в памяти, и я пытаюсь преобразовать его в действительное изображение JPG.
Знаете ли вы так инструменты для выполнения этой функции? А какие шаги нужно предпринять для m-jpeg frame? (например, добавить jpeg-header, таблицу Хаффмана). Я новый программист в этой области.
Я программирую это на языке C ++.
Большое спасибо.
Обновление 1
Я пытаюсь напрямую записать полученные данные кадра в jpg, когда я открываю его в Ubuntu, отображается предупреждение «Ошибка интерпретации файла изображения JPEG (не JPEG-файла: начинается с 0x00 0x00)». Затем я добавляю к нему заголовок JFIF, он показывает предупреждение «Ошибка при интерпретации файла изображения JPEG (неподдерживаемый тип маркера 0xf0»).
Jpeg_header is
char jpg_header1[] = {
0xff, 0xd8, // SOI
0xff, 0xe0, // APP0
0x00, 0x10, // APP0 Hdr size
0x4a, 0x46, 0x49, 0x46, 0x00, // ID string
0x01, 0x01, // Version
0x00, // Bits per type
0x00, 0x00, // X density
0x00, 0x00, // Y density
0x00, // X Thumbnail size
0x00 // Y Thumbnail size
};
Мой код
m_FileStream.write(jpg_header1, sizeof(jpg_header1));
int skip_bytes = 2;
m_FileStream.write(mem_buffer.pData+skip_bytes, mem_buffer.DataSize-skip_bytes);
Как я мог решить это? Большое спасибо!
JPEG изображение разбито на части в соответствии с RFC 2435 «Формат полезной нагрузки RTP для видео, сжатого в формате JPEG». Вам необходимо объединить детали обратно в допустимый JPEG, следуя этой библиотеке / методу C #: Сохранение файла JPEG с сетевой камеры RTP Stream
Самый быстрый способ создания JPEG из необработанных данных или других источников — это использование libjpeg Библиотека C, созданная самой группой JPEG.