webrtc学习(一): webrtc开始
一. 编译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开始的更多相关文章
- WebRTC 学习之 WebRTC 简介
本文使用的WebRTC相关API都是基于Intel® Collaboration Suite for WebRTC的. 相关文档链接:https://software.intel.com/sites/ ...
- [转]webrtc学习: 部署stun和turn服务器
[转]webrtc学习: 部署stun和turn服务器 http://www.cnblogs.com/lingdhox/p/4209659.html webrtc的P2P穿透部分是由libjingle ...
- WebRTC学习笔记_Demo收集
1. WebRTC学习 1.1 WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源代码中增加了webrtc源代码,放在/external/w ...
- WebRTC学习之九:摄像头的捕捉和显示
较新的WebRTC源代码中已经没有了与VoiceEngine结构相应的VidoeEngine了,取而代之的是MeidaEngine.MediaEngine包括了MediaEngineInterface ...
- WebRTC学习
1. WebRTC学习 1.1 WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/web ...
- WebRTC学习与DEMO资源一览
一. WebRTC学习 1.1 WebRTC现状 本人最早接触WebRTC是在2011年底,那时Google已经在Android源码中加入了webrtc源码,放在/external/webrtc/ ...
- WebRTC学习资料大全
在学习WebRTC,找了些资料,记录一下,供以后查询. 有些需要FQ才能看 WebRTC 介绍 官网在这里:https://webrtc.org/.然后这里有一个官方的Getting Started: ...
- webrtc学习———记录三:mediaStreamTrack
参考: https://developer.mozilla.org/en-US/docs/Web/API/MediaStreamTrack 转自http://c.tieba.baidu.com/p/3 ...
- WebRTC 学习之 概念总结
在学习WebRTC的时候,接触到了好多新的概念,在这里做一下备忘吧 RTMP协议 Real Time Messaging Protocol(实时消息传输协议).该协议基于TCP,是一个协议族,包括RT ...
随机推荐
- html5 canvas图片翻转
<!doctype html> <html> <head> <meta charset="utf-8"> <title> ...
- 轻松学习Linux之理解Shell的硬链接与软连接
大家在学习linux的过程中常常遇到一些模糊且容易混淆的概念比如什么是硬链接和软链接,他们有什么区别? 软连接有点象windows中的快捷方式,连接和目标文件具有相同的节点,而硬连接就好象重新复制 ...
- 【转】Hive导入10G数据的测试
原博文出自于: http://blog.fens.me/hadoop-hive-10g/ 感谢! Hive导入10G数据的测试 让Hadoop跑在云端系列文章,介绍了如何整合虚拟化和Hadoop,让H ...
- windows 无法启动asp.net 状态服务 错误 0x8007277a
处理方法:如果在启动ASP.NET State Service服务时遇到问题0x8007277a即无法启动或初始化,请尝试在命令行(CMD)中输入netsh winsock reset(有可能是wi ...
- C#中位、字节等知识
本文介绍C#中位.字节等知识. 1. 位(bit) 位(bit)有叫做比特,指二进制中的一位,是二进制的最小信息单位. bit也被称作小b,用b表示. 2. 字节(bytes) 8位表示一个字节. 由 ...
- AutoCAD.NET二次开发错误集锦
1.CAD崩溃,错误“unhandled access violation reading”=“未将对象引用设置到对象的实例”. 2. 建模操作错误:指向给定边的指针为空. 建模操作错误:访问冲突. ...
- Qt实现应用程序单实例运行--LocalServer方式
使Qt应用程序能够单实例运行的典型实现方法是使用共享内存实现.该方法实现简单,代码简洁. 但有一个致命缺陷:共享内存(QSharedMemory)实现的单程序运行,当运行环境是UNIX时,并且程序不幸 ...
- 结构类模式(七):代理(Proxy)
定义 为其他对象提供一种代理以控制对这个对象的访问. 代理模式也叫做委托模式,它是一项基本设计技巧.许多其他的模式,如状态模式.策略模式.访问者模式本质上是在更特殊的场合采用了委托模式,而且在日常的应 ...
- 创建类模式(四):原型(Prototype)
定义 用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象. 原型模式允许一个对象再创建另外一个可定制的对象,根本无需知道任何如何创建的细节,工作原理是:通过将一个原型对象传给那个要发动创建 ...
- Weka EM 协方差
Weka EM covariance description 1: Dear All, I am trying to find out what is the real meaning of the ...