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文件是怎么变…...

tomcat端口被占用解决方法
在安装目录的conf下修改server.xml文件,修改后保存重启即可...

全新的训练算法:Reflection 70B进入大众的视野
在2024年9月6日,大模型的圈子迎来了一位新成员——Reflection 70B,它横扫了MMLU、MATH、IFEval、GSM8K等知名的模型基准测试,完美超越了GPT-4o,同时也超越了Claude3.5 Sonnet成为了新的大模型之王,Reflection 70B到底是…...

静态标注rtk文件参数解析
目录 在静态标注中,rtk(Real-Time Kinematic)文件的主要作用 rtk文件包含几种类型数据 具体作用 具体示例 %RAWIMUSA #INSPVAXA $GPRMC 背景: 最近工作中涉及到静态标注 slam相关,因为初入门,对于rtk文件中有很多参数&…...

TensorFlow和PyTorch小知识
TensorFlow和PyTorch是当前最流行的两个开源机器学习库,它们都广泛用于研究和工业界的深度学习项目。下面是对它们的介绍: 1,TensorFlow - **开发背景:** TensorFlow最初由Google Brain Team开发,并于2015年11月开源…...

Java证书信息收集
1.Java二级 【NCRE 二级Java语言程序设计02】考试流程及二级Java大纲_java语言程序设计计算机二级-CSDN博客...

flink写入hudi MOR表
第一步:创建flink内存表从kafka读取数据: DROP TABLE IF EXISTS HUDI_KAFKA_DEBEZIUM_ZHANG; CREATE TABLE IF NOT EXISTS HUDI_KAFKA_DEBEZIUM_ZHANG( ID STRING comment 编码 ,NAME STRING comment 名称 ,PRIMARY KEY(RCLNT,RLDNR,RRCTY,RVERS,RYEAR,…...

智能工厂程序设计 之-2 (Substrate) :三个世界--“存在的意义”-“‘我’的价值的实现” 之2
Q13、我刚看了一下前门前面的讨论。有一段文字您的重新 理解一下。那就是: 对题目 的另一角度( “智能工厂的程序设计”的三个层次词 分别关注的问题 及其 解决 思路的描述)的解释: 三个不同层次(深度)&…...

概要设计例题
答案:A 知识点: 概要设计 设计软件系统的总体结构:采用某种方法,将一个复杂的系统按照功能划分成模块;确定每个模块的功能;确定模块之间的调用关系;确定模块之间的接口,即模块之间…...

注册表模式:使用注册表和装饰器函数的模块化设计
在现代软件开发中,模块化设计是提高代码可维护性和可扩展性的关键技术之一。本文将探讨如何使用注册表(Registry)和装饰器函数(Decorator Function)来实现模块化设计,提升代码的灵活性和可扩展性。 什么是…...

怎样将vue项目 部署在ngixn的子目录下
如果同一服务器的80端口下,需要部署两个或以上数量的vue项目,那么就需要将其中一个vue项目部署在根目录下,其他的项目部署在子目录下. 像这样的配置 访问根目录 / 访问灭火器后台管理,访问 /mall/ 访问商城的后台管理 那么商场的vue项目,这样配置,才能在/mall/下正常访问? 1…...