研究了一下Adobe家HDS的具体实现 OSMF。利用其中的一个核心方法 flash.net.NetStream.appendBytes()构建了我们自己的HTTP点直播播放框架。
但今年年初发现一个问题:新框架直播的时候有爆音。

经过一段时间的现象收集,问题总结出来是这样:
1、直播的时候,播放一段时间后出现爆音;
2、同时去听别的电脑,并不是每台电脑上都会出现爆音;
3、出现爆音的不同电脑之间,Mac的爆音现象比Windows明显;
4、出现爆音的同一台电脑上,Mac上Chrome的爆音现象比Safari明显,Windows上Chrome的爆音现象比IE明显;
5、如果不经过浏览器,本地打开swf来播放流,则无爆音。

首先,我们想到了浏览器问题。于是升级最新的浏览器和FP,无效。

然后,开始怀疑Ffmpeg的segment muxer,于是俺自己写了一个Flv segmenter,无效。

接着,尝试看看播放框架本身是不是有什么问题。

我们原有的逻辑是这样:每个flv片都自带flv头以及AVC和AAC的第0帧,每次调用appendBytes()都调用一次appendBytesAction(RESET_BEGIN)。

现在我先用gnu split将一个大的flv文件按照300k一个切开,这样就只有第一个文件片有flv头和AVC的AAC的第0帧了。再构造对应的假直播接口,然后将播放框架的改成只有下载到第一片的时候才调用flash.net.NetStream.appendBytesAction(RESET_BEGIN),而后所有的片都只调用flash.net.NetStream.appendBytes()。

此时我惊喜地发现,爆音现象解除了。

但出现了另一个问题,播放画面开始出现卡顿。于是继续查找卡顿的原因。

卡顿的原因很简单。appendBytes()方法自带了2个buffer。除开正常的IO buffer,还有一个FIFO的tag buffer。它最多存放一个flv tag,每拼装出一个完整的flv tag就将其推入IO buffer。这样它就可以负责保证虽然数据都是一片一片碎片拼装起来的,但IO buffer中都是完整的flv tag。

我之前使用gnu split切分出来的文件肯定不是按照tag的边缘切分的文件。经观察,在片间填充tag buffer的时候就会出现卡顿。

于是使用自己的flv segmenter严格按照tag边缘来切分文件。

卡顿消失!但爆音归来……

最后,我们就想到这爆音会不会跟buffer有点关系呢?

编写框架初期,我们为了让用户减少直播延迟,设置了bufferTimeMax为20,作用是让buffer太满的用户加速播放它们buffer中的流,以追上最新直播点。是不是这个机制导致的爆音呢?

查看OSMF,它是将bufferTimeMax写死为0的。于是我们也将bufferTimeMax设为0。

爆音消失。

反推出几个结论:
1、之前部分电脑无法再现爆音问题,很有可能是因为它们的网速没有快到可以填满buffer的地步;
2、我们可能要使用跳过一些片的方式让网速不稳定用户减少直播的延迟;
3、OSMF里面还是有很多营养值得去吸取的。

这是次历时月余的查错。

现在终于解除了纠结,这感觉真好,真好。

转载于:https://www.cnblogs.com/fuland/p/4461360.html

解决NetStream.appendBytes直播爆音的问题解决相关推荐

  1. Linux虚拟声卡有吱吱声,解决Win7+8系统爆音有杂音吱吱声

    使用WIN7+WIN8系统的朋友 如果听音乐的时候有爆音 可以试试这个方法 如果不想看下面的代码,我早就准备好了 [批处理代码部分]: @echo off mode con cols=84 lines ...

  2. 音量调大时出现爆音的问题解决(也是从我的新浪博客转来的)

    电视平台,调节声音设置中的平衡,当值逐渐增大到一定值后出现爆音现象.整理问题点, 1.爆音及引起爆音的原因有:http://baike.baidu.com/view/238530.htm 2.网上的资 ...

  3. 音频淡入淡出效果——解决音频突变的爆音问题

    使用软件调节音量时如果音量之间的步进太大,声音突变,就能听到明显的爆音,尤其以单音音频更为明显,类似的问题还在声音起播.暂停.结束.快进快退时经常会出现,这个时候一般需要对音频进行渐入渐出的效果处理. ...

  4. 【音频】削波失真(爆音)问题定位与解决

    [音频]削波失真(爆音)问题定位与解决 Why:为什么要解决削波失真问题? What:什么是削波失真,如何定位 用户反馈的现象 音频异常环节定位 音频异常是发生在音频处理的哪个环节? 不同的音频采集方 ...

  5. linux windows爆音,如何解决 Windows 服务器远程桌面的爆音问题

    随着时代发展,拥有一台服务器对于大多数视障同学而言已经很简单,9.9 元每月的服务器对于在校的视障同学已经完全可以接受.当同学们买来一台 Windows Server 系统的服务器,通过远程桌面连接时 ...

  6. html5爆音,刻录音乐CD出现爆音的解决方法

    为什么刻录音乐光盘会有爆音?  刻录音乐CD出现爆音的解决方法. 制作音乐CD盘时,有时会发现有些CD盘听起怪怪的,劈哩啪喇的听起来很难听,这些声音我扪称作爆音.爆音的产生与刻录机读写头的设 置有关, ...

  7. Win10问题篇:解决AMD家CPU机械,固态硬盘混用导致的卡顿(爆音)问题。

    有的朋友使用AMD Cpu机械固态混用会有的卡顿问题,卡顿包括"爆音","硬盘占用突然100%","游戏卡屏". 我冷静分析加百度,是IDE ...

  8. 如何避免音频爆音/杂响?音频爆音常见的解决办法

    如果CPU负载过高,并且无法在所选择的缓冲速率内缓冲音频,则在播放过程中可能会出现音频故障或音频掉线(播放时出现停顿)等问题.如何解决这一问题呢?本文详细讲解了音频爆音常见的解决办法 要解决音频爆音/ ...

  9. 解决声卡爆音/杂音的四种方法

       内容提要:解决声卡爆音/杂音的四种方法,放MP3和电影的时候,总是会出现"噼噼啪啪"的声音,电脑播放任何音频时都会有爆音的情况出现.电脑采用了英特尔酷睿II E4500的处理 ...

最新文章

  1. android n-ify miui,MIUI7.5版刷机包
  2. 一辆特斯拉Model S在比利时充电时起火 充电桩也被烧焦
  3. 一些系统事件的手动触发方法
  4. 商海导航系统 服务器配置,海信商海导航推出商业管理系统全新增强版V5
  5. 新浪博客服务器是不是在维护,新浪博客是不是又在升级了?
  6. --save-dev 与 --save的区别
  7. android终端模拟器 apt,借贵吧问个安卓终端模拟器的问题
  8. maven complie报错汇总
  9. cs231n-LSTM_Captions
  10. HTML常用标签、文本格式化标签:加粗、倾斜、删除线、下划线等
  11. X加波浪线、横线、一点、尖尖读法
  12. 【渝粤题库】陕西师范大学202501 法语(二)作业
  13. 2.25嵌入式设计(总结)
  14. 日本一年中的重要节日及活动
  15. 基于椭球 磁补偿 matlab,基于椭球拟合的三轴磁传感器误差补偿方法.pdf
  16. 浙大PAT练习题1003
  17. vue点击按钮显示弹窗写法
  18. thinkpad卡在logo界面_联想笔记本开不了机卡住logo界面如何解决
  19. Java微信公众平台开发(十二)--微信JSSDK的使用
  20. LaTeX ASCE模板

热门文章

  1. PL/SQL Virtual Machine Memory Usage
  2. 毒瘤题No.006-byFHS
  3. 内嵌iframe撑高父容器,底部有4px留白问题解决办法
  4. 理解Java的NIO
  5. 邪恶的三位一体:机器学习、黑暗网络和网络犯罪
  6. JS实现图片放大查看
  7. 数据结构链表——JavaScript的实现
  8. adchos 文本混淆工具
  9. linux下的find文件查找命令与grep文件内容查找命令(转)
  10. PHP生成PDF完美支持中文,解决TCPDF乱码