如何将运动jpeg帧从ip摄像机(rtp流)转换为有效的jpg图像
How to convert motion jpeg frames from ip camera(rtp stream) to valid jpg image
我通过RTP流从ip摄像机接收到动态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 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压缩视频"被分成几个部分。您需要按照以下c#库/方法将部分合并回有效的JPEG:保存来自网络摄像机RTP流的JPEG文件
从原始数据或其他来源创建JPEG的最快方法是使用JPEG组自己创建的libjpeg C库。
相关文章:
- 错误:在尝试检测 std::cout 是否<< t 时,功能强制转换为数组类型;有效
- 将 C 函数转换为 C++ 以检查数字是否有效
- 一种将 Dart 中的字节数据转换为 C++ 中的无符号字符*的有效方法?
- 可以有效地转换 std::any 与 std::any_cast
- 如何有效地将一个大std::字符串的一部分转换为float
- static_cast:转换函数模板——它们真的有效吗
- 隐式转换:以下警告是否有效?
- 将第一个派生类转换为第二个派生类 - 为什么有效?
- 为什么此元组到引用元组 (std::tie) 转换有效?
- 自定义类型转换运算符在转发引用上调用时不起作用(当对象按值传递时有效)
- 如何有效地将C / C++逻辑转换为python?
- 是否存在将长整型转换为指针有效的情况
- 最有效的安全方法将 std::map<int, std::shared_ptr> 转换为 std::<Base>map<int, std::shared_ptr<D
- reinterpret_cast可以将无效的指针值转换为有效的指针值
- 从nullptr_t转换为bool:有效与否
- 为什么C++隐式转换有效,而显式转换无效?
- 为什么 constexpr 隐式转换并不总是有效?
- 为什么 C 样式的转换有效,而reinterpret_cast则无效?
- 为什么"const int" "int"转换有效,但"const char[]"到"char *"不起作用
- 为什么向上转换有效,但向下转换会产生编译时错误