美文网首页WebRTCWebRTC
Ubuntu 下编译 WebRTC

Ubuntu 下编译 WebRTC

作者: Gobert | 来源:发表于2017-08-10 09:32 被阅读717次

-- Ubuntu 下编译 WebRTC

Ubuntu 下编译 WebRTC

一、Ubuntu 系统环境准备

1、安装双系统 Windows 10 / Ubuntu 16.04

最近几年一直在使用 ThinkPad 笔记本(自己之前自己买的 ThinkPad X230),现在公司给配的 ThinkPad X1,已经好久不安装双系统了(Windows & Ubuntu,一直以 VMware 虚拟机代替),目前根据公司任务,有时需要从事 Windows 开发,有时也要从事 Android 底层 native 的开发,同事们都是使用 MAC 进行 Android 进行开发,唯独我自己使用 Windows 系统,经常出现协同开发时遇到一些系统级的坑,如 Android.mk 文件中源码文件路径过长, 编译脚本下载到 Windows 下自动转换为 Windows 格式,导致脚本不能执行,git 过滤文件格式 .ignore 不生效等问题;让我慢慢下定决心转到 Ubuntu 下进行发开发 Android。最近公司决定基于 webrtc 进行二次开发,为了方便快速的将 webrtc 源码进行下载和编译,决定首先在 Ubuntu 下进行编译。
公司配的 X1 磁盘空间剩余不多,决定使用 X230 分配出200个 G 进行安装 Windows 10 / Ubuntu 双系统,安装过程中也遇到了一些新的问题(主要是由于 X230 双磁盘,固态硬盘 & 机械硬盘,安装成功后总是不能引导 Ubuntu 启动),最终搞了将近 3 个小时才搞明白,其实安装很简单,步骤如下:

a、Windows 下使用 UltraISO 刻录 Ubuntu 系统镜像

ubuntu 建议下载 64bit 的,目前电脑内存都是大于 4G 的,如果装了 32 bit,那么大的内存就太浪费了;

b、安装 Ubuntu 时 系统引导盘选择整个的 机械硬盘,即 Ubuntu 系统安装所在磁盘

本人 Windows 10 安装在了 SSD 固态硬盘上,而 Ubuntu 安装在了 500G 的机械硬盘上,如果需要启动 Ubuntu 系统,需要在电脑启动时,按 F12 选择系统引导磁盘,默认还是固态硬盘,如要启动 Ubuntu,就选择机械硬盘,既可(也可以在 bois 表中,配置 BOOT 启动项顺序,调整此次启动磁盘)。

c、准备 Ubuntu 的环境

  • 搞定 VPN,可翻墙快速访问 Google 服务器(搞不定,就结束吧)

  • 安装 gcc、g++

  • 安装 git

  • 安装完整版的 vim,Ubuntu 默认是阉割版的 VI ,安装完成后,执行 alias vi=vim

  • 安装 ssh (可选,方便远程连接,如果不想不断的操作两个电脑的话)

  • 安装 nethogs,可用于按照进行查看网络流量信息(可选)

  • 安装 iptraf,可用于按照 连接/端口查看网络流量信息(用起来相对 nethogs 复杂些,可选)

  • 最好安装中文输入法(系统使用 English,但如果打算长期使用 Ubuntu 开发的话,中文输入法还是必不可少的。

以上选项网上搜索均可搞定;

二、下载 WebRTC 源码及依赖工具

1、下载 depot_tools 并配置

Google 使用 depot_tools 工具(脚本组合)进行代码的同步、下载管理等,这个脚本包中包含了 gclient、gcl、git-cl,repo 等;

在 Linux 下需首先确认 git 和 Python 已经安装,并且 git version >= 2.2.1, Python version = 2.7(版本过高会报错);
选择一个目录,如

~/OpenSource

通过 git 获取 depot_tools ,执行如下命令既可:

git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git

最后将 depot_tools 目录添加到环境变量 PATH 中,建议添加到 ~/.bashrc 中,或者 /etc/profile 文件中,可以一劳永逸,打开以上中的任意一个文件,如

sudo vi ~/.bashrc

在最后添加一行:

export PATH=~/OpenSource/depot_tools:"$PATH"

执行命令,使环境变量生效:

source ~/.bashrc

可通过

echo $PATH

确认配置成功:

/home/gobert/OpenSource/depot_tools:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/snap/bin

执行以下命令,安装并配置 depot_tools 依赖:

gclient sync

需要等待一段时间,具体看你的 VPN 网速如何了。

三、下载并编译 WebRTC

1、下载 WebRTC 源码

  • 选择一个下载目录,依次执行以下命令:
mkdir webrtc-checkout
cd webrtc-checkout
fetch --nohooks webrtc
gclient sync

经过漫长的等待, webrtc 全部下载到本地的话,大约会占用 6.4 G 的磁盘空间;

  • 可选项:指定如何跟踪处理新的分支

    git config branch.autosetupmerge always
    git config branch.autosetuprebase always
    

    git config branch.autosetupmerge always

    表示 自动从远程分支合并提交到本地分支,如果不做此设置,你需要手动 merge;

    git config branch.autosetuprebase always

    设置在执行 git pull 命令时做 rebase 而不是是 merge;可选的值还有 never:不自动 rebase, local 跟踪本地分支进行 rebase, remote 跟踪远程分支进行 rebase, always 所有跟踪的分支都自动进行 rebase;

  • 可选项:创建一个新的本地分支

    cd src
    git checkout master
    git new-branch your-branch-name
    

    建议创建下新的本地开发分支,如: git new-branch dev

  • 编译前更新下最新代码

    git pull
    

    注:如果在上一步中,没有创建新的分支,则使用

    git fetch
    

    命令代替,以获取最新代码。

注:由于WebRTC 目前还在频繁的更新中,建议定期的去下载更新下编译工具链及其依赖,通过执行
gclient sync 既可!

2、编译

WebRTC 目前使用 GN 来生成构建脚本,Ninja 进行构建,所以系统平台均是。

  • 生成 Ninja 工程文件

    Ninja 工程文件由 GN 生成,为其选择一个放置的目录中,如 out/Debug 或者 out/Release,这里官方建议选择 out/Default 这样可以放置 debug 和 release,在 src 目录下还行一下命令,默认生成 debug 版本的构建文件:

    gn gen out/Default
    

    如果 提示 gn 命令 not found,需检查 depot_tools 环境变量设置是否生效。

    执行以下命令生成 Ninja 工程文件

    gn gen out/Default
    

    如果需要生成 release 工程文件,需在后面加上关闭 debug 的参数 --args=is_debug= false

    如果需要清理 Ninja 工程文件,但保持 GN 环境配置不变的话,可以执行以下命令:

    gn clean out/Default
    
  • Ninja 编译

    ninja -C out/Default
    

    总共有 3600 多个文件需要一一编译,编译成功后,会在 out/Default 目录下生成大量的可执行测试程序:

    activity_metric                  g722_test                  neteq_opus_quality_test              rtc_event_log2rtp_dump     toolchain.ninja
    args.gn                          gen                        neteq_pcmu_quality_test              rtc_media_unittests        tools_unittests
    audio_codec_speed_tests          genmacro                   neteq_rtpplay                        rtc_pc_unittests           transient_suppression_test
    audio_decoder_unittests          genmodule                  neteq_speed_test                     rtc_stats_unittests        turnserver
    audio_device_tests               genperf                    nonlinear_beamformer_test            rtc_unittests              unpack_aecdump
    audioproc_f                      genstring                  obj                                  rtp_analyze                video_capture_tests
    build.ninja                      genversion                 ortc_unittests                       rtp_analyzer.py            video_engine_tests
    build.ninja.d                    ilbc_test                  pb_parse.py                          rtp_analyzer.sh            video_loopback
    bwe_simulations_tests            insert_packet_with_timing  peerconnection_client                rtpcat                     voe_auto_test
    click_annotate                   isac_api_test              peerconnection_server                RTPchange                  voice_engine_unittests
    common_audio_unittests           isac_fix_test              peerconnection_unittests             RTPencode                  webrtc_nonparallel_tests
    common_video_unittests           isac_switch_samprate_test  plot_videoprocessor_integrationtest  RTPjitter                  webrtc_opus_fec_test
    conversational_speech_generator  isac_test                  protoc                               RTPtimeshift               webrtc_perf_tests
    delay_test                       low_bandwidth_audio_test   psnr_ssim_analyzer                   screenshare_loopback       webrtc_tests
    event_log_visualizer             misc.py                    pyproto                              stun_prober                yasm
    force_mic_volume_max             modules_tests              py_quality_assessment                stunserver
    frame_analyzer                   modules_unittests          re2c                                 system_wrappers_unittests
    frame_editor                     neteq_ilbc_quality_test    relayserver                          test_packet_masks_metrics
    g711_test                        neteq_isac_quality_test    rgba_to_i420_converter               test_support_unittests
    

四、问题记录

1、gn: command not found 或者 gclient command not found 是因为 depot_tools 环境变量配置有误,没有正确找到 depot_tools 目录下的 gn 或 gclient 工具,确认 ~/.bashrc 文件配置是否正确:

export PATH=~/OpenSource/depot_tools:"$PATH"

2、执行 gn gen out/Default 命令报错:

gn.py: Could not find gn executable at: XXX/gn

需要执行命令:

gclient runhooks

需要耐心等待一段时间,由其自动下载安装一些工具包,完成后,再次执行

gn gen out/Default

命令,提示成功:

Done. Made 467 targets from 126 files in 383ms

相关文章

网友评论

    本文标题:Ubuntu 下编译 WebRTC

    本文链接:https://www.haomeiwen.com/subject/nwwcrxtx.html