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

【音视频】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.lryc.cn/news/613260.html

相关文章:

  • 【动态规划 | 完全背包】动态规划经典应用:完全背包问题详解
  • 01数据结构-哈夫曼树
  • 初识 MQ:从同步到异步,聊聊消息队列那些事
  • ladybird
  • Minio 分布式集群安装配置
  • 【unitrix数间混合计算】2.1 数间混合计算模块(src/number/mod.rs)
  • ADC常用库函数(STC8系列)
  • 【面试向】大模型应用岗 —— Transformer 篇
  • 输电线路电气参数与阻抗计算全解析
  • 从库存一盘货到全域智能铺货:巨益科技全渠道平台助力品牌业财一体化升级
  • 从零开始掌握Hardhat开发
  • 【tips】css模仿矢量图透明背景
  • 小红书开源多模态视觉语言模型DOTS-VLM1
  • Ubuntu 22 下脚本登录MFA堡垒机
  • 嵌入式学习---在 Linux 下的 C 语言学习 Day10
  • 指针——练习
  • OLMo 2 架构深度解析:开放语言模型的技术革命
  • A Logical Calculus of the Ideas Immanent in Nervous Activity(神经网络早期的M-P模型)
  • 【数字图像处理系列笔记】Ch05:傅里叶变换与频率域滤波
  • 【实时Linux实战系列】实时分布式计算架构的实现
  • Mongodb常用命令简介
  • MongoDB学习专题(六)复制集和分片集群
  • 02电气设计-安全继电器电路设计(让电路等级达到P4的安全等级)
  • 内存泄漏系列专题分析之三十二:高通相机CamX ION/dmabuf内存管理机制CmdBuffer
  • VC6800智能相机:赋能智能制造,开启AI视觉新纪元
  • vue2+elementui select框可以选择可以回车添加新的option
  • Godot ------ 中级人物血条制作01
  • ElementUI之表格
  • Oracle 19C In-Memory 列存储技术测试
  • Renesas Electronics RA8M1语音套件(VK-RA8M1)