SRS流媒体服务器从入门到精通(其一,环境搭建)

欢迎诸位来阅读在下的博文~
在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力!
江山如画,客心如若,欢迎到访,一展风采
文章目录
- 一、SRS简介
- 二、SRS的应用场景
- 三、环境搭建
- 四、推流和拉流
- 使用ffmepg推流和拉流
- 使用OBS推流(推荐)
- 五、补充
一、SRS简介
SRS(Simple Realtime Server)是一个简单高效的实时视频服务器,支持多种直播和录播场景。SRS由国内开发者创建,是一款开源流媒体服务器软件。它支持RTMP、WebRTC、HLS、HTTP-FLV等多种协议,适用于直播、录播和视频客服等多种场景。
SRS的主要特点包括:
- 高效性能:SRS设计简洁,具有高性能的特点,能够处理大量的并发连接和流媒体数据。
- 多种协议支持:SRS支持多种流媒体协议,包括RTMP、WebRTC、HLS、HTTP-FLV等,能够满足不同场景的需求。
- 易用性:SRS提供了简单的配置文件,用户可以通过修改配置文件来快速部署和定制自己的流媒体服务器。
- 稳定性:SRS在设计和实现上注重稳定性,能够保证长时间稳定运行,适用于生产环境。
- 社区支持:作为一个开源项目,SRS拥有活跃的社区,用户可以在社区中获取支持、分享经验,并参与项目的贡献。
- 扩展性:SRS支持插件机制,用户可以根据需要开发自己的插件来扩展SRS的功能。
SRS适用于多种应用场景,包括但不限于:
- 直播:支持直播流的发布和分发,适用于在线教育、游戏直播、体育赛事直播等。
- 录播:支持视频的录制和点播,适用于视频网站、在线教育平台等。
- 视频客服:支持视频通话和屏幕共享,适用于在线客服、远程协作等。
SRS网址
二、SRS的应用场景
SRS是一个简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、GB28181等协议。传统的视频监控客户端都是Windows PC桌面客户端,现在很多公司需要实现通过Web查看远程的视频监控,此时可以通过RTSP/GB28181推流发送到SRS服务器,然后通过RTMP或者HTTP-FLV协议进行拉流查看远程摄像头的视频。传统的推流端都需要安装应用软件才能实现推流,但是目前也有Web化的趋势,需要通过浏览器网页将音视频画面推送给观众,此时就可以通过WebRTC推流到SRS流媒体服务器,然后观众通过RTMP、HTTP-FLV等方式观看直播。
三、环境搭建
参考环境:Windows10 + VMware虚拟机下配置好Ubuntu20.04(包括网络)、Windows 和 Ubuntu系统都要配置好FFmpeg工具。
ffmpeg的搭建可参考以下博客:
FFmpeg的入门实践系列一
1、SRS的源代码下载:
github源:https://github.com/ossrs/srs.git
码云源:https://gitee.com/ossrs/srs.git (如果GitHub较慢可以使⽤码云的源)
在Ubuntu20.04中,选择一个自定义的文件夹,进入输入以下命令:
git clone -b 4.0release https://gitee.com/ossrs/srs.git
2、进入到trunk文件夹,开始编译
sudo cd srs/trunk
sudo ./configure
sudo make -j4
3、启动服务器
注: -c 后面是srs的系统配置文件,可以修改里面的属性来灵活配置srs系统
./objs/srs -c conf/srs.conf
4、
查看SRS的状态
./etc/init.d/srs status
或者看SRS的日志
tail -n 30 -f ./objs/srs.log
结果如下:

5、关闭服务器
srs服务器默认都是后台运行的,所以要退出,可以输入以下命令:
sudo kill -SIGQUIT srs_pid
至此,环境搭建好了,可以看出,srs的搭建非常容易。
四、推流和拉流
使用ffmepg推流和拉流
Windows10系统充当推流方和拉流方,Linux系统充当服务器,如图:

1、win+R 输入cmd创建命令行
输入:
ffmpeg -re -i fuzhou.mp4 -c copy -f flv rtmp://192.168.159.128/live/livestream
注意:-i 后面是要推流的文件路径,-re 是以输入文件的实际帧率进行推流,保持原始速度,-f 指定输出格式为flv。后面的网络地址要填写linux的网络,其它不变。live是应用实例的名称,而livestream是流名称,这两个都可以在srs系统的配置文件(srs.conf)中更改。
想详细了解ffmpeg的命令,可参考以下博客:
FFmpeg命令详解
2、再次win+R 输入cmd创建命令行
输入:
ffplay rtmp://192.168.159.128/live/livestream
此时,会播放上面的.mp4文件,则说明成功~
使用OBS推流(推荐)
OBS (Open Broadcaster Software) 是一款开源的视频直播和屏幕录制软件。它允许用户捕捉、合成、编码、录制和流式传输视频内容。OBS 广泛应用于游戏直播、在线教育、体育赛事直播、远程会议、实时视频制作等多种场景。
以下是 OBS 的一些主要特点:
- 跨平台:OBS 支持多个操作系统,包括 Windows、macOS 和 Linux。
- 免费开源:OBS 是完全免费的,并且其源代码可以在 GitHub 上找到,任何人都可以自由使用、修改和分发。
- 多源输入:OBS 支持多种输入源,包括:
- 游戏捕获
- 摄像头
- 屏幕捕获
- 媒体播放器(如 VLC)
- 图像源
- 文本源(使用 HTML)
- 实时合成:用户可以将多个输入源组合在一起,创建复杂的场景布局。
- 编码器支持:OBS 支持多种编码器,如 x264、x265、AAC、MP3 等。
- 流式传输:OBS 可以将视频流式传输到多种目的地,包括 RTMP 服务器、YouTube、Twitch、Facebook Live 等。
- 录制:除了直播,OBS 还可以录制视频到本地文件,支持多种格式,如 MP4、FLV、MKV 等。
- 插件系统:OBS 提供了一个插件系统,允许用户安装额外的插件来扩展其功能。
- 社区支持:OBS 拥有一个活跃的社区,用户可以在社区中寻求帮助、分享经验、贡献代码。
OBS 的使用相对简单,用户可以通过以下步骤来设置和使用 OBS: - 下载并安装 OBS。
- 设置场景和输入源。
- 配置输出设置,包括流式传输目的地和录制选项。
- 开始捕获和流式传输。
OBS 是直播和录播领域的热门工具之一,其开源和免费的特点使其成为许多用户和开发者的首选。
OBS官网:https://obsproject.com/download
下载好后,点击如下:


选择本地文件:

然后是重点:(配置服务器地址,当诸位想在b站直播时,使用该软件也是在此地设置b站提供的服务器的)

- 上面的推流码就是流名称,这里是livestream。
最后点击开始直播,就可以推流了。拉流的步骤同上,这里不再多讲。

扩展:如果想推流桌面,或者摄像头的画面,可以在来源中选择:

总之,OBS是一款很好用的推流软件,非常推荐~
五、补充
修改ffplay的缓存,降低延迟
(1)码流分析时间设置,单位为微秒
ffplay -i rtmp://114.215.169.66/live/livestream -analyzeduration 500000
ffplay -i rtmp://114.215.169.66/live/livestream -analyzeduration 10000
(2)减少缓冲
ffplay -i rtmp://114.215.169.66/live/livestream -fflags nobuffer
至此,结束~

望诸位不忘三连支持一下~
相关文章:
SRS流媒体服务器从入门到精通(其一,环境搭建)
欢迎诸位来阅读在下的博文~ 在这里,在下会不定期发表一些浅薄的知识和经验,望诸位能与在下多多交流,共同努力! 江山如画,客心如若,欢迎到访,一展风采 文章目录 一、SRS简介二、SRS的应用场景三、环境搭建…...
Java Native Interface (JNI) 简介
Java Native Interface (JNI) 概述 Java Native Interface (JNI) 是 Java 提供的一种接口,用于允许 Java 应用程序与本地(Native)代码进行交互。通过 JNI,Java 代码可以调用 C/C 等其他语言编写的库,反之亦然。JNI 的主…...
navigator.mediaDevices.getUserMedia检查用户的摄像头是否可用,虚拟摄像头问题
在Web开发中,检查用户的摄像头是否可用是一个常见的需求,尤其是在需要视频聊天或录制视频的应用程序中。navigator.mediaDevices.getUserMedia() API 提供了这一功能,它允许你请求访问用户的媒体设备,如摄像头和麦克风。虽然这个A…...
跨境网红营销SOP流程1.0丨出海笔记
品牌出海利用红人营销基本是标配了,KOL 社交媒体是绝对的带货神器。比如美国歌手蕾哈娜Rihanna 的美妆品牌 Fenty Beauty 上市开卖后40天就达到了1亿美元,火遍全球美妆圈。例子和废话少说,其实大小红人都有用。 之前几位大神已经在出海笔记分…...
Jedis,SpringDataRedis
快速入门 导入依赖 <!--jedis--><dependency><groupId>redis.clients</groupId><artifactId>jedis</artifactId><version>3.7.0</version></dependency><!--单元测试--><dependency><groupId>org.ju…...
增量模型的优点例题
答案:D 解析:增量模型可以快速开发一个样品供客户查看 选项B 早期的增量作为模型,从而可以加强系统后续需求的理解 一开始给客户一个样本,客户根据样品修改需求 选项C 增量模型就是开发一个个增量模型,供客户使用…...
求绝对值
计算并输出一个实数的绝对值。从键盘任意输入一个实数,不使用计算绝对值函数编程计算并输出该实数的绝对值 输入格式: 输入任一实数。 输出格式: 输出的绝对值包含两位小数。 输入样例: 在这里给出一组输入。例如: -2.5输出样例: 在这里给出相应的输出。…...
AlphaNovel的身份验证失败了..........
我的AlphaNovel的这个身份验证失败了,不知道失败原因是什么... 前两周在网上看到这个项目,在国外这个网站搬运国内小说,但是前提是要通过这个身份验证,可是我等了十多天,结果身份验证失败了,有也在做这个的同志吗? 你们身份验证怎么样...
Sapiens:人类视觉模型的基础
文章目录 摘要1、引言2、相关工作3、方法3.1、Humans-300M 数据集3.2、预训练3.3、二维姿态估计3.4、身体部位分割3.5、深度估计3.6、表面法线估计 4、实验4.1、实现细节4.2、二维姿态估计4.3、身体部位分割4.4、深度估计4.5、表面法线估计4.6、讨论 5、结论 摘要 我们介绍了 …...
“健康中国 医路无忧——公益联盟”积极响应,国内首支公益陪诊师志愿队伍正式成立
在快节奏的现代生活中,就医不再是简单的“看病”那么简单。面对复杂的医疗流程、专业的医学术语、以及在陌生环境中的焦虑,患者及家属往往感到无所适从。此时,陪诊服务如同一束光,照亮了就医之路,它的重要性不仅体现在…...
Java 创建对象方法的演变
1、普通 Java 代码 public class Rectangle {private int width;private int length;public Rectangle() {System.out.println("Hello World!");}public void setWidth(int widTth) {this.width widTth;}public void setLength(int length) {this.length length;}…...
Netty中用到了哪些设计模式
Netty作为一个高性能的网络通信框架,里面有很多优秀的代码值得我们学习,今天我们一起看下Netty中用到了哪些设计模式。 一、单例模式 Netty通过 NioEventLoop 将通道注册到选择器,并在事件循环中多路复用它们。其中提供了一个选择策略对象 S…...
第67期 | GPTSecurity周报
GPTSecurity是一个涵盖了前沿学术研究和实践经验分享的社区,集成了生成预训练Transformer(GPT)、人工智能生成内容(AIGC)以及大语言模型(LLM)等安全领域应用的知识。在这里,您可以找…...
Chrome 浏览器插件获取网页 window 对象(方案三)
前言 最近有个需求,是在浏览器插件中获取 window 对象下的某个数据,当时觉得很简单,和 document 一样,直接通过嵌入 content_scripts 直接获取,然后使用 sendMessage 发送数据到插件就行了,结果发现不是这…...
动态规划-分割回文串ⅡⅣ
在本篇博客中将介绍分割回文串Ⅱ以及分割回文串Ⅳ这两个题目。 分割回文串Ⅱ 题目描述 给你一个字符串 s,请你将 s 分割成一些子串,使每个子串都是回文串。 返回符合要求的 最少分割次数 。 示例: 输入:s "aabac" 输…...
Python编码系列—Python项目维护与迭代:持续进化的艺术
🌟🌟 欢迎来到我的技术小筑,一个专为技术探索者打造的交流空间。在这里,我们不仅分享代码的智慧,还探讨技术的深度与广度。无论您是资深开发者还是技术新手,这里都有一片属于您的天空。让我们在知识的海洋中…...
【鸿蒙开发工具报错】Build task failed. Open the Run window to view details.
Build task failed. Open the Run window to view details. 问题描述 在使用deveco-studio 开发工具进行HarmonyOS第一个应用构建开发时,通过Previewer预览页面时报错,报错信息为:Build task failed. Open the Run window to view details.…...
k8s集群部署:容器运行时
1. 卸载旧版本 Docker # 卸载旧版本的 Docker 组件 sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engine注释: 该命令会移除系统中现有的 Docker 及其相关组件࿰…...
PHP7 的内核结构
PHP7 是 PHP 语言的一个重要版本,带来了许多性能提升和语言特性改进。要深入了解 PHP7 的内核,我们需要探讨其设计和实现的关键方面,包括 PHP 的执行模型、内存管理、编译和优化过程等。 1. PHP7 的内核结构 1.1 执行模型 PHP 是一种解释型…...
JVM合集
序言: 1.什么是JVM? JVM就是将javac编译后的.class字节码文件翻译为操作系统能执行的机器指令翻译过程: 前端编译:生成.class文件就是前端编译后端编译:通过jvm解释(或即时编译或AOT)执行.class文件时跨平台的,jvm并不是跨平台的通过javap进行反编译2.java文件是怎么变…...
uniapp 对接腾讯云IM群组成员管理(增删改查)
UniApp 实战:腾讯云IM群组成员管理(增删改查) 一、前言 在社交类App开发中,群组成员管理是核心功能之一。本文将基于UniApp框架,结合腾讯云IM SDK,详细讲解如何实现群组成员的增删改查全流程。 权限校验…...
华为云AI开发平台ModelArts
华为云ModelArts:重塑AI开发流程的“智能引擎”与“创新加速器”! 在人工智能浪潮席卷全球的2025年,企业拥抱AI的意愿空前高涨,但技术门槛高、流程复杂、资源投入巨大的现实,却让许多创新构想止步于实验室。数据科学家…...
相机Camera日志实例分析之二:相机Camx【专业模式开启直方图拍照】单帧流程日志详解
【关注我,后续持续新增专题博文,谢谢!!!】 上一篇我们讲了: 这一篇我们开始讲: 目录 一、场景操作步骤 二、日志基础关键字分级如下 三、场景日志如下: 一、场景操作步骤 操作步…...
转转集团旗下首家二手多品类循环仓店“超级转转”开业
6月9日,国内领先的循环经济企业转转集团旗下首家二手多品类循环仓店“超级转转”正式开业。 转转集团创始人兼CEO黄炜、转转循环时尚发起人朱珠、转转集团COO兼红布林CEO胡伟琨、王府井集团副总裁祝捷等出席了开业剪彩仪式。 据「TMT星球」了解,“超级…...
React19源码系列之 事件插件系统
事件类别 事件类型 定义 文档 Event Event 接口表示在 EventTarget 上出现的事件。 Event - Web API | MDN UIEvent UIEvent 接口表示简单的用户界面事件。 UIEvent - Web API | MDN KeyboardEvent KeyboardEvent 对象描述了用户与键盘的交互。 KeyboardEvent - Web…...
自然语言处理——Transformer
自然语言处理——Transformer 自注意力机制多头注意力机制Transformer 虽然循环神经网络可以对具有序列特性的数据非常有效,它能挖掘数据中的时序信息以及语义信息,但是它有一个很大的缺陷——很难并行化。 我们可以考虑用CNN来替代RNN,但是…...
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别
OpenPrompt 和直接对提示词的嵌入向量进行训练有什么区别 直接训练提示词嵌入向量的核心区别 您提到的代码: prompt_embedding = initial_embedding.clone().requires_grad_(True) optimizer = torch.optim.Adam([prompt_embedding...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
JavaScript 数据类型详解
JavaScript 数据类型详解 JavaScript 数据类型分为 原始类型(Primitive) 和 对象类型(Object) 两大类,共 8 种(ES11): 一、原始类型(7种) 1. undefined 定…...
腾讯云V3签名
想要接入腾讯云的Api,必然先按其文档计算出所要求的签名。 之前也调用过腾讯云的接口,但总是卡在签名这一步,最后放弃选择SDK,这次终于自己代码实现。 可能腾讯云翻新了接口文档,现在阅读起来,清晰了很多&…...
