Linphone分析-中文

整理文档很辛苦,赏杯茶钱您下走!

免费阅读已结束,点击下载阅读编辑剩下 ...

阅读已结束,您可以下载文档离线阅读编辑

资源描述

Linphone分析一linphone架构及组成模块..............................................................................................................................2二linphone系统框图...........................................................................................................................................3三linphone中各个模块说明..............................................................................................................................3四linphone中数据结构说明..............................................................................................................................7五linphone的初始化过程...................................................................................................................................7六linphone建立通话过程说明........................................................................................................................101拨号call过程...........................................................................................................................................102等待响应...................................................................................................................................................163Answer过程分析.......................................................................................................................................214关于RTP及音视频流的网络传输........................................................................................................225总结............................................................................................................................................................23七linphone会话执行过程log分析.................................................................................................................24八linphone使用参考.........................................................................................................................................40岳维功基于linphone-3.3.2版本,新版本linphone-3.4.3支持同时有多路call,所以,相比之前版本会有不少变化。一linphone架构及组成模块Linphone是一款跨平台的可视电话客户端软件,同时支持视频通话功能。Linphone可以在Linux,windows等主流操作系统平台上运行。Linphone基于开源软件构建,本身也是开源软件。Linphone架构中sip协议的处理基于osip以及exosip两个开源库实现,媒体数据的选择整合处理使用mediastream2完成,该软件使用ffmepg、speedx等多款开源软件完成音视频的编解码,并通过ortp完成基于rtp协议的音视频数据传输。ortp是一款处理RTP会话的开源软件。1整体架构图如下:整个软件分为两层,上层为用户接口前端(userinterfacefrontends),下层为linphone核心引擎(linphonecoreengine)。2功能模块说明:Liblinphone核心引擎实现了linphone所有的功能函数,而且能够方便的添加音频和视频的呼叫功能。Liblinphone也提供高层的API,用来初始化,接收或者终止呼叫。Liblinphone依赖于下面三个组件:1Mediastreamer2这是一个支持多种平台的轻量级的流技术引擎,主要适合于开发语音和视频电话应用程序。该引擎主要为linphone的多媒体流的收发,包括语音和视频的捕获、编码解码以及渲染。2ortp2Ortp是一个RTP库。为基于RTP协议的媒体流传输提供支持。通过mediastream2编码的数据就是使用ortp库发送到网络的另一端。3eXosip2Exosip2为sip协议的实现。这部分实际上是由exosip2和osip2两个库共同完成的。使用sip协议完成路由、媒体协商以及会话的建立和管理,为直接的媒体流的传输提供基础。二linphone系统框图网络接口用户界面Sipmsg接收Sipmsg发送系统运行框图IctexecExosip任务ReadmsgIstexecNictexecNistexecMs/ticker/audioLinphonecore任务iterateprocessRtprecvfiltersRtpsendfiltersHard-readHard-readMs/ticker/vudioRtprecvfiltersRtpsendfiltershardhardRtp接收Rtp发送Rtp接收Rtp发送Sipsal_iterateAudiostreamprocessVediostreamprocess关于上面框图的一些说明:通话双方在通信前使用exosip进行会话协商。上图左边部分展示这一部分的流程。Exosip后台任务完成数据的接收和发送,并通过事件队列通知linphone底层的状态变化。filter的构建在会话协商成功建立后就顺带完成了,并且ticker任务也跑起来了。此时按照filtergraphics构建的通道,音视频流不断的从硬件设备上读取,并经过编码压缩送给RTP会话,之后送到对端,对端到达的音视频流也经过RTP会话接收送到解码解压缩filter,还原出原始的音视频流交给硬件设备播放。媒体数据在这两路流中源源不断的流动,完成了双方的可视通话。上层linphone的core任务也不断的对底层进行迭代检查。所做的基本工作如下:对于sip协议部分,core一直等待从事件队列上拿事件。这些事件是exosip任务在处理sip消息过程中添加到事件队列上的。每当得到新的事件后,core就从应用层的角度出发,进行处理。对于视频流:基本上只处理rtcp数据包到达的事件。stream上也有一个事件队列,用于保存该流上的相关事件。对于rtcp数据包事件,core也只处理sr类型rtcp包,即发送端报告,得到jitter和包丢失率。如果设置了自适应比特率,则调用相关接口进行处理。此过程不断进行,直到当前事件上的包处理完。对于音频流,检查流是否还是活动的。通过比较RTPstats中接收的数据包数目是否发生变化,如果在超时时间到达后,接收的数据量还没有发生变化,则认为音频没有响应。三linphone中各个模块说明1Linphonecoreapi中子模块说明:Coreapi中的各个模块就是上层的处理模块,包括configure文件的处理接口,address的处理接口,chat的处理接口,sal的处理接口,proxy的处理接口,authorization的处理接口,friends的处理接口,callback的处理接口,state的处理接口,杂项处理接口等。这相当于高层的几个模块,提供给用户的接口调用主要都在linphonecore.c中1)Callback模块:该模块下的回调函数都是用于sal模块调用的。当sal处理完sip协议的处理后,就会调用相应的callback函数继续后续的处理,包括启动一个音视频传输流,启动响铃等。也就是说这里的callback完成了media媒体层的处理以及linphone上层的处理。回调函数被保存在全局变量linphone_sal_callbacks中,在linphone初始化时调用sal_set_callbacks设置到sal的callback上去的。2)Genera_stat模块:主要提供linphone全局状态的修改与设置的接口3)Address模块:调用sal提供的接口,进行与地址相关的处理,这里的地址主要是uri相关的处理。包括获取地址以及地址中的部分信息或者设置这些信息。在上层地址是一个字符串指针,但是在内部处理时都会强制转换为osip_from结构体来处理。实际上就是对linphone_address结构体的处理。4)Authorization模块:处理认证信息。各个认证用户的信息都被保存到linphone_auto结构体中兵串接在linphone_core结构体上。这里的接口就是处理这些数据结构,提供设置和获取相关信息的接口。5)Chat模块:提供创建和销毁chatroom,向chatroom发送消息和从chatroom接收消息的接口,以及设置和获取用户数据的接口。类似于authorization模块,所有的chatroom信息也是保存在linphone_chat结构体中并串接在linphone_core结构体上的。6)Friends模块:提供处理friends相关信息的接口。所有的friends信息保存在linphone_friend结构体中并被串接在linphone_core结构体上,这样操作起来,包括设置,获取,添加以及移除都很方便。7)Configure模块:提供配置文件处理的相关接口,包括配置文件的解析,配置文件中信息的获取,写入,同步等。配置文件解析后便于程序处理的信息主要都保存在lpconfig结构体中,这与文本文件中便于编写和阅读的配置文件本身不同。配置文件中的各个配置模块本身也按照section的方式进行了划分,各个section也都是挂接在lp_config的section链表上的。这个模块可以单独提取出来进行测试。8)Offer_answer模块:管理基于sdp的媒体协商。根据本地的支持能力和远端支持的能力,根据就低的原则,获得双方都可以支持的媒体信息。比如编解码格式等。9)Presence模块:提供与在线状态相关的处理。10)Proxy模块:处理代理相关的处理。

1 / 43
下载文档,编辑使用

©2015-2020 m.777doc.com 三七文档.

备案号:鲁ICP备2024069028号-1 客服联系 QQ:2149211541

×
保存成功