哥伦布编码适用于短数据编码;
原始数据------->+1------->去掉首位为0的数,直到看到1------->查看首位为1的后面有几位,然后在1前面加几位,该几位就表示原始数据的 长度;
例如:4,+1=5,它的二进制为:0101,去掉0,就是100,再加1,就是101;1的后面有2位,就加2位即:00101,那么2个0就表示长度为2;
原始数据为
Mediacodec---------> dsp----------->磁盘
像mp4,RMVB,是视频容器
进行解封装
解成:音频压缩数据、视频压缩数据(H264压缩数据);
根据宏块类型,进行一个类似Switch语句操作,是I帧,就走I帧解析数据步骤,是sps,就走sps解析步骤,是pps,就走pps解析步骤
定长编码:固定位数编码,容易产生大量的浪费;
mmkv中的produffuer编码:长度(记录内容的长度)+内容(按照长度的约束,内容具体多少),在h264中,这样会造成长度过度冗余;短数据不适合produffuer编码
在计算机中,一个int字符是8个字节,例如:5,=0000 0101
相于:表示2个1才都是1,要不然都为0,1&1=1,1&0=0,0&0=0,0&1=0;
2个16进制就是一个字节;0*FF
sps解码分析
67 64 00 15 AC D9
0110 0111 0110 0111 0000 0000 0001 0101 1010 1100 1101 1001
第一位0,禁止位:表示该套信息是否正常,正常为0,异常为1,是1的时候,后面的信息就不需要去解析;
第二、三位;11,表示信息的重要性,11的十进制是3,是最高优先,即I帧,2一般优先位P帧,1表示低级优先,B帧;dsp资源是有限的,等到资源不足时,不解析优先级低的,坚持解析优先级高的
后面5位:0 0111,表示宏块属性,00111十进制为7,则开始解码sps;
64
表示编码等级,等级越高,表示画面越清晰,
这里16进制是64,它的十进制为100,等级为High;十进制等级最小的66,表示是baseLine(用于直播)
00
表示标志
15
表示编码等级,最大支持码流范围,16进制为15,它的10进制为20,20最大支持5M/帧
AC:1010 1100
11:位深,0表示8位,1表示10位,一般是8位;
00表示标志位
D9
1101 1001
表示最大帧率
宽高计算时,需要+1,然后*16;
直接按位计算是不准确的,哥伦布编码长度不一定;