h264_rtp打包解包类及实现demo
打包头文件:
class CH2642Rtp
{
public:
CH2642Rtp(uint32_t ssrc, uint8_t payloadType = 96, uint8_t fps = 25, int32_t rtpsizeMax = RTP_PACK_SIZE_MAX);
~CH2642Rtp(void); int getOneRtp(uint8_t *buf, uint16_t bufsize, bool_t *eof); int setOneFrame(const uint8_t *nalbuf, uint16_t nalsize); private:
void resetRtpInfo(); private: uint8_t m_sps[SPS_SIZE_MAX], m_pps[SPS_SIZE_MAX];
uint32_t m_spslen, m_ppslen; uint8_t m_fps;
uint32_t m_ts;
uint16_t m_vseq;
bool_t m_vfirst;
uint8_t m_payloadType;
uint32_t m_ssrc ;
int32_t m_rtpsizeMax; int32_t m_naltype;
uint8_t *m_nalbuf;
uint16_t m_nalsize;
uint8_t *m_cur;
bool_t m_eof;
};
解包头文件:
class CRtp2H264
{
public:
CRtp2H264(uint8_t payloadType = 96);
~CRtp2H264(void); /**
* @brief 根据传入的rtp数据输出一帧H264
* @param [in] buf
* @param [in] bufsize
* @param [out] pkt h264帧(sps/pps/I/P/B)
* @return >0: normal h264 data, =0: 当前rtp data不足以输出一帧数据, <0: error happen
*/
int32_t readFrame(const uint8_t *buf, uint16_t bufsize, AvPacket* pkt); private:
int32_t _parseRtp(struct rtpheader *rh, const uint8_t *buf, uint16_t bufsize, payload_t *payload); int32_t _parseH264(const uint8_t *buf, uint16_t bufsize, AvPacket* pkt); private:
statics_unpack_t m_statics; uint8_t m_sps[SPS_SIZE_MAX], m_pps[SPS_SIZE_MAX];
uint32_t m_spslen, m_ppslen; uint16_t m_vseq;
bool_t m_vfirst;
uint8_t m_payloadType ;
int32_t m_ssrc ;
};
demo(linux x64环境下运行)及h264裸流测试文件下载地址:
http://www.srcbin.net/index.php/soft/detail.html?id=46
源码下载地址:
http://www.srcbin.net/index.php/file/code.html?id=18
h264_rtp打包解包类及实现demo的更多相关文章
- (转)基于RTP的H264视频数据打包解包类
最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打包.解包的文档和代码.功夫不负有心人,找到不少有价值的文档和代码.参考这些资料,写了H264 RTP打包类.解包类,实现 ...
- 基于RTP的H264视频数据打包解包类
from:http://blog.csdn.net/dengzikun/article/details/5807694 最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打 ...
- 【FFMPEG】基于RTP的H264视频数据打包解包类
最近考虑使用RTP替换原有的高清视频传输协议,遂上网查找有关H264视频RTP打包.解包的文档和代码.功夫不负有心人,找到不少有价值的文档和代码.参考这些资料,写了H264 RTP打包类.解包类,实现 ...
- Java之集合初探(二)Iterator(迭代器),collections,打包/解包(装箱拆箱),泛型(Generic),comparable接口
Iterator(迭代器) 所有实现了Collection接口的容器都有一个iterator方法, 用来返回一个实现了Iterator接口的对象 Iterator对象称作迭代器, 用来方便的实现对容器 ...
- 【Unity】AssetBundle的使用——打包/解包
最近参考了各位大神的资源,初步学习了Unity的资源管理模式,包括在编辑器管理(使用AssetDatabase)和在运行时管理(使用Resources和AssetBundle).在此简单总结运行时用A ...
- 07.进程管理+作业控制+文件查找与压缩+文件压缩与打包+tar打包解包+NFS
进程管理 程序放在磁盘上叫文件,把它复制到内存,并在cpu运行,就叫进程, 进程多少也反映当前运行程序的多少 进程在系统中会为每个进程生成一个进程号,在所有的进程中有一个特殊进程即init进程, 它是 ...
- Mtk Android 打包解包*.img
打包/解包 boot.img, system.img, userdata.img, or recovery.img [DESCRIPTION] MTK codebase编译出来的image必须使用MT ...
- xpack文件打包解包代码库
Github ###概述 xpack是一个文件资源打包工具及类库,可以对多文件进行打包解包. 其使用文件名的hash作为索引,建立hash索引表以加速文件查找. ###特性 支持hashid自动解冲突 ...
- Ruby中星号打包解包操作
Ruby中可以使用一个星号*和两个星号**完成一些打包.解包操作,它们称为splat操作符: 一个星号:以数组为依据进行打包解包(参考文章) 两个星号:以hash为依据进行打包解包(参考文章) 两个星 ...
随机推荐
- P1005 矩阵取数游戏 区间dp 高精度
题目描述 帅帅经常跟同学玩一个矩阵取数游戏:对于一个给定的n \times mn×m的矩阵,矩阵中的每个元素a_{i,j}ai,j均为非负整数.游戏规则如下: 每次取数时须从每行各取走一个元素,共n ...
- Excel ——多表关联查询-vlookup
一.分组 需求: 在B列的右侧添加一列[消费分组]对B列的[月分组水平]进行分组,原始数据如下: 公式:在 C2 输入:“=VLOOKUP(B2,$E$1:$G$4,2,1)”,下拉填充. 提示:VL ...
- 20165319 《JAVA程序设计》第一周学习总结
教材内容学习总结 1.了解了基础的JAVA历史 2.学会了JDK的安装 3.学会了JAVA的基本应用 git的学习以及代码相关 1.学会了git在Windows系统上的安装以及linux系统的安装 2 ...
- idea工具maven生命周期clean,install,package等区别
idea工具maven projects里面有9种生命周期,生命周期是包含在一个项目构建中的一系列有序的阶段. 一.最常用的两种打包方法: 1.clean,package(如果报错,很可能就是jar依 ...
- POJ 1328 安装雷达 (贪心)
<题目链接> 题目大意: 以x轴为分界,y>0部分为海,y<0部分为陆地,给出一些岛屿坐标(在海中),再给出雷达可达到范围,雷达只可以安在陆地上,问最少多少雷达可以覆盖所以岛屿 ...
- Django的MVT模型
MVC模型和MVT模型 MVC简介: MVC的全拼为Model-View-Controller,最早由TrygveReenskaug在1978年提出,是施乐帕罗奥多研究中心(Xerox PARC)在2 ...
- 流网络分析系统-SNAS
流网络分析系统-SNAS SNAS,Streaming Network Analytics System (project SNAS) ,是一个收集.跟踪.存取 千万条实时路由对象的系统. 官网:ht ...
- javaScript函数节流与函数防抖
javaScript函数节流与防抖之区别 函数防抖(debounce)与函数节流(throttle)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟.假死或卡顿 ...
- 2108 ACM 向量积 凹凸
题目:http://acm.hdu.edu.cn/showproblem.php?pid=2108 图一中,向量a × 向量 b 根据右手定则,得出向量c的方向.即为凸多边形. 图二中,若向量a ...
- Hibernate关联关系之多对多
多对多映射关系 建立多对多单向关联关系 创建Employee类: public class Employee { private Integer empid; //员工编号 private Strin ...