SRS:构建实时免费视频服务器的全方位指南

news/2024/11/6 8:03:35/

SRS(Simple Realtime Server)是一个开源的、基于MIT协议的实时视频服务器,以其简单、高效而著称。它支持多种流媒体协议,包括RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等,使其成为直播和WebRTC领域的理想选择。
在这里插入图片描述

功能与协议支持
SRS的核心功能在于流的接收和分发,它支持将RTMP或SRT等协议转换为HLS、HTTP-FLV或WebRTC等,以适应不同的应用场景。
在直播领域,SRS能够处理RTMP、HLS、SRT、MPEG-DASH和HTTP-FLV等协议,而在WebRTC领域,则支持WebRTC、WHIP和WHEP等协议。

环境准备

推荐使用Ubuntu 20或以上的操作系统进行SRS的搭建。腾讯及阿里轻云2核2G的均可使用,大流量对带宽有一定的要求。大流量最好是采用云服务器(非轻云,可支持大流量)

下载源码

git clone -b develop https://gitee.com/ossrs/srs.git

编译安装

  1. 切换到SRS的trunk目录:
    cd srs/trunk
    
  2. 执行配置脚本:
    ./configure
    
  3. 编译SRS:
    make
    

启动服务器

启动SRS服务器

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

检查SRS状态

可以通过以下两种方式检查SRS是否成功启动:

  1. 访问Web界面:打开浏览器,输入 http://localhost:8080/ 查看SRS的控制台界面。

  2. 查看SRS的状态命令:

    ./etc/init.d/srs status
    
  3. 查看SRS的日志:

    tail -n 30 -f ./objs/srs.log
    

SRS运行示例

如果SRS正在运行,你将看到类似于以下的输出:

$ ./etc/init.d/srs status
SRS(pid 90408) is running.                                 [  OK  ]$ tail -n 30 -f ./objs/srs.log
[2021-08-13 10:30:36.634][Trace][90408][12c97232] Hybrid cpu=0.00%,0MB, cid=1,1, timer=61,0,0, clock=0,22,25,0,0,

以上步骤完成后,SRS直播服务器将成功运行,你可以开始推流和观看直播流了。

安装目录与服务状态检查

首先,我们需要安装SRS,并检查其服务状态。以下是安装目录和检查服务状态的步骤:

  1. 进入SRS安装目录:

    cd /srv/srs/trunk
    
  2. 查看端口占用情况:

    lsof -i :8080
    
  3. 查看SRS服务状态:

    ./etc/init.d/srs status
    
  4. 使用指定配置启动SRS:

    ./objs/srs -c conf/srs.conf
    
  5. 启动SRS服务:

    ./etc/init.d/srs start
    

启动后的平台地址为:http://127.0.0.1:8080/

本地Win10电脑推流

在Windows 10上,我们可以使用OBS Studio进行推流。以下是添加媒体源和推流的步骤:

  1. 在OBS Studio中添加媒体源。
  2. 启动推流。

在这里插入图片描述
在这里插入图片描述

拉流工作与FFmpeg命令

linux安装ffmpeg(可使用不编译的)
ffmpeg启动
## ffmpeg -i rtmp://127.0.0.1/live/livestream -c copy -f segment -segment_time 5 stream_piece_%d.mp4 #启动拉流
FFmpeg命令用于将RTMP流媒体源(在本例中为rtmp://127.0.0.1/live/livestream)以分段的方式保存为一系列的MP4文件。下面是命令中各参数的说明:

  • -i rtmp://127.0.0.1/live/livestream:指定输入流媒体地址,这里的rtmp://127.0.0.1/live/livestream表示本机上的一个实时流。
  • -c copy:表示不进行重新编码,直接复制流媒体数据。这意味着输出的视频和音频数据的编码格式与输入流相同。
  • -f segment:指定输出格式为“segment”,即分段输出。这意味着FFmpeg会将输入流分割成多个片段。
  • -segment_time 5:设置每个输出片段的持续时间。在这个例子中,每个片段的长度是5秒。
  • stream_piece_%d.mp4:这是输出文件名的格式。%d是一个占位符,表示片段的序号,FFmpeg会为每个输出片段分配一个递增的数字。因此,输出的文件名将是stream_piece_1.mp4、stream_piece_2.mp4等。

在这里插入图片描述

在OBS停止推流或视频播放结束都算是推流结束。
推流结束后,ffmpeg运行就结束了。
会在目录内有一个stream_price_1.mp4,…,stream_price_30.mp4批量的mp4下载本地电脑,点开就可以播放了。
在这里插入图片描述

SRS配置与HTTP回调

SRS支持HTTP回调,可以用于流的鉴权和业务定制。以下是配置和使用HTTP回调的步骤:

- SRS的回调事件包括:

  • on_publish: 当客户端发布流时,譬如flash/FMLE方式推流到服务器
  • on_unpublish: 当客户端停止发布流时
  • on_play: 当客户端开始播放流时
  • on_stop: 当客户端停止播放时
  • on_dvr: 当DVR录制关闭一个flv文件时
  • on_hls: 当HLS关闭一个TS文件时

- 使用PHP处理SRS的回调,例如:

$body = json_decode(file_get_contents('php://input'));
echo json_encode(array("code"=>0, "msg"=>"OK"));
##未做验证
  1. 测试回调接口,确保返回正确的状态码和内容。

接口srs_on_publish正确返回code:0
/srv/srs/trunk/conf/srs.conf
vhost defaultVhost {

http_hooks {
enabled on;
on_publish https://aaa.ggixxx.com/web-api/open/srs_on_publish; #域名是虚拟的
}

}

推流不成功,如何查错

1, 问题一

root@VM-16-6-ubuntu:/srv/srs/trunk# tail -n 1000 -f ./objs/srs.log | grep api
没有发现在有过滤api的,表示api接口有问题。

2,常犯的错误验证接口是 POST,不是GET

试控流接口:

$ curl https://dou.ggiooo.com/web-api/open/srs_on_publish -s -X POST -H "Content-type:applicatin/json"
{"code":-1,"msg":"error"}  #表示没有权限不能收流$ curl https://dou.ggiooo.com/web-api/open/srs_on_publish -s -X POST -H "Content-type:applicatin/json"
{"code":1}  #输出1,或code=1表示有权限推流

以上修改了接口,需要重启

root@VM-16-6-ubuntu:/srv/srs/trunk# ./objs/srs -c ./conf/srs.conf

结语

SRS是一个功能强大的实时视频服务器,它支持多种流媒体协议和功能,如推流、拉流、转码、截图和流转发。通过详细的配置和测试,我们可以利用SRS构建一个高效、稳定的直播系统。希望这篇文章能帮助你更好地理解和使用SRS。


http://www.ppmy.cn/news/1544756.html

相关文章

如何处理vue项目中的错误

在Vue项目中处理错误是一项重要的工作,确保应用程序的健壮性和良好的用户体验。常见的错误处理方法包括以下几种: 1. 全局错误处理 Vue 提供了 errorCaptured 钩子和 errorHandler 处理全局错误: Vue.config.errorHandler (err, vm, info…

MySQL 和 PostgreSQL 的对比概述

MySQL 和 PostgreSQL 是两种广泛使用的开源关系型数据库管理系统(RDBMS),它们各自有其特点和优缺点。以下将从多个方面对它们进行详细比较。 1. 介绍 MySQL: MySQL 由瑞典公司 MySQL AB 开发,2008 年被 Sun Microsyst…

什么是Scaling Law,谈谈你对它的理解

1. 什么是Scaling Law 1.1 Scaling Law的目标 Having a sense of the capabilities of a model before training can improve decisions around alignment, safety, and deployment. — GPT4 Technical Report 在训练之前了解模型的能力,以改善关于大模型的对齐、…

鸢尾博客项目开源

1.博客介绍 鸢尾博客是一个基于Spring BootVue3 TypeScript ViteJavaFx的客户端和服务器端的博客系统。项目采用前端与后端分离,支持移动端自适应,配有完备的前台和后台管理功能。后端使用Sa-Token进行权限管理,支持动态菜单权限,服务健康…

基于Spring Boot的信息学科平台系统开发与优化

6系统测试 6.1概念和意义 测试的定义:程序测试是为了发现错误而执行程序的过程。测试(Testing)的任务与目的可以描述为: 目的:发现程序的错误; 任务:通过在计算机上执行程序,暴露程序中潜在的错误。 另一个…

【Unity】Unity拖拽在Android设备有延迟和卡顿问题的解决

一、介绍 在制作Block类游戏时,其核心的逻辑就是拖拽方块放入到地图中,这里最先想到的就是Unity的拖拽接口IDragHandler,然后通过 IPointerDownHandler, IPointerUpHandler 这两个接口判断按下和松手,具体的实现逻辑就是下面 public void On…

springboot yml文件数据源出现警告/报黄/数据库配置警告问题

1、看一下数据源的依赖是不是都引入完整了 2、看一下数据源是否有拼写错误 上图就是数据源拼写错误

23使用APT/YUM/DNF等工具管理软件包

每天五分钟学Linux | 第二十三课:使用APT/YUM/DNF等工具管理软件包 大家好!欢迎再次来到我们的“每天五分钟学Linux”系列教程。在前面的课程中,我们学习了如何编写带有控制结构的Shell脚本。今天,我们将探讨如何使用Linux中的软…