|
发表于 2009-5-5 23:13:49
|
显示全部楼层
很好,不过里面有些地方还是有错,比如:
(1)
"每帧的播放时间都是26ms",其实上只有采样率为44100的MP3每帧长度才是26ms,因为在mpeg1 layer2和layer3中 帧长为1152对samples(如果是双声道),每帧长度为1152/44100=0.0261s,当采样率为8ksps时,每帧长度为1152/8000=0.144s。而mpeg1 layer1有384对samples,mpeg2和mpeg2.5中的每帧长度好像是576对samples(因为不是iso11172-3的标准格式),因此每帧的播放时间不一定是26ms
(2)数据帧的大小
如果音频流是mpeg1 layer3,bit率为128000,采样率为44100sps的话 应该是 1152*128000/44100/8+1 = 144*128000/44100=417.95
这个时候就需要加padding bit凑够一个字节(注意后面的pad_slot),因此该码流每帧数据的长度为417到418字节(由pad_slot决定)。
pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
/* calculate beginning of next frame */
389 pad_slot = (header->flags & MAD_FLAG_PADDING) ? 1 : 0;
390
391 if (header->layer == MAD_LAYER_I)
392 N = ((12 * header->bitrate / header->samplerate) + pad_slot) * 4;
393 else {
394 unsigned int slots_per_frame;
395
396 slots_per_frame = (header->layer == MAD_LAYER_III &&
397 (header->flags & MAD_FLAG_LSF_EXT)) ? 72 : 144;
398
399 N = (slots_per_frame * header->bitrate / header->samplerate) + pad_slot; |
|