先简单记录下最近对AAC音频学习的打包时间计算以及估算平均帧大小。打包时间,其实是可以音频处理上通用的;而估算平均帧大小,是由于AAC单个帧的大小并非是固定的,因此估算的是一个平均帧大小。
samples
做音频,肯定要对samples有所了解,其中AAC有以下几种samples:
profile | samples |
---|---|
HE-AAC v1/v2 | 2048 |
AAC-LC | 1024 |
AAC-LD/AAC-ELD | 480/512 |
打包时间
打包时间,我们以AAC-LD进行举例说明,一般在RTP中常用的就是AAC-LD或AAC-ELD。两者的打包时间有两种,一个是480,一个是512。以512为16kHz例进行说明:
16000/512=31.25
也就是说16k的采样率,一秒内,其需要采样31.25次。那么一次的采样时间,也就是打包时间,就是如下:
1000/31.25=32ms
也就是说,16k,LD/ELD的打包时间其实是32ms。将两个公式合并下:
32ms=1000*512/16000
也就是:
打包时间=1000*samples/采样率
但是在与运营商对接这块,由于传统的音频一般采用的是G.711,其打包时间一般是20ms/10ms,一般都是10ms的倍数。而显然512采样的AAC-LD/AAC-ELD与20ms/10ms这种转换并不好转换。所以很多实用AAC-LD/AAC-ELD并且需要对接都采用的48k以及480的采样。刚好48k下的480采样的打包时间为10ms,可以很好的与G.711这类型的数据做转换兼容。
估算平均帧大小
接上文,16kHz的采样率,512采样,一秒内需要采样31.25次。如果我们需要的目标带宽是64kbps。
64000/31.25=2048bits
2048/8=256bytes
也就是目标带宽64kbps下,16kHz,512采样,平均一帧的大小是256字节。换算成公式,也就是:
一帧平均大小(bytes)=目标带宽/(采样率/samples)/8
一帧平均大小(bytes)=目标带宽*samples/采样率/8
其实这个公式,也是适用于G711的,我们将8kHz采样的64kbps的G711带入计算:
64000*160/8000/8=160
因为G711是固定码率的,所以其每个报文的大小,也就是刚好160bytes了。
转载请注明: 转载自elkPi.com
本文链接地址: AAC打包时间计算以及估算平均帧大小