SRS是一款国产的开源流媒体服务器,支持RTMP、SRT等主流直播协议。本文讲解如何通过 SRS 与ffmpeg 实现 SRT 协议的推流功能。
SRS在编译和启动的时候已经默认支持SRT,查看SRS专用于SRT服务的配置文件srt.conf,找到srt部分的配置信息如下,可见SRS默认把10080端口分配给SRT协议。
除此以外,还需在srt.conf的“vhost __defaultVhost__”节点内部添加下面一行:
该行配置的作用是开启缓存关键帧,实际应用记得设置为on,否则客户端拉流找不到关键帧就无法渲染画面。
接着运行下面命令即可启动专用于SRT协议的SRS流媒体服务器。
在SRS启动之后,运行下面的ffmpeg命令即可将视频文件向SRT地址推流。注意,务必确保Linux服务器上的FFmpeg已经集成了libsrt库,否则ffmpeg无法向srt地址推流。
注意,上面命令中的srt地址后半段为“r=live/test,m=publish”,其中“r=live/test”表示SRT的服务名称叫做“live/test”,而“m=publish”表示该地址属于发布功能也就是给推流方使用。
SRS对视频源文件的封装格式也有要求,不仅要求源文件为ts格式,还要求推流格式也为ts格式,所以ffmpeg命令中添加了“-f mpegts”表示转换成mpeg的ts流格式。如果源文件不是ts格式,或者没转成mpegts格式,后续通过ffplay播放srt链接都会报下面的错误。
运行ffmpeg的SRT推流命令之后,SRS输出以下的日志信息,可见其SRT推流功能正常运行。
安装FFmpeg并打开MSYS的命令行,运行下面的ffplay命令,期望从SRT地址拉流播放。注意,务必确保电脑上的FFmpeg已经集成了libsrt库,否则ffplay无法播放srt链接。
上面的SRT拉流地址与之前的推流地址大同小异,除了把内网IP换成外网IP之外,就是把链接末尾的“m=publish”改成了“m=request”,其中request表示请求也就是用于拉流方。
音视频开发视频推荐:
ffplay运行后弹出播放器窗口,正常播放视频画面和声音。同时观察SRS的服务日志如下所示:
从以上日志可见,SRS通过SRT协议成功实现了视频直播的SRT推拉流功能。