会rtp、rstp协议的请进

会rtp、rstp协议的请进,第1张

RFC3550

RTP 是目前解决流媒体实时传输问题的最好办法,如果需要在Linux平台上进行实时流媒体编程,可以考虑使用一些开放源代码的RTP库,如LIBRTP、 JRTPLIB等。JRTPLIB是一个面向对象的RTP库,它完全遵循RFC 1889设计,在很多场合下是一个非常不错的选择,下面就以JRTPLIB为例,讲述如何在Linux平台上运用RTP协议进行实时流媒体编程。

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

三、linphone *** 作:

1、创建linphone后台进程

linphonecsh init

这一 *** 作开机执行在/etc/profile文件中:

cat /etc/linphonerc >/tmp/linphonerc &/usr/local/bin/linphonecsh init

2、创建linphone后台进程

linphonecsh exit

3、拨号

linphonecsh dial <sip uri or number>

比如: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 <name><addr>'

例:linphonecsh generic 'friend add yang sip:[email protected]:5060'

9、查看好友列表

linphonecsh generic 'friend list'

10、给好友打打电话

linphonecsh generic 'friend call <index>'

例:linphonecsh generic 'friend call yang'

11、删除好友

linphonecsh generic 'friend delete <index>'

12、查看历史记录

linphonecsh generic 'call-logs'

可以看出刚才我打电话的记录。

13、静音配置 打开静音

linphonecsh generic mute

14、静音配置 取消静音

linphonecsh generic unmute

四、Linphone中相关api介绍:

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

提供与在线状态相关的处理。

五、Linphone中参数解析:

T3-DVR 中: /etc/linphonerc

[sip]

sip协议相关参数

[net]

[net_policy_0]

net使用ref参数传递

[misc]

唯一的机器生成的标识

[video]

是否显示、是否录像等标志位

[rtp]

rtp音频端口、视频端口等信息:

[sound]

铃声文件目录、音频频率等、

六、 Linphone中通信过程分析:

实验:两个电脑下载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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。

本文链接:https://blog.csdn.net/qq_33487044/article/details/104080018


欢迎分享,转载请注明来源:内存溢出

原文地址: https://outofmemory.cn/yw/7274759.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-04-03
下一篇 2023-04-03

发表评论

登录后才能评论

评论列表(0条)

保存