接触音视频,有时候会需要对带宽进行评估,而固定码率的音频带宽是相对比较好计算的。虽然好计算,但是以前老师经常说:“好记性不如烂笔头!”。因为我也是经常忘记这么去计算,所以,我还是在博客里面简单记录下吧。
音频的带宽,可能我们一般说的都是仅计入音频的,比如VOIP中常用的G711,其音频带宽是64kbps。而现在大部分走的都是以太网的IP数据,因此其实还有以太网自己的报文头以及校验内容。所以实际所用的带宽,肯定是大于64kbps的。为了计算以太网的带宽。需要先对以太网的报文格式做一个简单的了解。
网络分层
网络分层使用的是OSI模型,而TCP/IP协议族中,通常会把应用层、表示层和会话层归到应用层中去,也就是上图的层次分布了。
以太网报文格式
参考维基百科给出的资料:
除去负载,并且我们不打tag,那么一个以太网的基础头以及校验,所需要的字节数是:7+1+6+6+2+4+12=38,也就是以太网这些头及校验就需要38字节。
IP报文
这张图,我可以很清楚的看出,IP头,需要20个字节。
RTP报文格式
而我们在VOIP中,一般音频负载在RTP上。而一个RTP的报文格式如下:
RTP负载在UDP上,UDP头是8字节,RTP头是12字节,总的是20字节。
因此一个音频报文,在VOIP中,除去负载,其需要的字节,总共是:38+20+20=78字节。接下来,我们以G711做一个计算。
G711音频负载计算
G711使用的是64kbps(8k的采样率,由于一次才有最低是1字节,所以8k的采样率的带宽就是8k*8=64k了),打包时间是20ms,也就是1s需要打包的次数是1000/20=50次。那么64kbps被分配到50次的打包,每次需要的字节数是64000/50=1280bits也就是,1280/8=160字节。所以我们如果有通过wireshark抓包,可以看到G711的每一帧的报文是160字节。
那么一次打包,就需要160+78=238字节。而由于1s是打包50次,所以1s的带宽就是238*50=11900字节/s,也就是11900*8=95.2kbps。所以G711的网络带宽需要95.2kbps才能够保证音质。
以下是一些常用的音频带宽计算结果:
参考资料: