尧图网站设计 尧图网站设计YAOTU DESIGN
ARTICLE DETAIL

资讯详情

深耕网站设计与一线实操的经验洞察。

在Ubuntu上交叉编译rpi-webrtc-streamer:树莓派ARM构建完整教程

在Ubuntu上交叉编译rpi-webrtc-streamer:树莓派ARM构建完整教程 在Ubuntu上交叉编译rpi-webrtc-streamer树莓派ARM构建完整教程【免费下载链接】rpi-webrtc-streamerThis repos objective is providing something like Web Cam server on the most popular Raspberry PI hardware. By integrating [WebRTC](https://webrtc.org/native-code/) and Raspberry PI, we can stream the Raspberry camera feed to browser or native client which talks WebRTC.项目地址: https://gitcode.com/gh_mirrors/rp/rpi-webrtc-streamer想给树莓派打造一个低延迟的 WebRTC 摄像头直播服务吗rpi-webrtc-streamer简称 RWS正是为此而生的开源项目它把 WebRTC 原生库与树莓派硬件深度整合让浏览器和手机直接观看摄像头画面。而要在Ubuntu上完成树莓派ARM构建你需要一套完整的交叉编译流程。本文将用新手也能看懂的方式一步步带你完成在 Ubuntu 上交叉编译 rpi-webrtc-streamer 的全过程包括工具链安装、RootFS 制作、WebRTC 库编译与最终部署测试。上图展示了 rpi-webrtc-streamer 的架构树莓派摄像头采集画面经 GPU 的 MMAL 接口完成 H.264 硬件编码再由 WebRTC Streamer 推送给浏览器与手机客户端全程无需在树莓派上编译代码这正是交叉编译的价值所在。为什么要交叉编译而不是在树莓派上直接编译树莓派尤其是 Zero W 这类 armv6 设备CPU 性能有限而 WebRTC 原生库体量庞大直接编译一次可能需要数小时甚至更久。在性能强劲的 Ubuntu PC 上进行ARM交叉编译可以把编译时间从一夜缩短到一顿饭。交叉编译的核心思路是在 x86 的 Ubuntu 主机上使用 ARM 交叉编译工具链如arm-linux-gnueabihf-gcc配合树莓派的 RootFS根文件系统生成可在树莓派上直接运行的可执行文件。交叉编译前的必备工具清单动手之前请确认 Ubuntu 主机满足以下条件并提前安装好基础依赖Ubuntu 64 位系统建议 18.04/20.04磁盘剩余空间50GB 以上WebRTC 源码与编译产物非常庞大稳定的网络环境基础依赖包ant、autoconf、bison、cmake、gawk、intltool、xutils-dev、xsltproc、pkg-configsudo apt install ant autoconf bison cmake gawk intltool xutils-dev xsltproc pkg-config整个流程共需准备三样核心工具depot_toolsChromium/WebRTC 的构建工具、rpi_rootfs树莓派根文件系统以及ARM 交叉编译工具链。第一步安装 depot_tools 与 ARM 交叉编译工具链获取 depot_toolsdepot_tools 是 Google 官方提供的代码管理与构建工具集编译 WebRTC 必须用到mkdir ~/tools cd ~/tools git clone https://chromium.googlesource.com/chromium/tools/depot_tools.git export PATH$PATH:$HOME/tools/depot_tools配置 ARM 交叉编译工具链项目推荐的 GCC 版本是gcc-linaro-8.3.0-2019.03-x86_64_arm-linux-gnueabihf对应 Raspbian Buster。解压后将bin目录加入 PATH并通过软链接统一目录名ln -sf gcc-linaro-8.3.0-2019.03-x86_64_arm-linux-gnueabihf arm-linux-gnueabihf sudo ln -sf ~/Workspace/rpi_rootfs /opt/rpi_rootfs export PATH/opt/rpi_rootfs/tools/arm-linux-gnueabihf/bin:$PATH工具链的编译参数在 mk/cross_arm_build.mk 中定义Makefile 会自动使用arm-linux-gnueabihf-gcc等交叉编译器。第二步制作树莓派 RootFS 根文件系统RootFS 是交叉编译时查找头文件和库文件的替身。项目使用 rpi_rootfs 工具包从官方 Raspbian 镜像提取cd ~/Workspace/rpi_rootfs ./build_rootfs.sh download # 下载 raspios 镜像 unzip yyyy-mm-dd-raspios-buster.zip ./build_rootfs.sh create yyyy-mm-dd-raspios-buster.img 如果你已经在使用树莓派也可以通过 rsync 把树莓派上的系统同步到本地作为 RootFS方法更简单。创建完成后会得到/opt/rpi_rootfs/rootfs目录mk/validate_variables.mk 会校验该路径是否存在。第三步下载 WebRTC 与 rpi-webrtc-streamer 源码获取 WebRTC native-code 源码使用 depot_tools 的fetch命令拉取 WebRTC 原生库目录名必须是~/Workspace/webrtc这是 Makefile 的默认约定mkdir -p ~/Workspace/webrtc cd ~/Workspace/webrtc fetch --nohooks webrtc gclient sync cd src git checkout master获取 rpi-webrtc-streamer 源码cd ~/Workspace git clone https://gitcode.com/gh_mirrors/rp/rpi-webrtc-streamer项目对目录有严格要求请保持以下固定路径否则需要同步修改 src/Makefile 中的变量固定目录用途~/Workspace/webrtcWebRTC 原生库源码~/Workspace/webrtc/src/out/arm_buildARMv7 编译产物~/Workspace/webrtc/src/out/armv6_buildARMv6Zero W编译产物~/Workspace/rpi-webrtc-streamerRWS 源码/opt/rpi_rootfs/rootfs树莓派根文件系统第四步编译 WebRTC ARM 库arm_build 与 armv6_buildWebRTC 使用 GN Ninja 构建系统项目已为你准备好了构建参数文件。ARMv7 及以上树莓派 2/3使用cd ~/Workspace/webrtc/src mkdir out/arm_build cp ~/Workspace/rpi-webrtc-streamer/misc/webrtc_arm_build_args.gn out/arm_build/args.gn gn gen out/arm_build ninja -C out/arm_buildARMv6树莓派 Zero W则使用专用参数文件主要区别在于关闭 NEON、使用 vfp 浮点单元mkdir out/armv6_build cp ~/Workspace/rpi-webrtc-streamer/misc/webrtc_armv6_build_args.gn out/armv6_build/args.gn gn gen out/armv6_build ninja -C out/armv6_build两个参数文件位于 misc/webrtc_arm_build_args.gn 和 misc/webrtc_armv6_build_args.gn里面已经配置好了target_cpuarm、target_sysroot/opt/rpi_rootfs/rootfs、rtc_use_h264true等关键选项。如果你只用树莓派 2/3可以跳过 armv6_build。⏱️ 此步骤耗时最长arm 与 armv6 两套构建合计可能需要数小时请耐心等待。第五步编译 rpi-webrtc-streamer 主程序WebRTC 库编译完成后就可以编译 RWS 本体了。Makefile 会自动从 WebRTC 编译产物中提取编译参数和依赖库通过 mk/webrtc_library_gn.py 脚本解析cd ~/Workspace/rpi-webrtc-streamer/src make # 默认构建 ARMv7树莓派 2/3 make clean make ARCHarmv6 # 构建 ARMv6 版本树莓派 Zero W编译成功后会在~/Workspace/rpi-webrtc-streamer目录下生成webrtc-streamer可执行文件。编译出错怎么办WebRTC 版本回退技巧由于 WebRTC 更新频繁新版本可能与 RWS 不兼容导致编译报错。项目提供了版本回退的解决方案RWS 的提交记录中有Source update for WebRTC Cr-Commit Position标题的 commit里面记录了配套的 WebRTC 提交哈希。找到哈希后回退 WebRTC 源码并重新编译cd ~/Workspace/webrtc/src gclient sync -n -D -r 4d22a6d8dbb1db1f459338c14f8c6d814c6c9678 gclient sync gn clean out/arm_build gn gen out/arm_build ninja -C out/arm_build cd ~/Workspace/rpi-webrtc-streamer/src make clean make部署到树莓派并验证 WebRTC 直播把编译产物拷贝到树莓派通过 scp 或 U 盘并准备配置文件ssh pi你的树莓派IP mkdir -p /home/pi/Workspace/rws scp -r etc tools web-root webrtc-streamer pi你的树莓派IP:/home/pi/Workspace/rws登录树莓派后复制配置模板并启动cd ~/Workspace/rws cp etc/template/*.conf etc vi etc/webrtc_streamer.conf # 将 web_root 改为实际路径 ./webrtc-streamer --verbose配置文件模板位于 etc/template/webrtc_streamer.conf默认监听 8889 端口。随后在浏览器打开http://你的树莓派IP:8889/np2/即可看到测试页面享受 WebRTC 低延迟视频流。总结在 Ubuntu 上交叉编译 rpi-webrtc-streamer 的完整流程可概括为四步装工具链 → 造 RootFS → 编 WebRTC → 编 RWS。虽然 WebRTC 编译耗时较长但换来的是在树莓派上即插即用的高效体验。掌握这套 ARM 交叉编译方法后你也能举一反三将更多大型项目轻松移植到树莓派上。详细的英文原版构建文档可参考项目内的 README_building.md祝你编译顺利【免费下载链接】rpi-webrtc-streamerThis repos objective is providing something like Web Cam server on the most popular Raspberry PI hardware. By integrating [WebRTC](https://webrtc.org/native-code/) and Raspberry PI, we can stream the Raspberry camera feed to browser or native client which talks WebRTC.项目地址: https://gitcode.com/gh_mirrors/rp/rpi-webrtc-streamer创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
返回列表