当前位置: 首页 > backend >正文

【音视频】WebRTC C++ native 编译

一、搭建环境

我们这里介绍在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.xdnf.cn/news/17133.html

相关文章:

  • B-树与B+树
  • 行业应用案例:MCP在不同垂直领域的落地实践
  • Java 中 Object 类的解析:知识点与注意事项
  • PPT漏斗图,让数据更美观!
  • 表驱动法-灵活编程范式
  • P4568 [JLOI2011] 飞行路线
  • 全面解析 URL 重定向原理:从协议、实现到安全实践
  • Plant Biotechnol J(IF=10.5)|DAP-seq助力揭示葡萄白粉病抗性机制
  • 普通冷库如何升级物联网冷库?工业智能网关赋能冷链智能化转型
  • C 语言主控开发与显控开发能力体系及技术栈详解,STM32、QT、嵌入式、边缘系统显示
  • LINUX-文件查看技巧,重定向以及内容追加,man及echo的使用
  • Next.js 15 重磅发布:React 19 集成 + 性能革命,开发者必看新特性指南
  • Dokcer创建中间件环境
  • PHP MySQL Delete 操作详解
  • JSON、JSONObject、JSONArray详细介绍及其应用方式
  • TypeScript 元组类型精简知识点
  • mysql死锁的常用解决办法
  • 【面试场景题】电商秒杀系统的库存管理设计实战
  • 应急响应知识总结
  • centos KVM
  • git 清理submodule
  • Webpack核心技能:Webpack安装配置与模块化
  • 【YOLOv8改进 - C2f融合】C2f融合DBlock(Decoder Block):解码器块,去模糊和提升图像清晰度
  • C语言中的进程、线程与进程间通信详解
  • 前端UI组件库
  • XXL-JOB快速入门
  • 【数据分享】西藏土壤类型数据库
  • imx6ull-驱动开发篇11——gpio子系统
  • 大模型客户端工具如Cherry Studio,Cursor 配置mcp服务,容易踩的坑,总结
  • 力扣经典算法篇-44-组合总和(回溯问题)