网络语音视频技术浅议(附多个demo源码下载)

      咱们在开发实践中经常会涉及到网络语音视频技术。诸如即时通信、视频会议、远程医疗、远程教育、网络监控等等,这些网络多媒体应用系统都离不开网络语音视频技术。本人才疏学浅,对于网络语音视频技术也仅仅是略知皮毛,这里只想将本身了解到的一些最基础的知识分享给你们,管中窥豹,略见一斑,更重要的是抛砖引玉,但愿更多的朋友们一块儿来探讨,同时,有讲得不正确的地方也但愿你们批评指正。html

 

一.基本流程

    不管是即时通信、视频会议,仍是远程医疗、远程教育、网络监控等等系统,都须要获取到远程的语音、视频信息,在咱们的直观印象中好像咱们就是直接的访问到了对方的摄像头,麦克风、显示器、声卡等等设备,可是事实上这些语音视频信息要通过以下的基本流程才能呈如今咱们的面前。 算法

    就拿我最近正在研究的 OMCS 语音视频框架来讲,其提供了摄像头链接器、麦克风链接器、桌面链接器、电子白板链接器等API,能让咱们就像访问本地设备同样访问远程设备,可是它实际上是把艰难困苦留给了本身,简单清晰的API才能让咱们带走。其实说白了,OMCS 所作的主要工做就是实现了多媒体设备【麦克风、摄像头、桌面、电子白板】的采集、编码、网络传送、解码、播放(或显示)等相关的一整套流程。附:语音视频示例Demo下载 与 详细说明网络

  虽然 OMCS 使用起来如此方便,可是咱们仍然有必要了解其背后的相关原理,尤为是这些最基本的原理。 框架

  

二.基本环节

  1.采集

    采集是第一个环节。所谓“巧妇难为无米之炊”,首先咱们要从多媒体设备上拿到第一手材料。对于音频而言,就是要从麦克风、声卡等设备获取到音频信号;对于视频而言,就是要从显示器、摄像头等设备获取到图像信息。如何获取到这些信息呢?因而咱们须要采集。post

    所谓采集又能够拆分红采样集聚两个步骤来理解。这就比如“曹聪称象”,先将大的整体分解成一个个样本,再将分解获得的样本整合起来,其思想无非就是用样原本模拟整体。编码

 

 (1)对于视频而言,采集的过程就如同下图所示

 

    咱们知道,视频老是连续的,可是咱们能够将其分解为一张张的图片,即图片帧,到时候咱们再将获得的这些图片按照相应的时序来播放就能够基本还原成原来的视频了。url

    在这里,有几个重要的量是咱们须要关注的。计算机网络

   a.分辨率

    首先咱们要关注每个样本的大小,由于样本的大小意味着其所包含的数据量的多少,而一个数据量大的样本比一个数据量小的样本更可以反映整体。就拿图中的例子来讲,咱们对一只鸽子的起飞过程进行连续的拍照,可是咱们用高像素来拍和用低像素来拍,到时候连续翻看的时候,效果确定是不同的。由于每一个图像帧的数据量的大小将影响到所得视频的清晰度。而这个图像帧的大小是用一个什么量来表示的呢?这个量就是分辨率。图像的分辨率越高,所包含的像素点就越多,所包含的数据量就越大,就越可以反映原始图像的原本面貌。视频

   b.帧频

    其次,原始的视频是连续的,咱们采集获得的图像都是离散的。那么这个离散的程度确定也会影响到所得视频的效果。若是图片的离散程度过大,那么所得视频看起来就会显得一卡一卡,而若是离散的程度足够小,那么所得视频就会显得流畅天然。因此样本之间的离散程度,影响到的是视频的流畅性。而这个离散程度是用什么量来表示的呢?这个量就是帧频。帧频对于采集而言就是每秒采集到多少帧图像,天然,帧频越大,画面就越流畅。htm

 

 (2)对于音频而言,采集的过程也能够用相似地用下图来讲明

    相似于视频的采集,音频的采集也须要将连续的整体分解成离散的样本,而后再“曹聪称象”,组装成总体。

    一样,音频采集中也有几个重要的量须要咱们关注。

   a.采样深度

    相似于视频采集,咱们须要关注每个样本的数据量的大小。对于音频采集而言,样本的数据量的大小由什么来表示呢?咱们用采样深度来表示,所谓采样深度又可称为采样位数,即每次采样声音数据的比特数。一样,采样深度的大小也会影响到所得音频的清晰度。若是采样位数太低,所获得的音频听起来就会含混不清。

   b.采样率

    相似于视频采集,咱们也须要关注样本之间的离散程度。对于音频采集而言,这个离散程度咱们用采样率来表示,即每秒钟采集的样本的个数。采样频率的大小会影响到所得音频的流畅程度。若是采样频率太低,则声音听起来就会有卡顿。

总结:

    不管是视频采集仍是音频采集,说到底都是样本采集,而咱们采集的目的,无非就是想用样原本模拟整体,至于这个模拟效果的好坏由两个因素来决定,一是每一个样本的数据量的大小,二是样本之间的密集程度。即,样本数据量越大,样本之间的密度越大,就越可以表明整体,就越可以反映出整体的原本面貌。因此,咱们能够给出这样一个总公式——

    样本反映整体的效果 = 单个样本数据量的大小 X  样本之间的密集程度

   而后,对于视频采集和音频采集而言,能够给出以下两个子公式——

    1.所得视频的效果 = 分辨率 X 帧频

    2.所得音频的效果 = 采样深度 X 采样率

附:采集示例Demo(含录制)

  2.编码

    对于采集获得的原始语音视频数据,直接放到网络上传输,数据量会很是大,会占用到很是大的带宽。因此须要对原始数据进行编码和压缩。 因此,在实际的语音通话应用中,编码这个环节是不可缺乏的。目前有不少经常使用的语音编码技术,像G.72九、iLBC、AAC、SPEEX等等。

    同时咱们也应该注意到,编码压缩的过程当中不可避免的要丢失一些信息,而这也将影响到所得语音视频的效果。
    因此咱们再定义一个量:压缩率,表示原始数据的压缩程度,压缩程度越高,意味着丢失的数据越多,所以由压缩数据还原获得的语音视频,距离原始语音视频的本色越远,失真越大。
    因此咱们将这个因素补充到刚才的出的公式中。

    1.所得视频的效果 = 分辨率 X 帧频 / 压缩率

    2.所得音频的效果 = 采样深度 X 采样率 / 压缩率

 

  3.传输

    数据传输,这个是计算机网络的基础知识,想必你们都很熟悉,我就再也不赘述了。可是有一点须要注意的就是,在诸如即时通信、视频会议、远程医疗、远程教育等对实时性要求很高的网络多媒体应用系统中,网络的低延迟和高平稳是保证通信的实时性的重要条件。

  4.解码

    当接收方接收到通过编码的数据后,会对其进行解码,以恢复成为可供直接播放的语音视频数据。 

  5.播放

    完成解码后,便可将获得的语音视频帧提交给相关设备进行播放。

附:采集+播放示例Demo

 

三.更多技术 

     然而,实际中的网络语音视频技术的实现远非基本流程中所介绍的那样简单,其涉及到至关多的技术细节须要处理,甚至涉及到至关多很有难度的技术问题须要克服。因为这些技术不是本文所介绍的重点,更不是本人所可以驾驭的范畴,因此仅罗列以下,供你们参考。

    1.回音消除 AEC

    2.噪声抑制 DENOISE

    3.抖动缓冲区 JitterBuffer

    4.静音检测 VAD

    5.混音算法

    想要对这些技术了解更多的朋友请参见知名博主 zhuweisky 的博客《浅谈网络语音技术》

    在此我要感谢zhuweisky,感谢他对我在网络语音视频技术方面的指点,即使是本文,也是我对其本人的博文中的相关内容的一个阐释与发挥。

    正如钱钟书先生所言:当咱们吃到一个很好吃的鸡蛋时,老是忍不住想要认识一下生下那个蛋的母鸡。

    最后,也但愿zhuweisky之后能与咱们分享更多的技术与心得。 

    请移步至《网络语音视频技术浅议(二)—— 实时性与流畅性如何保障?

相关文章
相关标签/搜索