聊聊多人语音通话的基本原理

移动开发
本文主要是介绍一些基本工作原理,包括移动Mesh网络,VOIP技术等。常见的网络拓扑结构有点对点拓扑结构、星型拓扑结构、树型拓扑结构、环型拓扑结构和总线型拓扑结构等。

0.引言

本文主要是介绍一些基本工作原理,包括移动Mesh网络,VOIP技术等。

1.移动Mesh网络

1.1 常见的网络拓扑结构

常见的网络拓扑结构有点对点拓扑结构、星型拓扑结构、树型拓扑结构、环型拓扑结构和总线型拓扑结构等。常见网络拓扑结构如下图所示: 

聊聊多人语音通话的基本原理

点对点拓扑结构(perr-to-peer,简称 P2P),是一种无路由节点、网络成员直接交换信息的网络结构。这种结构在通信上较为简单,但应用开发较为复杂,需要打洞,在有些场景可以应用到。

在星型拓扑结构的网络中,子节点都直接与中心节点相连,其具有结构简单,延迟低等优点,但是可靠性较低、部署成本较高。它目前常见于企业、学校和家庭网络中,运营商网络由路由器接入后,各个设备通过网络线缆或者无线网络连接路由器或交换机接入互联网。总线型拓扑结构则是一种所有节点挂在同一条总线上的拓扑结构,其没有网络中心,这种拓扑结构的优点是可扩展性好,但是维护困难,分支结构定位故障较难。

2.Mesh网络拓扑结构

Mesh 网络拓扑结构,是一种在网络节点上使用动态路由的方式进行数据传输的拓扑结构。这种网络拓扑结构可以保证每个节点与其他节点之间连接的可靠性,当网络中有某个节点故障时,这种结构允许其他节点使用“跳跃”(hip)的方式形成一条新的、可用的路由进行数据传输。

Mesh 网络具有以下几个特点:

  • 自组织:网络节点可以即时加入 Mesh 网络,网络拓扑结构会随之改变,使得该节点可以与网络中的任意一个节点连接。
  • 自愈性:如果 Mesh 网络中的网络成员因为关机、故障等原因不能工作,网络会自动调整网络拓扑结构,使得原来被破坏的路由被有效的路由替换。
  • 多跳:Mesh 网络中的所有节点都具备转发数据包的能力,网络中的节点可以通过多跳与物理上不能直接通信的节点进行数据传输。

相对于传统 Wi-Fi 的 AP(Access Point)工作模式使用的星型网络拓扑结构,Mesh 网络使用的 Mesh 拓扑结构在网络成员节点传输距离以及移动性上都有了很大的改进。

3.IEEE 802.11s 标准

IEEE 802.11s 是 IEEE(电机电子工程学会)对 802.11 无线网络协议中无线网状网络的补充标准,它定义了无线设备如何交互以组成一个 Mesh 无线局域网,这个网络的拓扑结构是可以随时变化的。不同于传统Ad-Hoc 网络中使用传输层的路由协议实现多跳功能,802.11s 协议扩展了 MAC(媒体访问控制)层标准,定义了一个使用无线感知进行自配置多跳拓扑结构的架构和协议,其支持包括广播、组播和单播方式的数据传输。

802.11s 使用的路径选择协议为混合无线 Mesh 协议(Hybrid Wireless Mesh Protocol,简称 HWMP),即同时使用了先验式路由协议和反应式路由协议,上述路径选择协议中包含了四种路径选择消息包,分别为根节点通告(Root Announcement,简称 RANN)、路径请求(Path Request,简称 PREQ)、路径回复(Path Reply,简称 PREP)和路径错误(Path Error,简称 PERR)。混合无线 Mesh 协议如下图: 

聊聊多人语音通话的基本原理

先验式路由协议对于网络中的每个节点,会建立一个树形的路由拓扑结构,根节点可以通过两种方式建立路由表,一种是使用根节点宣告包,另一种是使用路径请求包。

使用根节点宣告包方式其路径请求是由根节点以外的其他节点以单播的方式发送给根节点,而根节点必须使用路径回复包进行回复。

使用路径请求包的方式时,不会使用路径回复包,而且路径请求包是由根节点发送的

反应式路由协议,又称为按需路由协议,是基于 RM-AODV(Radio-Metric Ad hoc On-Demand Distance Vector)的协议,使用路由请求和路由回复机制在两个节点之间建立路由,节点间使用路由请求包和路由回复包进行信息数据交互,并在路由回复包中采用序列号以保证路由的时效性

目前 IEEE 802.11s 标准已经被 Linux 内核支持,在 Linux 上可以方便地使用支持802.11s 标准的无线网卡组建基于 802.11s 的无线 Mesh 网络。

4.Vo IP 技术

Vo IP 是一种语音通话技术,通过将语音信号数字化处理、编码压缩、网络传输、解码、还原成音频信号实现语音通信,其中关键技术为语音编码技术和实时网络传输技术。其流程如下图所示: 

聊聊多人语音通话的基本原理

5.音频编码技术

语音编码是一种将语音数字信号压缩的技术。由于数字化的语音信号在存储、传输上的可靠性、抗干扰能力和保密性都远优于模拟的语音信号,因此,目前几乎在所有的系统中都采用数字化的方式进行语音的存储和传输。未经过压缩的语音数据因为体积过大,受限于存储设备的容量和传输网络的带宽,不适合直接进行存储和网络传输,音频编码技术应运而生。音频编码技术可以大大的压缩音频数据的体积,减少了存储消耗的硬件资源与传输占用的带宽和时间,增加了在有限的资源下可以存储和传输的语音数据量。

根据是否保留原始音频数据的全部信息,音频编码技术通常被分为有损音频编码技术和无损音频编码技术,有损音频编码技术在牺牲部分原始音频数据的情况下可以达到更高的音频数据压缩率,而无损音频编码技术则可以还原出完整的原始音频数据。

在 Vo IP 技术中,由于网络带宽的限制,往往会使用有损音频编码技术,且这些音频编码算法可以达到的压缩率通常比较高。此外,由于实时网络传输的不可靠性,使用的音频编码算法需要具备从残损数据中获得接近完整音频数据的功能。常用的音频编码算法有 G.711、G729、AAC、Speex、Opus 等,这些音频编码算法压缩后的音质与比特率的关系对比如下图所示,延迟与比特率的关系如下图所示: 

聊聊多人语音通话的基本原理
音频编码算法压缩后的音质与比特率的关系
聊聊多人语音通话的基本原理
部分音频编码算法延迟与比特率的关系

如果需要实现多方语音通话功能,对延迟的要求高,由于系统中各成员之间的距离可能较远,整个网络的带宽较小,在保证音频质量的情况下,音频数据码率需要尽可能的低,选择使用 Opus 音频编码算法实现语音数据编解码。

Opus 是一种有损音频编码算法,包含了 SILK 和 CELT 两种声音编码技术,其开发目的是希望用单一格式包含声音和语音,取代 Speex 和 Vorbis 音频编码算法,且适用于网络上低延迟的实时音频传输。Opus 可以调节编码比特率,它在较低比特率时使用线性预测编码,在高比特率时使用变换编码,非常适合用于低延迟语音通话的编码。此外 Opus 也可以透过降低编码比特率,达成更低的算法延迟,最低可以到 5 ms。

6.RTP 实时传输协议

RTP 协议是一种基于 IP 网络传输音视频数据的网络传输协议,它被广泛应用于通信和流媒体应用,例如语音会话、视频会议、网络电视服务等。它在网络模型中是一个应用层协议,在传输层之上,通常 RTP 协议是基于 UDP 协议的,在一些特殊应用场景之下也可以基于 TCP 协议。 

聊聊多人语音通话的基本原理

表中几个重要的字段的解释如下:

  • SN(Sequence Number,序列号):为了解决网络传输时时延抖动的问题,RTP协议使用一个长度为 16 位的序列号来确定数据报的顺序,每个发出的数据报会被标记上连续的序列号,用于接收端对乱序到达的 RTP 数据报进行排序,同时可以用于统计 RTP 传输的丢包情况。
  • PT(Payload Type,负载类型):RTP 协议使用 PT 字段来标识 RTP 报文所传输的流媒体数据的类型,常见的数据类型有 AAC、Speex、Opus、H.264 等。
  • Timestamp(时间戳):由于时延抖动的存在,目标主机接收到数据报的顺序和时间间隔与发送时的存在偏差,如果每次都立即播放接收到的数据,则播放效果会与我们预期的大不相同。实际中,接收端通常会设置一个播放时延,时间戳在这个时延区间内的包会被存入缓冲区等待播放,即打上发送时间戳。
  • SSRC(Synchronization Source,同步源):RTP 协议在设计之初就考虑到了组播的方式,在进行组播时,IP 地址和端口无法用于确定唯一的一个网络地址,因此 RTP 协议中使用一个长度为 32 位的字段标识 RTP 包来源,它是一个随机数,且能保证其在一个 RTP 会话中的唯一性。RTP 协议不仅解决了使用 IP 协议进行实时流媒体数据传输时存在的问题,同时也为应用层的流媒体应用程序提供了规范的传输协议,使得开发者不需要重复实现类似的私有协议。此外,RTP 协议也是一个开源的协议,开发者可以根据各自的应用需求对其进行修改。

 

 

责任编辑:未丽燕 来源: 今日头条
相关推荐

2021-02-08 21:40:04

SockmapBPF存储

2012-01-12 14:37:34

jQuery

2013-04-07 14:09:55

Android应用基本

2010-08-20 13:29:33

OFDM

2020-03-21 14:57:14

手机定位智能手机APP

2011-11-29 12:17:00

2009-02-24 09:43:00

IP电话原理

2010-03-17 13:35:02

2016-08-17 23:53:29

网络爬虫抓取系统

2016-08-18 00:04:09

网络爬虫抓取系统服务器

2019-11-28 10:45:28

ZooKeeper源码分布式

2020-11-26 13:54:03

容器LinuxDocker

2010-06-18 17:28:37

Linux Anacr

2011-07-07 14:46:10

Cocoa Xcode

2010-03-18 20:13:03

Java socket

2011-07-07 14:10:21

Cocoa 内省 hash

2020-12-29 16:55:44

ZooKeeper运维数据结构

2009-06-11 09:56:09

MySQL Repli原理

2010-09-15 15:48:09

CSS Hack

2015-01-19 15:47:02

FCoE一体化
点赞
收藏

51CTO技术栈公众号