语音社交系统源码中音视频一些疑难问题的排查,其中一个比较重要的原则就是要将音视频作为一个系统来看待,问题有可能只是表现在播放端,但是根因有可能在编码端,也有可能发生在传输过程中。其实对于音视频有些问题的优化,有时也要整体优化,比如延时这种问题。

下面我将会分析语音社交系统源码延迟的概念,延迟的产生和类型、延迟的优化三大部分的内容。

语音社交系统源码中延迟抖动:

延迟:是网络传输中的一个重要指标,测量了数据从一个端点到另外一个端点所需的时间。一般我们用毫秒作为其单位。通常我们也把延迟叫做延时,但是延时有时还会表示数据包发送端到接受端的往返时间。这个往返时间我们可以通过网络监控工具测量,测量数据包的发送时间点和接受到确认的时间点,两者之差就是延时。单向时间就是延迟。

抖动:由于数据包的大小,网络路由的路径选择等众多因素,我们无法保证数据包的延迟时间是一致的,数据包和数据包延迟的差异我们称为抖动。也就是说因为数据包的延时值忽大忽小的现象我们称为是抖动。

可以看出延迟会造成抖动,但是抖动并不完全等价于延迟,所以有时我们分析实际问题时还是要加以区分。

像语音社交系统源码就对低延时要求非常高的场景。但是我们也不能一味的追求低延时,低延时是好,但是会带来成本的上升。在语音社交系统源码开发的实时传输领域有一个著名的三角理论。

成本我们可以理解为购买服务器需要的硬件成本、软件开发的人力成本和通讯带宽的租赁费用;延时就是上面理解的数据包端到端之间的时间差,质量可以理解为视频的清晰度和细节,音频的高保真以及数据的完备性。任何行业完成实时数据交互,都要受这三方面的因素的限制。如果过分追求低延时,要么我们要付出比较高的成本要么我们得下降我们的音频质量。所以我们针对不同行业,选择一个用户能接受和不影响体验的延时即可。

其实对于音频系统,我们可以将上面讲述的三种延时归纳为下面几种:

语音社交系统源码设备端的延时:包括数据的采集、前处理、编码、解码、渲染等处理阶段花费的时间。

音频部分:

音频从采集后,会经过模数转换,将传统的模拟信号转换成数字信号就会产生延时,一般在10ms级别;采集后,进行编码,采用不同的音频编码器也会产生不同的延时,以Opus为例,延时也在2.5ms-60ms级别,可以参考上篇文章分析。发送前还需要进行3A算法(AEC、ANS、AGC)的处理,又需要十几ms.

视频部分:

从自然采光到成像,取决于CCD和CMOS的成像效率,不过一般也需要几十ms.对采集的RGB数据要进行YUV转换和编码,如果还有B帧会产生比较大的编码延时,紧接着播放端的渲染也是需要一定时间的。

无论音频还是视频,为了防止抖动我们一般会在播放端加上jitter buffer缓存,数据从进入到缓存到出缓存以及当发生丢包时,进行的一些传输算法处理也是需要一定的时间,大概会在几十毫秒到几百毫秒之间。

设备端和服务器的延时:也就是俗称的第一公里和最后一公里的延时,包括了A1到A2推流产生的延时和A5向A4拉流的延时。这里的延时跟设备端距离服务器的物理距离,服务器和设备端的网络运营商,设备的网速和带宽,设备端自己的负载都有密切关系。

服务器之间的延时:包含了音视频数据在网络上进行再次转码、切片、转封装和协议以及分发CDN等花费的时间,包含了A2到A4整个阶段花费的时间。这里要看设备的推流端和播放端是不是在同一个边缘节点,如果属于同一个边缘节点,那延时能小点。国内城市之间的传播延时也在几十毫秒,如果跨洲延时会达到百毫秒以上。

所以单就降低实时音频系统延时一项内容,都不是靠只优化一个节点或者一个阶段就能达到你想要的预期效果,必须站在语音社交系统源码音频整个系统来看待。

延迟优化:

经过以上的分析,我们就分析出延时产生的阶段和节点,这样优化延时就有了方法。延时会产生在:

1. 语音社交系统源码音频数据的前处理;

2. 语音社交系统源码音频数据的编解码;

3. 语音社交系统源码音频数据的网络传输;

4. 为了防止抖动业务代码中的缓冲区,包括推流服务、转码服务、播放器的缓存等;

5. 音频的渲染播放;

当然上面会产生延时的地方对于最终的延时影响权重是不一样的,其中数据的前处理、编解码、渲染对于延时影响比较小,而网络传输和业务代码的缓存对于延时影响非常大。所以优化也要结合你的业务有重点进行。

优化思路1:调整推流端和播放端的缓冲区大小,所以我们要动态调整我们的缓冲区,对于推流上行区我们如果带宽不够就会产生网络阻塞,这时发送端的数据就会积累,最终延时不断累加,导致延时变大。我们此时就需要有一套机制来能够预测带宽,降低发送码率,减低当前发送数据量,减少网络阻塞,等网络好的时候再继续增大数据发送量,增大码率。

上面说的这些算法有很多,其中WebRTC方案就采用了GCC算法,还有一些类似BBR的算法来实现上述想法。

对于播放端的缓存,当网络不好产生的延时比较大时,我们需要通过丢帧和加速播放方式快速消耗掉播放缓冲区的数据,从而消除累计的延时。

优化思路2:优化网络传输,如果实时性要求很高的场景,你如果选用基于TCP承载的网络传输协议,无论你怎么优化,也很难降低延时。因为TCP会进行三次握手,而且它会对每一次发送的数据进行确认,还要对丢包进行重传,所以这些限制很不适合降低延时。我们要优化传输协议,我们可以将基于TCP的RTMP、HLS协议切换到基于UDP的RTP、QUIC协议上,或者自己开发基于UDP的私有协议栈,这样我们就可以对一些TCP延时大的功能进行裁剪和修改,对于一些不关重要的数据进行丢弃,优先保障重要数据的传输。

优化思路3:选择优质的CDN加速服务,保障传输的线路带宽和线路资源,一般都会提供测速选线、动态监测、智能路由等功能。

优化思路4:如果感觉自己的编解码,前期处理等花费时间比较多,我们就需要选择合适的音频编解码器,进行算法调优降低延时,比如我们在播放端能支持硬解的优先选择硬解否则才选择软解。

上面所说的任何一种实践方法用一两篇文章都讲述不完,特别对于一些GCC、BBR等网络传输算法,依然是高校和大厂最前沿最热门的研究领域,需要用心学习才能落地到语音社交系统源码开发上,这里只是简单的提出,有兴趣的需要进一步搜索学习和实践。后面本公众号也会进行逐渐介绍这些算法,敬请期待。

语音社交系统源码中实时音频常见问题分析和解决:延时和抖动相关推荐

  1. 语音聊天室源码中的变声,应用了哪些算法?

    导读:2021开年以来,语音聊天室源码伴随着Clubhouse的爆火再获资本的关注,国内相关产品都迎来了股价的大幅上涨,预计未来音频化在社交领域还会有长期且广泛的需求. 在移动互联网技术加持下,语音聊 ...

  2. 一对一软件开发:在一对一社交app源码中加入这个功能,很有用...

    一对一软件开发在年内倍受欢迎,随着社交app的盛行,越来越多的人愿意涉足社交行业,但传统社交平台需要大量资金支持运营,而一对一直播社交平台由于其机制限制,对带宽使用较少.对平台能承受的并发量要求低.所 ...

  3. 带货直播系统源码中,商品详情页是如何搭建起来的

    市面上大多数带货直播系统源码的商品介绍详情页,都是仿照淘宝的商品详情页的制作的,那么这个模块是如何通过代码建立起来的呢?下面小编将会通过代码来描述其实现过程. 1.实现滑动控制到导航栏的显示和隐藏 m ...

  4. android系统源码中添加app源码(源码部署移植)

    涉及到系统定制,需要在系统中加入自己的apk工程,但是上网找了很多资料都是不够全面的,或者看了还是没搞懂,我自己也是一点点摸索过来的,花了不少的时间,也是踩了不少的坑,因此特开一文,帮助大家渡河. 申 ...

  5. java计算机毕业设计校友社交系统源码+系统+数据库+lw文档+mybatis+运行部署

    java计算机毕业设计校友社交系统源码+系统+数据库+lw文档+mybatis+运行部署 java计算机毕业设计校友社交系统源码+系统+数据库+lw文档+mybatis+运行部署 本源码技术栈: 项目 ...

  6. 在 Android 系统源码中自定义系统服务(Custom System Service in AOSP)

    该原创文章首发于微信公众号:字节流动 在 Android 系统源码中自定义系统服务(Custom System Service in AOSP) 配置编译环境(Initial AOSP build e ...

  7. 游戏陪玩系统源码中聊天室内礼物系统的实现

    游戏陪玩系统源码中聊天室的礼物系统,第一步用户看到的无外乎都是礼物的列表界面 纵观主流聊天室的礼物列表应该都是使用UICollectionView实现的,所以我也不例外,下面就是各种撸代码.效果如下 ...

  8. 如何实现游戏陪玩系统源码中注册验证码的自动填写功能

    新用户在注册登录游戏陪玩系统源码时往往需要进行短信验证,如果没有验证码自动填写功能则需要用户自行切换软件进行填写,无异于增添了许多步骤,会影响到用户的使用体验,所以今天我们主要来说一说如何实现游戏陪玩 ...

  9. 直播软件开发教程之在直播系统源码中设置任务奖励

    直播软件开发是当下流行的视频社交类软件开发类型的一种,直播平台也是年轻人喜爱的网络平台之一,许多直播平台为了增加用户粘性,推出了任务奖励的功能,这是怎么实现的呢? 接下来以云豹直播系统源码为例,为大家 ...

  10. 在直播APP系统源码中基于腾讯视频云SDK制作简易版直播回放播放器

    在直播App系统中,当主播结束之后,我们需要使用播放器观看直播的一些回放片段,在观看回放的过程中,我们会使用到开始,暂停,控制播放位置,进度监听,全屏等功能,然而腾讯点播并没有提供这些简单的控制功能, ...

最新文章

  1. Oracle 11g服务端的安装和配置
  2. CVPR 2020 Oral | 旷视提出目前最好的密集场景目标检测算法:一个候选框,多个预测结果...
  3. libz.so.1: cannot open shared object file: No such file or directory
  4. esxi 环境 西数硬盘测试软件,总算基本完美的折腾好ESXI+群晖+NVME
  5. 数据分析-回归-案例-波士顿房价数据集
  6. 仿淘宝收货地址之三级联动
  7. 怎么把PDF图片转换成PPT
  8. IE浏览器验证码不刷新
  9. [微信小程序]云服务器上传图片或视频
  10. winrar去掉烦人的广告 亲测有效
  11. pkuseg,LTP,jieba分词实践
  12. 销售宝:没有销售技巧,能做软件销售么?大神一针见血解答
  13. java applet的生命周期_Java Applet的生命周期是什么?生命周期方法介绍
  14. git如何把分支提交的代码同步到另一个分支(git cherry-pick)
  15. linux服务器http进程CPU异常飙高(轮为免费矿工)
  16. Java截取字符串的方法
  17. 用于脉冲检测的三种检波电路
  18. SQL SERVER 获得一个月有多少天
  19. 关于if if和if elseif的区别
  20. 自监督直接和具体任务的结合(Task Related Self-Supervised Learning)的探索

热门文章

  1. LOGO以及手绘签名完美导入CAD
  2. EXCEL表格-绝对引用符$详解
  3. API接口设计的五大公共参数
  4. 手动制作解除U盘写保护文件
  5. 关于架构师:角色、能力和挑战
  6. mysql 统计每天、每周、每月、每年数据
  7. js中this的作用域
  8. 双系统卸载ubuntu
  9. ubuntu18.04双系统卸载并重装
  10. 互联网性能监测方法及工具