🎯 研究直播系统与 AI 实时视觉处理的结合实践,欢迎私信或技术交流:a@zibin.top
在 Ubuntu 上编译支持 WHIP 和 WHEP 协议的 FFmpeg 教程
本文档提供了一个详细的教程,在 Ubuntu 系统上编译一个支持 WHIP 和 WHEP 协议的 FFmpeg 程序。WHIP 和 WHEP 是基于 WebRTC 的低延迟流媒体协议,分别用于视频流的摄取和输出。由于官方 FFmpeg 的 WHEP 支持尚未完全整合,我们将使用 parallelcc/FFmpeg-WHIP-WHEP 分支,该分支通过 libdatachannel 库实现了这两种协议的支持。
背景
FFmpeg 是一个功能强大的多媒体处理工具集,支持多种音视频格式和协议。WebRTC 是一种实时通信技术,WHIP 和 WHEP 是其标准化协议,用于低延迟流媒体传输:
- WHIP:用于将视频流推流到 WebRTC 服务器。
- WHEP:用于从 WebRTC 服务器拉取播放视频流。
本教程基于 parallelcc/FFmpeg-WHIP-WHEP 分支,适用于 Ubuntu 系统。
先决条件
- 操作系统:Ubuntu(建议 20.04 或更高版本)。
- 基本技能:熟悉终端命令和软件编译。
- 网络连接:用于克隆代码库和下载依赖。
步骤
步骤 1:安装依赖
FFmpeg 和 libdatachannel 的编译需要特定的开发工具和库。运行以下命令更新系统并安装依赖:
sudo apt update
sudo apt install -y build-essential cmake git libssl-dev nasm libx264-dev
依赖说明
| 依赖包 | 用途 |
|---|---|
| build-essential | 提供编译工具(如 gcc、make) |
| cmake | 用于构建 libdatachannel |
| git | 用于克隆代码库 |
| libssl-dev | 提供 OpenSSL,libdatachannel 的安全后端 |
| nasm | FFmpeg 的汇编优化 |
| libx264-dev | 支持 H.264 编码(可选但推荐) |
步骤 2:构建并安装 libdatachannel
libdatachannel 是一个轻量级 WebRTC 库,支持数据通道、媒体传输和 WebSocket,是 WHIP 和 WHEP 的核心依赖。
-
克隆
libdatachannel代码库:git clone https://github.com/paullouisageneau/libdatachannel.git cd libdatachannel -
初始化子模块(
libjuice用于 WebRTC 连接):git submodule update --init -
创建构建目录并编译:
mkdir build cd build cmake .. make sudo make install
注意事项
make install将库安装到系统目录(如/usr/local/lib),以便 FFmpeg 链接。- 如果遇到 CMake 错误,检查是否缺少其他依赖(如
libjuice的要求)。
步骤 3:克隆 FFmpeg-WHIP-WHEP 代码库
parallelcc/FFmpeg-WHIP-WHEP 是 FFmpeg 的一个分支,基于 FFmpeg 7.1.1,集成了 WHIP 和 WHEP 支持。
-
克隆代码库:
git clone https://github.com/parallelcc/FFmpeg-WHIP-WHEP.git cd FFmpeg-WHIP-WHEP
步骤 4:配置并编译 FFmpeg
配置 FFmpeg 以启用 libdatachannel 和相关功能。
-
运行配置脚本:
./configure --enable-libdatachannel --enable-gpl --enable-nonfree配置选项说明
选项 描述 --enable-libdatachannel 启用 libdatachannel支持 WHIP/WHEP--enable-gpl 启用 GPL 许可的组件(如某些编解码器) --enable-nonfree 启用非自由组件(如某些专利编解码器) 可选配置:
--enable-libx264:启用 H.264 编码(已在步骤 1 安装)。- 其他选项可根据需求添加,参考 FFmpeg 编译指南。
-
编译 FFmpeg:
make -j$(nproc)$(nproc)使用所有 CPU 核心加速编译。
步骤 5:安装 FFmpeg
将编译好的 FFmpeg 安装到系统(可选):
sudo make install
- 说明:安装后,FFmpeg 可通过命令行全局访问(如
ffmpeg)。若不安装,可直接使用构建目录中的./ffmpeg。
步骤 6:测试 WHIP 和 WHEP
编译完成后,测试 WHIP 和 WHEP 功能需要一个支持这些协议的 WebRTC 服务器(如 SRS 或 TinyWHIP)。
测试 WHIP(摄取)
将视频流发送到 WHIP 服务器:
ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -c:a aac -f whip rtsp://your-whip-server-url
-
说明:
-f v4l2 -i /dev/video0:使用摄像头输入(需安装 v4l2loopback)。-c:v libx264 -c:a aac:使用 H.264 视频和 AAC 音频编码。- 替换
rtsp://your-whip-server-url为实际 WHIP 服务器地址。
测试 WHEP(输出)
播放 WHEP 流:
ffplay -f whep -token your-token your-whep-url
-
说明:
- 替换
your-token和your-whep-url为实际 WHEP 服务器的令牌和地址。 ffplay是 FFmpeg 的播放工具,用于验证流。
- 替换
示例服务器
| 服务器 | 描述 | URL |
|---|---|---|
| TinyWHIP | WHIP 测试服务器 | TinyWHIP |
| SRS | 支持 WHIP 和 WHEP 的 WebRTC 服务器 | SRS |
故障排除
- 依赖缺失:如果编译失败,检查是否缺少依赖(如
libssl-dev)。 - 路径问题:确保
libdatachannel已正确安装到系统目录。 - 服务器配置:测试 WHIP/WHEP 时,确保服务器支持这些协议并正确配置。
- 日志检查:运行 FFmpeg 时添加
-loglevel debug查看详细错误信息。
结论
通过本教程,您可以在 Ubuntu 上成功编译支持 WHIP 和 WHEP 的 FFmpeg。parallelcc/FFmpeg-WHIP-WHEP 分支提供了一个可靠的解决方案,基于 FFmpeg 7.1.1 和 libdatachannel,适合低延迟流媒体应用。测试时,请确保使用兼容的 WebRTC 服务器。