`
isiqi
  • 浏览: 16482304 次
  • 性别: Icon_minigender_1
  • 来自: 济南
社区版块
存档分类
最新评论

android平台开发voip类程序的探索

阅读更多

voip是voice over ip的缩写(废话),用通俗的话来说就是通过互联网来打电话(仍然是废话,汗),用更加通俗的话来说就是一种“不花钱”打电话的技术(恩,有点意思了)。这项技术从诞生开始就充满了争议,就被各国电信运营商们视若豺狼猛兽。要弄明白voip的工作原理,先要看看电信运营商的“生财之道”:拿手机来说,对于很多人都是很神奇的────那么小的一盒子,也没个线啥的,结果就能让人们互相说话。实际上,所谓的无线仅仅是手机到基站之间那么1-2公里的范围内是无线的(对于用户密度不大的地方一个基站最大可以覆盖35公里),剩下就全部是有线的数据传输了。偶们使用互联网的时候,甲在上海,乙在北京,那么甲乙之间用qq聊天可以说是近乎“免费”的,但是如果甲和乙用手机聊天,由于使用了运营商们铺设的网络,那就要支付昂贵的长途电话费了。这恰恰是运营商的生财之道,他们把明明成本很低的异地数据通信加收了很高的费用美其名曰“长途电话费”,异地传百十来个字节的文本也变成了一条一毛五分钱的短消息。。。(其实长途电话内部的原理肯定要比这几句话复杂得多,但是为了简单起见,姑且这样理解好了)。voip技术就是想办法让语音在传输过程中不使用电信运营商的网络,直接通过几乎免费的面向大众的互联网传输。能够进行voip通信的软件很多,其中最著名的一个就是skype了,可以通过互联网让两台计算机后面的用户免费交谈,即使远隔重洋,也一样流畅和清晰。请注意,这一切都是免费的。

眼看着3G已经在国内如火如荼地发展(至于为何要并行运行那么多的 3G制式,搞那么多地重复性建设,偶在此不便妄加评论。。。国家的GDP增长了就是好事)。3G到来之后,就意味着无线上网的速度会有一个质的飞跃,普通偶们用来打电话的数据通道(gsm语音编码的声音)需要大概7-9k B/s的数据传输率就可以达到双方直接通话。在2G,2.5G的网络中,偶们可以用gprs尝试全双工的语音通信。很遗憾的是,一来gprs的速度太不稳定时快时慢(尤其是上行速度慢,下行速度快,非常不均匀);二来,移动的ggsn网关大多采用的是symmetric nat的网络地址转换类型,很难使用传统的方式进行p2p的打洞操作(呵呵,这只是困难一些,但是不代表完全不可能,感兴趣的朋友可以参考基于“端口预测 “原理的NAT打洞技术)。只有在这一点上,新联通要比移动强一点,cdma手机上网的外部地址都是类似full cone或者port restricted的nat类型,采用常规技术都可以进行p2p连接操作。

进入3G以后,手机终端处理能力和续航能力越来越强,无线上网资费不断下调,所有的迹象都表明,手机领域的voip并不是遥不可及的设想了。曾经在pc上的voip软件,为了”落地“(通俗地讲就是把互联网的 voip接入传统的固话网或移动网,再通俗一点就是用电脑里面的voip软件拨打真实世界里的电话)付出了”血“的代价,无数的voip公司死在这个上面(换位思考一下,这些公司动到了运营商们赖以生存的”蛋糕“下场自然是遭到全面封杀的下场,即使skype也难逃此劫)。voip公司希望能够做到从电脑上拨打手机、固话;那么再进一步,就是手机与手机,固话与固话通信的时候完全通过互联网,而不通过运营商的网络,成为所谓的”虚拟运营商“。这个梦做的很大,很疯狂,但由于传统的固话网络的接入限制(当然有些”能量“强大的公司,可以小规模的搞一下,但是规模绝对做不大,因为一旦被发现,就是毫无悬念的封杀),最终都是无疾而终。但是现在时代不同了(呵呵,男女都一样),进入3G以及未来的3.5G/4G以后是一个无线网络和以ip网络为主的骨干通信网络。自从手机可以上网以后,运营商对手机的控制能力已经越来越弱势,沦为”管道提供者“的下场已经不可避免(这一点可以参考目前的互联网接入服务提供商的现状,以及free wap联盟的不断发展壮大可以看出来)。当然,运营商们也不会”自甘堕落“(尽管已经很很堕落了,哈哈),已经开始竭尽全力加强自己的控制力度(例如传说中的中移动主持的android项目”ophone“,以及各个运营商分别在手机终端开发上的不断发力,都反映了希望加强对手机,对用户的控制能力)。利用手机上网这个突破口,手机可以直接访问到互联网的服务器以及资源,那么传统的仅限于pc与pc之间的voip技术应用到手机上会有什么样的后果呢?是否会解决voip运营商们一直烦恼的”落地“问题呢?”虚拟运营商“的梦想是否能够实现呢?记得”狐狸“先生有句名言”二十一世纪最值钱的是什么?────人才“,哈哈,这些问题就有待it行业的人才们来解答了。
偶做了一些关于上述想法的实验,现在把结果发布在博客上,希望能够对技术的发展和进步贡献自己的一份力量。偶的实验是android上面做的(至于win mobile, symbian必然也是可以实现的,在此不再赘述),只做了一个voip的原理性验证,源代码公开所以不在做过多解释,只在必须要注意的地方点一下,点到为止。

(1)voip原理评估要做到什么?
voip是通话双方都通过网络说话的技术,因此,第一步,一定是验证“全双工”的可行性。手机是否支持一边录音,一边播放,二者同时进行;第二步,应该验证手机是否支持内存中的经过gsm编码的数据流或者直接的pcm16的数据流直接播放(因为,双方语音数据一定是在内存中保存的,如果不能够支持内存数据流直接播放,只能播放语音文件的话,那voip就肯定没戏,充其量做点简单的 ptt────push to talk类的应用罢了)。经过测试目前的主流智能手机系统(win mobile、symbian、android)都支持上述两个功能。iphone没有测试过,没舍得买。。。望有米又有技术的朋友们测试一下,把结果告诉偶一声。因此,呵呵,目前的智能手机系统都具有voip的潜力。

(2)voip实现过程中可能会遇到的问题是什么?
主要分三类,
第一类是呼叫问题,必须保持“长时间”在线,类似qq或msn之类的im一样,这样才能做到随时拨打,随时响零,在这当中的连接建立、超时、拒绝接听(不在服务区?)甚至铃声(彩铃?哈哈)。第一类问题会导致手机续航能力下降。
第二类是网络问题,无线网络不比互联网那么稳定,虽然从理论上“蜂窝”通信系统是可以实现“无缝”切换的,但是实际上对于gprs或者其它的无线网络来说(尤其是国内目前的状况,时而edge时而gprs的),不甚稳定,会有语音数据堆积问题,以及断断续续不连续的问题。这种断续的问题或许不会影响到手机上网看个网页啥的,但是一定会影响实时性较强的voip程序。
第三类是稳定问题,程序必须做到────就像我们军训教官说的“铁板一块”,呵呵,必须十分稳定,因为请记住,这个程序的目的是要取代原有的通信手段的,如果时不时死掉,导致用户的一些重要电话漏掉了,后果可是很严重喔。

(3)这篇文章希望告诉大家什么?
偶只是介绍了一下voip技术,以及偶个人的一些想法和理解。偶在android上实现了一个简单的voip可行性评估,实现了(1)中所说的那两点,全双工和内存播放。算是为android平台的voip探索开了个头,但是由于时间很紧张无法再利用jni技术把语音编码器以及相关的网络模块加上去,因此,希望我的文章可以起到抛砖引玉的作用,让对此感兴趣的朋友节省一些时间。

(4)对于源代码的一些评论?
事先声明────偶不懂java,所以这些代码只是简单扫了一眼语法胡乱写出来的。不过幸运的是还可以工作。

里面几点需要注意的地方是:
a)权限问题
AndroidManifest.xml中必须要添加:
<uses-permission android:name="android.permission.RECORD_AUDIO" />
这个权限是允许偶们录音的先决条件,大爷的,只前做实验的时候没有加,血泪教训阿。。。

b)代码结构
太简单了,三个类,一个是AudioTest.java是基本的一个activity;AudPly.java用于播放音频数据;AudRec.java用于播放音频数据,这些都是线程类,需要同时开始的,有AudioTest.java统一进行协调和管理,例如初始化啥的。基本思路是打开两个线程,一个线程采集音频pcm16数据,把数据保存在一个队列里面,另外一个线程负责播放音频数据,只要队列里面有数据就给播放出去。java中什么都是对象。。。偶用的比较笨拙一些,不过能够工作就不管那么多了。运行程序的时候最好佩带上耳机,否则播放出来的声音又会被马上录制回手机,导致回音问题以及噪声放大。

分享到:
评论

相关推荐

    Android手机的VoIP客户端 Sipdroid.zip

    《Android手机VoIP客户端Sipdroid:源码解析与技术探索》 Sipdroid是一款基于Android平台的开源VoIP(Voice over Internet Protocol)客户端,它允许用户通过互联网进行语音通话,是Android开发者研究和学习VoIP...

    Android应用源码安卓源码(172个合集).zip

    Android手机的VoIP客户端 Sipdroid.rar Android有未接来电后处理(判断未接来电).rar Android模仿乐淘的应用程序分析源码.zip Android游戏源码——忍者快跑.rar Android自动发送短信.rar Android自动开关机实现.rar ...

    Linphone_android最新版本 V3.2.1

    Android Studio是Google提供的官方集成开发环境(IDE),用于构建Android应用程序。SDK版本要求23以上,意味着该应用需要Android 6.0(Marshmallow)或更高版本才能运行,这保证了应用能够利用较新API提供的特性。 ...

    android-sipdroid-master.rar

    总之,"android-sipdroid-master"项目为Android开发者提供了一个探索和学习SIP通信的实战平台,通过理解和修改源码,可以深入了解SIP协议在移动设备上的应用,并且能够构建自己的VoIP应用。对于想要涉足通信技术或...

    SipUA android sip源码

    在Android平台上,SipUA提供了核心的SIP通信功能,使得开发者能够构建自己的VoIP应用程序。本文将深入探讨SipUA在Android环境下的应用及其源码实现,以 sipdroid-master 这个开源项目为例,解析其背后的原理和技术...

    基于Android的手机通讯集信息,文件,语音呼叫于一体(小鸟版).zip

    对于正在学习Android开发的学生和初入职场的开发者来说,这是一个绝佳的学习资源。它不仅涵盖了Android应用的基础,还涉及到高级特性,比如多媒体处理和网络通信。 一、Android开发环境 在运行此项目时,有三种IDE...

    linphone 最新sdk android

    本文将详述“linphone 最新sdk android”这一主题,带你深入探索如何在Android平台上利用Linphone SDK实现高效且稳定的SIP通话及文本消息功能。 **一、Linphone SDK简介** Linphone SDK是由Belledonne ...

    SipDemo案例

    Android平台为开发者提供了内置的SIP(Session Initiation Protocol)API,方便开发者构建自己的VoIP应用程序。本文将深入探讨Android的SipDemo案例,帮助读者理解如何利用这些API来创建一个基本的SIP通信应用。 ...

    CSipSimple可编译版本

    CSipSimple是一款开源的VoIP(Voice over IP)应用程序,专为Android平台设计。它基于SIP协议,允许用户通过互联网进行语音、视频通话以及发送即时消息。在IT行业中,了解并掌握像CSipSimple这样的应用是十分重要的...

    应用源码之SipDroid客户端源码.zip

    二、Android开发基础 1. AndroidManifest.xml配置:SipDroid源码中的AndroidManifest.xml文件包含了必要的权限声明,如INTERNET权限和WRITE_EXTERNAL_STORAGE权限,这些都是SIP应用不可或缺的。 2. Activity与...

    call recorder

    Call Recorder是指一类能够自动记录通话过程的应用程序或服务,它能够捕获音频流并在通话结束后保存为可回放的音频文件。这种技术通常涉及音频处理、实时传输协议(如VoIP)和文件存储等多个方面。 2. **操作系统...

    PJSIP-Dev-Guide.rar_pjsip

    PJSIP是一款开源的、跨平台的多媒体通信库,它提供了丰富的API,用于构建VoIP应用、视频通话、即时消息和会议系统。PJSIP的开发文档是理解其内部工作原理和进行源码研究的关键资源。下面将详细介绍PJSIP库的一些核心...

    pjsip 2.4协议栈

    PJSIP是一个开源、跨平台的多媒体通信库,它提供了SIP(Session Initiation Protocol)协议的实现,适用于开发VoIP(Voice over IP)应用、视频通话、即时消息等多媒体通信服务。PJSIP 2.4是该库的一个较新版本,...

    linphone-3.11.1.tar.gz

    linphone是由Belledonne Communications开发的一款免费的VoIP客户端,它支持多种平台,包括Windows、Mac OS X、Linux、iOS和Android等。其核心设计目标是提供一个简单易用且功能丰富的VoIP解决方案,使用户可以通过...

    携程技术精选合辑——架构篇1

    - CRNWEB是携程自主研发的跨平台框架,旨在实现Web、iOS和Android的代码复用,提高开发效率,同时保证各端用户体验的一致性。 5. **VI(Visual Inspector)快速排障** - VI可能是携程内部的故障排查工具,它帮助...

    计算机科学与技术专业毕业论文参考选题.doc

    - **嵌入式操作系统 Android 系统的开发**:开发基于Android的操作系统版本,适配特定应用场景。 - **以太网控制器的 FPGA 实现**:研究高速数据传输的技术细节,提高网络性能。 - **IP 电话的设计与实现**:探索...

    GNU Telephony:GNU电话服务和应用程序-开源

    在开发和部署GNU Telephony解决方案时,开发者和用户都可以自由地探索其源代码,学习通信协议的工作原理,甚至贡献新的功能或修复。这种开放性促进了技术创新,也降低了依赖特定供应商的风险。同时,由于源代码是...

    exoSip-manual.rar_exosip

    exoSip是一款开源的SIP(Session Initiation Protocol)栈,用于在各种网络应用程序中实现VoIP、多媒体通信和其他基于SIP的服务。本手册将深入探讨exoSip的开发流程,调用方法以及相关的宏定义,帮助初学者快速上手...

    应届生大礼包-阿尔卡特篇.pdf

    - **移动软件笔试题**:侧重于评估应聘者对于移动操作系统(如Android或iOS)、移动应用程序开发框架等方面的知识和技能。 #### 面试经验 文档还包含了关于阿尔卡特面试的经验分享,这有助于准备参加面试的应届生...

Global site tag (gtag.js) - Google Analytics