Chinaunix首页 | 论坛 | 博客
  • 博客访问: 3202218
  • 博文数量: 1805
  • 博客积分: 135
  • 博客等级: 入伍新兵
  • 技术积分: 3345
  • 用 户 组: 普通用户
  • 注册时间: 2010-03-19 20:01
文章分类

全部博文(1805)

文章存档

2017年(19)

2016年(80)

2015年(341)

2014年(438)

2013年(349)

2012年(332)

2011年(248)

分类: LINUX

2013-11-05 18:34:58

ipad播放44100采样率音频爆音问题分析
1. ipad播放aac音频(44100采样率)爆音的原因分析:
现象:
mp4-->m3u8, 采样率44100,没有问题;
mp4-->flv-->m3u8, 这时候,如果音频采样率是44100,ipad播放就会出现爆音;
mp4-->flv-->mp4-->m3u8,  ipad播放也会出现爆音;
 
原因:
mp4文件的timescale(时间标尺)为90000,90000相当于1秒;
flv文件的timescale为1000,
m3u8的timescale为90000,与mp4相同;
 
第N帧的时戳计算公式:
mp4文件,timescale=90000, 音频采样率为44100,timestamp1 = N*44100/1024*90000,
flv文件, timescale=1000,   音频采样率为44100,timestamp2 = N*44100/1024*1000,
m3u8,   timescale=90000, 音频采样率为44100,timestamp3 = N*44100/1024*90000,
如果由mp4-->flv, timestamp2=timestamp1/90, 由flv-->m3u8, timestamp3=timestamp2*90, 在这个转换过程中,时戳损失了精度,造成了误差;
这也可以解释第三种现象,这损失已经造成,即使反向转换,也无法修复。
 
解决办法:
将音频采样率设定为32000,这样          
mp4            第一帧时戳:90000/(32000/1024)=90000*1024/32000=32*90,  第二帧时戳:2*32*90,第三帧时戳3*32*90, ...第N帧时戳N*32*90
转换为flv,    第一帧时戳:32, 第二帧时戳为2*32, 第三帧时戳为3*32, ...第N帧时戳为N*32
转换为m3u8,第一帧时戳:32*90, 第二时戳为2*32*90,第三帧时戳为3*32*90, 第N帧时戳为N*32*90.
各位,可以尝试一下,将上面的采样率由32000,替换为44100来计算一遍看一下,会发现每一次计算都会有除不尽导致的误差,这误差累计导致了ipad爆音。
通过实验发现,如果修正了这误差,那么ipad不再出现爆音,证实了这一点。
只是这种修正,不具有通用性,建议采取规避办法,将音频采样率设定为32000.
阅读(3112) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~