一. 编译webrtc

1. 预先准备

1)  vpn. 用于同步代码. 这里给一个大概的估计吧. windows端包含vs2013 win8sdk wdk chromium源码等等, 总共需要至少8G. android端还需要android ndk sdk以及大量的依赖库, 大致也是10G往上. 所以需要网速不好的话, 同步一天也是很正常.

2. 同步代码及编译

http://www.webrtc.org/reference/getting-started

参考这个链接, 很详细, 需要认真看.

windows端的配置, 可以参考chromium的windows编译指导, http://dev.chromium.org/developers/how-tos/build-instructions-windows#TOC-Prerequisite-software

工具要求:
    tortoisesvn(可选)
    msysgit和Tortoisegit(可选)
    python(可选)
google的depot_tools会把所有需要的工具全部拉下来并配置好. 所以这些工具都是可选的.

 

配置depot tools:

svn co http://src.chromium.org/svn/trunk/tools/depot_tools
set path=D:\Libraries\depot_tools;%path% 或 export PATH=/root/depot_tools:$PATH

然后同步webrtc源码: (webrtc_root_dir 是你自己的目录)

 

cd webrtc_root_dir
gclient config --name src http://webrtc.googlecode.com/svn/trunk
gclient sync --force
gclient runhooks –force

depot_tools 会把vs2013, win8sdk, wdk都下载下来并配置. 在depot_tools/win_toolchain下.

webrtc依赖chromium(源码大小5G左右)

所以总共需要在线下载8G左右.

以后同步代码的时候需要去掉 --force参数. 否则会进行强制重新更新(意味着超长时间-_-!)

 

生成的工程是webrtcroot/src/all.sln, 编译依赖windows8.1sdk和wdk 可以单独安装, 也可以直接使用depot_tools中的配置.

depot_tools\win_toolchain\vs2013_files\win8sdk 复制到 C:\Program Files (x86)\Windows Kits\8.1

设置环境变量WDK_DIR=depot_tools\win_toolchain\vs2013_files\wdk

 

遇到的一些问题:

> 打包webrtc工程:

webrtc 与chromium公用很多三方库, 所以目录下会生成很多symlink. 所以不能直接7z或winrar打包, 可以先复制到新目录, 这样symlink会变成空目录.  或者 python src/setup_links.py –c 清除symlink, 然后压缩, 在解压后执行python src/setup_links.py --force 重新生成symlink也可以.

 

> 强制重新生成vs工程:

set GYP_GENERATORS=msvs

call python src/webrtc/build/gyp_webrtc -G msvs_version=2013

> 如果修改了depot tools的位置:

需要修改\webrtc\trunk\build\win_toolchain.json .

产生systemroot变量未定义错误时. 需要修改F:\depot_tools\win_toolchain\data.json  

 

> gclient sync时, 会报utf8 code error

> 编译时, call python isolate.py 错误.

系统显示语言必须是英文. 从来没见过像google这么傻逼的.

>svn too old

    把更新depot_tools时用的svn(或者高版本svn)替换depot_tools/svn_bin.

> error LNK2019: unresolved external symbol _intel_aes_encrypt_init_128 referenced in function _aes_InitContext

在trunk\third_party\nss\nss.gyp目录中注释掉USE_HW_AES和INTEL_GCM, 需要在重新生成工程文件.

或者直接删除nss_*.vcprojx中USE_HW_AES和INTEL_GCM的define.

 
>warning treated as error  no object file generated

    原因是该文件的代码页为英文,而我们系统中的代码页为中文

    解决方法: 1. region->administrative->language for non-unicode programs的语言改成english.

    2. 在编译开关里拿掉   /WX   开关, 即warning level. 可能会涉及很多工程.

        vcxproj中是<TreatWarningAsError>true</TreatWarningAsError>

>bash:../../third_party/libvpx/copy_obj.sh: /bin/bash: bad interpreter: No such file or directory

可以使用源代码下的E:\chromium\src\third_party\cygwin\setup_mount.bat,解决 ,双击此文件即可。执行完后,清理工程,再次编译,如果出现如下问题: >copy_obj.sh: line 6: $'\r': command not found

可以使用UltraEdit ->“文件”->“转换”->“Dos转Unix” (编辑copy_obj.sh文件),“保存”,再次清理工程,然后编译,(其实上面的问题都是因为不同操作系统下,文件的中回车/换行标示方法引起的,找个工具转换下就ok了)

>atls.lib(atlbase.obj) : error LNK2005: "class ATL::CAtlWinModule ATL::_AtlWinModule" (?_AtlWinModule@ATL@@3VCAtlWinModule@1@A) already defined in libjingle_media.lib(win32devicemanager.obj)

add "/FORCE:MULTIPLE" in Linker-->CommandLine.

另一种解决办法是, 把\depot_tools\win_toolchain\vs2013_files\wdk\lib\Atl\i386下的atls.lib删掉或重命名. 这样就会链接到C:\Program Files (x86)\Microsoft Visual Studio 12.0\VC\atlmfc\lib\atls.lib, 重定义就解决了. 这个因为是因为vs2013 update的原因.

 

linux 及android端:

google 默认的android 编译环境是ubuntu 64位. 其他环境需要自己测试.

本人使用ubuntu 14.01lts 64bit.

与windows类似, 需要depot tools. 然后配置环境变量 export PATH=/home/ldh/depot_tools:$PATH

配置JDK:

使用的是oracle jdk 1.7. 低于1.7会导致编译错误.

export JAVA_HOME=/home/ldh/jdk1.6.0_45

export PATH=$JAVA_HOME/bin:$PATH

 

linux:

./build/install-build-deps.sh    #linux需要依赖

gclient sync

 

linux下默认使用ninja, 如果需要使用make的话, 指定 export GYP_GENERATORS=make

android只支持ninja编译

 

android同步代码

./build/install-build-deps-android.sh   #android需要的依赖
$ echo "target_os = ['android', 'unix']" >> .gclient
$ gclient sync
$ cd src
$ source ./build/android/envsetup.sh
$ export GYP_DEFINES="$GYP_DEFINES OS=android"

 

编译:

$ cd src

Debug:

$ ninja -C out/Debug

Release:

$ ninja -C out/Release

 

错误

util.build_utils.CalledProcessError: Command failed: ( cd /home/ldh/webrtc/src/chromium/src/build/android; javac -g -source 1.7 -target 1.7

javac: invalid source release: 1.7

jdk版本错误, 需要jdk1.7

 

gclient同步时出现git fatal error  out of memory 时

git gc --aggressive --prune=now

git repack -a -d --depth=250 --window=250

这两条命令也可以用户减少.git文件夹的大小.

 

 

二. webrtc demo 简介

windows 下. peerconnection_client 和 peerconnection_server 可以直接测试. server可以部署在公网上.

android下. talk/examples/android 是apprtc的工程(最新名字是ConnectActivity.apk). 使用apprtc.appspot.com作为signal服务器. 可以测试android app, 也可以测试chrome网页.

webrtc学习(一): webrtc开始的更多相关文章

  1. WebRTC 学习之 WebRTC 简介

    本文使用的WebRTC相关API都是基于Intel® Collaboration Suite for WebRTC的. 相关文档链接:https://software.intel.com/sites/ ...

  2. [转]webrtc学习: 部署stun和turn服务器

    [转]webrtc学习: 部署stun和turn服务器 http://www.cnblogs.com/lingdhox/p/4209659.html webrtc的P2P穿透部分是由libjingle ...

  3. WebRTC学习笔记_Demo收集

    1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源代码中增加了webrtc源代码,放在/external/w ...

  4. WebRTC学习之九:摄像头的捕捉和显示

    较新的WebRTC源代码中已经没有了与VoiceEngine结构相应的VidoeEngine了,取而代之的是MeidaEngine.MediaEngine包括了MediaEngineInterface ...

  5. WebRTC学习

    1.     WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/web ...

  6. WebRTC学习与DEMO资源一览

    一. WebRTC学习 1.1   WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/webrtc/ ...

  7. WebRTC学习资料大全

    在学习WebRTC,找了些资料,记录一下,供以后查询. 有些需要FQ才能看 WebRTC 介绍 官网在这里:https://webrtc.org/.然后这里有一个官方的Getting Started: ...

  8. webrtc学习———记录三:mediaStreamTrack

    参考: https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack 转自http://c.tieba.baidu.com/p/3 ...

  9. WebRTC 学习之 概念总结

    在学习WebRTC的时候,接触到了好多新的概念,在这里做一下备忘吧 RTMP协议 Real Time Messaging Protocol(实时消息传输协议).该协议基于TCP,是一个协议族,包括RT ...

随机推荐

  1. iOS打开手机QQ与指定用户聊天界面

    开发中遇到一个联系客服qq的需求,找到这么一个实现方法,先记录下来.大概的原理就是,iOS启动第三方应用是采用schema模式的,这有点像url,打开不同的界面使用不同的地址.但这个url怎么得来的还 ...

  2. 第二百零三天 how can I 坚持

    空虚的有点害怕. 日复一日. 今天做了什么?下班看了个搞笑段子. 上班和刘松聊了一下午,东扯西扯的. 下班玩了两局dota. 想租车去出去玩玩,确实没有什么想去的地方了. 莫巧菲. 哎,未来好可怕啊. ...

  3. 让CSS3给你的文字加上边框宽度,并实现镂空效果

    这次,我主要向大家介绍一下CSS3下的-webkit-text-stroke属性,并分享几个用该属性制作的镂空文字效果. 1.-webkit-text-stroke属性简介 CSS边框的一个不足就是只 ...

  4. java 常用concurrent类

    1.CountDownLatch 它的作用主要是当多个(数量等于初始化CountDownLatch时count参数的值)线程到达了预期状态或完成预期工作时触发事件,其他线程可以等待这个事件来触发自己后 ...

  5. CSS圆角,输入框提示信息,JS查找同级元素

    input { /*设置边框*/ border:1px solid #95B8E7; border-radius: 5px; /*设置圆角,IE不兼容*/ height:18px } placehol ...

  6. C++视频课程小结(1)

    C++远征之起航篇 章节介绍: 每章小结: 第一章:C++诞生于贝尔实验室,C++包含C语言. 第二章:介绍了IDE环境(虽然没怎么懂),还推荐使用visual stdio 2010 旗舰版(姑且下了 ...

  7. How Tomcat Works(十八)

    在前面的文章中,如果我们要启动tomcat容器,我们需要使用Bootstrap类来实例化连接器.servlet容器.Wrapper实例和其他组件,然后调用各个对象的set方法将它们关联起来:这种配置应 ...

  8. Linux /proc 的意义

    /proc 是个虚拟文件系统.也就是.重新引导后修改会被重新初始化     提供了进程信息.内存资源.硬件设备.内核内存等信息     比如:     网卡:/proc/sys/vm/ipv4/ip_ ...

  9. Ubuntu 搭建PHP开发环境

    Ubuntu确实很好玩.有喜欢的命令行,简洁的界面,不同于Window要的感觉.偶尔换换环境工作,学习Linux的思维方式,是一种不错的做 法.之前也折腾过Ubuntu,不过,因为网络的问题,一直没有 ...

  10. MRI中T1和T2的含义与区分[转]

    A. MRI名词解释   T1加权像.T2加权像为磁共振检查中报告中常提到的术语,很多非专业人士不明白是什么意思,要想认识何为T1加权像.T2加权像,请先了解几个基本概念:   1.磁共振(maget ...