Linphone
是基于WEB
的IP
电话工具,可以运行于 Linux
和Windows
下。通过 Linphone
可以在互联网上和其他人进行声音、视频通信。 Linphone
是遵从SIP
协议开发的,它需要和支持SIP
协议的设备或者代理服务器进行相互操作。
1、DVR
联网:
两种方式:
T3DVR
连接AI-BOX
->T-BOX
通过网络转发连接外网。
T3DVR
直接接PC
,利用PC
的网络出外网(桥接)。
2、下载客户端
下载地址:http://www.linphone.org/technical-corner/linphone?qt-technical_corner=2
如上图所示SIP
地址为:sip:[email protected]:5060
3、注册自己的账号
T3-DVR
的linphone
客户端需要账号:
账号注册地址为:https://www.linphone.org/freesip/home
这里我注册的账号为:
SIP
地址为: sip:[email protected]
Username
: yang-123
Domain/Proxy
: sip.linphone.org
密码: 123
4、DVR
设置账号:
DVR
启动后,通过TCP
方式设置SIP
账号信息:
命令为:CMD_SET_SIP_INFO:sip.linphone.org,yang-123,123
1、创建linphone
后台进程
linphonecsh init
这一操作开机执行在/etc/profile
文件中:
cat /etc/linphonerc > /tmp/linphonerc & /usr/local/bin/linphonecsh init
2、创建linphone
后台进程
linphonecsh exit
3、拨号
linphonecsh dial
比如:linphone dial sip:[email protected]
4、挂断
linphonecsh generic terminate
5、注册到服务器(账号登陆)
因为我们使用的是sip.linphone.org
服务器,此需要联网
linphonecsh register --host sip.linphone.org --username yang-123 --password 123
这一步跟CMD_SET_SIP_INFO:sip.linphone.org,yang-123,123
命令一个作用
6、获取注册状态(登陆状态)
用于获取是否注册成功的信息
linphonecsh status register
7、接通电话
linphonecsh generic answer
通讯录:
8、添加一个好友
linphonecsh generic 'friend add
例:linphonecsh generic 'friend add yang sip:[email protected]:5060'
9、查看好友列表
linphonecsh generic 'friend list'
10、给好友打打电话
linphonecsh generic 'friend call
例:linphonecsh generic 'friend call yang'
11、删除好友
linphonecsh generic 'friend delete
12、查看历史记录
linphonecsh generic 'call-logs'
可以看出刚才我打电话的记录。
13、静音配置 打开静音
linphonecsh generic mute
14、静音配置 取消静音
linphonecsh generic unmute
Coreapi:
源码目录:t3_dvr/external/linphone/linphone/coreapi/
该通过这些API
接口,可以快速构建基于sip
的可视化电话系统。
(1)Callback
模块:
文件:callbacks.c
该模块下的回调函数都是用于 sal
模块调用的。当 sal
处理完 sip
协议的处理后,就会调用相应 的 callback
函数继续后续的处理,包括启动一个音视频传输流,启动响铃等。也就是说这里的 callback
完成了media
媒体层的处理以及 linphone
上层的处理。
(2)Address
模块:
文件:address.c
调用 sal
提供的接口,进行与地址相关的处理, 这里的地址主要是 uri
相关的处理。包括获取地 址以及地址中的部分信息或者设置这些信息。在上层地址是一个字符串指针,但是在内部处理时都 会强制转换为 osip_from
结构体来处理。实际上就是对linphone_address
结构体的处理。
(3)authentication
模块:
文件:authentication.c
处理认证信息。 各个认证用户的信息都被保存到 linphone_auto
结构体中兵串接在 linphone_core
结构体上。这里的接口就是处理这些数据结构,提供设置和获取相关信息的接口。
(4)Chat
模块:
文件:chat.c
提供创建和销毁 chat room
,向 chat room
发送消息和从 chat room
接收消息的接口,以及设置和 获取用户数据的接口。 类似于 authorization
模块,所有的 chat room
信息也是保存在linphone_chat
结 构体中并串接在 linphone_core
结构体上的。
(5)Friends
模块:
文件:friend.c
提供处理 friends
相关信息的接口。所有的 friends
信息保存在linphone_friend
结构体中并被串接 在 linphone_core
结构体上,这样操作起来,包括设置,获取,添加以及移除都很方便。
(6)Offeranswer
模块:
文件:offeranswer.c
管理基于 sdp
的媒体协商。根据本地的支持能力和远端支持的能力,根据就低的原则,获得双方都 可以支持的媒体信息。比如编解码格式等。
(7)presence
模块:
文件:Presence.c
提供与在线状态相关的处理。
T3-DVR
中: /etc/linphonerc
[sip
]
sip
协议相关参数
实验:两个电脑下载linphone
进行通话,Wireshark
进行抓包分析通信过程。
Linphone
地址为:
A: sip:[email protected]:5060
B: sip:[email protected]:5060
操作:
A
给B
打电话进行实验:
Wireshark
置过滤信息:
(ip.src == 172.17.218.139)||(ip.src == 172.17.218.66)
过程:
SIP
(Session Initiation Protocol
,会话初始协议)是一个控制发起、修改和终结交互式多媒体(音视频、聊天、游戏等)会话的信令协议
1、主叫方发给被叫方的INVITE
请求
2、B
向A
发送呼叫处理中的应答信号。
3、B
向A
发送 我正在震铃中,请稍等。
4、B
向A
发送 接通了。
5、A
向B
发送应答。
6、A
和B
互相通过RTP
(Real-time Transport Protocol
实时传输协议)发送音频或视频数据。
7、A
要挂断了
8、关闭UDP
服务
9、B
知道A
挂断了,相应ACK