WebRTC 源码原生端Demo入门-1

1、概述

我的代码是比较新的,基于webrtc源码仓库的main分支的,在windows下把源码仓库下载好了后,用visual stdio 2022打开进行编译调试src/examples/peerconnection_client测试项目,主要是跑通这个demo来入手和调试,纯看代码很难理解,只有编看代码编调试,然后遇到不懂的网上搜索,逐个技术点击破,希望通过这样的学习来了解WebRTC

图1-1 webrtc仓库源码分支信息

2、peerconnection_client例子

2.1 简介

peerconnection_client是原生端的测试例子,但是麻雀虽小,五脏俱全,从信令服务器通信到双向的音视频通话,什么都有,从这个例子进行学习分析webrtc源码是最好的选择,我们主要从client入手

图2.1-1 peerconnection_client代码图

2.2 如何运行demo

直接运行会报错,通信不了,需要对demo做一些修改

2.2.1 添加socket类

class CustomSocketServer : public rtc::PhysicalSocketServer {public:bool Wait(webrtc::TimeDelta max_wait_duration, bool process_io) override {if (!process_io)return true;return rtc::PhysicalSocketServer::Wait(webrtc::TimeDelta::Zero(),+process_io);}};

备注:在main.cc函数前面添加即可

图2.2.1-1 添加CustomSocketServer类的位置图

2.2.2 修改wWinMain函数

把webrtc::PhysicalSocketServer ss;注释掉,替换为上面2.2.1新的类CustomSocketServer

图2.2.2-1 替换socket通信代码位置图

2.2.3 添加main_thread.Start()

在  // Main loop 注释前面添加

2.2.3-1 线程启动代码位置图

2.2.4 修改webrtc服务器的地址(媒体服务器)

采用的是coturn作为webrtc的服务器,具体的coturn是怎么搭建的,可以看我的博客WebRTC服务器Coturn服务器部署和相关系列文档

图2.2.4-1 配置webrtc服务器图

采用的是coturn服务器,STUN和TURN服务器都是在同一台,所以配置格式如下

stun:ip:port

turn:ip:port?transport:udp

2.2.5 编译运行结果

运行起来就得到下图这个结果了,这个127.0.0.1是我自己改的,默认是localhost,我本机调试发现localhost连接不上,所以我改为了127.0.0.1

图2.2.5-1 修改localhost为127.0.0.1图

windows下编译运行peerconnection_client如下结果

图2.2.5-2 编译运行demo图

2.2.6 运行peerconnection_server.exe

peerconnection_server.exe是webrtc源码提供的信令服务器,我们offer,answer,candidate这些信令的交互就是通过这个peerconnectoin_server来透传的了

我们在本地再运行一个peerconnecton_client.exe来进行通信,下图中间是peerconnection_server.exe运行起来的样子

图2.2.6-1 两两通话和信令服务器运行图

两两通话的结果如下

图2.2.6-2 通过实际视频数据传输渲染结果图

备注:我本地是windows台式机的,没有摄像,所以我下载了个vcam虚拟摄像头来测试

3、peerconnection_client的代码简单介绍

图3-1 client代码组成图

图3-2 各个类之间的关系UML

conductor类: 整个demo逻辑的大脑核心,负责创建peerconnection,注册回调函数到peerconnection,从回调函数得到offer、answer、candidate等信息后续的处理,还协调窗口的显示和信令的发送处理,从UML类图也可以发现,MainWnd和PeerConnectionClient是它的成员,协调这个两个类进行逻辑处理

main_wnd类:主要是界面的显示和界面的切换逻辑的处理,主要的技术点有windows窗口和消息机制,视频数据的渲染,采用BitBlt原生windows API进行图像数据的渲染

peer_connection_client类:主要就是与信令服务器进行交互,发送信令offer、answer、candidate等信令消息,并处理接收信令消息,然后通过callback回调数据给Conductor类进行具体的逻辑处理。

4、结论说明

这个demo是比较重要的,作为分析源码的开始,这是个很好的入门例子,很多技术点都是可以从这个demo开始,然后边调试边分析总结,WebRTC的源码很庞大,涉及到的知识点很多,需要一步步慢慢地进行学习分析。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/905285.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode】删除排序数组中的重复项 II

题目 链接 思路 双指针 我好聪明啊,自己想出了这个双指针的办法,哈哈哈哈哈哈哈,太高兴了 代码 class Solution(object):def removeDuplicates(self, nums):""":type nums: List[int]:rtype: int"""nlen…

通义千问席卷日本!开源界“卷王”阿里通义千问成为日本AI发展新基石

据日本经济新闻(NIKKEI)报道,通义千问已成为日本AI开发的新基础,其影响力正逐步扩大,深刻改变着日本AI产业的格局。 同时,日本经济新闻将通义千问Qwen2.5-Max列为全球AI模型综合评测第六名,不仅…

第J7周:对于ResNeXt-50算法的思考

目录 思考 一、代码功能分析 1. 构建 shortcut 分支(残差连接的旁路) 2. 主路径的第一层卷积(11) 4. 主路径的第三层卷积(11) 5. 残差连接 激活函数 二、问题分析总结:残差结构中通道数不一致的…

如何解决Jmeter中的乱码问题?

在 JMeter 中遇到乱码问题通常是由于字符编码不一致导致的,常见于 HTTP 请求响应、参数化文件读取、报告生成等场景。以下是系统化的解决方案: 1. HTTP 请求响应乱码 原因: 服务器返回的字符编码(如UTF-8、GBK)与 J…

# YOLOv2:目标检测的升级之作

YOLOv2:目标检测的升级之作 在目标检测领域,YOLO(You Only Look Once)系列算法以其高效的速度和创新的检测方式受到了广泛关注。今天,我们就来深入探讨一下 YOLOv2,看看它是如何在继承 YOLOv1 的基础上进行…

小白入!WiFi 技术大解析

WiFi,全称Wireless Fidelity,是一种无线局域网技术,允许电子设备通过无线电波连接到互联网。以下是对WiFi的一些介绍: 一、基本概述 定义:WiFi是一种基于IEEE 802.11标准系列的无线局域网技术,使设备能够…

【prometheus+Grafana篇】基于Prometheus+Grafana实现windows操作系统的监控与可视化

💫《博主主页》: 🔎 CSDN主页 🔎 IF Club社区主页 🔥《擅长领域》:擅长阿里云AnalyticDB for MySQL(分布式数据仓库)、Oracle、MySQL、Linux、prometheus监控;并对SQLserver、NoSQL(MongoDB)有了…

推荐一个感觉非常好的文章,是知识图谱的

为了省浏览的事儿,以后打算写文章都短一些,这样不用被强制登录、关注了 正文 链接是 https://blog.csdn.net/Appleyk/article/details/80422055 放个截图 推荐理由 两个,第一内容确实硬核。第二算是缘分吧,我之前公司好像&am…

《企业级前端部署方案:Jenkins+MinIO+SSH+Gitee+Jenkinsfile自动化实践》

文章目录 前言前端项目CICD时序图一、环境准备1、服务器相关2、Jenkins凭据3、注意事项 二、设计思想1. 模块化设计2.多环境支持3. 制品管理4. 安全部署机制5. 回滚机制 三、CI阶段1、构建节点选择2、代码拉取3、代码编译4、打包并上传至minio 四、CD阶段五、回滚阶段六、构建通…

Go语言超时控制方案全解析:基于goroutine的优雅实现

一、引言 在构建高可靠的后端服务时,超时控制就像是守护系统稳定性的"安全阀",它确保当某些操作无法在预期时间内完成时,系统能够及时止损并释放资源。想象一下,如果没有超时控制,一个简单的数据库查询卡住…

WTK6900C-48L:离线语音芯片重构玩具DNA,从“按键操控”到“声控陪伴”的交互跃迁

一:开发背景 随着消费升级和AI技术进步,传统玩具的机械式互动已难以满足市场需求。语音控制芯片的引入使玩具实现了从被动玩耍到智能交互的跨越式发展。通过集成高性价比的语音识别芯片,现代智能玩具不仅能精准响应儿童指令,还能实…

WebSocket的原理及QT示例

一.WebSocket 介绍 1.概述 WebSocket 是一种在单个 TCP 连接上进行全双工通讯的协议,它在 2011 年被 IETF 定为标准 RFC 6455,并由 RFC7936 补充规范。与传统的 HTTP 协议不同,WebSocket 允许服务器和客户端之间进行实时、双向的数据传输&a…

设置GO程序在离线情况下读取本地缓存的模块

在 Go 中,GOPROXY 环境变量用于指定模块代理服务器的地址。如果你想让 GOPROXY 读取本地的模块,可以通过以下几种方式实现: 1. 使用本地代理服务器 你可以搭建一个本地的 Go 模块代理服务器,将需要的模块代码推送到代理服务器中…

live555开发笔记(三):live555创建RTSP服务器源码剖析,创建h264文件rtsp服务器源码深度剖析

若该文为原创文章,转载请注明原文出处 本文章博客地址:https://hpzwl.blog.csdn.net/article/details/147879917 长沙红胖子Qt(长沙创微智科)博文大全:开发技术集合(包含Qt实用技术、树莓派、三维、OpenCV…

STM32-模电

目录 一、MOS管 二、二极管 三、IGBT 四、运算放大器 五、推挽、开漏、上拉电阻 一、MOS管 1. MOS简介 这里以nmos管为例,注意箭头方向。G门极/栅极,D漏极,S源极。 当给G通高电平时,灯泡点亮,给G通低电平时&a…

基于定制开发开源AI智能名片S2B2C商城小程序的公私域流量融合运营策略研究

摘要:本文以定制开发开源AI智能名片S2B2C商城小程序为技术载体,系统探讨公域流量向私域流量沉淀的数字化路径。研究通过分析平台流量(公域流量)与私域流量的共生关系,提出"公域引流-私域沉淀-数据反哺"的闭环…

mysql中索引的使用

前言 最近一直在学习mysql以及忙学校课程的事情。已经好久没写过博客了,今天跟大家分享一下在mysql中关于索引的知识,希望可以帮助到大家。 索引的定义 mysql中的索引是一种数据结构,它可以帮助数据库高效地查询,更新数据表中的…

深度拆解!MES如何重构生产计划与排产调度全流程?

☂引言 在制造业数字化转型浪潮中,生产计划与排产调度的精准性直接决定企业竞争力。深蓝易网MES系统通过智能化调度与全流程管控,帮助企业破解排产难题,实现资源高效协同与生产透明化管理,为制造企业打造柔性化、敏捷化的生产体系…

【深度学习】计算机视觉(18)——从应用到设计

文章目录 1 不同的注意力机制1.1 自注意力1.2 多头注意力1.3 交叉注意力1.3.1 基础1.3.2 进阶 1 不同的注意力机制 在学习的过程中,发现有很多计算注意力的方法,例如行/列注意力、交叉注意力等,如果对注意力机制本身不是特别实现&#xff0c…

洛谷 P1955 [NOI2015] 程序自动分析

【题目链接】 洛谷 P1955 [NOI2015] 程序自动分析 【题目考点】 1. 并查集 2. 离散化 【解题思路】 多组数据问题,对于每组数据,有多个 x i x j x_ix_j xi​xj​或 x i ≠ x j x_i \neq x_j xi​xj​的约束条件。 所有相等的变量构成一个集合&…