自己构建直播视频传输管道:FFmpeg×MediaMTX的实践指南

问题:相机通过RTSP进行对话,但浏览器无法听到

假设我们想要将来自安全摄像头和物联网设备的实时视频显示在Web应用程序中。大部分摄像头通过RTSP(实时流协议)进行传输。但是,从2010年代开始,浏览器停止支持RTSP。换句话说,"摄像头所使用的语言"与"浏览器能够理解的语言"之间的差异是根本问题。

负责这次翻译的是FFmpeg(视频处理的万能工具)和MediaMTX(协议转换服务器)。将这两个结合起来,可以构建专业级的低延迟流媒体管道。

工具说明

FFmpeg:转换各种视频格式的魔法杖

FFmpeg的处理流程:

  • 解复用器:从容器中分离视频和音频
  • 解码:将压缩数据转换为原始帧
  • 过滤:应用缩放、色彩校正等
  • 编码:使用H.264或VP9进行压缩
  • 多路复用:打包到输出容器中

在流媒体应用中,FFmpeg作为输入引擎工作。它从网络摄像头或文件中捕获视频,进行高效编码,并通过RTSP或RTMP将其发送到服务器。

MediaMTX:支持多个客户端的协议中心

FFmpeg是单一输出,但MediaMTX可以同时向多个客户端推送。进一步:

  • 通过 RTSP/RTMP/WebRTC/HLS 接收
  • 为不同客户进行重新打包
  • 将RTSP转换为WebRTC(可在浏览器中播放)
  • 认证・负载均衡・客户端管理

通过一个二进制文件和YAML配置文件,可以处理以往需要多个专用服务器的复杂场景。

实施步骤

第一步:安装工具

Ubuntu/Debian:

sudo apt 更新 sudo apt install autoconf automake build-essential pkg-config libx264-dev libvpx-dev libfdk-aac-dev git clone ffmpeg cd ffmpeg ./configure --enable-gpl --enable-libx264 --enable-nonfree 使 -j$(nproc) sudo make 安装

macOS:

brew install ffmpeg

窗户: 从gydan.dev下载→解压到C:\ffmpeg→添加到系统PATH

MediaMTX v1.15.0也已安装(单个二进制文件,简单)。

第2步:视频文件流式传输

创建 mediamtx.yml:

路径: 测试视频: 来源:出版商

启动 MediaMTX:

MediaMTX mediamtx.yml

使用FFmpeg通过RTSP发送视频:

ffmpeg -re -i video.mp4 -c:v libx264 -preset fast -c:a aac -f rtsp rtsp://localhost:8554/test_video

-re:保持帧率(直播必需) -preset fast:编码速度的平衡

在VLC媒体播放器中确认:媒体 → 打开网络串流 → rtsp://localhost:8554/test_video

第3步:使用网络摄像头进行直播

窗户:

ffmpeg -f dshow -rtbufsize 100M -i video=“集成网络摄像头” -c:v libx264 -preset ultrafast -tune zerolatency -f rtsp rtsp://localhost:8554/webcam

macOS:

ffmpeg -f avfoundation -帧率 30 -video_size 1280x720 -i “0” -c:v libx264 -预设超快 -调整零延迟 -f rtsp rtsp://localhost:8554/webcam

Linux的:

ffmpeg -f v4l2 -i /dev/video0 -c:v libx264 -preset ultrafast -tune zerolatency -c:a aac -f rtsp rtsp://localhost:8554/webcam

-tune zerolatency是重点。实时流媒体优化。

步骤4:在浏览器中播放(WebRTC化)

更新mediamtx.yml:

WebRTC:是的 webrtc地址: :8889 webrtcEncryption:否 webrtcAllowOrigin:'*'

路径: 网络摄像头: 来源:出版商

重新启动MediaMTX,然后在浏览器中打开http://localhost:8889→直播画面将显示在浏览器中。

数据流

  1. 网页摄像头 → 生成实时画面
  2. 将 FFmpeg 编码→ H.264 > RTSP 输出
  3. MediaMTX → RTSP 接收器和 WebRTC 转换
  4. 浏览器 → 使用WebRTC进行实时播放

MediaMTX不进行再编码。只是将H.264流打包到不同协议的容器中。因此实现了低延迟。

本次总结

基本的管道完成:

  • 实现了 FFmpeg 和 MediaMTX
  • 确认视频文件和网络摄像头的流媒体
  • 通过WebRTC成功在浏览器中播放

只有在生产环境中存在挑战:

  • 无认证・无安全性
  • 仅在localhost上运行
  • 支持真实IP摄像头未
  • 无错误处理

第二部分将进行认证添加、IP摄像头连接和互联网支持。

查看原文
此页面可能包含第三方内容,仅供参考(非陈述/保证),不应被视为 Gate 认可其观点表述,也不得被视为财务或专业建议。详见声明
  • 赞赏
  • 评论
  • 转发
  • 分享
评论
请输入评论内容
请输入评论内容
暂无评论