一、搭建环境

我们这里介绍在Windows10+VS2019的环境下编译WebRTC源码,由于WebRTC源码在外网上,需要科学的方式下载,不然下载特别慢,建议直接找国内下载好的源码,这里的源码是2021年的版本:https://pan.baidu.com/s/1oHVz9bxXlW3Q6uO996c5XA#list/path=%2F,提取码:ojbs

1.1 安装VS2019

VS2019的安装比较简单,可执行安装,注意的是安装之后需要在VS Installer中下载Windows 10.0.19041版本的SDK,并且下载支持使用C ++进行桌面开发”组件和“ MFC / ATL支持”子组件,因为部分示例需要使用的Win32MFC

还需要下载SDK的调试工具:

  • 如果通过VS Installer 下载的SDK,可以在控制面板→程序→程序和功能→选择“ Windows软件开发工具包”→更改→更改→选中“Windows调试工具” ”→更改。或者,您可以下载独立的SDK安装程序,并使用它来安装调试工具。

在这里插入图片描述

在这里插入图片描述

1.2 安装python3

安装需要先卸载之前的老版本,并安装3.8以上的版本,主要是python3要求源码必须下载c盘,下载地址:https://www.python.org/ftp/python/3.8.5/python-3.8.5.exe

1.3 安装 depot_tools

depot_tools是个工具包,里面包含gclient、gcl、gn和ninja等工具,这些根据都是使用python写的。其主要的功能是对git的增强,让代码管理和编译更加简单,要学这个的前提是要会使用git,下载地址:https://storage.googleapis.com/chrome-infra/depot_tools.zip

配置环境变量,这里需要注意,这个位置必须在python和以及git之前

在这里插入图片描述

1.4 用gn生成工程和用ninjia编译工程

下载好的webrtc源码,我们进入到webrtc\win\webrtc\webrtc\webrtc-checkout\src目录下,命令行在这个路径下输入:

取消更新检查:

set DEPOT_TOOLS_WIN_TOOLCHAIN=0

然后生成解决方案:

gn gen out/X64Debug --winsdk="10.0.19041.0" --ide="vs2019" --args="ffmpeg_branding=\"Chrome\" rtc_use_h264 = true proprietary_codecs=true is_debug=true target_cpu=\"x64\" is_component_build=false use_custom_libcxx = false enable_iterator_debugging=true rtc_enable_protobuf=false"

如果上述环境配置的没问题,那么等待一会显示生成成功:

在这里插入图片描述

1.5 编译ninja工程

在生成好的目录下我们编译工程,把生成的输出文件放到当前路径下的out/X64Debug中:

ninja -C out/X64Debug

在这期间可能会遇到以下问题:

在这里插入图片描述

这段报错告诉我们这个宏ATOMIC_VAR_INIT(-1)识别不了,解决方法就是进入到报错的文件:../../third_party/ffmpeg/libavutil/cpu.c中,将报错的地方改为下述代码:

static atomic_int cpu_flags = -1;

改完后,等待一会,应该就可以成功了

二、测试

编译好的可执行文件在:src/out/x64Debug路径下:
在这里插入图片描述

先启动服务器:

在这里插入图片描述

然后启动两个客户端:

在这里插入图片描述

第二个客户端启动时,点击连接列表:

在这里插入图片描述

如果此时直接闪退,进入到src/modules/video_capture/windows/sink_filter_ds.cc文件,找到RTC_DCHECK_FUN_ON(&capture_checkr_),注释这一行:

在这里插入图片描述

进入到src/out/X64Debug中,找到all.sln,使用VS2019打开,找到peerconnection_clent项目,然后右键设置为启动项,重写编译生成可执行文件

在这里插入图片描述

按照上述步骤重新启动服务器和客户端,没什么问题的话就能有画面了:

在这里插入图片描述

更多资料:https://github.com/0voice

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

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

相关文章

Selenium在Pyhton应用

目录 1. selenium的基本原理 2. selenium环境的搭建步骤 3. 元素的定位和操作 4.元素的基本属性方法 5.浏览器的操作方法 6.三种等待 强制等待 显示等待 隐式等待 7. 键盘与鼠标的操作 鼠标悬停用 拖拽操作 8. 下拉框元素定位 9.页面滚动操作 10. 页面截图操作 S…

【Docker】Redis基础命令在Docker中的使用

文章目录一 Redis 容器化部署指南1 获取 Redis 镜像2 服务启动2.1 首次启动新容器2.2 重启已有容器3 服务验证4 连接 Redis5 数据持久化方案5.1 使用 Docker 卷5.2 启用 AOF 持久化6 容器管理6.1 停止容器6.2 删除容器7 数据清理7.1 清空 Redis 数据7.2 完全移除7.3 删除数据卷…

ubuntu 2024 安装拼音输入法

1. 卸载ibussudo apt remove ibus2. install fcitx5核心组件sudo apt install fcitx5 fcitx5-chinese-addons fcitx5-material-color3. 安装中文语言支持sudo apt install language-pack-zh-hans4. 设置默认输入法im-config -n fcitx55. 配置环境变量sudo vim ~/.bashrc粘贴&am…

语言模型的多个agent

是的,语言模型 在某些情况下确实可以通过多个 agent(代理)来共同协作完成任务。这种设计通常用于复杂任务或需要多步骤处理的场景,具体的流程如下: 1. 什么是 Agent? Agent(代理) 是…

CSS--:root指定变量,其他元素引用

原文网址:CSS--:root指定变量,其他元素引用-CSDN博客 简介 本文介绍CSS中使用变量的方法。 场景描述 CSS可以使用变量,比如:指定整个网页的主体颜色作为变量,其他的元素去使用这个颜色。这样在修改颜色时&#xff…

秋招笔记-8.7

今天先来补充一下关于Unity和UE的一些问题,后续开始深挖项目:Unity关于fixed update和update:同一帧中物理更新优先执行?关于协程:协程是基于迭代器实现的,而迭代器是基于状态机实现的。协程的本质是编译器…

DAY 26 函数专题1:函数定义与参数

浙大疏锦行知识点回顾: 函数的定义变量作用域:局部变量和全局变量函数的参数类型:位置参数、默认参数、不定参数传递参数的手段:关键词参数传递参数的顺序:同时出现三种参数类型时 作业 #作业1 import math def calcul…

跨学科视域下的深层语义分析与人类底层逻辑一致性探索

摘要本文章旨在系统性地探讨一个前沿的交叉学科研究课题:如何通过深层语义分析,探索并建模人类认知中普遍存在的底层逻辑一致性。此研究横跨自然语言处理(NLP)、知识图谱(KG)、认知科学、脑神经科学、系统科…

Flink CDC如何保障数据的一致性?

Flink CDC 通过 Checkpoint 机制、幂等性设计 和 事务一致性协议 保障数据同步的一致性。以下是具体实现方式和关键配置:1. Checkpoint 机制(核心保障)作用:定期保存同步状态(包括 Binlog 位置和全量快照进度&#xff…

上传文件至华为云OBS

1 创建华为云Bucket1.1 创建Bucket1.2 获取Bucket的Endpoint1.3 获取访问凭证注:每个访问密钥仅能下载一次,为了账号安全性,建议您定期更换并妥善保存访问密钥。不再使用的访问密钥,建议停用和删除。2 创建Sprint Boot工程创建一个…

使用驱动移除内核回调,

https://br-sn.github.io/Removing-Kernel-Callbacks-Using-Signed-Drivers/ 原创 大蓝 RJ45实验室 使用签名驱动移除内核回调-安全KER - 安全资讯平台 介绍 创建该PoC的目的是了解驱动漏洞利用程序的强大功能,以及EDR如何使用内核回调以防止恶意软件的攻击。…

从零搭建Cloud Alibaba (下) Sentinel篇

1.Sentinel控制台的安装 下载地址: Releases alibaba/Sentinelx 下载后是一个jar包 进入目录 CMD命令 java -jar "sentinel-dashboard-1.8.8 .jar" 如果发生了端口冲突则使用以下命令启动 修改端口号为8090 java -Dserver.port8090 -jar "sen…

Numpy科学计算与数据分析:Numpy数学函数入门与实践

Numpy数学函数实战:探索数学运算的无限可能 学习目标 通过本课程的学习,学员将掌握Numpy中常用的数学函数,包括三角函数、指数函数和对数函数的使用方法,以及如何利用这些函数对数组进行高效的数学运算。本课程不仅会讲解理论知识…

BIGO Ads是什么?BIGO广告营销核心玩法解析

在全球化竞争白热化的当下,BIGO Ads凭借其覆盖150国家的庞大流量池和AI驱动的精准营销能力,已成为出海企业突破增长瓶颈的利器。2025年Q1数据显示,BIGO Ads广告业务同比增长27%,非直播收入占比达24.9%,成为欢聚集团第二…

人工智能领域、图欧科技、IMYAI智能助手2025年3月更新月报

2025年3月AI领域重要技术进展与平台更新概览 2025年3月,人工智能领域迎来一系列重要技术更新与平台功能迭代,尤其在多模态模型、图像生成编辑、视频生成、大型语言模型(LLM)性能提升等方面表现活跃。以下是对关键进展的梳理&#…

STM32HAL 快速入门(一):点灯前的准备 —— 从软件安装到硬件原理

前言 大家好,这里是 Hello_Embed。嵌入式开发的 “Hello World” 是点灯 —— 通过控制单片机引脚的高低电平,让 LED 亮灭。要实现这个功能,前期准备必不可少:从软件安装到硬件原理理解,每一步都很关键。本文就来详细说…

Python网络编程技术

一、网络编程基础概念 1.1 什么是网络编程? 定义:程序通过网络与其他程序进行通信的技术。核心目标:实现数据在不同主机或进程间的传输与交互。应用场景:Web服务、API调用、实时通信、分布式系统等。 1.2 网络通信模型 OSI七层…

基于PHP的快递管理系统的设计与实现

管理员:登录:管理员可以通过用户名和密码登录系统,进入管理员后台管理界面。个人中心:管理员可以查看和编辑个人信息,如姓名、联系方式等。用户管理:管理员可以管理系统中的用户信息,包括添加新…

WPF的C1FlexGrid的单元格回车换行输入

重写C1FlexGrid的按键事件PreviewKeyDown"flex_PreviewKeyUp" 定义按键方法private void flex_PreviewKeyUp(object sender, KeyEventArgs e){if (e.Key Key.Enter){// 获取当前编辑的单元格var cell CfgReviewItem.Selection;if (cell.Column > 0 && …

简单部署普罗米修斯(Promethus)与Grafana配置

环境信息:系统版本ubuntu2404k8s版本v1.22.2promethus节点IP192.168.31.210Grafana节点IP192.168.31.210node1节点IP192.168.31.214node2节点IP192.168.31.215部署Promethus(https://prometheus.io/download/) wget https://ghfast.top/https…