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为依据进行打包解包(参考文章) 两个星 ...
随机推荐
- linux系统虚拟机下安装nginx基础
虽然安装nginx什么的 .以及如何配置等等一系列的资料案例已经很多了 但是作为菜鸟的我还是搞了半天哈 官网上面也有.但是一些细节方面的并没有说明.导致踩了半天坑才搞好 本案例的系统环境 wi ...
- Oozie
Oozie的功能模块 workflow 由多个工作单元组成 工作单元之间有依赖关系 MR1->MR2->MR3->result hadoop jar:提交1个MR oozie:监控当 ...
- MSC VS 版本对应
MSC VS 版本对应 msc是微软的C编译器,安装对应的VS版本会带有,两者版本对应如下: MS VC++ 14.0 _MSC_VER = 1900 (Visual Studio 2015) MS ...
- Maya Max python PySide集成 shiboken版本对应关系
Maya_Max _python_PySide集成_shiboken版本对应关系 1.如何查看 Maya Max 集成的 Python版本: Maya:在 Maya 的安装目录下的 bin 文件夹中找 ...
- sql union 列的字段不一样的时候
- POJ 3090 Visible Lattice Points 【欧拉函数】
<题目链接> 题目大意: 给出范围为(0, 0)到(n, n)的整点,你站在(0,0)处,问能够看见几个点. 解题分析:很明显,因为 N (1 ≤ N ≤ 1000) ,所以无论 N 为多 ...
- HDU 5493 Queue 【线段树】
<题目链接> 题目大意:给你n个人的身高和他前面或者后面身高大于他的人的个数,求一个字典序最小的满足此条件的序列,如果不存在输出“impossible”. 解题分析: 因为要保证字典序最小 ...
- 从零搭建 ES 搜索服务(五)搜索结果高亮
一.前言 在实际使用中搜索结果中的关键词前端通常会以特殊形式展示,比如标记为红色使人一目了然.我们可以通过 ES 提供的高亮功能实现此效果. 二.代码实现 前文查询是通过一个继承 Elasticsea ...
- javaScript函数节流与函数防抖
javaScript函数节流与防抖之区别 函数防抖(debounce)与函数节流(throttle)都是为了限制函数的执行频次,以优化函数触发频率过高导致的响应速度跟不上触发频率,出现延迟.假死或卡顿 ...
- dns服务扩展