我们把x265编码后的数据称作一个nal包.因为交换机的MTU一般为1500大小,也就是说如过一个数据包大小超过1500就应该对这个数据进行切分.切分后的数据发送到客户端是无法识别的,所以我们需要对切分的数据包添加头部标识,让客户端有标识可以识别这是个什么数据包.这就叫x265 的 nal fu分包.
nal头:
![](https://img.haomeiwen.com/i11926759/7631c9319e349a17.png)
F位: 16位只能为0;
Type:7位nal类型位;
LayerId 6位:保留位值为0;
TID:为0是非法的;
fu切片:
![](https://img.haomeiwen.com/i11926759/43f07b9eb6d1b8b1.png)
PayloadHdr :16位 值为49表示fu分包
Fu head: 8位 如下图
![](https://img.haomeiwen.com/i11926759/bfa1427ee205eaa2.png)
S位:第一个fu分片时为1;
E位:最后一个fu分片时为1,其余分片为0;
FuType:原来的nal type值;
![](https://img.haomeiwen.com/i11926759/d3823e1bb0fc2bbc.png)
可以看出rtp头是4*32=128 bit;
v:版本号2位,现在是2版也就是0b10;
P:位1位 0b0
X:位1位 0b0
M:位1位 一组gop最后一包时设置1
PT:位8位 h265/h264值为96
sequence number: 16位技术器,fu分片时从第一个分片到最后一个分片的值不变.换句话说就是每一帧自增1;
timestamp:媒体时间戳算法为:波特率/每秒帧数*当前帧数.
SSRC:唯一标识_可能不对但是并没有影响到我的需求
CSRC:唯一标识_可能不对但是并没有影响到我的需求
代码:
https://github.com/wangqinfeng511/x265_encoder
网友评论