给产品经理讲技术|关于免费电话

免费电话的出现已经是很久很久以前的事情了,但是被炒热却是因为鹅厂出的微信电话本,虽然微信电话本那波热潮貌似也是很久以前的事情了 &8230;

关于免费电话大家在用的时候本身也会有很多疑问,比如会走流量吗,能打普通手机吗,通话质量有保证吗,安全吗?今天我们就来简单了解一下免费电话的一些技术。

天下并没有免费的午餐,想要打电话给其它人是一定需要消耗某种网络资源的,要么是传统的电话网络资源,要么就是互联网资源,这两种网络资源都是有接入和传输成本的,但是传统电话网络资源完全被运营商掌控,资费上自然也是按照垄断标准收,就一个字“贵”。而互联网发展速度也非常快,覆盖范围不亚于传统的电话网络,而资费相对于普通话费来说那就便宜得不知道哪去了,所以免费电话的切入点自然也是互联网。

免费电话要做的第一步就是将语音信息转化为能够在互联网中传输的 IP 数据包。现在大部分手机或电脑都是具备语音采集功能的,应用开发者只需要调用系统提供的接口就能获取到硬件采集到的语音数据,这些是裸的音频数据,可以看做是一堆 011100&8230;100,数据量非常庞大,如果直接传输网络开销大,速度感人。

其实语音通话本来也不需要完美还原(毕竟不是听高保真的歌曲),只需要按照合适的频率采集,即使数据上不完美,能够满足基本的沟通就够了。但是采样频率也不能太低,否则会失真(甚至断章取义),保证基本质量的情况下采集的数据仍然很大,数据量大会导致发送的时间变长,因为电话的语音数据需要边采集边传输,实时性比较高,如果采集的速度大于传输的速度,那么就会造成数据积压,很多话说出来了都没传出去,时效性会越来越差,这里就需要一种算法来保证数据的采集,压缩,传输整个过程的流畅运转,算法很多,但无非就是数据传输量和语音采集质量上的权衡。

有了采集的语音数据,也经过压缩算法压缩过了,现在需要将这些数据丢到互联网中去,之前的文章我们讲到过网络中传输层的协议 TCP 和 UDP,在选用传输层协议的时候,仍然遵循快的原则,因为大部分情况下语音数据不必 100% 可达,丢一点也没关系,一般都听的懂。所以大部分情况下会选择 UDP 协议,尽快将数据丢出去,别搞 TCP 这些个确认重传的玩意儿了。做到这一步,就已经可以实现传统电话打网络电话了。

但很多时候,我们打电话希望的是即使对方没有安装任何客户端软件也能够打通,即能够通过网络电话打通传统电话。传统电话是按照区号确定区域的,所以网络电话的服务器需要记录区号和相应地区的网关,并作映射关系,这样,语音数据包在传输的过程中就能够选择合适的路由节点来降低传输延迟,剩下就就是打通网络到传统电话的通道了。

其实网络电话打通传统电话并没有什么技术问题,传统的电信运营商本身也支持这个能力,简单说就是将网络电话传输的数字信号又转换成模拟信号发给手机而已。

折腾了半天的网络电话的意义是啥呢?其实就是降低传输成本,传统电话网络是有长途这个概念的,资费上天,即使如今活在小康社会的我们,对打长途电话这个事情依然是望而生畏。而互联网则没有长途这个概念,通过互联网来传输语音数据可以规避长途收费,当语音包到达目的区域后,网络电话服务器通过运营商提供的接口就可以转为本地语音通话,自然能省不少。

网络电话的协议非常之多,控制通话状态的,控制采样编码的,控制数据传输的 &8230;,有兴趣的可以深入研究一下,可以从 VoIP 开始。