[转载]播放器上音频断续问题的原因(realmedia)

这个问题足足花了我三个礼拜。当前产品的播放器在解分辨率高、码率也高的REAL文件时,音频播放一半会断掉,丢掉一小段BUFFER的数据,然后再继续。并且断的频率和码率呈正比。

既然是音频出了问题,当然先从音频查起,于是从DEMUX,到DECODE,再到PCM RENDER,被我翻了个遍,每个FILTER的INPUT和OUTPUT都加满了调试信息和时间戳的打印,追查两周仍然没有结果,AUDIO这块,并不存在什么问题。但基本上可以确认是由于音频解码来不及导致的。前面BUFFER的DURATION已经播放完成了,而下个BUFFER的数据还没到达,就会导致这种情况。

最后经方案商确认,只有两种可能,一是FITLER的INPUT/OUTPUT BUFFER的空/满状态引起CPU BLOCKING没有在干活,二是既然CPU满负荷工作,那么就是PERFORMANCE的问题了,当前CPU主频实在扛不住高码率的解码了。

1、先解决不让CPU BLOCK的问题。在CPU时间片吃紧的情况下,BUFFER POOL空满状态又和FILTER的优先级设置有关,并且十分敏感!DEMUX肯定必须是最高优先级,否则后面大家都别玩了. 看下面这张FILTERS连接图,应该说是播放器最原型的几个FILTER了

(1) 如果VIDEO DECODER和AUDIO DECODER都是中等优先级别,而RENDER是高优先级,那么由于VIDEO DECODER没有足够的时间片来解码,导致VIDEO BITSTREAM BUFFER POOL很快被DEMUX塞满了,进而导致DEMUX无法把后面的BUFFER塞进去,  于是DEMUX卡在那里等待VIDEO BITSTREAM BUFFER POOL不满, 这时候文件读取工作已经被BLOCK住了, 下一块数据很可能就是AUDIO, 但是由于文件offset的原因,没法读出来;而另一条路上音频解码比较快, 于是AUDIO BITSTREAM BUFFER POOL就空了,  AUDIO DECODER没有数据可解,被BLOCK, 音频断掉。

(2) 如果VIDEO DECODER和AUDIO DECODER都是高优先级,而RENDER是中优先级,那么DEMUX出来,连接两个DECODER运行良好,解码比较快,但是RENDER没有得到足够的时间片把解好了的PCM数据BUFFER送出,于是音频断。同时由于AUDIO PCM BUFFER POOL满,堆积了很多来不及输出的PCM数据,于是AUDIO DECODER送出BUFFER时,被卡在等待RENDER INPUT POOL非空的事件通知上,于是AUDIO DECODER被BLOCK,然后AUDIO BITSTREAM BUFFER POOL满,接着DEMUX又被卡住了。哈哈,又彻底玩完了

(3) 也有其他搭配方法,反正就是VIDEO DECODER,AUDIO DECODER, PCM RENDER之间的优先级配比关系,我感觉就像高中物理实验在调节那种三根脚的水平仪,怎么调都无法让水平仪的小气泡正好在中间。吐血三升后,最后我还是选了VIDEO DECODER和AUDIO DECODER都是中等优先级,RENDER是高优先级的方法。这种配比也是方案商比较建议的,并且当时我问对方这种调整有没有什么公式可以参考,他说没有公式,只有经验,凭经验去调,我当时狂FAINT。现在如果有人问我,有没有什么公式,我同样会告诉他:经验,凭经验!

2、经过上面调整后,音频还是断,所以必须着手改善PERFORMANCE了。最简单的方法就是CPU提速,不过现在做不到;另一个比较好的方法就是在DECODER前面丢弃部分视频帧。我简单尝试一下在DECODER之前丢了一半数量的帧,效果看起来居然还不错,虽然理论上帧率降到12fps,但肉眼看起来居然没有什么差别,最重要的是,音频不断了,播放很完美。

所以,在解决这个问题上,实际上我走了很多弯路的。从一开始没有意识到这是一个系统级问题,而认为音频出了问题就应该去查音频模块,到调整BUFFER POOL大小和各FILTER的优先级,最后加上丢帧处理,问题才得以解决。最后看来,音频断的问题并不是一定由音频解码自己本身造成的,还得看别人的脸色,DEMUX是否被卡住,DECODER是否得到足够的INPUT DATA;RENDER是否被卡住,DECODE出来的数据是否及时处理完毕腾出BUFFER。即使AUDIO DECODER自己优先级很高,但前后的FILTER被卡住,音频同样也是会断的。而整条音频播放的链,又受到VIDEO DECODER那条链的影响和制约。这使我想到那句老话,“木桶能装多少水,取决于最短的那块木板”,用来形容这事,再贴切不过了。

播放器上音频断续问题的原因(realmedia)相关推荐

  1. 播放器上音频断续问题的原因

    这个问题足足花了我三个礼拜.当前产品的播放器在解分辨率高.码率也高的REAL文件时,音频播放一半会断掉,丢掉一小段BUFFER的数据,然后再继续.并且断的频率和码率呈正比. 既然是音频出了问题,当然先 ...

  2. bal插口_播放器上的这个“昂贵”的插口,是噱头还是真有用

    原标题:播放器上的这个"昂贵"的插口,是噱头还是真有用 有不少随身播放器上都有BAL这个插口,只要有这个接口,一般都不会太便宜.但不少朋友却反应听不出平衡口和普通耳机插口(非平衡口 ...

  3. bal插口_播放器上的“昂贵”插口,是噱头还是真有用

    有不少随身播放器上都有 BAL 这个插口,只要有这个接口,一般都不会太便宜.但不少朋友却反应听不出平衡口和普通耳机插口(非平衡口)的区别,认为买上当了. 难道平衡插口只是摆设?乙迷采访到音频品牌乐彼产 ...

  4. 删除播放器上的Flowplayer图标

    要删除播放器上的Flowplayer图标 ,首先,您需要购买许可证密钥. 许可证密钥对为单个域注册的任意数量的子域有效. 然后只需将播放器的位置更改为flowplayer.commercial-3.2 ...

  5. Beyond Compare 4访问手机或媒体播放器上的文件

    Beyond Compare 4 for Windows 可以使用媒体传输协议 (MTP) 访问 Apple iPhone.Android 手机和平板电脑.Windows Phone 设备和某些媒体播 ...

  6. html5的video播放器上禁止下载和禁止右键下载实现。

    <video id="video" src="#" controls controlsList="nodownload" oncont ...

  7. vue 音乐播放器上一首 下一首切换

    vue 音乐播放器上一首 下一首切换 根据自定义属性的值找到元素 我是使用监听来实现切换的,将v-for循环列表的index存储在vuex中,点击上一首或下一首改变index的值,在另一个组件中监听i ...

  8. Android-Frame布局,UI布局切换,录音,照相机,影音播放器,音频播放器

    <FrameLayout anroid:layout_weight="1"> <ImageView android:scaleType="fitCent ...

  9. 如何用计算机处理频谱,如何使用PicoScope PC示波器对CD播放器的音频频谱进行分析...

    1.频谱分析仪的分类 频谱分析仪一般分为两类:所谓"扫频"频谱分析仪和FFT频谱分析仪.扫频频谱分析仪是用一个或多个陷波滤波器(或混频器)在指定频率下测量信号振幅,然后改变该滤波器 ...

最新文章

  1. arcgis自动完成面怎么用_硬派的自然断裂面石材怎么用才美?
  2. --7、学期表(表)
  3. RequestResponseServletContext
  4. Visual Guide to NoSQL Systems
  5. Json-lib 需要的 jar 包
  6. Azure SQL的DTU和eDTU到底是个什么鬼
  7. 信息学奥赛C++语言:求n个数的和
  8. 安卓数字倒数控件_安卓11来了,感受一下
  9. 解决Ubuntu刚装好的时候su命令密码错误的问题
  10. python语言的读法-python是什么语言编写的
  11. 除了被动阅读,用户想要的更多
  12. 5个超实用抠图方法,哪个适用用哪个
  13. 信号与系统实验之信号的时域分析(Python+matplotlib)
  14. KMP扩展KMPManacher算法基础与习题(第二更)
  15. (四)keycloak 自定义用户(SPI)开发
  16. 锐度对比度饱和度什么的
  17. 用了TCP协议,就一定不会丢包吗?
  18. 企业级开发平台的演进
  19. oracle查询当天的数据(当年,当月,当日)
  20. PHP通过phpspreadsheet读取Excel文件

热门文章

  1. 内置MOS升压芯片FP6293 双节锂升压8.4V/1A
  2. 坚持理想与目标、并从小事慢慢做起
  3. vue.js电影网站
  4. 6 Zookeeper开荒
  5. Vue项目使用px2rem
  6. linux usb 4g驱动,如何在Linux下驅動4G Dongle
  7. TCP四次挥手 2MSL TIME_WAIT详解
  8. 为什么TIME-WAIT状态必须等待2MSL的时间
  9. 0欧姆电阻的重要作用
  10. Excel 多条件查找