← 返回技术文章与笔记

macOS 上 RTMP 推拉流实践

RTMP · FLV 封装 · 发送/接收链路

一、为什么还要做 RTMP

RTMP 在传统直播与推流接入里仍有现实价值:协议成熟、工具链丰富、与 SRS/ZLMediaKit 等服务端对接成本低。对工程侧来说,掌握 RTMP 的打包与收发细节,能快速搭出稳定的推流入口,再衔接转码、录制与分发。

二、工程关注点

三、最小联调闭环

按下面顺序走,基本都能定位到“是推流问题还是服务端问题”。

  1. 本地或远端部署流媒体服务(SRS / ZLMediaKit 等)。
  2. 发送端推流到指定 rtmp:// 地址。
  3. 接收端或播放器验证拉流、音视频同步与关键帧恢复。
  4. 出现异常时,通过二进制检查与日志对照定位封装问题。
# 1) 构建
git clone https://github.com/cgeffect/rtmp_macos.git
cd rtmp_macos
./build.sh   # 或 cmake 构建

# 2) 启动 SRS/ZLMediaKit(示例地址)
# rtmp://127.0.0.1/live/test

# 3) 发送端推流(按项目可执行名调整)
./src/send_flv

# 4) 播放器拉流验证
ffplay rtmp://127.0.0.1/live/test

# 5) 如需拆流调试
./src/recv_flv

实际调试时,先用最简单的一路视频跑通,再加音频,再做 FLV 到 TS/PS/fMP4 的转换实验,问题会更好定位。

四、常见问题与排障思路

hexdump -C ../res/wubai.aac | head -20

五、与 RTP 路线如何分工

在同一套音视频系统里,RTMP 常用于推流接入与传统直播链路;RTP/RTSP 更偏实时交互与低延迟传输。两条路线并不冲突,关键是统一编解码参数、 时间基与观测指标,避免系统边界处反复补锅。

六、工程化建议