流媒体服务器一:使用成熟的流媒体SRS 搭建 RTMP流媒体服务器

news2024/11/20 11:31:00

1 安装和测试srs流媒体服务器

服务器:SRS(Simple RTMP Server,⽀持RTMP、HTTP-FLV,HLS)
推流端:ffmpeg + OBS
拉流端:ffplay +VLC + srs播放器

1.1 安装srs流媒体服务器

官网

SRS (Simple Realtime Server) | SRS
码云的源速度快: https://gitee.com/winlinvip/srs.oschina.git
github的源速度慢: https://github.com/ossrs/srs .git

第⼀步,获取SRS。

官网说明如下:

Git | SRS

将官网上废话删除,直接写关键点

0.我们在linux 上先创建一个文件夹放置SRS的源码,mkdir srs_source3.0

这个名字是随便取的,之所以取3.0,是因为学习的教程中就是用3.0教授的,实际版本已经有5.x了。

1:进入到 srs_source3.0文件夹,然后执行下面的命令。命令的意思下载SRS,

cd  srs_source3.0

git clone -b develop https://gitee.com/ossrs/srs.git && 
cd srs && git remote set-url origin https://github.com/ossrs/srs.git

由于上述命令有个 cd srs,因此执行完毕后,会直接进入到srs 目录

2:下载后需要checkout 到你要的branch,可以这样理解,你工作的时候,有可能公司的代码是基于SRS3.0开发的,那么你最好下载一个SRS3.0的版本,那么checkout就是帮你做这件事情的。

我们可以通过 git branch -a 看到SRS对应的版本有哪些。

cd trunk
git branch -a

我们可以看到目前SRS支持您切换的版本有好多,看官网的说明,3.0,  4.0,  5.0 都是稳定的版本。

3.我们切换到remotes/origin/3.0release 这个版本

官网的说明如下:如果是3.0的功能,更新代码后要改变到3.0分支:

注意的是git pull 可能会链接不上网络,因为你不会翻墙,当git pull 链接不上网络的时候,可以直接git checkout 3.0release

git pull && git checkout 3.0release

也可以直接命名您的当前branch 为3.0,实际上也是从remotes/origin/3.0release上获得的

git checkout -b 3.0 remotes/origin/3.0release

我们再次看一下  git branch 

注意的是:我们是需要下载到linux 下,而不是windows 下。

DASH 部署 | SRS


 

第⼆步,编译SRS。

cd  trunk

./configure && make

3.0在build 的时候,可能遇到的问题,可以参考如下两个博客

win11下,RTMP流媒体服务器保姆级教程-CSDN博客

https://www.cnblogs.com/6min/p/13960072.html

可以按照上述的方法fix,也可以checkout 到5.0,再 ./configure && make

如果正确make完成,编译的命令完成如下。

如果正确make 完成,则会在trunk 下 生成 objs文件夹

第三步,编写SRS配置⽂件。详细参考RTMP分发

将以下内容保存为⽂件,譬如 conf/rtmp.conf ,服务器启动时指定该配置⽂件(srs的conf⽂件夹有该 ⽂件)。
listen              1935; //这个是rtmp 的端口
max_connections     1000; // 这个是支持的同时连接的最大连接数量
#daemon              off;  // 是否是 守护进程,但是老师说要注释掉,不注释 运行时会有error
#srs_log_tank        console;  //  这里行也有注释掉,老师说,不注释  运行时会有 error
vhost __defaultVhost__ {
}

目录是在/home/hunandede/srs_source/srs/trunk/conf/rtmp.conf

实际上,对于SRS,所有的配置都在 conf下面,各式各样的都能配置,功能还是很强大

第四步,启动SRS。

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

如果我们没有注释这两行,会有如下红色部分的error

#daemon              off;  // 是否是 守护进程,但是老师说要注释掉,不注释 运行时会有error
#srs_log_tank        console;  //  这里行也有注释掉,老师说,不注释  运行时会有 error

如果我们将这两行注释了,则会正常运行

我们可以通过sudo lsof -i:1935 查看1935  端口谁再使用

我们可以看到 使用 端口号 为   1935  的进程是那个,可以看到 PID 是 51636

然后,我们可以使用 sudo kill -9 51636 将这个进程杀死

然后再查看谁在占用 1935 端口号,就发现没有人在用了

这时候我们再使用  ./objs/srs -c conf/rtmp.conf 运行srs

运行起来后,提示  you can check SRS by : tail -n 30 -f ./objs/srs.log

看后最后30行

我们直接使用 tail  -f ./objs/srs.log,看全部

1.2 测试srs流媒体服务器

第一步要将 ubutun 的网络模式设置为桥接模式

到这里,我们已经启动了SRS 服务器。那么这个服务器

第五步,启动推流编码器。详细参考RTMP分发

使⽤FFMPEG命令推流:在windows端推流,可以调用ffmpeg 的命令
 
ffmpeg -re -i rtmp_test_hd.flv -vcodec copy -acodec copy -f flv -y rtmp://192.168.1.11/live/livestream

推流
ffmpeg -re -i D:/yinshipin/source.200kbps.768x320.flv -vcodec copy -acodec copy -f flv -y rtmp://192.168.31.251/study/acha

这个意思是,将D:/yinshipin/source.200kbps.768x320.flv 文件,推流给服务器,而服务器的地址是rtmp://192.168.31.251/study/acha

-re 参数 设置 以实时的速度 读取 输入文件 , 如 : 输入视频的长度是 3 分钟 , 那么 使用 3 分钟的时间来处理这个视频 , 不能用最快速度处理完 , 该设置确保了推流的速度与视频播放的速度相匹配 ;
-i input.mp4 参数 设置 输入文件名称是 input.mp4 , 此处也可以是 实时的录屏 ;

/study/acha 这个名字在这里是乱取的,但是这个应该就有规则,或者有一个默认的规则。实际上后面学习到的nginx什么的,确实是有一定的规则的。

后面再学习nginx上配置 rtmp的时候,如下的可以参考
rtmp://39.105.129.233/myapp/ 参数 , rtmp 是 流媒体协议 , 39.105.129.233 是流媒体服务器 , myapp 是在 流媒体服务器 的 nginx.conf 中配置的 rtmp / server / application 配置中配置的应用名称 ;


拉流
ffplay rtmp://192.168.31.251/study/acha

注: 上述命令中的flv完整路径,以及srs server ip,⼤家根据情况⾃⾏替换为实际值。 另外:默认情况下
srs的rtmp采⽤1935端⼝,如果该端⼝被占⽤或修改了srs.conf中的端⼝,注意根据情况调整;防⽕墙如 果开了,也要检测下1935是否允许访问。

第六步,观看RTMP流。详细参考RTMP分发

使用ffplay 测试拉流。RTMP流地址为:ffplay rtmp://192.168.31.251/study/acha
直接在windows上执行 ffplay rtmp://192.168.31.251/study/acha
可以使⽤VLC观看。
或者使⽤在线SRS播放器播放: srs-player
SRS
但是测试这个不行,怀疑和 翻墙有关系

1.3  使⽤OBS推流测试流媒体服务器SRS

第七步:使用OBS推流

ffmpeg的命令⾏⽅式不太友好,推荐使⽤主流的OBS开源推流软件,可从官⽹ https://obsproject.com/
下载最新版本,⽬前很多⽹络主播都是⽤它做直播。该软件⽀持本地视频⽂件以及摄像头推流。
或者使⽤: https://pc.qq.com/detail/4/detail_23604.html 去下载。
我们这里的目的是选择一个文件通过OBS发送到 SRS服务器。
然后再通过vlc 通过拉流的形式播放
1.打开OBS,添加一个媒体文件,并且这里将 桌面的声音和 麦克风的声音关闭
这个名字 "电影=制胜奇兵" 是随便取的一个名字
由于选择的视频比较短,因此勾选了 循环,这个其实可以勾选,也可以不勾选
这里会提示你选择 大小,我们默认就好。
然后重要的来了,选择设置,
在直播 选项中, 服务选择 为"自定义"
服务器填写 linux 中的地址 movie 是随便填写的,
推流码 也是随便填写的。
使用身份认证应该是你 linux的账号和密码
2.使用 vlc 播放
地址为:
rtmp://192.168.31.251/movie/zhishengqibing
成功
8.

第八步:使用OBS 摄像头推流

跟上⾯的其实差不多,区别只是添加“视频捕捉设备”

1.4 更多设置

参⻅: OBS 推流 https://cloud.tencent.com/document/product/267/32726

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1954830.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

大模型算法面试题(十四)

本系列收纳各种大模型面试题及答案。 1、微调后的模型出现能力劣化,灾难性遗忘是怎么回事 微调后的模型出现能力劣化,灾难性遗忘(Catastrophic Forgetting)是一个在机器学习领域,尤其是在深度学习和大模型应用中频繁出…

【SpringBoot】6 全局异常捕获

介绍 在项目开发中,如果每个 Controller 都增加 try catch 方法去捕获异常及处理,就会导致代码变得很繁琐、效率低下,而大部分异常是不能直接向外抛出,需要有个统一的显示处理方法,因此需要加上全局异常捕获统一获取并…

深度学习中常用损失函数介绍

选择正确的损失函数对于训练机器学习模型非常重要。不同的损失函数适用于不同类型的问题。本文将总结一些常见的损失函数,并附有易于理解的解释、用法和示例 均方误差损失(MSE) loss_fn nn.MSELoss()py均方误差(Mean Squared Error,简称 MSE…

Navidrome音乐服务器 + 音流APP = 释放你的手机空间

20240727 By wdhuag 目录 前言: 参考: Navidrome音乐服务器 Demo试用: 支持多平台: 下载: 修改配置: 设置用NSSM成服务启动: 服务器本地访问网址: 音流 歌词封面API&am…

Golang | Leetcode Golang题解之第292题Nim游戏

题目: 题解: func canWinNim(n int) bool {return n%4 ! 0 }

网站打包封装成app,提高用户体验和商业价值

网站打包封装成app的优势 随着移动互联网的普及,用户对移动应用的需求越来越高。网站打包封装成app可以满足用户的需求,提高用户体验和商业价值。 我的朋友是一名电商平台的运营负责人,他曾经告诉我,他们的网站流量主要来自移动…

vite + xlsx + xlsx-style 导出 Excel

如下 npm i 依赖 npm i xlsxnpm i xlsx-style-vite1、简单的使用:.vue文件中使用 const dataSource ref([]) // 数据源const columns [{title: 用户名,key: userName,width: 120,},{title: 用户组,key: userGroup,width: 120,},{title: 状态,key: enable,width: …

MySQL 视图与事务

文章目录 视图事务事物的四大特性(ACID)事务的开启和结束事物隔离级别现象脏读不可重复度幻读 隔离级别读未提交(READ UNCOMMITTED)读提交 (READ COMMITTED)可重复读 (REPECTABLE READ)串行化 (SERIALIZABLE) 查看与设置事务隔离级别重复读的…

【前端 13】Vue快速入门

Vue快速入门 在现代Web开发中,尽管通过HTML、CSS和JavaScript我们能够构建出美观且功能丰富的页面,但随着项目规模的增大,这种传统的开发方式在效率上逐渐显得力不从心。为了提高开发效率,前端开发者们引入了多种框架和库&#x…

Python酷库之旅-第三方库Pandas(050)

目录 一、用法精讲 181、pandas.Series.var方法 181-1、语法 181-2、参数 181-3、功能 181-4、返回值 181-5、说明 181-6、用法 181-6-1、数据准备 181-6-2、代码示例 181-6-3、结果输出 182、pandas.Series.kurtosis方法 182-1、语法 182-2、参数 182-3、功能 …

异步通信方式的两种消息传输模型

文章目录 一、点对点模型1.1 什么是点对点模型1.2 点对点模型的特点 二、发布订阅模型2.1 什么是发布订阅模型2.2 发布订阅模式的日常案例2.3 发布订阅模型的特点 三、总结参考资料 一、点对点模型 1.1 什么是点对点模型 点对点模型(也叫队列模型) 1.2…

Shiro安全框架与SpringBoot的整合(下)

目录 一、整合前的配置 1.1 导入shiro依赖 1.2 config配置 1.2.1 ShiroConfig(⭐) 1.2.2 MyConfig(拦截器配置) 3. 拦截器(LoginInterceptor) 二、认证登录 2.1. controller 2.2 service和serviceImpl(不用) 2.3 mapper …

[Meachines] [Easy] Blocky Jar包反编译

信息收集 IP AddressOpening Ports10.10.10.37TCP:21,22,80,25565 $ nmap -p- 10.10.10.37 --min-rate 1000 -sC -sV PORT STATE SERVICE VERSION 21/tcp open ftp ProFTPD 1.3.5a 22/tcp open ssh OpenSSH 7.2p2 Ubuntu 4ubuntu2.2 (Ubuntu …

自动驾驶的六个级别是什么?

自动驾驶汽车和先进的驾驶辅助系统(ADAS)预计将帮助拯救全球数百万人的生命,消除拥堵,减少排放,并使我们能够在人而不是汽车周围重建城市。 自动驾驶的世界并不只由一个维度组成。从没有任何自动化到完整的自主体验&a…

VScode调试Python代码

用Python debugger 参考 vscode-python的debug 教学(最全)

动手学深度学习55 循环神经网络 RNN 的实现

动手学深度学习55 循环神经网络 RNN 的实现 从零开始实现简洁实现QA 课件:https://zh-v2.d2l.ai/chapter_recurrent-neural-networks/rnn-scratch.html 从零开始实现 %matplotlib inline import math import torch from torch import nn from torch.nn import fun…

【前端逆向】最佳JS反编译利器,原来就是chrome!

有时候需要反编译别人的 min.js。 比如简单改库、看看别人的 min,js 干了什么,有没有重复加载?此时就需要去反编译Javascript。 Vscode 里面有一些反编译插件,某某Beautify等等。但这些插件看人品,运气不好搞的话,反…

力扣高频SQL 50题(基础版)第二十题

文章目录 力扣高频SQL 50题(基础版)第二十题2356.每位教师所教授的科目种类的数量题目说明思路分析实现过程准备数据实现方式结果截图 力扣高频SQL 50题(基础版)第二十题 2356.每位教师所教授的科目种类的数量 题目说明 表: Te…

算法——二分查找(day10)

目录 69. x 的平方根 题目解析: 算法解析: 代码: 35. 搜索插入位置 题目解析: 算法解析: 代码: 69. x 的平方根 69. x 的平方根 - 力扣(LeetCode) 题目解析: 老…

2025第十九届中国欧亚国际军民两用技术及西安国防电子航空航天暨无人机展

2025第十九届中国欧亚国际军民两用技术及西安国防电子航空航天暨无人机展 时间:2025年3月14-16日 地点:西安国际会展中心 详询主办方陆先生 I38(前三位) I82I(中间四位) 9I72(后面四位&am…