SIPDroid.docx
《SIPDroid.docx》由会员分享,可在线阅读,更多相关《SIPDroid.docx(17页珍藏版)》请在课桌文档上搜索。
1、AndroidSIPdroidProjectSharingMay232011Warning:Ifyouhaveanyquestions,adviceorsomethinge1.se,p1.ease1.etteamknow.FightTeamContents怎么学习androidSiPdrOid开源代码3SiPdroid流程详细分析3SiPdrOid会话遨请流程(一)4Sipdroid会话遨请流程(二)5SiPdrOid中像效劳器注用是如何实现的(一)7Sipdroid注册(二)-Sipdroid注册S1.P消息分析9SiPdroid注册(三)-注册返回结果的监听11SiPdroid数据发送流程
2、13Sipdroid中的视频通话是如何实现的16SiPdroid中:步及到的吉媚?,挛1/18Sipdroid涉及到的冰议之RFC3261忽么学习androidSiPdroid开源代码?SiPdrOid目前有24个包,,140多个java文件.首先学习SipdrOid,至少辨明白SiPdroid是怎么玩的,实现的主要功能是什么,具体的流程操作是怎么执行的.先整理下下面的问题:一.Sipdroid的数据流程怎么发送的?参考文档:二.Sipdroid中果用的是什么协议?这点#常的重要,因为SiPdroid栗用的是RFC3261快议,大家看了RFC3261砂砍后,你就会明白.Sipdroid中对于M
3、eSSage的料袋是如何完成,那么MeSSage的豺笠和生成这块所涉及到得设计模式和代码,你根本就可以弄明白参考文档:三,分块来弄Sipdroii1.首先Sipdroid的架构真是设计的是乖常的人性化以及牛X,为什么呢.功能块是完金独立前分开的,高内聚低耦合.SiPdrOid本身来说妩像一座非常施以攻克的堡全,但是咱们只要一块一块的攻.不久就发现整做城堡就被搞定了.一报来说,应该这么做:1.研究注册流程参考文档:2 .畀究会话遨请流程3 .视嵬通话通话流程4 .整理SiPdroid的架叫5 .畿取右用信息,比方视嫉和声音的描弊四库.协议的封装和设计模式等1.SipDroid模块简单分析U1.层
4、,负责界面显示模块和界面时间传递Engine软件核心处理层.启动各种效劳,初始化软件卷数。处理各种U1.时间.港椅配置文件信息,保存全局居性变量.其中包括USerAgenProfi1.e(用户配置文件属性),USerAgent(用户事件处理).SiPdmidEngine(核心於理.所有的U1.的事件,参数设计.效劳的启动都由比文件调度.RCgiS1.CrAgent(注册效劳於理)SipS:提供所有Sip消息模型,所有SiP消息的处理流程,包括发送,接收,封装,解码等等网络传输:提供音频,视须信息的处理,此模块会对音残视须选行即时编诏解码,同时发送数据。同时还提供JSTNNAT透传技术。2.Si
5、pDroid流程分析:段号:拨号请求由U1.通过ReCeiVer需送信息交蛤SiPDrOidEngine处理,在SiPDrOidEngine做一些验证,然后交蛤USerMine处理。其中CaII(Stringtarget_ur1.,boo1.eanSend_anonymous)为判断是否匿名拨号再此方法中.会鹤立一个EXICndedCaI1.对象.以提供应SiD协议校使用,然后调用EX1.CndCdCa1.I的CaII方法处理.之后由EXtendedCaI1.的ca1.1.,调用EXtendedInv1.teD1.ti1.og来发送invite请求.由InViteDiaIog执行具体的invi
6、te调用InviteTransactionC1.ient的request方法,最后由InviteTransactionC1.ient发送request请求,在InViI。TranSaenOnCIient中会通过SiPPrOvider.来发送消息.井18开对IS口监听.来收SiP消息.发送消息主要有(UDP传输I1.dpTransportTCP传输TcpTransport)未电:在启动程序的时候会通itSipDroidEngine会根jg配置,创立-个PrOVider,这里用到UdP传输,创立一个UdPProVider.UdPProVer是一个Thread.创立的时候就会启动歧程.开始裳听收到的
7、信息.当受到信息后.通过OnSerViCeTfnniniIted方法.把对象传出到UdPTranSPOrt,由UdPTranSPort处理,再通过onTransportTerminated方法传出到SipProvider定象.最后将在SipProvider的ProcessReceived.Message方法中处理收到的消息.最后从IiStenerS(InaP)中取出相应的IiStener.最后逋i相应的IiStener中的OnRecciYcYcssagcO来父理具体Sip请求SiPdroid会话邀请流程(一)uA9f*jvodr.fquM.u*to.u*11.uf1.cuct.uMon.dMC
8、f9r.ktM1台IMMIm9MMXMtejIB片比较直观,但是衰建却不够详细,下面咱们详细分析下流程:会话送请所涉及到得突:SipdroidEngine(ca1.1)-UserAgcnt(ca1.1.)-ExtendedCa1.1(ca1.1)-InvitcDia1.og(invite)左边的代表涉及到的类,右段代表涉及到的核心方法.从左到右进行观察,左边的#UMr一个右边类费的,数作为自己的成员函数,就是SiPdrOidEngine有一个成员函数Ua.这不Ua是USerAgCnt类型的。*InviteDia1.og中的invite函数所做的事情也是非常的葡单,生成会话遵清的message然
9、.后通过SipProvider发送出去就行了,那么发送完毕后,怎么实现对发送结果的IS听呢?其实官己猜想一下也猜想到效劳器返回数据会什么类型的?1.等待对方应答中2 .对方已经应容,进入双边通话模式中,同时手机这边开始声音和视须的采集.(声音和视领的票果,这个是核心中的核心啜,马上就要弄到这块了,兴奋田)3 .超时,对方无应答.在二的分析中,咱们用倒推的方法来分析下客户期在接受到效劳期的返回后,传遑到了印里去进行会话递清的结果了.客户端是怎么实现的.Sipdroid会话邀请流程(二)这里咱们要弄明白的是,SiPdroid会话遨谓的结果是在哪里进行监听的,以及这种效果是怎么实现的?发送消息统一是
10、由Sipdroid的SendMCSSHge来进行发送的,然后返回的数据咱们可以在Sipdroid的OnReceiVeMessage中东进行获取。在SiPdroid注册结果的盅听:这篇文章中.咱们分析了下,首先会话的类51有很多种.注地会话,遨诂会话,遗话会话等等,因此在OnReCeiV。比,SSage中会对当前进行的会话进行判断,根据当前的会话1D,判惭出当前具体的会话类型,然后具体的会话类型通过谒用自己的成员函数(会话接口对象的接口方法)将数据会话接口对象.那么分析就简单了.便推下:1.型谓会话类是谁?2 .遨请会话美再会话接口是耶个.速请会话类会在获取到返回的数据后将获得到得数据传说给会话
11、接口的接口方法中3 .分析会语接口中的方法是怎么处理邀请回话类返回的数据的?只要咱们这样分析,咱们就可以倒推出最终数据是怎么处理的,处理数据的核心其实还是更新UI界面和进行要辑判断,所以故终的於理必须是距离U1.界面近的美.会话逮请类是:InvjtcTransactionC1.icntinvit?_tc-mrInvit?Trans-?icti1111CIient(sipprovider,invitereq.this):nvite.tc.request0;SipPcrvider在获取到数据后是怎么传给会话邀请美得?。个具体的会话类梆会继承一个抽象的女.这个牯象的会话类继承了SiPPrOVider
12、1.iStener,在SipProvider获得message后,在OnReceiverMessage中,会通过执行SipProvider1.istener的接口方法将数据传给是实现了此接口的美,在会话邀请类中也就会传递给具体的会话类InYiteTransaction.每一个具体类在初雄化的时候,是必须有SiPPrOVider作为参数的,然后在通过SipProvider的addSiPProVider1.iStener(id.SipProYier1.istneiO指定会话类型和会话接11,还有SipProvider是唯一和独立的.因此一个会话中,只可能存在一种会话类里.InviteTranSaC
13、tiOnCIien1.在OnReCeiVeNeSSaKe会将数据传递给transaction1istener,transactionIiStener其实就是InViteDia1.og,InviteDia1.og实匏了TransactionC1.ient1.istener,并在InViteTranSaCtionC1.inet的时候传递进去T,所以数据都是按照这样的烫辑往上传的,剩下的分析就非常简单了,大家自己分析吧.,所以最终的数据还是会回到UserAgent里面Ca1.1.1.istenerAdapter接口方法里面.这个方法还提巧的,谁发送的请求最后就由津最终耒处理这个巡回的结果.幡后%Si
14、pdroidEnginedt是这些核心类用来交互的一个地儿,然后咱们在启动的ACtHVity里面就只管理用SipdroidEngine提供的方法来控制指令就成了,牛X的樨柒,RegisterAgent敢先发送注册请求,最后的注册结果也得RegiSterAgent来处理.UserAgent最先发出会话邀请请求,最后的邀清结果也将USerAget来处理.Sipdroid中像效男总注号是如何实现的(一)关于Sipdroid是加何实现像效劳注册的?首先告诉大家代码块在哪里,注的的核心在RegiSterAgent类中的函弱register(inttime)中,注册的核心是:1. /Create11ess
15、agere(11nrfifi*dbynv11rfrnjg)2. Messagereq=ssaeFactory.creatRegistrarREGISTERsip:registrar,SIP2.0Via:SIP2.OUI)Pbobspc.bi1.oxi.cjh:5060;branch=z9hG1.bKnashds7Max-Fonrards:70To:BobFr三:Bob;tag=456248Ca1.1.-ID:8138176376S123(三98sdasdhO9CScq:1826REGISTERContact:Expires:7200Contcnt-1.enRth:0注册会在2小时后超时。注册效
16、劳器回应一个200()K,返回的信息包分如下:F2200OKRegistiir-BobS1P/2.0200OKVia:S1.1.,2.0/UDPbobspc.hiIoxi.co三:5060:branch=z9hG4hKnashds7;received-192.0.2.4To:Bob;tag=2493k59kdFran:Bob;tag=456248Ca1.1.-ID:81381763768423O998sdasdhO9CSeq:1826R1.iGISTERContact:zExpires:7200Content-1.ength:0这里面涉及到很多参数.但是在RFe3261中如有详细的介绍。第二督
17、将给大家介绍下,发送的注册消息体里面的。个拿数所代表的意义.Sipdroid注哥(二)-Sipdroid注册S1.P消息分析发送注班的message的结构作如下:F1.REGISTERBob-RegistrarREGISTERsip:registrar,SIP2.OVia:SIP2.0/UDPbobspc.hi1.oxi.coe:5OfiO:branch=z9hG4hKnashis7Max-Forwards:70To:BobFrab:Bob;tag=456248Ca1.1.-ID:8138I7637681.23(g998sdasd09CSeq:1826REGISTERContact:Expir
18、es:7200Content-1.ength:0下面咱们分析下.这里面的数据?里面的蛾格在RFC3261协议中已经有很滑足的说明了,只是比较的分散.上面的数据琳为:S1.P消息.S1.P分议是基于文本的机议,笠用UTF-8字Q鬃.SIP消息的大致限成是按照下密的格式进行的.一般消息=起始行*消息包头CR1.F/cr1.f也就是回车换行的意思消息正文起始行=请求行/状态行需要注虞的是,每一行结束后都要想回车换行rn,并且回车换行只允许加到求足,其余的位置不允许出现回车换行请求分析:Request-1.ine=MethodSPReqUeSt-UR1.SPSIP-VERSIONCR1.F/SP代表空
19、格这个建请走行的格式.K1.hod定义了6中方法.REGISTER用于登记联系信息.INVITE,CK.CANCE1.用于陇立会话,BYE用于结束会话ReqUeS1.UR1.就是注册费分配给你的唯一的标识符.效劳器需要这个数据来于你进行绑定,S1.P-VERSIoN:请求和应答消息都包含的当前所有的S1.P版本,一皎写SIP/2.0就行了后面的那些参数:Toi三1.CsgCa1.ITD这些字段在SIP消息中被称为头城,这些头城包含了路由用的核心信息,比方消息地址.事物的唯一标志等ToRFC3261中的详匆解号在8.1.1.2拿节TO头域是第一个并且也是最先指定请求的逻辑接受地,或者是这个请求的
20、用户或者资谏的addressof-rccord(这个语句解锋的有点抽象.To头城的写法雪SP表示空格)姓名(可用可不用)SPSIP1.R1.exa三p1.e:To:523851253Froe详维的说明文档请畚加RFC32618.1.1.3章节Froe1.n头域包含了请求发起老的三辑标;,可以是用户的addrcss-of-record.Fr三头域的主要作用是用来实现对请求的检查,同时让效劳器选择一个规则对请求进行处理,同样Frg也可以包含一4请求人的姓名,使得注意的是,FrOm还必须包含一个TAG,这个tag是UAC(用户代理客户端,Sipdroid?其实也就是SiPdrOid程序令产生的)囱动
21、给你产生的,Iag的详细描述在Rrc326119.9拿掌.FraB格式:Fr:姓名(可有可无)SP:tag=a48sC1.F(回车换行)RFC3261怖议中对于Can-ID写的已经是非常非常详细了,直接站出来给大家看:CauTD是一个在一系列消息中,区分一姐消息的唯一标志.在对话中的任一UR的所有请求和所有应答的CaU-ID必须一致。在UA的每次注母中,都应该是一样的.在会话外的时候.UAC发翅一个新的清求,这个Ca1.I-ID头域必须由UAC产生一个全局(在时间和空间上都是)唯一的Ca1.I-ID.除非是请求关的方法(method)指明了别的产生方式.所有的SIPUA都必须保证自己产生的Ca
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- SIPDroid

链接地址:https://www.desk33.com/p-1686676.html