1 EVRC
协议演进:3558->4788->5188
EVRC0净荷格式见3558
EVRC-WB净荷格式见5188
EVRC编解码算法以松散码激励线性预测(RCELP)算法为基础,具有线性预性和差错控制功能,EVRC家庭各种编码见下图:
2 多帧格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RTP Header [4] |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
|R|R| LLL | NNN | MMM | Count | TOC | ... | TOC |padding|
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| one or more codec data frames, one per TOC entry |
| .... |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
RR:Reserved,两位保留位,暂未用;
LLL:交错长度,为0表示一种特殊的交错帧,捆绑帧,即多帧之间的帧距为0;
NNN:交错帧索引;
MMM:模式请求号说明;
Count:TOC数量,例如取值为c,则TOC数量则为c+1
Padding:为字节对齐而引入的填充位,显然,TOC项如果为为奇数则不要填充位,为偶数则需要;
TOC:表项,即帧类型,取值如下表各种速率,目前取值不在该表内的帧非法;
0 1 2 3
+-+-+-+-+
|fr type|
+-+-+-+-+
Value Rate Total codec data frame size (in octets)
---------------------------------------------------------
0 Blank 0 (0 bit)
1 1/8 2 (16 bits)
2 1/4 5 (40 bits; not valid for EVRC) //3558定义没有,但后面的协议已经支持
3 1/2 10 (80 bits)
4 1 22 (171 bits; 5 padded at end with zeros)
5 Erasure 0 (SHOULD NOT be transmitted by sender)
3 单帧净荷不带头域格式
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| RTP Header [4] |
+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+=+
| |
+ ONLY one codec data frame +-+-+-+-+-+-+-+-+
| |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
通过净荷的长度在区分是哪个模式
4 多帧复用类型
a. 交错帧Interleaving
Count>0,Count+1帧复用
LLL=L,每两个帧间隔L+1
First RTP Packet in Interleave group:
LLL=L, NNN=0
Frame 0, Frame L+1, Frame 2(L+1), Frame 3(L+1), ... for a total of
B frames
Second RTP Packet in Interleave group:
LLL=L, NNN=1
Frame 1, Frame 1+L+1, Frame 1+2(L+1), Frame 1+3(L+1), ... for a
total of B frames
按协议里的说明,使用交错帧可以把降低数据丢失的比率,但如果有丢包,声音质量呈指数下降,质量下降可以理解,但为什么可以降低数据丢失的比率,根据从何而来?//待解惑
b. 捆绑帧
Count=0,同交错帧,只是多帧中帧间间隔为0。
5 信令协商内容
m=audio 49120 RTP/AVP 97
a=rtpmap:97 EVRC1/8000
a=fmtp:97 fixedrate=0.5 //可选
a=maxptime:120 //可选,多帧复用的帧数折算成打包时长必须小于maxptime的值
fmtp可带的属性:
maxinterleave,最大交错帧数;
dtxmax,dtxmin,silencesupp,hangover等用于静音抑制,见3551,3558;