WebRTC iOS framework 编译

作者: 刻口客乐 | 来源:发表于2017-02-19 13:02 被阅读2229次
    1. 安装 depot_tools
    git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git
    

    把 depot_tools 加入环境变量

     export PATH=`pwd`/depot_tools:"$PATH"
    
    1. clone 源代码
      创建一个文件夹用来存放 WebRTC 源代码,比如 mkdir ~/webrtc, 进入刚才创建的文件夹执行
    fetch --nohooks webrtc_ios
    gclient sync
    

    然后就是漫长的等待中...
    完全 sync 完成后会在 webrtc 目录下生成一个 src 目录,进入 src 目录会看到类似 https://chromium.googlesource.com/external/webrtc/+/master 这个样的目录,只不过多了 third-party 的一些依赖文件, branch 57 之后 sync 很快哦

    1. 编译 framework
      运行命令 gclient runhooks
      进入 src 目录,然后执行
    ./tools_webrtc/ios/build_ios_libs.py
    

    就可以编译出 framework 文件了。
    可以通过 ./tools_webrtc/ios/build_ios_libs.py --help 查看编译选项
    默认会编译出全部架构的 ['arm64', 'arm', 'x64', 'x86'] 的 framework 文件,如果想要编译成静态库也可以加上 -b static_only,如果只想编译 ARM 的架构可以 ./tools_webrtc/ios/build_ios_libs.py --arch {'arm64','arm'} (老版本的目录为 tools-webrtc)

    1. 使用 Xcode 查看和编译 WebRTC 源码
      WebRTC 不支持 Xcode 原生编译,用 Xcode 编译也是调用的 ninja 去编译
      先生成 workspace 文件,还是进入上面提到的 src 的目录
    gn gen out/ios --args='target_os="ios" target_cpu="arm64" is_component_build=false' --ide=xcode
    

    打开工程文件,就可以编译和查看源码了
    open -a Xcode.app out/ios/all.xcworkspace

    1. 代码更新
      以后更新 webrtc 代码只需要进入 src 目录 git pull 就行, 定期的更新依赖,使用 gclient sync

    2. 有不能编译成功的可以留言哦 😄

    相关 App 碰碰 http://www.pengpeng.us
    本文参考 https://webrtc.org/native-code

    2018-06-26 20.24.47.jpg

    相关文章

      网友评论

      • DSperson:请问一下 能编译 mac的么?
        刻口客乐:@DSperson 不能
        DSperson:@刻口客乐 请问一下能用ubuntu 编译 iOS的么?
        刻口客乐:@DSperson 最新的不知道是否可以?可以看看有没有最新的,以前是不行
      • yok_:简主,请问可以发份编译好的给我吗?邮箱:835687485@qq.com,谢谢
        刻口客乐:@yok_ 现在可以用 cocoapod 了
      • 6fd4e5d130c4:HHRdeiMac:src mj_dom$ gn gen out/ios --args='target_os="ios" target_cpu="arm64" is_component_build=false' --ide=xcode
        -bash: gn: command not found
        大佬,这种应该怎么解决呢
        6fd4e5d130c4:@刻口客乐 你好,想问一下噪声跟回音你是怎么处理的:smile:
        6fd4e5d130c4:可以了,谢谢哦
        刻口客乐:肯定是 export PATH=`pwd`/depot_tools:"$PATH" 这个没有加吧?不在path 中肯定找不到
      • wuyangLi:all.xcworkspace运行报错
      • iOS大神进阶:INFO:root:Building WebRTC with args: target_os="ios" ios_enable_code_signing=false use_xcode_clang=true is_component_build=false is_debug=false target_cpu="arm64" ios_deployment_target="9.0" rtc_libvpx_build_vp9=false enable_ios_bitcode=false use_goma=false enable_dsyms=true enable_stripping=true
        gn.py: Could not find gn executable at: /Users/mac/Desktop/copy/webrtc_ios/src/buildtools/mac/gn
        Traceback (most recent call last):
        File "./build_ios_libs.py", line 272, in <module>
        sys.exit(main())
        File "./build_ios_libs.py", line 194, in main
        args.use_goma, gn_args, args.build_type == 'static_only')
        File "./build_ios_libs.py", line 135, in BuildWebRTC
        _RunCommand(cmd)
        File "./build_ios_libs.py", line 81, in _RunCommand
        subprocess.check_call(cmd, cwd=SRC_DIR)
        File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 540, in check_call
        raise CalledProcessError(retcode, cmd)
        subprocess.CalledProcessError: Command '['/usr/bin/python', '/Users/mac/Desktop/copy/webrtc_ios/src/third_party/depot_tools/gn.py', 'gen', '/Users/mac/Desktop/copy/webrtc_ios/src/out_ios_libs/arm64_libs', '--args=target_os="ios" ios_enable_code_signing=false use_xcode_clang=true is_component_build=false is_debug=false target_cpu="arm64" ios_deployment_target="9.0" rtc_libvpx_build_vp9=false enable_ios_bitcode=false use_goma=false enable_dsyms=true enable_stripping=true']' returned non-zero exit status 2
        大神,这个log主要是什么错误引起的,需要怎么做呢
      • 692aaf0b7f90:可以加下qq 吗.我两天都没搞定/(ㄒoㄒ)/~~826888099
        刻口客乐:可以,无法加,对方拒绝任何人加为好友,我的 657219956
      • 692aaf0b7f90:./tools-webrtc/ios/build_ios_libs.py
        -bash: ./tools-webrtc/ios/build_ios_libs.py: No such file or directory ,ls 后是有对应文件的.我后面直接py文件拖到终端raceback (most recent call last):
        File "./build_ios_libs.py", line 258, in <module>
        sys.exit(main())......false use_goma=false enable_dsyms=true enable_stripping=true']' returned non-zero exit status 2的问题
      • 692aaf0b7f90:MacBookPro:w mmj$ fetch --nohooks webrtc_ios
        Traceback (most recent call last):
        File "/Users/mmj/Desktop/视频/depot_tools/fetch.py", line 299, in <module>
        sys.exit(main())
        File "/Users/mmj/Desktop/视频/depot_tools/fetch.py", line 293, in main
        spec, root = run_config_fetch(config, props)
        File "/Users/mmj/Desktop/视频/depot_tools/fetch.py", line 257, in run_config_fetch
        spec['alias']['config'], spec['alias']['props'] + props, aliased=True)
        File "/Users/mmj/Desktop/视频/depot_tools/fetch.py", line 245, in run_config_fetch
        os.path.join(SCRIPT_PATH, 'fetch_configs', config))
        File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/posixpath.py", line 73, in join
        path += '/' + b
        UnicodeDecodeError: 'ascii' codec can't decode byte 0xe8 in position 19: ordinal not in range(128)
        问下楼主,我第一次安装好后编译不成功,后来我删除了重新编译结果报上面的错误~~
        692aaf0b7f90:@刻口客乐 Traceback (most recent call last):
        File "/Users/mmj/Desktop/sp/w/ship/depot_tools/gclient.py", line 2618, in <module>
        raise CalledProcessError(retcode, cmd, output=output)
        subprocess.CalledProcessError: Command '('gclient', 'sync', '--nohooks', '--with_branch_heads')' returned non-zero exit status 1 ,,,,,,,,,,,,这安装也不对吧
        692aaf0b7f90:@刻口客乐 确实,尴尬. 还专门吧系统语言换成英文
        刻口客乐:@692aaf0b7f90 不会是你目录有中文吧?
      • 692aaf0b7f90:问下楼主 我安装depot_tools老装不上,我已经下载蓝灯了.你现在有可用的教程吗?
        刻口客乐:端口不一样
        刻口客乐:VPN 的事
        692aaf0b7f90:错误是unable to access 'https://chromium.googlesource.com/chromium/tools/depot_tools.git/': Unsupported proxy scheme for 'https://127.0.0.1:51415' ; 网上有人说在终端执行export http_proxy=http://127.0.0.1:8787 和export https_proxy=http://127.0.0.1:8787 还是没反应. 我外网已经可以访问了
      • 春风酿酒:请问有没有这个framework的使用教程啊,我编译完了,想用里面的回声消除功能
        刻口客乐:@Topsky 那就要单独去编译 audio processing 相关的代码,这个 framework 只是一个上层的 WebRTC API
        春风酿酒:@刻口客乐 系统的mode貌似不顶用,而且我还需要降噪之类的处理
        刻口客乐:只用回声消除直接用系统的 mode 就行
      • 男神已认证:为什么不直接提供一个framework
        男神已认证:@刻口客乐 谢谢 我编译出来 我只是好奇为什么谷歌不直接提供动态库
        刻口客乐:想要的话,这里有一个我编译的 https://github.com/crossle/janus-gateway-ios/tree/master/janus-gateway-ios/Janus/WebRTC.framework
      • tjfeng88:hi, 运行./tools-webrtc/ios/build_ios_libs.py 脚本
        报下面的错:
        INFO:root:Building WebRTC with args: target_os="ios" ios_enable_code_signing=false use_xcode_clang=true is_component_build=false is_debug=false target_cpu="arm64" ios_deployment_target="8.0" rtc_libvpx_build_vp9=false enable_ios_bitcode=false use_goma=false enable_dsyms=true enable_stripping=true
        Traceback (most recent call last):
        File "/Users/tianjinfeng/Desktop/Projects/WebRTC/depot_tools/gn.py", line 38, in <module>
        sys.exit(main(sys.argv))
        File "/Users/tianjinfeng/Desktop/Projects/WebRTC/depot_tools/gn.py", line 33, in main
        return subprocess.call([gn_path] + args[1:])
        File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 522, in call
        return Popen(*popenargs, **kwargs).wait()
        File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 710, in __init__
        errread, errwrite)
        File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 1335, in _execute_child
        raise child_exception
        OSError: [Errno 13] Permission denied
        Traceback (most recent call last):
        File "./tools-webrtc/ios/build_ios_libs.py", line 253, in <module>
        sys.exit(main())
        File "./tools-webrtc/ios/build_ios_libs.py", line 175, in main
        args.use_goma, args.extra_gn_args)
        File "./tools-webrtc/ios/build_ios_libs.py", line 134, in BuildWebRTC
        _RunCommand(cmd)
        File "./tools-webrtc/ios/build_ios_libs.py", line 75, in _RunCommand
        subprocess.check_call(cmd, cwd=WEBRTC_SRC_DIR)
        File "/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/subprocess.py", line 540, in check_call
        raise CalledProcessError(retcode, cmd)
        tjfeng88:@刻口客乐 确实是权限问题
        在终端:
        chmod+x src/buildtools/mac/gn
        即可解决:OSError: [Errno 13] Permission denied
        参考链接:https://github.com/ChenYilong/WebRTC/blob/master/WebRTC%E5%9C%A8iOS%E7%AB%AF%E7%9A%84%E5%AE%9E%E7%8E%B0/WebRTC%E5%9C%A8iOS%E7%AB%AF%E7%9A%84%E5%AE%9E%E7%8E%B0.md
        谢谢回复!
        刻口客乐:OSError: [Errno 13] Permission denied 是你 depot_tools 这个配置的问题吧?有权限执行吗
      • 小羊孩子:我从其他地方获取的源码目录没有tools-webrtc,可以给一份源码吗?:blush: bulixin12@163.com
        小羊孩子:@刻口客乐 ________ running '/usr/bin/python src/build/get_syzygy_binaries.py --output-dir=src/third_party/syzygy/binaries --revision=a8456d9248a126881dcfb8707ca7dcdae56e1ac7 --overwrite' in '/Users/ios-bulixin'
        INFO:get_syzygy_binaries.py:Output directory does not exist, skipping cleanup.

        ________ running '/usr/bin/python src/third_party/instrumented_libraries/scripts/download_binaries.py' in '/Users/ios-bulixin'
        ios-bulixindeMac-mini:~ ios-bulixin$

        今天下载到这里下载停止了,简主,遇到过吗
        小羊孩子:@刻口客乐 不能翻墙, 可以给一下你的微信吗?有几个问题请教一下:grin:
        刻口客乐:https://chromium.googlesource.com/external/webrtc/+/master/tools-webrtc/ 这里下载就行
      • Gxpzy:第一步就过不去= =,貌似是被墙了,qq836812350多谢帮助
        刻口客乐:@Gxpzy http://refyunti.com/?r=cbe2b1d110e167ce
        Gxpzy:@刻口客乐 推荐一个呗
        刻口客乐:要用 VPN 翻墙的

      本文标题:WebRTC iOS framework 编译

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