我的开源项目:一种TLV编解码器的实现

简介:

一个TLV对象示例如下:


wKioL1ZgS5TjVAGNAAAR9aYejqE708.png 

 

多个TLV对象可以连接起来,组成一个大的buffer:


wKioL1ZgS_iTTHB-AAAUS1zKw08795.png

一个TLV对象内部也可以嵌套另一个TLV对象:


wKiom1ZyvGfxic3fAAAcRRlQ9is443.png


我希望能提供一套API接口(C/C++/Java/其他语言),可以方便地完成TLV格式的编码和解码,项目地址如下所示:


https://github.com/Jhuster/TLV


其中,C++版本已经实现(更新:C/Java/Android版本也均已实现),介绍如下:


1. TLV编码的接口


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
//put one TLV box
bool  PutBoolValue( int  type, bool  value);
bool  PutCharValue( int  type, char  value);
bool  PutShortValue( int  type, short  value);
bool  PutIntValue( int  type, int  value);
bool  PutLongValue( int  type, long  value);
bool  PutLongLongValue( int  type, long  long  value);
bool  PutFloatValue( int  type, float  value);
bool  PutDoubleValue( int  type, double  value);
bool  PutStringValue( int  type, char  *value);
bool  PutStringValue( int  type, const  std::string &value);
bool  PutBytesValue( int  type,unsigned  char  *value, int  length);
bool  PutObjectValue( int  type, const  TlvBox& value);          
 
//do encode
bool  Serialize(); 
 
//access encoded buffer and length
unsigned  char  * GetSerializedBuffer()  const ;
int  GetSerializedBytes()  const ;


2. TLV解码的接口


1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
//do decode
bool  Parse( const  unsigned  char  *buffer, int  buffersize); 
 
//get one TLV box
bool  GetBoolValue( int  type, bool  &value)  const ;
bool  GetCharValue( int  type, char  &value)  const ;
bool  GetShortValue( int  type, short  &value)  const ;
bool  GetIntValue( int  type, int  &value)  const ;
bool  GetLongValue( int  type, long  &value)  const ;
bool  GetLongLongValue( int  type, long  long  &value)  const ;
bool  GetFloatValue( int  type, float  &value)  const ;
bool  GetDoubleValue( int  type, double  &value)  const ;
bool  GetStringValue( int  type, char  *value, int  &length)  const ;
bool  GetStringValue( int  type,std::string &value)  const ;
bool  GetBytesValue( int  type,unsigned  char  *value, int  &length)  const ;
bool  GetBytesValuePtr( int  type,unsigned  char  **value, int  &length)  const ;
bool  GetObjectValue( int  type,TlvBox& value)  const ;




本文转自 Jhuster 51CTO博客,原文链接:http://blog.51cto.com/ticktick/1719378,如需转载请自行联系原作者
相关文章
|
7月前
|
Web App开发 编解码 安全
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
视频会议技术 入门探究:WebRTC、Qt与FFmpeg在视频编解码中的应用
690 4
|
7月前
|
Web App开发 编解码 安全
【WebRTC 入门教程】全面解析WebRTC:从底层原理到Qt和FFmpeg的集成应用
【WebRTC 入门教程】全面解析WebRTC:从底层原理到Qt和FFmpeg的集成应用
3202 1
|
存储 编解码 安全
Opus从入门到精通(二):编解码器使用
opus_encoder_get_size()返回编码器状态要求的大小。注意,这段代码的未来版本可能改变大小,所以没有assuptions应该对它做出。编码器状态在内存中总是连续,复制它只要一个浅拷贝就足够了。使用opus_encoder_ctl()接口可以改变一些编码器的参数设置。所有这些参数都已有缺省值,所以只在必要的情况下改变它们。
1394 0
|
7月前
|
Go 开发工具 git
推荐一个开源流媒体服务器-livgo
推荐一个开源流媒体服务器-livgo
264 0
|
7月前
|
编解码 缓存 网络协议
EasyDarwin开源流媒体服务器
EasyDarwin开源流媒体服务器
280 0
|
存储 编解码 开发框架
主流视频编码技术H.264简介
  前戏   在之前的调研中,发现还是有些朋友对流媒体感兴趣,所以本人准备几篇文章讲解下流媒体技术。本文呢,讲解下H264,为之后的文章做个铺垫。感谢各位!   H.264简介
356 0
|
Linux 开发工具 C++
开源项目推荐:音视频项目之OBS/Shotcut/Openshot/Kdenlive/QtAV
开源项目推荐:音视频项目之OBS/Shotcut/Openshot/Kdenlive/QtAV
1171 0
|
算法 C++ 网络协议
6个P2P流媒体开源项目介绍
P2P流媒体开源项目介绍 1. PeerCast  2002年成立,最早的开源P2P流媒体项目。PeerCast把节点按树结构组织起来, 每个频道都是一个树, 直播源是根节点,父节点只给子节点提供数据。
3425 0