六 Doubango协议栈中对RTP的管理

本文深入探讨Doubango协议栈中RTP的管理,涉及tsip_dialog_invite_t、tmedia_session_mgr_t、tmedia_session_t等关键数据结构。详细阐述RTP端口生成过程,包括tmedia_session_mgr_get_lo函数的作用,以及如何在对话中管理媒体设置。此外,还介绍了相关结构如tdav_session_audio_t和tdav_session_video_t,以及如何初始化和加载编解码模块。
摘要由CSDN通过智能技术生成

相关数据结构

1.    tsip_dialog_invite_t

描述:

一个invite_dialog代表了一个invite期间的所有的信令流程,因此,它首先是一个普遍的dialog的特殊化结构,在该结构的起始部分,有一个TSIP_DECLARE_DIALOG声明,该声明展开后是一个tsip_dilog_t __dialog字段的定义,这是一种在C中一个具化对象对通用对象的继承机制,tsip_dialog_t对象代表了更通用的实例,而tsip_dialog_invite_t对象则是tsip_dialog_t对象的具化和拓展。

一个dialog本身有自己的有限状态处理机,有自己的当前状态和当前状态应执行的动作,还有一个状态变化时的回调函数。它还需要有一个字段指向它所属的session,这些字段,反应在数据类型上上,分别是:

tsk_fsm_t(有限状态机),tsip_action_t(状态执行动作),tsip_dialog_state_t(当前状态),

tsip_dialog_event_callback_f(回调函数),tsip_ssession_t(所属session)。

创建时机:

tsip_action_INVITE()函数是上层应用与底层协议栈的接口,当上层应用发起一个INVITE时,便会分层调用到该接口。

tsip_dialog_invite_t类型的实例便是在该接口中创建的,对于创建时,还需要在协议栈的全局dialog队列中寻找一遍,看是否相关的dialog已经在之前被创建,若是,则沿用老的实例,若否,则用tsip_dialog_layer_new()函数创建一个新的实例,并链入到协议栈dialog_layer层的全局队列中。

关键点:

 

2.    tmedia_session_mgr_t

描述:

一个tmedia_session_mgr_t实例是由上述的tsip_dialog_invite_t实例的session_mgr字段记录的,代表了在一个对话期间各种媒体设置的管理者。

 

当发起一个INVITE时,首先必须存在一个代表信令流程的对象即dialog对象,其次,还要有一个负责管理媒体信息的对象,及该结构的实例。

 

创建时机:

该结构的首次创建是在invite_dialog的状态转换过程中,c0000_Started_2_Outgoing_X_oINVITE()函数是一个状态转化函数,它代表着当前dialog由初始状态向发起INVITE后状态转化需要执行的操作,在该函数内部,通过tmedia_session_mgr_create()创建tmedia_session_mgr_t实例,然后填写本地媒体信息(即sdp中得各个字段),申请rtp端口号,生成代表rtp的网络传输实例(tnet_transport_t对象),最后在该状态转换函数中,通过协议栈的代表信令的网络传输实例将INVITE消息传递出去。

 

关键点:

tmedia_session_mgr_t中,有一个

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值