—本篇由团队成员Fantasy供稿!

RTP包头格式

  1. 码流总体结构

    h264的功能分为两层,视频编码层(VCL)和网络提取层(NAL)。H.264 的编码视频序列包括一系列的NAL 单元,每个NAL 单元包含一个RBSP。一个原始的H.264 NALU 单元常由 [StartCode] [NALU Header] [NALU Payload] 三部分组成,其中 Start Code 用于标示这是一个NALU 单元的开始,必须是”00 00 00 01” 或”00 00 01”。

其中RBPS有分为几种类型:

NAL的解码单元的流程如下:

  1. NAL Header

    占一个字节,由三部分组成forbidden_bit(1bit),nal_reference_bit(2bits)(优先级),nal_unit_type(5bits)(类型)。

    forbidden_bit:禁止位。

    nal_reference_bit:当前NAL的优先级,值越大,该NAL越重要。

    nal_unit_type :NAL类型。参见下表

RTP头没有CSRC为12字节。

EasyPusher分包方式

FUA占2字节 FU Indicator和FU header

FU indicator有以下格式:

+—————+

|0|1|2|3|4|5|6|7|

+-+-+-+-+-+-+-+-+

|F|NRI| Type |

+—————+

FU indicator有以下格式:

+—————+

|0|1|2|3|4|5|6|7|

+-+-+-+-+-+-+-+-+

|F|NRI| Type |

+—————+

问题点

直播时,如果用户加入会话组的时候上行推送用户推送的不是I帧,则用户需要等待一段时间才能看到画面。等待的时间会随着GOP的增大而随机性的增大,因为用户加入的时间点不同。

案例介绍:映客直播,刚进入房间就能很快看到画面,几乎是1s内,可以明显看到,来了画面之后,有一段类似快进的现象,这是怎么回事呢?因为后台缓存了大半个gop然后一次推送下来了,很多张画面在短时间内播放出来,就是快进的效果。

注意点:注意带宽容量,下行用户频繁的加入和退出会话组将会带来巨大的带宽压力,请综合估量,可以考虑加入配置,标注有多少用户能享受这等福利,当超过人数的时候只能不给予享受这个福利了。

附上解析代码(仅供参考)

typedef struct FU_Indicator_tag
{
unsigned char F:1;
unsigned char nRI:2;
unsigned char type:5;//
void DUMP()
{
printf("F[%d]\n",F);
printf("nRI[%d]\n",nRI);
printf("type[%d]\n",type);
}
}FUA_Indicator; typedef struct FU_Head_tag
{
unsigned char nalu_type:5;/ ttle 5 bit
unsigned char r:1;
unsigned char e:1;
unsigned char s:1;//high bit
void DUMP()
{
printf("nalu_type[%d]\n",nalu_type);
printf("r[%d]\n",r);
printf("s[%d]\n",s);
printf("e[%d]\n",e);
}
}FU_Head; typedef struct RTPHead_Byte0_tag
{
unsigned char csrcCount:4;
unsigned char externed:1;
unsigned char reserved:1;
unsigned char rtpVersion:2;
void DUMP()
{
printf("rtpVersion[%d]\n",rtpVersion);
printf("reserved[%d]\n",reserved);
printf("externed[%d]\n",externed);
printf("csrcCount[%d]\n",csrcCount);
}
}RTPHead_Byte0; typedef struct RTPHead_Byte1_tag
{
unsigned char mark:1;
unsigned char ptype:7; void DUMP()
{
printf("ptype[%d]\n",ptype);
printf("mark[%d]\n",mark);
}
}RTPHead_Byte1; typedef struct RTPHead_Byte34_tag
{
unsigned short sequence;
void DUMP()
{
printf("sequence[%d]\n",ntohs(sequence));
}
}RTPHead_Byte34;

获取更多信息

邮件:support@easydarwin.org

WEB:www.EasyDarwin.org

Copyright © EasyDarwin.org 2012-2016

EasyPusher RTSP直播之RTP数据包格式解析的更多相关文章

  1. IM通信协议逆向分析、Wireshark自定义数据包格式解析插件编程学习

    相关学习资料 http://hi.baidu.com/hucyuansheng/item/bf2bfddefd1ee70ad68ed04d http://en.wikipedia.org/wiki/I ...

  2. GPS数据包格式解析

    四种定位系统:1.美国的全球定位系统(Global Positioning System,GPS)2.俄罗斯的格罗拉斯(Global Nabigation Satellite System,GLONA ...

  3. WebSocket协议理解-数据包格式解析

    WebSocket 的诞生 做客户端开发时,接触最多的应用层网络协议,就是 HTTP 协议,而今天介绍的 WebSocket,下层和 HTTP 一样也是基于 TCP 协议,这是一种轻量级网络通信协议, ...

  4. H264的RTP负载打包的数据包格式,分组,分片

    H264的RTP负载打包的数据包格式,分组,分片 1.    RTP数据包格式 RTP报文头格式(见RFC3550 Page12): 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 ...

  5. 音视频RTP数据包封装

    对于语音通信而言,语音码率较低,添加适当冗余是对抗网络丢包的常见方式.冗余方式有多种,包括RED,FEC等都是冗余的一种,如果冗余份数较多,可以采取交织的方式实现.RFC 3350是RTP的基础标准协 ...

  6. ETHERNET数据包格式( IP & UDP & ICMP & ARP )

    ETHERNET数据包格式( IP & UDP & ICMP & ARP ) ETHERNET数据包格式 一.ETHERNET 数据包的协议类型 TYPE 的值为 0x0800 ...

  7. [转帖]IP /TCP协议及握手过程和数据包格式中级详解

    IP /TCP协议及握手过程和数据包格式中级详解 https://www.toutiao.com/a6665292902458982926/ 写的挺好的 其实 一直没闹明白 网络好 广播地址 还有 网 ...

  8. [na]ip数据包格式

    IP Datagram Structure 字段名 解释 版本 IP协议的版本,目前的IP协议版本号为4,下一代IP协议版本号为6. 首部长度 IP报头的长度.固定部分的长度(20字节)和可变部分的长 ...

  9. GPS数据包格式及数据包解析

    GPS数据包解析 GPS数据包解析 目的 GPS数据类型及格式 数据格式 数据解释 解析代码 结构体定义 GPRMC解析函数 GPGGA解析函数 测试样例输出 gps数据包格式 gps数据解析 车联网 ...

随机推荐

  1. 【POJ3321】Apple Tree(DFS序,树状数组)

    题意:给一棵n个节点的树,每个节点开始有一个苹果,m次操作 1.将某个结点的苹果数异或 1 2.查询一棵子树内的苹果数 n,m<=100000   思路:最近一段时间在思考树上统计问题的算法 发 ...

  2. DataSet的Merge方法合并两张表

    原文发布时间为:2008-08-01 -- 来源于本人的百度文章 [由搬家工具导入] UniqueConstraint uc = new UniqueConstraint("pk" ...

  3. webconfig连接串的使用与用代码写连接串的使用

    原文发布时间为:2008-07-25 -- 来源于本人的百度文章 [由搬家工具导入] 1、使用web.config中设置连接串 在web.config中<configuration>... ...

  4. es6总结(一)--let和const

    /*es6 是强制使用严格模式*/ /**/ function test(){ for(let i=0;i<10;i++){ console.log(i)//let生命的变量只在其声明的代码块中 ...

  5. 【Visual Studio】error C2220: 警告被视为错误 - 没有生成“object”文件 (转)

    原文转自 http://www.cnblogs.com/kex1n/archive/2011/10/19/2217266.html [错误原因] 该文件的代码页为英文,而我们系统中的代码页为中文. [ ...

  6. hdu 4514(树的直径+并查集)

    湫湫系列故事——设计风景线 Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65535/32768 K (Java/Others)Tot ...

  7. AC日记——[JLOI2014]松鼠的新家 洛谷 P3258

    题目描述 松鼠的新家是一棵树,前几天刚刚装修了新家,新家有n个房间,并且有n-1根树枝连接,每个房间都可以相互到达,且俩个房间之间的路线都是唯一的.天哪,他居然真的住在”树“上. 松鼠想邀请小熊维尼前 ...

  8. python笔记2:函数

    5. 函数 Python函数代码块以 def 关键词开头; 函数内容以冒号起始,并且缩进. *注: python中,strings, tuples, 和 numbers 是不可更改的对象,而 list ...

  9. Wireshark如何单独导出包的列信息

    Wireshark如何单独导出包的列信息   Wireshark提供了丰富的数据包导出功能.用户可以将数据包按照需要导出为各种格式.这些格式文件包含了包的各种信息.但是很多时候,用户只需要获取包的特定 ...

  10. bzoj 1835/luogu P2605 : [ZJOI2010]base 基站选址

    题目描述 有N个村庄坐落在一条直线上,第i(i>1)个村庄距离第1个村庄的距离为Di.需要在这些村庄中建立不超过K个通讯基站,在第i个村庄建立基站的费用为Ci.如果在距离第i个村庄不超过Si的范 ...