centos 搭建SRS 流媒体服务

系统管理员 2023-09-27 15:13 88阅读 0赞

目的:

最近公司有一个流媒体项目交给我负责,其中包括一项直播功能,原本使用的是ffmpeg进行推流、拉流操作。但是在服务端频繁启动命令很麻烦。查阅资料发现目前主流技术包括red5,srs,nginx插件,其中srs的性能最好,并且开源的作者一直在维护这个项目,并且在4.0版本后支持webrtc协议,那么现在选型为srs作为直播的技术。

一、搭建srs服务器:以centos7服务器为例

1.下载srs服务器

  1. git clone -b 4.0release https://gitee.com/ossrs/srs.git

若报错:

  1. bash: git: command not found...

61b3bb186b6f2a3594b65d68775aebd0.png

提示的错误就是我没有在Linux上安装git,执行以下操作安装git:

  1. yum install -y git

安装完成后,再执行步骤1操作。

2.编译,srs几乎所有的操作都需要在srs/trunk下进行操作

  1. cd srs/trunk
  2. ./configure
  3. make
  1. 启动服务器

默认srs.conf文件内容如下,可根据实际情况修改。

6f748aa8150f5011c3876000b51067c2.png

  1. ./objs/srs -c conf/srs.conf

4.判断srs是否正常运行

  1. ./etc/init.d/srs status

5.查看日志

  1. tail -f ./objs/srs.log

6.测试是否成功,向srs服务器进行推流,可使用ffmpeg或者obs

6.1 使用ffmpeg,占用资源更少。

  1. ffmpeg -re -i ./doc/source.flv -c copy -f flv -y rtmp://localhost/live/livestream

6.2 使用obs推流

二、OBS下载地址:https://obsproject.com/download

1:直播画面选择

在来源+中,选择要推送的画面,如果有摄像头或者摄像机,则添加“视频采集设备”,然后选择相应的摄像头名称即可。

我这里没摄像头,选择自己的电脑桌面直播推送,及“显示器采集”。

799e348576752e21316d60f9c4aceb65.png

2:设置流媒体服务器

在右下方的 设置 >> 推流 >> 服务 >> 自定义。

填写流媒体服务器地址,我这里是: rtmp://192.168.2.246/live/

串流密钥随便填写即可,这里我填写的是:livestream。

所以最后播放地址为:rtmp://192.168.2.246/live/livestream

907156e197d1174ce9d8a0d5ccf858f0.png

3:推送直播画面

配置完成后,点击 “开始推流” 即可推送画面。没有报错,说明推送成功,同时下方会有相关信息,如cpu之类的。

75d6569b6e6cb3bc2769c11c27dacc3e.png

在浏览器 http://192.168.2.246:8080/ 打开控制台,可以看到推送的流信息。

b7bce48e9e3191e4ff8d6cc10a091345.png

点击播放视频,可以看到,刚才的推送画面了。后面加flv,是因为推流拉流都是用的RTMP。

所以RTMP流的播放地址为:rtmp://192.168.2.246/live/test-livestream.flv

2f9a524f6b7feef6a6208d4d45394611.png

三、RTMP低延时配置

以上基本的直播推流拉流,配置完成。但是测试,延迟还是很大。

根据直播画面和本地时间对比,可以发现延迟差不多有6秒左右,不是很正常。RTMP流,正常延迟时间为1到3秒左右,所以还需要配置。

1:默认配置文件

由于我们以默认的配置文件启动,即srs.conf 这个配置文件。默认配置文件如下:

  1. ubuntu@ubuntu:~/srs/trunk$ cat conf/srs.conf
  2. # main config for srs.
  3. # @see full.conf for detail config.
  4. listen 1935;
  5. max_connections 1000;
  6. #srs_log_tank file;
  7. #srs_log_file ./objs/srs.log;
  8. daemon on;
  9. http_api {
  10. enabled on;
  11. listen 1985;
  12. }
  13. http_server {
  14. enabled on;
  15. listen 8080;
  16. dir ./objs/nginx/html;
  17. }
  18. rtc_server {
  19. enabled on;
  20. listen 8000; # UDP port
  21. # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate
  22. candidate $CANDIDATE;
  23. }
  24. vhost __defaultVhost__ {
  25. hls {
  26. enabled on;
  27. }
  28. http_remux {
  29. enabled on;
  30. mount [vhost]/[app]/[stream].flv;
  31. }
  32. rtc {
  33. enabled on;
  34. # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc
  35. rtmp_to_rtc off;
  36. # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp
  37. rtc_to_rtmp off;
  38. }
  39. }

2:更改配置文件

根据官方文档,可以更改配置文件,低延迟配置,在vhost __ defaultVhost __ 添加以下配置。具体原理可以参考官方文档。

  1. tcp_nodelay on;
  2. min_latency on;
  3. play {
  4. gop_cache off;
  5. queue_length 10;
  6. mw_latency 100;
  7. }
  8. publish {
  9. mr off;
  10. }

最终配置文件为:

  1. listen 1935;
  2. max_connections 1000;
  3. #srs_log_tank file;
  4. #srs_log_file ./objs/srs.log;
  5. daemon on;
  6. http_api {
  7. enabled on;
  8. listen 1985;
  9. }
  10. http_server {
  11. enabled on;
  12. listen 8080;
  13. dir ./objs/nginx/html;
  14. }
  15. rtc_server {
  16. enabled on;
  17. listen 8000; # UDP port
  18. # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#config-candidate
  19. candidate $CANDIDATE;
  20. }
  21. vhost __defaultVhost__ {
  22. hls {
  23. enabled on;
  24. }
  25. http_remux {
  26. enabled on;
  27. mount [vhost]/[app]/[stream].flv;
  28. }
  29. rtc {
  30. enabled on;
  31. # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtmp-to-rtc
  32. rtmp_to_rtc off;
  33. # @see https://ossrs.net/lts/zh-cn/docs/v4/doc/webrtc#rtc-to-rtmp
  34. rtc_to_rtmp off;
  35. }
  36. tcp_nodelay on;
  37. min_latency on;
  38. play {
  39. gop_cache off;
  40. queue_length 10;
  41. mw_latency 100;
  42. }
  43. publish {
  44. mr off;
  45. }
  46. }

3:重载配置文件测试

配置完成后,reload重载配置,完成。

  1. ./etc/init.d/srs reload

412f08266d842cc21ce2005cfdf20702.png

然后再次用obs推流拉流,查看效果,延迟为2秒左右,在正常延迟范围内。

发表评论

表情:
评论列表 (有 0 条评论,88人围观)

还没有评论,来说两句吧...

相关阅读

    相关 SRSWebRTC媒体服务器

    WebRTC经过这么多年的发展,目前已经比较成熟的协议之一,播放也比较稳定,协议也已经成为了RFC,相应的开源项目也越来越多,但是基于WebRTC协议的部署简单,性能强悍,功能

    相关 centos SRS 媒体服务

    目的: 最近公司有一个流媒体项目交给我负责,其中包括一项直播功能,原本使用的是ffmpeg进行推流、拉流操作。但是在服务端频繁启动命令很麻烦。查阅资料发现目前主流技术包括re