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是最好的选择,几乎都会支持。
配置
- 在config/mms.yaml中配置rtmp端口:
yaml
rtmp:
enabled: on # 使能
port: 1935 # 监听的端口
out_chunk_size: 40960 # 输出给对端的chunk size
- 除此之外,需要在config/publish目录中添加推流域名的配置test.publish.com.yaml,程序根据文件名来判断域名,请和文件内的name配置项保持一致,最简化配置如下:
yaml
type: publish # 域名类型(publish表示推流,play表示拉流)
name: test.publish.com # 域名名称
apps:
- name: app # 接入点名称(可以有多个)
- 还需要配置播放域名,在config/play目录中添加播放域名配置test.play.com.yaml,最简化配置如下:
yaml
type: play # 域名类型(publish表示推流,play表示拉流)
name: test.play.com # 域名名称
publish_domain: test.publish.com # 绑定的推流域名(播放时,去哪个域名下获取源流)
apps:
- name: app # 接入点名称
- 当然,这两个域名,是自己定义的,所以需要在host中配置下dns(正式环境这个交给dns调度服务器来就近接入):
192.168.108.130 test.publish.com
192.168.108.130 test.play.com
推拉流
- 配置好后,启动服务器:
shell
../bin/mms-live-server -c ../bin/config -d
-d表示日志都打印在控制台
- 然后启动obs推流,填写推流地址:rtmp://test.publish.com/app/test进行推流
- windows下启动power shell,请提前安装好ffmpeg或者vlc,执行
ffplay rtmp://test.play.com/app/test
进行播放
- 注意:如果使用ffplay rtmp://test.publish.com/app/test播放,会失败