关于G.729压缩问题的一些总结

G.729 使用single channel, 16bit 的sample,8000 sample per second 的PCM格式作为输入源, 即:

WAVEFORMATEX waveformat;

waveformat.wFormatTag 
=  WAVE_FORMAT_PCM;
waveformat.nChannels 
=   1 ;
waveformat.nSamplesPerSec 
=   8000 ;
waveformat.wBitsPerSample 
=   16 ;
waveformat.nAvgBytesPerSec 
=  waveformat.nSamplesPerSec * (waveformat.wBitsPerSample / 8 );
waveformat.nBlockAlign 
=  waveformat.nChannels   *  (waveformat.wBitsPerSample / 8 );
waveformat.cbSize 
=   0 ;

G.729 is a frame based encoding 10ms/frame, 16:1 compress rate,就是形成一个frame的数据需要10ms的sample.对于上述PCM格式来说,音频驱动会产生 8000 samples * (16 bit/s / 8 bit/bytes) = 16000 byte/s 就是说 一秒钟内音频驱动产生16000 bytes, 就是一毫秒产生16个字节

于是作为G.729的输入源的数据大小应该为 160byte的倍数, 就是说产生一个G.729的frame (这个frame 10 byte)需要输入160 byte的数据。

含有G.729的RTP包中payload根据RFC3551应该是2个frame,就是默认传输G.729的每个RTP包中有20Bytes=2frame的净负载

你可能感兴趣的:(byte,encoding)