Skip to content

RTMP推拉流

rtmp简介

RTMP是直播的事实标准,这么多年以来一直是使用最广泛的直播协议。

然而Adobe公司没有一直更新RTMP协议,也没有提交给标准组织比如RFC,因此很多新功能都没有支持,比如HEVC或Opus。 直到2023.03,终于Enhanced RTMP项目建立,开始支持了HEVC和AV1, MMS和OBS已经支持了基于Enhanced RTMP的HEVC编码。

在流的制作方面,最近几年,SRT、WebRTC和SRT增长迅速,很多设备都支持了SRT和RIST协议。你也可以用WebRTC做直播。

在流的分发上,HLS是使用最广泛的协议,所有CDN和设备都支持,比如PC,iOS,Android或平板电脑。当然HLS延迟比较大(3~5s+), 你可以选择HTTP-FLV,HTTP-TS或者WebRTC,如果需要降低延迟。

至今为止,在内容制作领域,RTMP还是使用最广泛的协议。比如你可以用OBS推流到B站、视频号或快手。如果要对接一个广播设备, 或者推流到某个平台,那么RTMP是最好的选择,几乎都会支持。

配置

  1. 在config/mms.yaml中配置rtmp端口:
yaml
rtmp: 
  enabled: on               # 使能
  port: 1935                # 监听的端口
  out_chunk_size: 40960     # 输出给对端的chunk size
  1. 除此之外,需要在config/publish目录中添加推流域名的配置test.publish.com.yaml,程序根据文件名来判断域名,请和文件内的name配置项保持一致,最简化配置如下:
yaml
type: publish                   # 域名类型(publish表示推流,play表示拉流)
name: test.publish.com          # 域名名称
apps:
  - name: app                   # 接入点名称(可以有多个)
  1. 还需要配置播放域名,在config/play目录中添加播放域名配置test.play.com.yaml,最简化配置如下:
yaml
type: play                        # 域名类型(publish表示推流,play表示拉流)
name: test.play.com               # 域名名称
publish_domain: test.publish.com  # 绑定的推流域名(播放时,去哪个域名下获取源流)
apps:
  - name: app                     # 接入点名称
  1. 当然,这两个域名,是自己定义的,所以需要在host中配置下dns(正式环境这个交给dns调度服务器来就近接入):
192.168.108.130 test.publish.com
192.168.108.130 test.play.com

推拉流

  1. 配置好后,启动服务器:
shell
../bin/mms-live-server -c ../bin/config -d

-d表示日志都打印在控制台

  1. 然后启动obs推流,填写推流地址:rtmp://test.publish.com/app/test进行推流
  2. windows下启动power shell,请提前安装好ffmpeg或者vlc,执行
ffplay rtmp://test.play.com/app/test

进行播放

  1. 注意:如果使用ffplay rtmp://test.publish.com/app/test播放,会失败

Released under the MIT License.