C++/Qt音视频通话开发MetaRTC源码解读,sdp交互流程,sdp抓包


本章内容解读MetaRTC开源代码,无任何二次开发,用于学习交流。

MetaRTC是国人开发的开源项目,适用各种场景音视频二次开发,可以去git阅读README,我们使用相对成熟的版本测试:Release v5.0-b4

本章解读sdp交互流程,关于sdp知识参考另一篇博文

sdp交互框架介绍

由于MetaRTC只是一个demo,sdp交互比较简单,软件启动会建立一个http服务监听,http服务端口固定1988,界面输入对方IP;
主动点击推拉流的一方是主叫,主叫会组建自己的sdp,发起post给被叫的http服务,同步等待被叫回复被叫的sdp,收到被叫的sdp后解析;
另外一方是被叫,被叫的http服务端收到主叫的sdp后,解析sdp并回复自己的sdp给主叫。
整个sdp交互过程是http请求-响应过程。

p2p视频通话,sdp交互最重要的内容是得到对方的IP和端口,用于创建udp收发音视频数据。

http服务监听

程序启动,在YangP2pHandleImpl类构造函数创建和监听http服务,被叫会用到这个http服务,当收到主叫的sdp后使用g_p2p_receive回调。
在这里插入图片描述

主叫sdp流程

主叫在界面输入对方IP,点击推拉流按钮,开始sdp交互,主叫调用yang_http_post,这里是收发同步,yang_http_post第一个参数是出参,函数返回时拿到对方sdp。
在这里插入图片描述
获取被叫sdp后,解析sdp并创建udp用于音视频数据的收发,这里udp端口是每次程序启动随机生成的5位数。
在这里插入图片描述

被叫sdp流程

被叫的http服务端收到主叫的sdp后,执行回调函数g_p2p_receive,解析主叫sdp,创建自己的sdp作为出参使用http服务端回复给主叫。
在这里插入图片描述

sdp抓包

sdp交互过程是http请求-响应过程,wireshark抓包看比较清晰。
在这里插入图片描述

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SDP快速开发平台试用版源码 一、源码描述 1、SDP软件快速开发平台是一套面向对象的应用软件快速开发平台。通过图形化、可视化的简单拖拉设置操作,快捷设计出我们所需的表单、流程、报表等,充分体现出所见即所得的开发效果;SDP是一款企业级应用的软件快速开发平台,通过它企业或软件公司或开发人员均可以非常便捷、快速、高质量地开发复杂的业务系统,包括EIP(企业信息门户)、ERP、HR、OA、CRM、EAI(企业应用集成)、MIS、JXC、电子政务平台、信息资源管理系统、数据挖掘分析报表等软件系统。 通过报表引擎,用户可以集成企业内分散的业务数据,制作各类复杂的WEB报表(统计、图形分析、数据钻取等);通过工作流引擎用户可以快速设置制作各类业务操作流程等,通过强大的页面设计功能,可以快速制作各类复杂业务表单设计;通过简单的几步操作可以定义设计完成权限的开发设计(功能、元素、数据;可以达到页面元素级权限,对数据权限精确到横向、纵向、列、单元格控件);开发平台支持用户二次开发各类业务类库,同时支持于其他的系统的业务集成等。SDP开发生成的业务单据全部采用HTML文件,所有的基层类库及样式功能都是采用最低版本的要求实现,有效的完成浏览器的兼容性。 二、注意事项 1、开发环境为Visual Studio 2012,数据库为SQLServer2008R2,使用.net 4.0开发。 2、后台地址:/admin/Manage/index 默认用户名密码:ssh super 3、演示地址http://sdp.vip580.cn/sdpweb/themes/frames/main01/login.html
SDP(Session Description Protocol)是一种文本协议,用于描述多媒体会话的参数,如音频、视频和数据流的编解码格式、传输方式等。C++中可以使用第三方库来解析SDP文件。 以下是使用libosip2库解析SDP文件的示例代码: ```c++ #include <iostream> #include <osip2/osip.h> #include <osipparser2/osip_parser.h> int main(int argc, char **argv) { osip_message_t *msg = nullptr; std::string sdp_file_path = argv[1]; // 读取SDP文件 FILE *sdp_file = fopen(sdp_file_path.c_str(), "rb"); if (sdp_file == nullptr) { std::cerr << "Failed to open SDP file." << std::endl; return -1; } fseek(sdp_file, 0, SEEK_END); long sdp_file_size = ftell(sdp_file); rewind(sdp_file); char *sdp_buffer = new char[sdp_file_size + 1]; fread(sdp_buffer, sdp_file_size, 1, sdp_file); sdp_buffer[sdp_file_size] = '\0'; fclose(sdp_file); // 解析SDP文件 int result = osip_message_init(&msg); if (result != 0) { std::cerr << "Failed to initialize osip message." << std::endl; return -1; } osip_message_parse(msg, sdp_buffer, sdp_file_size); // 获取SDP信息 osip_body_t *body = nullptr; result = osip_message_get_body(msg, 0, &body); if (result != 0) { std::cerr << "Failed to get osip message body." << std::endl; return -1; } char *sdp = nullptr; osip_body_to_str(body, &sdp); std::cout << sdp << std::endl; // 释放资源 osip_free(sdp_buffer); osip_message_free(msg); return 0; } ``` 需要注意的是,该示例代码中使用的是libosip2库,需要先安装该库。在Ubuntu上可以使用以下命令进行安装: ``` sudo apt-get install libosip2-dev ``` 在Windows上可以使用Cygwin或MinGW等工具进行编译。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值