linphone分析

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

目录

1 LINP HONE 的编译3

1.1 LINPHONE 在ARM 上的编译环境说明3

1.2 LINPHONE 依赖的库3

1.3 LINPHONE 编译脚本3

1.4 编译过程中的问题4

2 LINP HONE 代码分析4

2.1 LINPHONE 的初始化分析4

2.1.1 LINPHONEC 的初始化5

2.1.2 LINPHONE_CORE 的初始化5

2.1.3 ORTP 的初始化5

2.1.4 MEDIASTREAM2 的初始化6

2.1.5 EXOSIP 的初始化6

2.2 LINPHONE 的通话过程分析6

2.2.1 LINPHONE 的命令处理分析7

2.2.2 LINPHONE 的呼叫过程分析7

2.2.3 LINPHONE 的通话过程分析8

2.2.4 LINPHONE 的响应过程分析8

2.3 LINPHONE 中创建以及应用自定义过滤器9

2.3.1 过滤器的基本功能9

2.3.2 过滤器的通用接口10

2.3.3 自定义过滤器10

Linphone 的编译与代码分析

1 Linphone 的编译

1.1 Linphone 在arm 上的编译环境说明

Linphone 在arm 上编译的时候,时常会碰到一些问题,有时候想办法解决了相关的问题,但编译出来的Linphone 在板子上的运行仍然不稳定,或者不能通话。

如果条件允许的话,当碰到这些问题之后,可以换其它的工具链进行编译。我最初编译Linphone 的时候采用的是xscale270 板子自带的工具链,GCC3.4.3 以及uclibc。经过很痛苦

的一番折腾之后,所以的代码最终都编译通过,但是编译出来的linphonec 在板子上运行在通话开始之后总是崩溃。通过GDB 调试,发现是多线程的问题引起的,于是编译了一个线程结构相当的程序,但是测试没有发现问题。

最后,我改用GCC4.0.0 以及Glibc-2.3.5 基本上没有碰到什么问题,直接编译通过,并

且在板子上正常运行。

1.2 Linphone 依赖的库

除了上面所提到的Gcc,Glibc 以及系统的基本库外我主要编译了下面的程序包。

序号库名称说明

1 ReadLine 一个终端显示库,Linphone 会用到它时里面的事件循环机制来读取会话事件。

2 ffmpeg 音视频编解码库

3 Speex 专为通话过程设计的音频编码库

4 libtheora 视频压缩编码库

5 libfaac mpeg4 的音频编码器

6 libfaad2 AAC 音频解码器

7 SDL 简单的视频支持层

8 libosip2 SIP 的简单实现

9 libeXosip2 对libosip2 的调用进行封装,隐藏了多媒体会话建立过程中SIP 的细节

10 linphone-3.0 linphone 的主程序,包括mediastream, oRtp,coreapi 以及console四个部分1.3 Linphone 编译脚本

见附件。

1.4 编译过程中的问题

1、ffmpeg 的编译问题

在编译ffmpeg 的时候会发现有不少编解码码器不能编译能过,在configure 的时候禁用

的就行了。

2、linphone 的编译

linphone 的编译过程中可能会出现mediastream2 下面的test 不能编译能过的问题,在mediastream2 下面找到Makefile 文件,找到SUBDIRS 将tests 删掉即可。

linphone 下面的所有的库编译完成之后,linphonec 的编译可能不能能过,原因是几个库不能找到,这时候其它那几个库用不着,重新修改Makefile 即可(详见附件)。

2 Linphone 代码分析

Linphone 代码的分析主要分为三个部分。在整个分析过程主要是对音频通话相关的内

容进行分析,视频的流程类似,但有细节有很大的区别,请自行分析。如果在看代码的过程中碰到一些问题不能理解,推荐先看看SIP/RTP/RTCP 等协议的基本内容,或者通过抓数据包对整个会话过程进行分析。

2.1 Linphone 的初始化分析

首先主要的流程在流程图里面都有表现,图是边看代码,边画出来的,不是很好。下面

的分析主要是对图中的内容进行讲述。

先对图里面的标识解释一下:

实心箭头表示流程走向;

空心箭头表示调用关系;

指向出发点箭头表示循环调用;

黄色的框表示代相对独立的码块,红色表示关键函数,绿色表示成功;

虚线指向表示有相关性,但并非调用关系;

虚线框表示主要数据结构。

对L 2.1.1在li 则进处理理

Linphone 的整1 linphonec inphonec 的初进入linphone

理函数被注册整个初始化过的初始化

初始化过程中c 的主循环,

册在静态的数过程进行分析中,一共做了,等待用户输数组

LPC_COM 析可以分为下了两件事。首输入,如果有用

MMAND co 下面的个部分首先初始化li 用户输入就会ommands

中分。

nphone_core 会调用相应的

。如果你想增e ,如果成功的命令处理函增加

linphon , 函数。 ne

相关文档
最新文档