—本篇由团队成员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. DataSet的Merge方法合并两张表

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

  2. jquery 同源跨域请求整理

    //同源ajax请求数据 function getData(url,paramjson,fn) { $.ajax({ type : "POST", //提交方式 url : url ...

  3. unix网络编程第一章demo

    之前一直以为time_wait状态就是主动关闭的那一方产生.然后这个端口一直不可以用.实际我发现服务端监听一个端口.客户端发来连接后.传输数据后.服务端关闭客户端套接字后.用netstat -nat ...

  4. [leetcode]84.Largest Rectangle in Histogram ,O(n)解法剖析

    Given n non-negative integers representing the histogram's bar height where the width of each bar is ...

  5. LeetCode OJ--Merge Sorted Array *

    http://oj.leetcode.com/problems/merge-sorted-array/ 两个有序数组A和B的归并排序,将结果存到A中.因为已知两数组长度且A的数组足够大,所以倒着处理, ...

  6. js-随机生成16进制颜色

    <body onload="color()"></body> <script> function color(){ 方法一: document. ...

  7. android ListView详解(转)

    在android开发中ListView是比较常用的组件,它以列表的形式展示具体内容,并且能够根据数据的长度自适应显示.抽空把对ListView的使用做了整理,并写了个小例子,如下图. 列表的显示需要三 ...

  8. cygwin搭建ssh服务器

    下载cygwin的setup.exe安装包

  9. CNN网络--VGGNet

    Simonyan, Karen, and Andrew Zisserman. "Very deep convolutional networks for large-scale image ...

  10. linux中断子系统:中断号的映射与维护初始化mmap过程

    本文均属自己阅读源代码的点滴总结.转账请注明出处谢谢. 欢迎和大家交流.qq:1037701636 email:gzzaigcn2009@163.com 写在前沿: 好久好久没有静下心来整理一些东西了 ...