Windows平台WebRTC编译-VS2017

转载网站:https://blog.jianchihu.net/webrtc-build-vs2017.html

在音视频领域,想深入研究的话,必定会接触WebRTC。WebRTC是一个庞大的工程,就像是音视频领域的百科全书,音视频采集,编解码,传输,渲染等一条龙在WebRTC里都有,而且WebRTC还有很多先进的音视频处理算法。由于WebRTC代码过于庞大,所以最好单步调试跟踪代码运行,这样才可以更好地学习WebRTC,否则很难有头绪。工欲善其事必先利其器,作为调试神器,宇宙第一IDE Visual Studio必不可少。所以本篇文章主要讲下如何在Windows上编译WebRTC,同时得到VS工程,然后调试。

系统要求

  • Win7及以上64位系统。
  • 内存至少8G,当然越大越好。
  • 100G磁盘空间(NTFS格式),不能是FAT32,因为会生成大于4G的文件。

Visual Studio安装

WebRTC用到了很多C++最新特性,所以编译最新WebRTC代码VS要求为2017版本。我用的是VS2017社区版。安装VS2017时选择自定义安装,必须勾选如下几项:

其他选项可以选择安准。如下是我的安装配置。
Windows平台WebRTC编译-VS2017 - 第1张  | 剑痴乎

  • 10.0.17134 或以上的Win10 SDK,后面还要安装调试工具
  • MFC以及ATL这两项

安装完VS2017后,必须安装SDK调试工具。打开控制面板->程序与功能,找到刚才安装的Windows Software Development Kit,鼠标右键->change。
Windows平台WebRTC编译-VS2017 - 第2张  | 剑痴乎

勾选Debugging Tools For Windows,然后点击change。
Windows平台WebRTC编译-VS2017 - 第3张  | 剑痴乎

depot_tools安装

下载depot_tools然后解压到某个目录,比我的解压到E盘根目录。接着将该depot_tools目录的路径加到系统环境变量Path里,然后把该路径移到最前面(避免已安装的python与git造成影响)。
Windows平台WebRTC编译-VS2017 - 第4张  | 剑痴乎

然后新建一个系统环境变量: DEPOT_TOOLS_WIN_TOOLCHAIN ,值设置为0,这是为了告诉depot_tools使用我们本机的VS进行编译。
Windows平台WebRTC编译-VS2017 - 第5张  | 剑痴乎

获取WebRTC源码

由于WebRTC的源码地址被墙了,所以需要通过代理才能得到源码。后面都是命令行操作,打开cmd窗口,由于我用的是ss代理,在cmd窗口我按如下设置:

 

1

2

set http_proxy=127.0.0.1:1080

set https_proxy=127.0.0.1:1080

设置当前cmd窗口代理上网,如果cmd窗口关闭了重开得重新设置。当然了,也可以设置系统全局代理上网。其他代理方法也类似。如果是VPN之类非代理,就不用这样设置了。

接着执行gclient命令,安装编译需要用到的一些工具,比如git以及python。

 

1

gclient

再接着设置一些环境变量。

 

1

2

3

set GYP_MSVS_VERSION=2017

set GYP_MSVS_OVERRIDE_PATH=D:\Program Files (x86)\Microsoft Visual Studio\2017\Community

set GYP_GENERATORS=msvs-ninja,ninja

 

其中GYP_MSVS_OVERRIDE_PATH是我们安装的VS2017路径。

然后cd到要放源码的地方(要遵守前面说的磁盘要求),执行:

 

1

2

3

4

mkdir webrtc-checkout

cd webrtc-checkout

fetch --nohooks webrtc

gclient sync

这一过程是个漫长的等待,要下的东西将近10G,包括源码以及一些测试的音视频文件资源等。
Windows平台WebRTC编译-VS2017 - 第6张  | 剑痴乎

使用gclient sync这一步得注意下,可能会报类似如下错误:

 

1

UnicodeDecodeError: 'ascii' codec can't decode byte 0xb0 in position 1: ordinal not in range(128)

Unicode字符编码问题,python的一个bug,因为很多人系统语言都是中文的,所以得按如下设置,把系统区域改为英文,然后重启即可。
Windows平台WebRTC编译-VS2017 - 第7张  | 剑痴乎

编译

生成VS2017工程文件:

 

1

2

cd src

gn gen --ide=vs out/Default

可以在src\out\Default\ 下得到 all.sln解决方案文件。

执行编译命令:

 

1

ninja -C out/Default

Windows平台WebRTC编译-VS2017 - 第8张  | 剑痴乎

用VS2017打开:
Windows平台WebRTC编译-VS2017 - 第9张  | 剑痴乎
可以看到众多工程,到此算是完成了。找到我们感兴趣的,就可以用VS单步调试,跟踪代码运行了。这么多宝贝够研究很久了。

代码更新

 

 

1

2

3

git checkout master

git pull origin master

gclient sync

 

总结

总之WebRTC在Windows上的编译很考验耐心,也很苛刻,需要电脑性能够好,有个好代理。

参考

1. WebRTC Native code Development
2. Chromium’s build instructions for Windows

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

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

相关文章

Hadoop--初识Hadoop

什么是Hadoop? 搞什么东西之前,第一步是要知道What(是什么),然后是Why(为什么),最后才是How(怎么做)。但很多开发的朋友在做了多年项目以后,都习惯…

Android之TextView属性详解

android:autoLink设置是否当文本为URL链接/email/电话号码/map时,文本显示为可点击的链接。可选值(none/web/email/phone/map/all)android:autoText如果设置,将自动执行输入值的拼写纠正。此处无效果,在显示输入法并输入的时候起作用。androi…

Python 列表解析

列表解析 列表解析总共有两种形式: 1. [i for i in range(k) if condition]:此时if起条件判断作用,满足条件的,将被返回成为最终生成的列表的一员。 2. [i if condition else exp for exp]:此时if...else被用来赋值&am…

VS2019编译 当前最新版chromium

VS2019编译 当前最新版chromium 之前编译过webrtc和chromium, 由于长时间没用,被我删除了, 最近在最新版本的google浏览器上遇到了播放器兼容性问题,老版本的google浏览器是没问题,IE, 火狐浏览器也没问题&#xff0…

37signals为何砍掉中层?个人点评,高素质人才队伍工作,靠的是全体发挥综合能力,而不是靠......

为什么80%的码农都做不了架构师?>>> 37signals为何砍掉中层? 分享到 本文来源于:中欧商业评论 作者:潘芸 发表于:2013-08-21 11:09:41 http://www.cyzone.cn/a/20130821/244571.html 37signals有多位程序员&#…

k-means k均值聚类的弱点/缺点

Similar to other algorithm, K-mean clustering has many weaknesses: 1 When the numbers of data are not so many, initial grouping will determine the cluster significantly. 当数据数量不是足够大时,初始化分组很大程度上决定了聚类,影响聚类…

Codeforces 360E 贪心 最短路

题意及思路&#xff1a;https://blog.csdn.net/huanghongxun/article/details/49846927 在假设所有边都是最大值的情况下&#xff0c;如果第一个人能比第二个人先到&#xff0c;那就缩短这条边。 代码&#xff1a; #include <bits/stdc.h> #define LL long long using na…

jni编译h文件

1.生成 class文件 到原文件目录&#xff08;*为java文件名称&#xff09; javac *.java 2.生成jni.h 到java目录&#xff08;*为java文件里面的类名称&#xff09; javah -jni com.example.widget.* 3.jse13 版本生成jni.h 到原文件目录&#xff08;*为java文件名称&#xff…

事件相关js函数

<script type"text/javascript">//功能:停止事件冒泡 function stopBubble(e) {//如果提供了事件对象&#xff0c;则这是一个非IE浏览器 if (e && e.stopPropagation)//因此它支持W3C的stopPropagation()方法 e.stop…

java嵌套循环

嵌套循环&#xff1a;循环里套循环 假设外循环的循环次数是m次,内循环的循环次数是n次&#xff0c;那么内层循环的循环次数需要 m * n次。 Eg&#xff1a;利用for循环语句的嵌套打印出乘法口诀表 class break1 { public static void main(String[] args) { for(int i1;i<10;…

计算收益复利的小例子

一个计算收益复利的小例子&#xff0c; 用c语言简单编程&#xff0c; 如 test 30 20 40&#xff1b; 30以万为单位&#xff0c;20是年收益百分比&#xff0c;40是年数。 #include <stdio.h> #include <stdlib.h>#define YEAR_GET_TYPE 0 // 年测试类型…

uva 10026 Shoemaker's Problem(排序)

题目连接&#xff1b;10026 Shoemakers Problem 题目大意&#xff1a;有一个鞋匠接了n双要修的鞋子&#xff0c; 修每双鞋需要d天&#xff0c;每推迟一天修将亏损val元&#xff0c;问按什么样的顺序修鞋可以保证损失最少&#xff0c;如果有多种情况输出字典序最小的。 解题思路…

ExtAspNet学习-利用AppBox框架快速创建项目(五)—完成项目含源代码

我们前边四个部分已经完成了框架需要的基础配置&#xff0c; 现在我们来完成项目 1、Subsonic 配置&#xff0c;首先在OraSurvey.DAO中添加App.config配置相关信息 View Code 1 <?xml version"1.0" encoding"utf-8" ?> 2 <configuration> 3…

坦克大战系列6-API常用函数说明2

前言 本篇主要介绍RobocodeAPI中的各种事件函数的说明&#xff0c;便于使用函数时有更清晰的思路。 子弹事件函数 onBulletHit() 当击中对方时 public void onBulletHit(BulletHitEvent event) 当你的子弹击中对方时就会调用这个方法。如果你想在子弹击中对方时作处理的话&…

linux+apache+mysql+php

linuxapachemysqlphp设置mysqll测试1网站注意&#xff1a;在安装或者测试的时候出现乱码的话&#xff0c;可以修改浏览器的编码一项将其改为适合的编码输入站点http://服务器地址/ecshop url会自动跳转到服务器地址/ecshop/install/index.php安装过程中会提示目录文件不可写&am…

模拟纳指stock的小例子

一个模拟纳指stock的小例子&#xff1a; #include <stdio.h> #include <stdlib.h>#define MAX_YEAR 100 #define ONE_YEAR_DAYS 240#define BEGIN_YUAN 10000 #define ONE_ADD_YUAN 4000 #define ONE_ADD_DAY 20 #define GOLD_FLOW…

android4.0.3 修改启动动画和开机声音

1. Linux 系统启动&#xff0c;出现Linux小企鹅画面(reboot)(Android 1.5及以上版本已经取消加载图片)&#xff1b;2. Android平台启动初始化&#xff0c;出现"A N D R I O D"文字字样画面&#xff1b;3. Android平台图形系统启动&#xff0c;出现含闪动的ANDROID字样…

函数式C代码

代码如下&#xff1a; #include <stdlib.h> #include <stdio.h> typedef char String[32]; typedef FILE* File;typedef struct _Employee {String name;int age;int salary;struct _Employee *next; } *Employee;typedef void (*Callback)(Employee);/* High Orde…

VMWare虚拟机NAT模式静态IP联网配置

使用静态IP&#xff0c;而不选用DHCP的主要原因是避免每次重启计算机后&#xff0c;虚拟机系统的IP发生变化&#xff0c;导致常常需要修改宿主机器远程连接虚拟机服务(例如Mysql) 环境 项目版本号VmwareVmware Workstation Pro 15UbuntuUbuntu 18.04.2 LTS关键配置 虚拟网络编辑…

ffmpeg调整缩放裁剪视频的基础知识(转)

源网址&#xff1a;ffmpeg调整缩放裁剪视频的基础知识 - yongfengnice - 博客园 1. resize and scale video 调整视频的大小和尺寸 1-1.调整视频大小(resize)是改变视频的宽度和高度。 使用-s参数实现&#xff0c;语法&#xff1a;ffmpeg -i input_file -s wxh output_fi…