如何将运动jpeg帧从ip camera(rtp stream)转换为有效的jpg图像

时间:2014-07-03 11:33:17

标签: c++ jpeg compression mjpeg

我已经通过RTP流从ip camera收到了动作jpeg帧,我尝试将帧转换为有效的jpg图像。我的相机型号是Secubest PXN-0512P。它通过RTP流组播运动jpeg数据的视频。现在,我已经解码了RTP流并获得了内存中的每个帧,我尝试将其转换为有效的jpg图像。

你知道这样的工具来完成这个功能吗?处理m-jpeg框架的步骤是什么? (例如添加jpeg-header,huffman表)。我是这个领域的新手。

我用C ++语言编写它。

非常感谢。

更新1 我尝试直接将收到的帧数据写入jpg,当我在ubuntu打开它时,它显示警告“错误解释JPEG图像文件(不是JPEG文件:以0x00 0x00开头)”。然后我向它添加一个JFIF标题,它显示警告“错误解释JPEG图像文件(不支持的标记类型0xf0”)。 Jpeg_header是

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);

我怎么能解决它?非常感谢你!

2 个答案:

答案 0 :(得分:1)

从原始数据或其他来源创建JPEG的最快方法是使用JPEG组自己创建的libjpeg C库。

答案 1 :(得分:1)

JPEG图像根据RFC 2435 "RTP Payload Format for JPEG-compressed Video"分为几部分。您需要按照此C#库/方法将部件合并回有效的JPEG:Saving JPEG file coming from Network Camera RTP Stream