Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >在 Mac M1 等系列芯片编译和开发 WebRTC-Android 库

在 Mac M1 等系列芯片编译和开发 WebRTC-Android 库

作者头像
音视频开发进阶
发布于 2024-05-08 08:01:54
发布于 2024-05-08 08:01:54
34000
代码可运行
举报
运行总次数:0
代码可运行

众所周知,编译 WebRTC-Android 库是需要在 Linux 系统上的,这是由于源码里编译脚本限制导致。

当然也可以在 Mac 平台上进行编译,不过就需要对源码进行魔改了,毕竟拉取的是 Linux 下的源码和相关配置,要把这些配置替换成 Mac 平台上的,比如 Linux 下的 C++ 编译配置、Android NDK 配置等,这种方式侵入性比较大,而且还相当折腾,费时费力

Docker 容器配置

有一种更好的方式就是使用 Docker 在 Docker 上配置 Linux 环境,然后拉取 WebRTC 源码进行编译,再把编译好的产物(库文件)拉取到本地即可。

在 Mac 上使用 Docker 直接下载安装就行了,但创建 Linux 容器时要注意对应的芯片平台。

现在大多数 Mac 应该都是苹果自研的 ARM64 架构的 Apple 芯片,不再是英特尔平台的芯片了。

在 Apple 芯片上直接通过 docker 命令创建容器的话,可能还是 arm64 架构的,这样即使拉取了 WebRTC 源码,在编译库的时候还是会提示不支持 arm64 架构,导致编译失败,这也是实际踩过坑后的经验教训。

需要借助 Docker 的 --privileged=true 选项(特权模式)来指定平台。

使用如下命令来创建容器:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker run --privileged -ti --rm --platform linux/amd64 ubuntu:18.04

并且通过该命令来查看对应的镜像是什么平台:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
> docker inspect f9a80a55| grep Architecture

"Architecture": "amd64",

f9a80a55 是镜像的 id ,输出是 amd64 的架构。如果没有 --privileged 参数,输出就是 arm64 了。

WebRTC 源码编译

有了镜像之后,接下来就是常规操作,下载 depot tools 并拉取对应源码 。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
fetch --nohooks --no-history webrtc_android  
# 同步下依赖  
gclient sync

再执行如下命令拉取相关的依赖:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 安装WebRTC基础的依赖  
./build/install-build-deps.sh

通过如下命令编译对应架构的 libwebrtc.aar 文件:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./tools_webrtc/android/build_aar.py --build-dir Build --arch arm64-v8a

编译后的 libwebrtc.aar 文件在 src 目录下,在 Build 目录下有对应的编译产物,此时的 aar 还是 Release 版本的。

要编译 Debug 版本的,找到 src/build/toolchain/android/BUILD.gn 文件,修改如下配置:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 注释掉下面两行配置,即可实现 unstrip  
# strip = rebase_path("//buildtools/third_party/eu-strip/bin/eu-strip",  
#                     root_build_dir)  
# use_unstripped_as_runtime_outputs = android_unstripped_runtime_outputs

编码命令也对应调整:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
./tools_webrtc/android/build_aar.py --build-dir=Build --arch arm64-v8a --extra-gn-args "is_debug=true symbol_level=2 android_full_debug=true"

这时编译出的 libjingle_peerconnection_so.so 就有几百 M 了,带了 Debug 信息。

这时候通过 docker cp 命令将 libwebrtc.aar 文件拉取到本地就可以用来开发了。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
docker cp {container-id}:path/src/libwebrtc.aa ~/}

VSCode 远程开发

可以编译出 libwebrtc.aar 之后,只需要每次改动代码然后编译一次就行了,但是在 Docker 镜像里面用 Vim 来写代码太不方便。

有一种办法是将镜像里的代码同步到本地,然后本地修改了再同步到镜像中,来回倒腾效率也很低,而且还占存储空间。

有更好的办法是使用 VSCode 的远程开发,通过 VSCode 链接到 Docker 容器,直接访问容器中的磁盘目录内容,在 VSCode 中进行可视化的开发,这样效率就提升很多了,并且还能搭配 VSCode 的各种插件来辅助开发。

具体的操作在 VSCode 中下载对应的 Docker 和 Dev Containers 这两个插件。

然后在左侧红框中就能看到目前有的容器,在右侧红框中选择要关联的容器,之后在选择要开发的目录,找到 webrtc 下载的源码目录就行,效果如下:

这样一来,就可以在 VSCode 中远程开发 WebRTC 代码,而 Docker 容器只用来编译对应的 libwebrtc.aar 库就行了。

本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2024-05-05,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 音视频开发进阶 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
新手必看!MacBook Pro苹果电脑M系列芯片安装 Label Studio 教程方法大全
本文将从零开始,面向完全没有相关经验的初学者用户,详细地介绍如何在配备 Apple M 系列芯片的 MacBook Pro 上成功安装并运行 Label Studio。文中所有示例均基于 macOS Ventura 及以上版本如 macOS Monterey、macOS Big Sur 等,并假设你使用的是 M1、M1 Pro、M1 Max、M2 等架构。请务必按顺序阅读,确保每一步操作都能顺利完成。
猫头虎
2025/06/08
650
跨平台构建 Docker 镜像新姿势,x86、arm 一把梭
在工作和生活中,我们可能经常需要将某个程序跑在不同的 CPU 架构上,比如让某些不可描述的软件运行在树莓派或嵌入式路由器设备上。特别是 Docker 席卷全球之后,我们可以轻松地在 ARM 设备上通过容器部署各种好玩的应用,而不用在意各种系统的差异性。
米开朗基杨
2019/11/25
43.3K1
跨平台构建 Docker 镜像新姿势,x86、arm 一把梭
WebRTC & Android 开发学习环境搭建~
如果你对以上命令感到疑惑,不知道为什么这么写的话,可以参考一下 depot_tools 的使用。
音视频开发进阶
2020/08/13
2.3K0
WebRTC & Android 开发学习环境搭建~
Apple M1 芯片目前对开发者来说未必是好事
苹果近日推出的首款自研的 Apple M1 芯片,收到了很多用户的欢迎,但随着这些用户拿到真机,很多问题暴露出来。
用户7454708
2023/05/08
9540
Apple M1 芯片目前对开发者来说未必是好事
Android JNI Crash定位步骤
今天讲的是纯干货,目的就是为了指导Android开发者如何根据JNI Crash日志顺藤摸瓜,最后直捣黄龙定位磨人的JNI Crash。所以废话不多,直接开干吧。
音视频开发进阶
2019/11/18
2.9K0
Mac M1原生(ARM64)Golang dev&debug
通过本文最终实现了在M1芯片的Mac mini上的Goland的开发,并通过编译源码解决了无法DEBUG的问题。
yoyofx
2021/01/18
4K0
关于在Mac操作系统下,M1上Python调用Jar包的折腾记录
最近我有一个工具需求就是在我的电脑上通过Python来调用我们内部的一个Jar包,没想到这么一个简简单单的需求,折腾了将近2天的时间,在这里做一个总结,来简单说一下这过程中遇到的问题,希望可以帮助到后来人
huolong
2024/04/22
3520
关于在Mac操作系统下,M1上Python调用Jar包的折腾记录
WebRTC编译国内加速镜像
在构建学而思的低延迟互动直播网络的过程中需要经常的编译WebRTC,但由于WebRTC依赖较多(十几个G), 而且大多数内容需要访问国外网站,这对我们编译工作造成很多困扰,我们尝试了多种加速编译的方法,最终找到一个对WebRTC代码没有任何侵入的镜像方案。
刘连响
2022/03/30
7.4K1
Android | 迁移到搭载M1芯片的Mac时的问题
新近更换了搭载 M1 芯片的 Mac 电脑,在将旧电脑中正常运行的项目拷贝过来并运行时,出现了一系列的问题。本文对此进行相应的总结。
CnPeng
2023/01/11
4.1K0
x86架构应用如何向Arm架构低成本迁移
最直接的影响,是原来在 X86_64 环境中可以正常运行的业务系统需要基于 Arm64 重新编译才可以运行。即使开发时使用的语言具备跨架构的能力,重新编译本身就是一种很繁复的工作,需要投入大量的人力成本和时间成本。
Rainbond开源
2022/01/12
2.9K0
使用 Docker Buildx 构建多种系统架构镜像
Docker Buildx 是一个 docker CLI 插件,其扩展了 docker 命令,支持 Moby BuildKit 提供的功能。提供了与 docker build 相同的用户体验,并增加了许多新功能。
没有故事的陈师傅
2021/09/09
1.8K0
M1 和 Docker 谈了个恋爱
出于开源项目的需要,我准备把之前在 windows 下运行的开源项目移植到 Mac 上跑得试下,但是 Mac M1 芯片并不能很好地支持 Docker,这不,发现 Docker 也正式支持 Mac 了,M1 看了 Docker 的芳容,竟悄悄爱上了 Docker。
悟空聊架构
2021/04/26
2.4K0
M1 和 Docker 谈了个恋爱
Docker入门:构建支持多系统架构的Docker镜像
使用Docker Buildx构建支持AMD64、ARM、ARM64等架构的镜像并传到到Docker Hub
KenTalk
2023/05/13
1.9K0
Docker入门:构建支持多系统架构的Docker镜像
在M1芯片的Mac上构建多平台Docker镜像
在这篇博客中,我们将讨论如何在M1芯片的Mac上构建多平台的Docker镜像。我们将使用Docker的buildx命令,这是一个实验性的功能,用于启用对多平台镜像的构建。
Kahen
2024/05/13
5260
在M1芯片的Mac上构建多平台Docker镜像
mac 上学习k8s系列(13)编译源码阅读
看到k8s的源码,第一感觉是无从下手,量太大。其实看懂k8s的源码,前提是你对go比较熟悉,另外bash能看懂,源码编译用到了大量bash脚本。首先我们看下源码结构,主要的目录可以分为三类:
golangLeetcode
2022/08/02
1.6K0
基于Docker的交叉编译和打包多平台镜像
效果预览 本机:X86_64 Windows(Docker Desktop)+WSL(Ubuntu)。
编码如写诗
2024/09/12
8400
基于Docker的交叉编译和打包多平台镜像
如何在 Mac 上愉快的使用 Docker
首先要明确的是, 作为了一个每天在 Linux Server 上 rm -rf 的人来说, 如果想在 Mac 上使用 Docker, 最舒服的也是兼容所有 docker cli 命令行操作即可; 至于图形化的界面完全不需要, 我们并不指望图形化界面能比敲命令快到哪里去, 也不指望图形化界面变为主力; 所以本篇文章的核心目标:
CRMEB商城源码
2022/06/22
4.9K0
巧用 Docker Buildx 构建多种系统架构镜像
Docker Buildx 是一个 Docker CLI 插件,其扩展了 Docker 命令,支持 Moby BuildKit 提供的功能。提供了与 Docker Build 相同的用户体验,并增加了许多新功能。
iMike
2021/07/01
2.7K0
Android FFmpeg系列13--升级到6.0
在去年7月发布的Android FFmpeg系列01--编译与集成一文中我们采用的是ndk r21d+FFmpeg5.0.1的版本,一年过去,FFmpeg也迭代到了6.0的版本
雪月清
2023/10/08
1.1K0
Android FFmpeg系列13--升级到6.0
Docker多架构容器镜像构建方式
在运行任何 docker 镜像或 Kubernetes pod 时,您是否在服务器上看到过exec /docker-entrypoint.sh: exec format error错误消息?这很可能是因为您正在服务器上运行一些其他 CPU 架构的容器镜像,或者您是否曾经 在 Apple Silicon M1、M2 MacBook 上使用过--platform linux/x86_64选项?如果是,那么您无法获得 Apple 芯片的本机性能,并且可能会耗尽 MacBook 的电池电量。为了避免这种错误和性能问题,我们需要运行正确的多架构容器镜像,或者我们可能需要构建自己的镜像,因为所有容器公共镜像都没有可用的多架构镜像。
DevOps云学堂
2023/08/22
1.6K0
Docker多架构容器镜像构建方式
推荐阅读
相关推荐
新手必看!MacBook Pro苹果电脑M系列芯片安装 Label Studio 教程方法大全
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
本文部分代码块支持一键运行,欢迎体验
本文部分代码块支持一键运行,欢迎体验