程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> webrtc學習(一): webrtc開始,webrtc學習開始

webrtc學習(一): webrtc開始,webrtc學習開始

編輯:C++入門知識

webrtc學習(一): 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網頁.

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved