SRS4.0源码分析-RTMP延迟 - 弦外之音

/ 0评 / 0

本文采用的 SRS 版本是 4.0-b8 , 下载地址:github


本文主要对 SRS RTMP 直播做延迟测试,然后介绍如何优化 RTMP 的延迟。为了不嵌套界面,介绍一下 ffmpeg 如何抓取某个应用屏幕。

先下载一个秒表程序,ledcount ,运行界面如下:

FFmpeg 抓取 某个 窗口的命令如下:

ffmpeg.exe -f gdigrab -framerate 6 -i  "title=abcds" out2.flv

由于 FFmpeg 不支持中文的窗口名称,所以需要 下载一个软件 Captain ,可以修改窗口的标题。上面我把 窗口标题 修改成 abcds ,这样 ffmpeg 就能抓取了。

注意。Captain 这个软件,是使用鼠标中间的按钮来修改标题的,一定要把鼠标移动到应用上方的菜单栏的位置在点击中间的按钮,才能弹出来修改按钮。

修改如下:



ffmpeg 录制环境已经装备好,下面就用一条命令推流到 SRS 的RTMP 服务器。

ffmpeg.exe -f gdigrab -framerate 6 -i "title=abcds" -f flv rtmp://192.168.0.123/live/livestream

然后用 ffplay 播放 RTMP 流,命令如下:

ffplay -fflags nobuffer -i rtmp://192.168.0.123/live/livestream

上面是 截图得出来的延迟,一共 0.4 秒左右的延迟。

上面 FFplay 使用了 nobuffer,虽然延迟少了,但是可能会有少许不流畅。不开启这个选项延迟一般在 7秒左右延迟。这个是利用大的 buffer 来实现视频播放的流畅性,但是同时延迟会加大。


下面开始优化延迟,参考下面两篇文章进行配置。

1,《低延时直播应用》

2,《RTMP低延时配置》

由于SRS的 低延迟配置 都在 conf/realtime.conf 里面,SRS 启动的时候直接指定这个文件就行。命令如下:

./objs/srs -c ./conf/realtime.conf

再次截图延迟,如下:

延迟 0.5 秒,在局域网内好像没什么差别。这里声明一下,本文采用的测量方法不是严格准确的,推荐看 《延迟的测量


扩展知识:

1,FFmpeg 抓取 整个桌面或者某个特定位置,请看 《FFmpeg从入门到精通》第 7.3 节

相关阅读:

  1. 《FFmpeg 抓取应用窗口》
  2. 《低延时直播应用》
  3. 《RTMP低延时配置》
  4. 延迟的测量

由于笔者的水平有限, 加之编写的同时还要参与开发工作,文中难免会出现一些错误或者不准确的地方,恳请读者批评指正。如果读者有任何宝贵意见,可以加我微信 Loken1。QQ:2338195090。

发表回复

您的电子邮箱地址不会被公开。