rtpengine源码结构分析及交互流程

31 篇文章 4 订阅

一、交互结构图



二、总体结构:

1. 大部分数据结构都直接使用的glib的库提供的;

2. 将网络层做了一个封装和业务部分用回调方法来解偶;

3. 和第三方服务用网络TCP/UDP连接方式用简单自定义文本协议来交互;

4. 可以将相关的状态同步给redis外部缓存, 供其它外界的分析调用;

5. 采用内核相关模块来进行媒体的交换, 提高应用性能。

三、流程分析

1. main方法一路下去, 先进行options方法的调用, 主要是使用glib提供的库方法简单的对命令行参数进行解析并校验判断;

2. 接着init_everything()方法, 日志库, ssl库, 信号等的初始化, 时钟的获取, 系统资源限制的设置,ICE模块等等全局的初始化;

3. void create_everything(struct main_context *ctx) 方法, 如果内核中转处理配置参数打开, 则创建内核映射表, 并打开, 否则直接poller_new()创建一个epoll模型的事件驱动器,    callmaster_new(ctx->p)创建一个会话管理器, 用来管理所有会话, 其中定义了一个定时器及会话表, 并定义了对info及stream进行协议匹配及分析的正则式;

4. 初始会话管理器的配置及参数, callmaster_config mc 填充, 主要有内核表句柄kernelfd, 全局队列实例GQueue interfaces, 临时端口的区间, 支持的最大session数量, 等;

5. 创建和第三方指令服务的信令交互的TCP监听服务, 使用配置:LISTEN_TCP=127.0.0.1:2222, 指令有:request, lookup, delete, build|version|controls|quit|status, 主要分为三类其包体的结构也不一样, 第一类是创建及关联peers对, 一类是删除节点, 一类是供第三方服务来查看媒体代理服务的总体状态及运行情况及本session的状态, 创建监听端口, 并设置消息接收处理的回调方式后加入全局的poller事件监听器中去, 等待和处理消息;

6. 创建和第三方指令服务的信令交互的UDP监听服务, 使用配置:LISTEN_UDP=127.0.0.1:2222, 填充协议解析正则式, 同样也分为三种协议格式, 一类是U/L(update/lookup)主要用来处理offer/answer的相关建立会话场景的处理信令, 一类是D/Q(delete/query)主要是用来处理会话的拆除及相关参数状态的查询, 一类是V(version)版本等相关信息的查询;

7. 创建和第三方指令服务的信令交互的UDP NG临听服务, 使用配置:LISTEN_NG=127.0.0.1:2223; 可以交互修改SDP信息同UDP的监听方式;

8. 不管第三方服务以上述哪一种连接方式接入, 最终都是为了把会话的场景给建立起来, 当offer信令到达时, 使用各种参数将Aside的session给填充起来, 当answer信令到达时, 从缓存中查出Aside的相关参数, 和Bside的相关属性关联起来monologue_offer_answer()方法中完成, 然后初使化出A, Bside的接收RTP数据包的服务端口在__get_endpoint_map方法中的__stream_fd_new方法中完成各边数据包接收服务端口的开启,, 并设置媒体数据处理回调stream_fd_readable, 在其中进行媒体的交换.

细节请参见源码: https://github.com/sipwise/rtpengine


  • 3
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
蓝牙配对流程源码分析在CSDN上可以找到相关的技术博文和开源项目,以下是大致的分析过程: 首先,在CSDN中搜索蓝牙配对流程的关键词,可以找到一些作者分享的源码分析文章。这些文章通常包括了蓝牙配对流程的基本知识介绍、配对过程的技术原理以及相关代码的解析。 其次,阅读这些源码分析文章,可以了解蓝牙配对流程在底层的实现细节。这些文章通常会讲解配对流程的各个步骤,例如配对方式的选择、密钥生成的过程、配对请求和回应的交互等。 同时,可以跟踪并分析开源项目中的相关代码。在CSDN上,一些开发者可能会分享他们自己实现的或者对开源项目进行的蓝牙配对流程源码分析。通过分析这些代码,可以更深入地了解蓝牙配对流程的实现细节和相关的算法。 最后,结合文献和博客中的技术理论与代码分析,我们可以对蓝牙配对流程源码有一个整体的认识,了解不同实现中的差异和特点。需要注意的是,虽然CSDN上的文章和博客可以提供一些指导,但最好通过多个来源的阅读和对比,以获得更全面和准确的理解。 需要注意的是,由于CSDN是一个开发者分享技术经验的平台,文章和博客的质量、深度和准确性可能有所不同。因此,在阅读这些内容时,应当保持批判性思维,结合官方文档和其他权威来源进行综合分析和验证。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值