Android语音通话实现方案及相关技术介绍

  • Android语音通话实现方案及相关技术介绍

    • 语音通话

      • Step1语音采集和输出
      • Step2编解码方式
      • Step3网络传输
      • Step4去噪声消回音
    • 语音通话资料
    • IMinstant message所涉及的协议
      • 1SIP协议
      • 2XMPP协议
      • 3TCP和UDP协议
    • 编码方式
      • 基于Opus的编解码
      • 基于ilbc的编解码
    • 服务器端
      • 流媒体服务器Wowza部署及实现
      • 即时通信服务器Openfire部署及实现
    • 音频采集

语音通话

Step1:语音采集和输出

  • 基于相应的android手机设备,采用Android SDK提供的API,就是mediaRecoder类用于采集,AudioTrack类用于输出播放;或者采用Android OpenSL ES接口,在Native层实现,有封装好的OpenSL ES de APIAndroid audio streaming with OpenSL ES and the NDK

Step2:编解码方式

  • Opus编码格式,在低码率下压缩效率高,或者ilbc编码,在http://www.opus-codec.org 中有一套完整的基于C语言的编解码库,可以用JNI整合到android中去。

Step3:网络传输

  • TCP/UDP或者RTP方式进行网络传输。

Step4:去噪声消回音

  • 通过Speex库(暂时未做了解)

语音通话资料

涉及到通信协议,还有编解码的问题。(我目前了解到这两个方面)。查找资料知道,现在的主流LTE语音解决方案包括三种:双待机、CSFB、VoLTE三种:

CSFallBack(CSFB):
是LTE终端通过电路域使用语音业务的一种方案,终端平时驻留在LTE网络,使用LTE数据业务,当发起语音呼叫或者接收到语音呼叫的时候,终端回落到2G/3G电路域进行语音呼叫,结束后再返回LTE。
双待机:
具备双待机能力的LTE终端可以同时再LTE和2G/3G电路域工作,即同时在LTE网络上使用数据业务, 在2G/3G电路域上使用语音业务,实现数据业务的并发,无需回落。
VoLTE:
是架构在LTE网络上全IP条件下的端到端语音方案。VoLTE的语音作为IP数据传输,无需2G/3G网,全部业务承载于LTE网络上,可实现数据与语音业务在同一网络下的统一。相对于现有技术的2G/3G网络,通过引入高清编解码等技术,VoLTE可拥有比2G/3G语音,以及时下流行的OTT语音业务更好的用户体验。同时,当终端离开LTE的覆盖区,VoLTE能够将LTE上的语音呼叫切换到2G/3G网络山,保证语音呼叫的连续性。


IM(instant message)所涉及的协议

1)SIP协议

会话初始化协议(Session Initiation Protocol, RFC3261),是一个基于文本的处于应用层的控制协议,可以用来创建,修改和终止会话。它是多媒体框架中的一部分,它与RTP(实时数据传输协议)、RSTP(实时流协议)、SDP(会话描述协议)构成一个完整的多媒体架构,SIP是其中的交通工具。它是基于TCP/IP协议进行传输的,因此可以通过UDP或者TCP传输。

2)XMPP协议

针对即时通讯和空间平衡扩充的进程开始协议(SIMPLE)、即时信息和空间协议(IMPP)、空间和即时信息协议(PRIM)为另外三种主流IM协议。XMPP是这四种协议中最灵活的。基于XML的协议的XMPP协议继承了在XML环境中灵活性和发展性。这就是基于XMPP协议的应用为何具有超强的可扩展性的根本性原因。处理用户的需求可以采用经过扩展后的XMPP协议通过发送扩展信息来处理,以及在XMPP的顶端建立应用程序,如内容发布系统和基于地址的服务等。开发者很容易的构建客户端应用程序或给已经配好的系统添加一些功能,是因为XMPP协议包含对服务器端的软件协议,使之能与另一个客户端通话。
以XML为基础XMPP协议会在网络上分片段的发送XML流协议。XMPP协议使得即时通讯的使用领域更加丰富,因为XMPP协议不但可以实现人与人之间的交流,还可以实现软件与人或软件与软件之间的交流。
XML流:XML流可以看成一个含有俩个实体通过网络交换的XML元素的容器,XML打开标签<stream>(包含属性和名字空间声明)作为XML流的开始,流的结尾则是一个XML关闭标签</stream>。XML流的生命周期里,初始化实体可以使用XML流发送很多XML元素给接收实体,完成交换信息,接收实体必需发起一个反向的握手(应答流)。
XML节:XML节从会话的一端发送具有语义的结构化数据单元到另一端。它从开始标签到结束标签,位于<stream/>的子层。作为一个语义单元,协议定义了三个XML节:<presence/>节,<message/>节,<iq/>节。他们也是XMPP协议的三种基本的通信机制:

  • 基于Subscribe-publish的广播通信机制:Presence类型的通信;
  • 基于push的通信机制:Message类型的通信;
  • 基于Request-Response的通信机制:I/Q类型的通信。

3)TCP和UDP协议

此处不对这两个协议进行过多介绍


编码方式

基于Opus的编解码

Opus是一个有损声音编码的格式,低码率下Opus比曾经的HE AAC格式又是大很多,中码率下可以与压缩码率比它高出30%左右的AAC格式,高码率下更是接近于原始音频。因此非常适合用于VoIP语音电话的项目。

基于ilbc的编解码

这种编解码的压缩比率还是比较大的,大概在1/10至1/9之间。也就是说假如每秒20kb的语音数据,编码后就是2kb/s,比较小,利于网络传输。


服务器端

流媒体服务器Wowza部署及实现

Wowza Media Server是一款高性能、多线程的,专为多种终端设备提供音视频内容播放服务的流媒体服务器软件。 基于Java的架构Wowza Media Server的接口相当丰富,程序员可以十分便捷地进行二次开发。RTSP/RTP是实时流传输协议之一,定义了应用程序的媒体数据如何通过IP网络传输。 RTSP协议主要作用是控制应用程序如何通过网络传送媒体数据,主要分为暂停(PAUSE)、播放(PALY)、停止(CEASE)、快进(SPEED)、快退(BACK)等操作。

即时通信服务器Openfire部署及实现

即时通讯服务器——Openfire,可以实现同时登陆多个客户端,并且可以并发的连接到一个服务器上。Openfire使用XMPP协议,采用XMPP协议的IM(Instant Messaging)客户端软件可以登录服务器。然后,服务器对连接通过认证的客户端创建会话,该会话负责服务器端和客户端之间的通信。Openfire服务器创建一个个线程来响应每个用户的请求,为了使服务器的执行效率能够提升,Openfire通过线程池创建和管理线程。通过Openfire接收到的用户请求的数量,线程池可以自动调整大小。


音频采集

在android中采集音频的api是android.media.Audio.Record类。

public AudioRecord(int audioSource, //音频源,从麦克风采集所以参数值为MICint sampleRatelnHz, //采样率,每秒采样次数,采样率越高,音质越好,一般是44100,不同采样率的值,对饮不同设备的支持。int channelConfig, //声道设置,android支持双声道和单声道,分别为STEREO和MONOint audioFormat, //编码制式和采样大小,android一般使用PCM编码,大小一般为16bit或者8bitint bufferSizeInBytes //采集数据缓冲区大小)

Android语音通话实现方案及相关技术介绍相关推荐

  1. 智能会议系统(34)---Android语音通话实现方案及相关技术介绍

    Android语音通话实现方案及相关技术介绍 Android语音通话实现方案及相关技术介绍 语音通话 Step1语音采集和输出 Step2编解码方式 Step3网络传输 Step4去噪声消回音 语音通 ...

  2. java语音播报源代码_详解Android 语音播报实现方案(无SDK)

    本文介绍了详解Android 语音播报实现方案(无SDK),分享给大家,具体如下: 功能描述 类似支付宝收款时候的语音播报功能:当别人扫描你的收款码,你收到钱之后,就会听到"支付宝到账12. ...

  3. 视频聊天相关技术介绍

    AnyChat音视频互动开发平台(SDK)是一套跨平台的即时通讯解决方案,基于先进的H.264视频编码标准.AAC音频编码标准与P2P技术,支持高清视频,整合了佰锐科技在音视频编码.多媒体通讯领域领先 ...

  4. 单机存储系统可靠性及相关技术介绍

    一.存储系统可靠性的影响因素 单机存储系统包括存储硬件和存储软件.存储硬件又包含存储介质.存储控制器.设备固件:存储软件栈层次则更为复杂,以Linux为例包括:存储设备驱动层. 块设备层(Block ...

  5. Frida-Dexdump 脱壳工具下载使用以及相关技术介绍

    Frida-Dexdump 脱壳工具下载使用以及相关技术介绍 文章目录 Frida-Dexdump 脱壳工具下载使用以及相关技术介绍 前言 一.查壳.反编译.APK工具推荐 二.查壳 1.方式1 2. ...

  6. 撰写毕设论文正文的摘要、绪论、相关技术介绍-“一楼正式开建”-03

    本文思维导图 目录 摘要 绪论 相关技术介绍 我们的建筑,地址选好了,地基也打稳了,今天正式开始建造一楼.那这一楼有什么呢?前门.大厅和后门,这三项必有,对吧.它们分别对应毕业设计中的摘要.绪论和相关 ...

  7. 初识-Android之智能短信项目相关技术整理

    标签页切换采用传统的TabHost: 采用TabActivty实现TabHost. 效果图-后补: 相关技术详解推荐: http://blog.csdn.net/zhouli_05/article/d ...

  8. 2G,3G与4G技术相关技术介绍

    一.    通讯技术的分类 第一代移动电话技术:模拟技术,常见于"大哥大". 第二代移动电话技术(2G):GSM,CDMA 第三代移动电话技术(3G):CDMA2000,WCDMA ...

  9. Android JNI(Java Native Interface)技术介绍

    Android平台上的JNI技术介绍 JUL 15TH, 2013 | COMMENTS NDK简介 Android是由Google领导开发的操作系统,Android依靠其开放性,迅速普及,成为目前最 ...

最新文章

  1. 【 MATLAB 】 WLLS algorithm Simulation of TOA - Based Positioning
  2. 一键去除网页BOM属性【解决乱码,头部空白,#65279问题】
  3. [html] html标签中的lang属性有什么作用?
  4. 关于SQL数据库中cross join 和inner join用法上的区别?
  5. 字节跳动宣布要做全网搜索,百度真正的危机来了
  6. android自定义View之仿携程首页点击缩放ImageView
  7. 软件工程导论—需求分析
  8. python dlib caffe人脸相似度_人脸检测学习笔记(数据集-DLIB人脸检测原理-DLIBOpenCV人脸检测方法及对比)...
  9. SICK CLV650-6000固定式扫码枪参数配置
  10. 记梦之三:我成了萧峰
  11. unity案例星际迷航_《星际迷航》:自1964年以来启发人们和他们的技术
  12. 数据库原理和应用(2)—— 数据库系统的组成
  13. 回文串问题(leetcode 125. 验证回文串 c#)
  14. 【无关技术·朋友圈朝花朝拾】月相
  15. 【海量数据学院】DBA的学习方法论系列—正确的学习方法
  16. 大龙嘚吧嘚之“C#中的类型转换”(前面是铺垫,可以直接跳到最后)
  17. matlab死亡时间推测实验,尸检——关于死亡时间推测的基本手法及操作方式
  18. gcc/g++ 编译C/C++代码
  19. 博客园自定义鼠标样式
  20. fiddler安装和使用

热门文章

  1. 中国地理信息产业人才分布地图
  2. 感受美国小学生的幸福校园生活! (转)
  3. 跟李沐学AI--权重衰退
  4. java读取hadoop数据_从Hadoop URL中读取数据_hadoop 数据读取_hadoop读取文件
  5. 苹果手机怎么定位安卓手机_手机:苹果VS安卓 跑分不代表手机流畅度|安卓|安卓系统|ios系统|安卓手机|手机...
  6. Swift语法基础:19 - Swift的控制转移的语句, Continue, Break, Fallthrough, Labeled Statements
  7. 微软亚洲研究院院友会,AI大牛新动向|AI科技评论周刊
  8. LC tank 在RF放大器中的作用
  9. C# Winform基于socket编程的五子棋游戏(带聊天和发送文件功能)
  10. 广点通-优量汇广告接入文档