一起学(抖音快手)音视频,深入浅出安卓开发

几百位歌手的时差、现场收录的和网络技术条件各不相同,所以并没有在线实时协作进行直播的可能,甚至两个人一弹一唱都不可能,因为0.17秒的延时足以抵消全世界顶级音乐人的现场功力。

这段话中的延时,为什么”足以抵消全世界顶级音乐人的现场功力。我们来举个例子说明一下。以歌曲《稻香》为例,它的钢琴曲谱是4/4拍,标准乐曲速度为80拍/分钟。副歌部分大约每个音乐小节唱8到12个字,且主要以八分音符和十六分音符组成,基本上每个音符对应歌词中的一个字。粗略计算的话,大约200 - 300ms左右唱出一个字。

不考虑伴奏的情况下,假设两个合唱者A和B之间的端到端延时为100ms。从声音传输流程上来说:

  • A先唱,B听到A的歌声。此时产生100ms延时;
  • B在听到A的歌声后开始加入合唱,歌声传到A端。此时又产生100ms延时;

那么 A听到B的歌声永远延时200ms。根据之前唱每个字所用时间的计算,听感上会至少慢半个字,是错位的。

如果要考虑伴奏的传输,以及伴奏与歌声的混音,情况将更加复杂。一般端到端延时只要低于150ms,听者是感知不到的。所以唱《稻香》这种速度的歌,延时低于80ms可以合唱。如果唱更快速、歌词更密集的歌,延时要求更低,否则合唱时两人永远也对不准拍子,演唱者的体验也非常糟糕。中国与美国相距1万多公里,光速为30万km/s,光纤传输会有一定损耗,可以按照20万km/s计算,中美之间按15000km物理距离粗略计算,单向延时在75ms左右,无法克服的双向物理延时就有大约150ms。而且,One World Together中的4人合唱场景,涉及到多方协作,情况更加复杂,所以以目前的技术水平,跨超远距离的多方合唱是很难做到的。在One World Together中,我们看到的基本都是录播。不过,不论是录播还是真的实时合唱,给观众带来最好的体验才是最重要的。

在很多社交应用中,都有合唱这一功能,这是如何做到的呢?

合唱中的延时

我们首先解读一下延时是如何产生的。这个场景下的延时包括两部分:设备端的延时和端到端的延时,我们需要针对不同阶段的延时,来分析如何降低延时。

音频在采集端、播放端的延时

图:音视频传输流程流程

在这里,音频=歌声,或音频=歌声+伴奏。

  • 设备端上的延时包括采集端的采集、前处理、编码,播放端的接收、解码、后处理过程产生的延时,以及两端在编码后和解码前产生端网络延时。
  • 端上的延时主要与硬件性能、采用的编解码算法、音视频数据量相关,设备端上的延时可达到 30~200ms,甚至更高。

音频在设备端上的延时还可以细分为以下几点:

  • 音频采集延时:采集后的音频首先会经过声卡进行信号转换,声卡本身会产生延时;
  • 音频播放延时:这部分延时与播放端设备性能相关;
  • 音频处理延时:前后处理,包括 AEC,ANS,AGC 等前后处理算法都会带来算法延时,通常这里的延时就是滤波器阶数;
  • 端网络延时:这部分延时主要出现在解码之前的 jitter buffer 内。

另外,合唱场景通常会为用户提供各种KTV音效,即人声在编码传输前会增加一步前处理,这还会加大音频在端上的延时。

若想降低音频在端上的延时,就需要针对不同机型进行编解码算法的优化,以降低音频采集、编解码、音频处理带来的延时。端上延时还与设备性能、系统紧密相关,如果歌手中有一方的设备性能较差,也会影响合唱效果。

端到服务器之间的延时

除了端上的延时,音频数据在端到服务器、服务器到服务器之间的传输过程也会产生较大延时,这也是阻碍“实时合唱”功能落地的重要因素。

影响采集端与服务器、服务器与播放端的延时的有以下几个因素:客户端同服务间的物理距离、客户端和服务器的网络运营商、终端网络的网速、负载和网络类型等。如果服务器就近部署在服务区域、服务器与客户端的网络运营商一致时,影响上下行网络延时的主要因素就是终端网络的负载和网络类型。一般来说,无线网络环境下的传输延时波动较大,传输延时通常在 10~100ms不定。而有线宽带网络下,同城的传输延时能较稳定的低至 5ms~10ms。但是在国内有很多中小运营商,以及一些交叉的网络环境、跨国传输,那么延时会更高。

服务器之间的延时

在此我们要要考虑两种情况,第一种,两端都连接着同一个边缘节点,那么作为最优路径,数据直接通过边缘节点进行转发至播放端;第二种,采集端与播放端并不在同一个边缘节点覆盖范围内,那么数据会经由“靠近”采集端的边缘节点传输至主干网络,然后再发送至“靠近”播放端的边缘节点,但这时服务器之间的传输、排队还会产生延时。

在实时合唱的场景中,要解决网络不佳、网络抖动,需要在采集设备端、服务器、播放端增设缓冲策略。一旦触发缓冲策略就会产生延时。如果卡顿情况多,延时会慢慢积累。要解决卡顿、积累延时,就需要优化整个网络状况。

合唱也要高音质

唱歌的人都有一个共同的心理需求,就是希望别人夸自己唱得好听。音质在合唱场景下就显得尤为重要了。而影响实时合唱音质的因素主要包括:音频采样率、码率、延时。

**采样率:**是每秒从连续信号中提取并组成离散信号的采样个数。采样率越高,音频听起来越接近真实声音。

**码率:**它是指经过编码(压缩)后的音频数据每秒钟传输所表示的数据量(比特)。码率越高,意味着每秒采样的信息量就越大,对这个采样的描述就越精确,音质越好。

假设网络状态稳定不变,那么采样率越高、码率越高,音质就越好,但是相应单个采样信息量就越大,传输时间可能会相对更长。也就是说,高音质也可能会影响延时。

敲黑板:解题思路

之前我们提到,因解决方案的不同,“音频”有着不同的含义,这与你的实现逻辑有关。

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数初中级安卓工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年最新Android移动开发全套学习资料》送给大家,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友,同时减轻大家的负担。
img
img
img
img

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频
如果你觉得这些内容对你有帮助,可以添加下面V无偿领取!(备注Android)
img

总结

其实要轻松掌握很简单,要点就两个:

  1. 找到一套好的视频资料,紧跟大牛梳理好的知识框架进行学习。
  2. 多练。 (视频优势是互动感强,容易集中注意力)

你不需要是天才,也不需要具备强悍的天赋,只要做到这两点,短期内成功的概率是非常高的。

对于很多初中级Android工程师而言,想要提升技能,往往是自己摸索成长,不成体系的学习效果低效漫长且无助。下面资料部分截图是我花费几个月时间整理的,诚意满满:特别适合有3-5年开发经验的Android程序员们学习。

看到全部内容](https://bbs.csdn.net/topics/618156601)】。**

[外链图片转存中…(img-YGZaJ3u2-1710889347755)]

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值