FFmpeg开发笔记(四十三)使用SRS开启SRT协议的视频直播服务
《FFmpeg开发实战:从零基础到短视频上线》一书在第10章介绍了轻量级流媒体服务器MediaMTX,通过该工具可以测试RTSP/RTMP等流媒体协议的推拉流。不过MediaMTX的功能实在是太简单了,无法应用于真实直播的生产环境,真正能用于生产环境的流媒体服务器还要看SRS或者ZLMediaKit。
SRS是一款国产的开源流媒体服务器,支持RTMP、SRT等主流直播协议,它的安装说明参见之前的文章《Linux环境安装SRS实现视频推流》。结合SRS与ffmpeg实现RTMP协议的推流功能,已在《Linux环境安装SRS实现视频推流》一文中详细介绍,这里单独讲解如何通过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地址推流,详细的集成步骤参见之前的文章《Linux环境给FFmpeg集成libsrt和librist》。
注意,上面命令中的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开发实战:从零基础到短视频上线》一书“1.3 Windows系统安装FFmpeg”的介绍,在个人电脑上安装FFmpeg并打开MSYS的命令行,运行下面的ffplay命令,期望从SRT地址拉流播放。注意,务必确保电脑上的FFmpeg已经集成了libsrt库,否则ffplay无法播放srt链接,详细的集成步骤参见之前的文章《Windows环境给FFmpeg集成libsrt》。
上面的SRT拉流地址与之前的推流地址大同小异,除了把内网IP换成外网IP之外,就是把链接末尾的“m=publish”改成了“m=request”,其中request表示请求也就是用于拉流方。
ffplay运行后弹出播放器窗口,正常播放视频画面和声音。同时观察SRS的服务日志如下所示:
从以上日志可见,SRS通过SRT协议成功实现了视频直播的SRT推拉流功能。
更多详细的FFmpeg开发知识参见
- 点赞
- 收藏
- 关注作者
评论(0)