在 Ubuntu 上编译支持 WHIP 和 WHEP 协议的 FFmpeg 教程

527 阅读4分钟

🎯 研究直播系统与 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 的安全后端
nasmFFmpeg 的汇编优化
libx264-dev支持 H.264 编码(可选但推荐)

步骤 2:构建并安装 libdatachannel

libdatachannel 是一个轻量级 WebRTC 库,支持数据通道、媒体传输和 WebSocket,是 WHIP 和 WHEP 的核心依赖。

  1. 克隆 libdatachannel 代码库:

    git clone https://github.com/paullouisageneau/libdatachannel.git
    cd libdatachannel
    
  2. 初始化子模块(libjuice 用于 WebRTC 连接):

    git submodule update --init
    
  3. 创建构建目录并编译:

    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 支持。

  1. 克隆代码库:

    git clone https://github.com/parallelcc/FFmpeg-WHIP-WHEP.git
    cd FFmpeg-WHIP-WHEP
    

步骤 4:配置并编译 FFmpeg

配置 FFmpeg 以启用 libdatachannel 和相关功能。

  1. 运行配置脚本:

    ./configure --enable-libdatachannel --enable-gpl --enable-nonfree
    
    配置选项说明
    选项描述
    --enable-libdatachannel启用 libdatachannel 支持 WHIP/WHEP
    --enable-gpl启用 GPL 许可的组件(如某些编解码器)
    --enable-nonfree启用非自由组件(如某些专利编解码器)

    可选配置

    • --enable-libx264:启用 H.264 编码(已在步骤 1 安装)。
    • 其他选项可根据需求添加,参考 FFmpeg 编译指南
  2. 编译 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-tokenyour-whep-url 为实际 WHEP 服务器的令牌和地址。
    • ffplay 是 FFmpeg 的播放工具,用于验证流。
示例服务器
服务器描述URL
TinyWHIPWHIP 测试服务器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 服务器。