SRS 实时视频服务器搭建及使用

一、SRS 介绍

SRS是一个开源的(MIT协议)简单高效的实时视频服务器,支持RTMPWebRTCHLSHTTP-FLVSRTMPEG-DASHGB28181等协议。 SRS媒体服务器和FFmpegOBSVLCWebRTC等客户端配合使用,提供流的接收和分发的能力,是一个典型的发布 (推流)和订阅(播放)服务器模型。 SRS支持互联网广泛应用的音视频协议转换,比如可以将RTMPSRT, 转成HLSHTTP-FLVWebRTC等协议。

SRS主要用于直播和WebRTC领域。在直播领域,SRS支持RTMPHLSSRTMPEG-DASHHTTP-FLV等典型协议。在WebRTC领域,SRS支持WebRTCWHIPWHEP等协议。SRS可以为直播和WebRTC实现协议转换。作为媒体服务器,SRS通常与FFmpegOBSWebRTC等其他开源项目一起工作。 SRS Stack作为一个开箱即用的媒体解决方案,整合了众多开源项目和工具,更多详细信息,请参考SRS Stack的 介绍。

SRS提供了HTTP API开放接口,可以查询系统的状态和流状态。同时还支持HTTP Callback 支持回调能力,主动通知你的系统,并可以实现流的鉴权能力和业务定制(比如动态DVR)。SRS也支持官方的Prometheus Exporter 对接到云原生的监控系统,具备强大的可观测性。SRS支持会话级别可追踪日志,极大降低了系统维护成本。

SRS使用ANSI C++ (98)开发,只使用了基本的C++能力,可以在Linux、Windows、macOS等多个平台运行。

更多介绍,可以参考官方文档:

https://ossrs.net/lts/zh-cn/

SRS 安装

这里使用 docker + docker-compose 的方式安装,所以需要提前部署好 dockerdocker-compose 的环境。

编写 docker-compose.yml 文件:

version: '3.5'

services:
  srs:
    container_name: srs
    image: registry.cn-hangzhou.aliyuncs.com/ossrs/srs:5
    ports:
      - "1935:1935"
      - "1985:1985"
      - "7080:8080"
    networks:
      - srs

networks:
  srs:

启动服务:

docker-compose up -d

然后在浏览器访问:http://ip:7080/console/ng_index.html#/summaries 即可看到控制台页面:

在这里插入图片描述

下面实验通过 ffmpeg 进行 rtmp 视频推流,然后通过 aliplayer 拉取直播视频流。

二、ffmpeg rtmp 实时视频推流

下载 windows 版本 ffmpeg

https://www.gyan.dev/ffmpeg/builds/packages/ffmpeg-2024-04-01-git-7bf85d2d3a-essentials_build.7z

如果是 linuxmac 系统,可通过下面链接下载:

https://ffmpeg.org/download.html

下载之后可在 bin 下看到启动文件:

在这里插入图片描述

在进行推流前,需要查看摄像头名称:

ffmpeg -list_devices true -f dshow -i dummy

在这里插入图片描述

实时推流:

ffmpeg -f dshow -framerate 30 -video_size 640x480 -i video="Integrated Webcam" -c:v libx264 -preset ultrafast -pix_fmt yuv420p -f flv rtmp://192.168.40.20:1935/live/livestream/1

其中参数的介绍如下:

  • -f dshow:指定输入格式为DirectShow,用于在Windows上捕获视频。
  • -framerate 30:指定视频帧率为30帧每秒。
  • -video_size 640x480:指定视频的尺寸为640x480像素。
  • -i video=“Integrated Webcam”:指定视频输入源为名为 “Integrated Webcam” 的摄像头设备。注意:这里的 video 中的名称是通过上面查询出来的。
  • -c:v libx264:指定视频编码器为libx264,用于将视频编码为H.264格式。
  • -preset ultrafast:指定编码速度为ultrafast,表示使用最快的编码速度,但会产生更大的文件大小。
  • -pix_fmt yuv420p:指定像素格式为yuv420p,这是一种常用的像素格式,与大多数播放器和流媒体服务兼容。
  • -f flv:指定输出格式为FLV。
  • rtmp://192.168.40.20:1935/live/livestream/1:指定RTMP服务器的地址和流名称。其中,192.168.40.20:1935 是RTMP服务器的IP地址和端口号,/live/livestream/1 是流的名称。你需要将这部分替换为你实际使用的RTMP服务器地址和流名称。

在这里插入图片描述

可在 srs 的自带的播放器页面查看:

http://ip:7080/players/srs_player.html?schema=http&port=7080&api=7080

在这里插入图片描述

注意 url 根据 rtmp 推流时的路径要一致,例如上面推流是 rtmp://ip:1935/live/livestream/1 ,这边查看就是:http://ip:7080/live/livestream/1.flv ,然后点击 Play 即可看到推流的视频。

在这里插入图片描述

为了隐私考虑,这里将摄像头挡住了,你应该可以看到你的实时画面。

三、 aliplayer 拉取试试视频流

AliPlayer是阿里云推出的一款跨平台的视频播放器SDK。它具有丰富的功能和强大的性能,可以帮助开发者快速构建稳定、高效的视频播放应用。

构建逻辑如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8">
    <meta http-equiv="x-ua-compatible" content="IE=edge" >
    <meta name="viewport" content="width=device-width, height=device-height, initial-scale=1, maximum-scale=1, minimum-scale=1, user-scalable=no"/>
    <title>Aliplayer Online Settings</title>
    <link rel="stylesheet" href="https://g.alicdn.com/apsara-media-box/imp-web-player/2.21.0/skins/default/aliplayer-min.css" />
    <script type="text/javascript" charset="utf-8" src="https://g.alicdn.com/apsara-media-box/imp-web-player/2.21.0/aliplayer-min.js"></script>
</head>
<body>
<div class="prism-player" id="player-con"></div>
<script>
    var player = new Aliplayer({
            "id": "player-con",
            "source": "http://192.168.40.20:7080/live/livestream/1.flv",
            "width": "100%",
            "height": "500px",
            "autoplay": true,
            "isLive": false,
            "rePlay": false,
            "playsinline": true,
            "preload": true,
            "controlBarVisibility": "hover",
            "useH5Prism": true
        }, function (player) {
            console.log("The player is created");
        }
    );
</script>
</body>

注意:source 中的 url ,和前面路径一致。

在这里插入图片描述

为了隐私考虑,这里将摄像头挡住了,你应该可以看到你的实时画面。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

【机器学习】机器学习创建算法第4篇:K-近邻算法,学习目标【附代码文档】

机器学习&#xff08;算法篇&#xff09;完整教程&#xff08;附代码资料&#xff09;主要内容讲述&#xff1a;机器学习算法课程定位、目标&#xff0c;K-近邻算法定位,目标,学习目标,1 什么是K-近邻算法,1 Scikit-learn工具介绍,2 K-近邻算法API。K-近邻算法&#xff0c;1.4 …

Java:接口应用(Clonable 接口和深拷贝)

目录 1.引例2.Object中clone方法的实现3.Cloneable接口讲解4.深拷贝和浅拷贝4.1浅拷贝4.2深拷贝 1.引例 Java 中内置了一些很有用的接口, Clonable 就是其中之一. Object 类中存在一个 clone 方法, 调用这个方法可以创建一个对象的 “拷贝”. 但是要想合法调用 clone 方法。必…

Qt | Qt 的重要文件简介(推荐)

一、项目文件(pro 文件)及其语法 1、项目文件(pro 文件)的作用是列举项目中的源文件, 2、pro 文件的语法形式为:“变量 操作符 值”,比如 QT += widgets,多个值之间使用空格分开。 3、pro 文件的注释:从“#”开始,直至本行结束。 4、pro 文件的操作符见下表 5、pro 文…

【美团笔试题汇总】2023-09-02-美团春秋招笔试题-三语言题解(CPP/Python/Java)

&#x1f36d; 大家好这里是KK爱Coding &#xff0c;一枚热爱算法的程序员 ✨ 本系列打算持续跟新美团近期的春秋招笔试题汇总&#xff5e; &#x1f4bb; ACM银牌&#x1f948;| 多次AK大厂笔试 &#xff5c; 编程一对一辅导 &#x1f44f; 感谢大家的订阅➕ 和 喜欢&#x1f…

使用 mitmproxy 抓包 grpc

昨天在本地执行 grpc 的 quick start&#xff08;python版本的&#xff09;&#xff0c;我了解 grpc 内部使用的是 HTTP2&#xff0c;所以我就想着抓包来试试&#xff0c;下面就来记录一下这个过程中的探索。 注意&#xff1a;我的电脑上面安装了 Fiddler Classic&#xff0c;…

数据结构day2--双向链表

双向链表: 即可以从头遍历到尾部和从尾部遍历到头部的链表&#xff0c;每个结点包括两个链域&#xff1a;前驱指针域和后继指针域&#xff0c;所以比起单向链表&#xff0c;其可以在任意一个结点访问前后两个结点 关于双向链表的一个完整步骤为&#xff1a; 创建一个表头结构…

微软detours代码借鉴点备注

comeasy 借鉴点1 Loadlibray的时间选择 注入库wrotei.dll&#xff0c;为了获取istream的接口&#xff0c;需要loadlibrary&#xff0c;但是在dllmain中是不建议这样做的。因此&#xff0c;动态库在dllmain的时候直接挂载了comeasy.exe的入口 //获取入口 TrueEntryPoint (i…

【其他】灾害预警,科技助力:手机地震预警功能设置指导

22024年4月3日7时58分在台湾花莲县海域遭遇了一场7.3级的强烈地震&#xff0c;震源深度12公里&#xff0c;震中位于北纬23.81度&#xff0c;东经121.74度&#xff0c;距台湾岛约14公里。震中5公里范围内平均海拔约-3560米。这场突如其来的自然灾害给当地居民的生活带来了巨大的…

【MATLAB】GA_BP神经网络时序预测算法

有意向获取代码&#xff0c;请转文末观看代码获取方式~ 1 基本定义 GA_BP神经网络时序预测算法是一种结合了遗传算法(GA)和反向传播(BP)神经网络的时序预测方法。它利用了遗传算法的全局搜索和优化能力&#xff0c;以及BP神经网络的学习和逼近能力&#xff0c;可以更有效地预…

Qtxlsx第三方库的安装和使用

本文仅作为一个记录&#xff0c;安装QtXlsx方便操作excel&#xff0c;主要参考了这篇博文&#xff1a;https://blog.csdn.net/u014779536/article/details/111769792 1&#xff0c;下载安装Perl脚本Strawberry Perl for Windows&#xff0c;默认安装strawberry-perl-5.30.0.1-…

【Redis教程0x0F】Redis实战篇

Redis如何实现延迟队列&#xff1f; 延迟队列是指把当前要做的事情&#xff0c;往后推迟一段时间再做。延迟队列的常见使用场景有以下几种&#xff1a; 在淘宝、京东等购物平台上下单&#xff0c;超过一定时间未付款&#xff0c;订单会自动取消&#xff1b;打车的时候&#x…

ES6学习(五)-- Module 语法

文章目录 Module 语法1.1 痛点介绍(1) 异步加载(2) 私密(3) 重名(4) 依赖 1.2 解决方法(1) 解决异步加载问题(2) 解决私密问题(3) 重名解决方法(4) 解决依赖问题 1.3 模块化使用案例 Module 语法 之前js 出现的某些痛点&#xff1a; 在script 中引入的变量名不可以重复&#…

深入了解 Python 中标准排序算法 Timsort

&#x1f349; CSDN 叶庭云&#xff1a;https://yetingyun.blog.csdn.net/ Timsort&#xff1a;一个非常快速的、时间复杂度为 O ( n l o g n ) O (n \ log\ n) O(n log n)、稳健&#xff08;即不改变等值元素间的相对顺序&#xff09;的排序算法&#xff0c;在处理真实世界数…

蓝桥杯单片机真题实践篇

这里就不完全写思路过程代码什么的&#xff0c;这一篇文章就写我在训练真题中遇到的过程。 &#xff08;呜呜呜&#xff0c;时间不够辣&#xff0c;能做多少算多少吧....&#xff09; 十三届省赛题 问题1&#xff1a;数码管的数字消影不明显 &#xff08;参考&#xff1a;蓝…

ms-前端八股文

1、暂时性死区 是指在 JavaScript 中使用 let 或 const 声明变量时&#xff0c;变量在其声明之前不能被访问或使用的特性。 var可以变量提升&#xff08;在 JavaScript 中&#xff0c;变量声明提升是指在执行代码之前&#xff0c;变量声明会被提升到作用域的顶部。&#xff0…

SSM 项目学习(Vue3+ElementPlus+Axios+SSM)

文章目录 1 项目介绍1.1 项目功能/界面 2 项目基础环境搭建2.1 创建项目2.2 项目全局配置 web.xml2.3 SpringMVC 配置2.4 配置 Spring 和 MyBatis , 并完成整合2.5 创建表&#xff0c;使用逆向工程生成 Bean、XxxMapper 和 XxxMapper.xml2.6 注意事项和细节说明 3 实现功能 01-…

【C++】二叉搜索数

目录 一、二叉搜索树的概念 二、二叉搜索树的模拟实现 1、定义节点 2、构造二叉树 3、析构二叉树 ​4、拷贝二叉树 5、二叉树赋值 6、插入节点 &#x1f31f;【非递归方式】 &#x1f31f;【递归方式】 7、打印节点 8、搜索节点 &#x1f31f;【非递归方式】 &…

臻奶惠无人售货奶柜:定义新时代的健康生活方式

臻奶惠无人售货奶柜&#xff1a;定义新时代的健康生活方式 臻奶惠的无人售货奶柜&#xff0c;代表着科技与生活方式融合的一个新趋势&#xff0c;它不仅仅是一个简单的购买平台&#xff0c;更是一种全新的生活体验。在这个快节奏的时代&#xff0c;臻奶惠通过其无人售货奶柜&a…

第四百四十三回

文章目录 1. 概念介绍2. 思路与方法2.1 整体思路2.2 使用方法 3. 示例代码4. 内容总结 我们在上一章回中介绍了"自定义Action菜单"相关的内容&#xff0c;本章回中将介绍如何获取屏幕相关参数.闲话休提&#xff0c;让我们一起Talk Flutter吧。 1. 概念介绍 我们在本…

(一)小案例银行家应用程序-介绍

案例示例如下所示&#xff1a; 登录之后就会出现下面所示&#xff1a; 项目案例流程图如下 ● 首先我们建立四个账号对象&#xff0c;用于登录 const account1 {owner: ItShare,movements: [200, 450, -400, 3000, -650, -130, 70, 1300],interestRate: 1.2, // %pin: 11…