← 返回技术文章与笔记

macOS 上 RTP 推拉流实践(H.264/H.265/AAC)

RTP/RTCP · SDP · FFmpeg/播放器联调

一、这篇文章讲什么

这篇主要介绍在 macOS 环境下,如何把 H.264 / H.265 / AAC 通过 RTP 做发送与接收,并配套 SDP、RTCP 与 ffplay/VLC 联调,形成可观测、可排障的实验闭环。目标不是「一次做全协议栈」,而是把关键链路跑通并可定位问题。

二、工程能力拆分

从仓库结构看,这类工程通常会拆成几层:

三、最小可运行路径

下面按“从零到能播”的顺序写,适合第一次跑 RTP:

  1. 先构建项目,确保发送/接收可执行文件已生成。
  2. 启动发送端(如 rtp_265_send),确认生成 SDP。
  3. 用 ffplay 打开 SDP,先验证是否有画面/声音。
  4. 再启动接收端(如 rtp_265_recv)对比日志。
  5. 最后加入 RTCP 收发,观察统计与异常反馈。
# 1) 构建(示意)
git clone https://github.com/cgeffect/rtp_macos.git
cd rtp_macos
./build.sh   # 或 cmake -S . -B build && cmake --build build -j

# 2) 发送端(终端A)
./src/rtp_265_send

# 3) 播放器验证(终端B)
ffplay -protocol_whitelist "file,rtp,udp,tcp,crypto,data" ./x265.sdp

# 4) 接收端(终端C,可选)
./src/rtp_265_recv

如果你先想降低复杂度,建议从 H.264 单视频 跑通,再加 AAC,再看 A/V 同步和 RTCP。

四、实现时最容易踩的坑

五、与生产系统的关系

RTP 工程价值通常体现在两端:一端是低延迟实时链路(摄像头、监控、实时互动);另一端是协议互通能力(与 RTSP、GB28181 或媒体服务对接)。 对视频生产系统来说,它是「采集/接入层」的重要能力,后续可衔接转码、录制、回放与分发。

六、建议的工程化增强