我们把x265编码后的数据称作一个nal包.因为交换机的MTU一般为1500大小,也就是说如过一个数据包大小超过1500就应该对这个数据进行切分.切分后的数据发送到客户端是无法识别的,所以我们需要对切分的数据包添加头部标识,让客户端有标识可以识别这是个什么数据包.这就叫x265 的 nal fu分包.
nal头:
F位: 16位只能为0;
Type:7位nal类型位;
LayerId 6位:保留位值为0;
TID:为0是非法的;
fu切片:
PayloadHdr :16位 值为49表示fu分包
Fu head: 8位 如下图
S位:第一个fu分片时为1;
E位:最后一个fu分片时为1,其余分片为0;
FuType:原来的nal type值;
可以看出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