视频云平台——搭建SRS5平台支持GB28181视频流的推送

  • 📢欢迎点赞 :👍 收藏 ⭐留言 📝 如有错误敬请指正,赐人玫瑰,手留余香!
  • 📢本文作者:由webmote 原创
  • 📢作者格言:新的征程,我们面对的不仅仅是技术还有人心,人心不可测,海水不可量,唯有技术,才是深沉黑夜中的一座闪烁的灯塔 !

序言

搭建视频云平台有很多种方式,如果是内部平台往抖音等平台推送,大可以采用SRS-Stack服务搭建模式,因为一般的视频源都可以控制在自己的网络范围内。
在这里插入图片描述

而如果是企业内网想要把视频送到云平台,国内的大客户(一般是国有大厂)们,最早接触的应该都是GB28181系列的平台,因此这次我们就来聚焦在GB28181视频推流的服务平台上。

1. SRS 5.0

系统的环境采用大名鼎鼎的CentOS 7.5及以上

SRS是一个开源的(MIT协议)简单高效的实时视频服务器,支持RTMP、WebRTC、HLS、HTTP-FLV、SRT、MPEG-DASH和GB28181等协议。 SRS媒体服务器和FFmpeg、OBS、VLC、 WebRTC等客户端配合使用,提供流的接收和分发的能力,是一个典型的发布 (推流)和订阅(播放)服务器模型。 SRS支持互联网广泛应用的音视频协议转换,比如可以将RTMP或SRT, 转成HLS或HTTP-FLV或WebRTC等协议。

由于之前的4.0版本需要特别编译才支持GB28181协议,且不够稳定,因此我们这次采用的是5.0的最新发布版本。

目前正式版本支持:

  • 摄像头通过SIP注册。
  • 自动邀请摄像头推流。
  • GB/2016转RTMP协议。
  • 基于TCP的SIP信令。
  • TCP单端口传输媒体。

当前版本不支持语音对讲功能,注意注意!

2. 部署命令

我们使用Docker方式进行部署,这种方式简直不要太简单!
在这里插入图片描述

请按照以下步骤命令进行部署。


# 更新系统
yum -y update # 安装docker,如果已经安装请忽略以下命令yum remove docker \docker-client \docker-client-latest \docker-common \docker-latest \docker-latest-logrotate \docker-logrotate \docker-engineyum install -y yum-utils
yum-config-manager \--add-repo \https://download.docker.com/linux/centos/docker-ce.repoyum install docker-ce docker-ce-cli containerd.io
systemctl start docker# 拉取srs5镜像
docker pull ossrs/srs:5
# 临时启动srs
docker run -it --name srs5 ossrs/srs:5
# 复制配置等文件到/srs
mkdir /srs
# 把配置文件复制到/srs
docker cp -a srs5:/usr/local/srs/conf /srs/conf​
docker cp -a srs5:/usr/local/srs/objs /srs/objs# 检查查看/srs内的目录是否包含conf和objs
# 删除临时容器
docker rm -f srs5# 创建srs5容器
docker run -d --restart=always --name srs5 -p 5060:5060 -p 9000:9000 -p 1935:1935 -p 1985:1985 -p 8080:8080  -p 8000:8000/udp -v /srs/conf/:/usr/local/srs/conf/ -v /srs/objs/:/usr/local/srs/objs/ ossrs/srs:5# 检查容器是否存在
docker logs srs5

3.测试和配置

按照上述命令配置完成后,我们已经启动了SRS5容器服务,这时候我们默认启用了docker.conf 配置文件,因此还需要对该文件进行配置。
在这里插入图片描述

因为做了文件资源的映射,因此让我们打开本地文件进行编辑,并替换【你的公网IP】地址。

# 打开 docker.conf
# vi /srs/conf/docker.conf
# 增加gb28181的配置,如下:
stream_caster {enabled on;caster gb28181;listen 9000;output rtmp://127.0.0.1/live/[stream];host 【你的公网IP】;  sip {enabled on;listen 5060;candidate 【你的公网IP】;}
}

编辑完毕后,需要重启srs5服务。

docker restart srs5

4.测试你的服务

让我们打开srs自带的web服务,在这之前,你需要在云服务的安全管理策略内增加上你的IP端口接入。

包含下列端口: 5060,9000,1935,1985,8080,8000。

访问 http://你的公网IP:8080
点击连接srs,即可连接上srs服务。

5.GB28181推流配置

注意:音频编码仅支持AAC格式。
登录你的摄像头界面,找到GB28181配置,这里以海康摄像头为例:
在这里插入图片描述
按照如下进行配置。
在这里插入图片描述
配置时注意以下方面。

  • 必须是AAC编码,在音频编码中,选择AAC,采样率44100HZ。
  • 必须是GB-2016标准,否则不支持TCP,在协议版本中选择GB/T28181-2016。
  • 必须是TCP协议,不支持UDP,在传输协议中选择TCP,并使用GB-2016标准。

摄像头注册后,SRS会自动邀请摄像头推流,可以打开下面的链接播放:

http://localhost:8080/live/34020000001320000001.flv
http://localhost:8080/live/34020000001320000001.m3u8
webrtc://localhost/live/34020000001320000001
注意: 请把流名称换成你的设备名称,IP也更换为你的服务器IP,然后点播放。

在SRS管理界面内也可以看到推送的视频:
在这里插入图片描述
点击预览也可以直接播放视频。
在这里插入图片描述

总结

GB28181这个协议,真的很古怪,但毕竟是国内大厂经常使用的方案,因此了解它还是很必须的,基于推流方式的播放,视频延迟率也非常高,基本在1秒以上,因此你要注意了哦。

你学废了吗?

👓都看到这了,还在乎点个赞吗?

👓都点赞了,还在乎一个收藏吗?

👓都收藏了,还在乎一个评论吗?

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

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

相关文章

谨用ArrayList中的subList方法

谨用ArrayList中的subList方法 规范一&#xff1a; ArrayList 的 subList 结果不可强转成 ArrayList&#xff0c;否则会抛出 ClassCastException 异常&#xff1a; public static void test7() {List<Integer> list new ArrayList<>();list.add(1);list.add(2);…

JavaWeb—— SpringBootWeb综合案例(登录功能、登录校验、异常处理)

案例-登录认证 目录 案例-登录认证1. 登录功能1.1 需求1.2 接口文档1.3 思路分析1.4 功能开发1.5 测试 2. 登录校验2.1 问题分析2.2 会话技术2.2.1 会话技术介绍2.2.2 会话跟踪方案2.2.2.1 方案一 - Cookie2.2.2.2 方案二 - Session2.2.2.3 方案三 - 令牌技术 2.3 JWT令牌2.3.1…

程序员眼中的“祖传代码”

引言 在IT界&#xff0c;特别是在Java项目中&#xff0c;“祖传代码”通常指的是那些经过长时间积累、由多位开发者共同维护、且蕴含深厚技术沉淀的代码片段或模块。这些代码可能存在于项目的核心模块&#xff0c;也可能是一些辅助性的工具类。它们承载着项目的历史&#xff0…

Matlab 多项式插值(曲线拟合)

文章目录 一、简介二、实现代码三、实现效果参考资料一、简介 由于对曲线拟合有些兴趣,这里就找了一些资料从最基本的方法来看一下曲线拟合的效果: 二、实现代码 % **********

Vue.js中的路由导航守卫和其使用方法

Vue.js 中的路由导航守卫是 Vue Router 提供的一套机制&#xff0c;用于在路由切换的过程中执行自定义代码逻辑&#xff0c;包括但不限于权限验证、页面滚动位置保存、加载数据等。它分为三种类型&#xff1a; 全局前置守卫 (Global beforeEach Guard) 全局前置守卫应用在整个…

python科学计算库之Numpy库的使用的简单习题

Numpy库 Numpy&#xff08;Numerical Python的缩写&#xff09;是一个开源的Python库&#xff0c;用于进行科学计算。它提供了一个高性能的多维数组对象&#xff08;ndarray&#xff09;及用于处理这些数组的各种工具和函数。由于其高效和灵活的数据结构以及丰富的功能&#x…

Google 地图 API 教程--干货(1/2)

Google Maps API 教程 在本教程中我们将学习如何使用谷歌地图API V3创建交互式地图。 什么是 API? API = 应用程序编程接口(Application programming interface)。 API(Application Programming Interface,应用编程接口)其实就是操作系统留给应用程序的一个调用接口,…

【d34】【Java】【力扣】27. 移除元素

题目 给你一个数组 nums 和一个值 val&#xff0c;你需要 原地 移除所有数值等于 val 的元素&#xff0c;并返回移除后数组的新长度。 不要使用额外的数组空间&#xff0c;你必须仅使用 O(1) 额外空间并 原地 修改输入数组。 元素的顺序可以改变。你不需要考虑数组中超出新长…

案例介绍:汽车售后服务网络构建与信息抽取技术应用(开源)

一、引言 在当今竞争激烈的汽车行业中&#xff0c;售后服务的质量已成为品牌成功的关键因素之一。作为一位经验丰富的项目经理&#xff0c;我曾参与构建一个全面的汽车售后服务网络&#xff0c;旨在为客户提供无缝的维修、保养和配件更换服务。这个项目的核心目标是通过高效的…

spring、springmvc、springboot框架的介绍

前言 我们已经学过Spring&#xff0c;SpringMVC&#xff0c;SpringBoot了&#xff0c;那这三者之间有没有联系或者区别呢&#xff1f; spring是一个一站式的轻量级java开发的框架&#xff0c;那我们刚开始使用spring的时候&#xff0c;是需要配置很多的配置文件以及繁琐的过程…

状态机实现双击、短按、长按等按键识别检测算法

1、按键识别算法的作用 按键识别算法在不同的技术和应用背景下有不同的作用&#xff0c;但其核心目标都是准确、可靠地检测和区分用户通过物理或虚拟按键所执行的操作。按键识别算法在各类电子设备及系统中起到至关重要的作用&#xff0c;它确保了人机交互的有效性和准确性&…

Vue前端+快速入门【详解】

目录 1.Vue概述 2. 快速入门 3. Vue指令 4.表格信息案例 5. 生命周期 1.Vue概述 1.MVVM思想 原始HTMLCSSJavaScript开发存在的问题&#xff1a;操作麻烦&#xff0c;耦合性强 为了实现html标签与数据的解耦&#xff0c;前端开发中提供了MVVM思想&#xff1a;即Model-Vi…

Mysql-主从架构篇(一主多从,半同步案例搭建)

主从架构 主从架构有什么用&#xff1f; 通过搭建MySQL主从集群&#xff0c;可以缓解MySQL的数据存储以及访问的压力。 数据安全&#xff08;主备&#xff09;&#xff1a;给主服务增加一个数据备份。基于这个目的&#xff0c;可以搭建主从架构&#xff0c;或者也可以基于主…

GO语言学习笔记(与Java的比较学习)(九)

读写数据 读取用户的输入 最简单的办法是使用 fmt 包提供的 Scan 和 Sscan 开头的函数。 Scanln 扫描来自标准输入的文本&#xff0c;将空格分隔的值依次存放到后续的参数内&#xff0c;直到碰到换行。Scanf 与其类似&#xff0c;除了 Scanf 的第一个参数用作格式字符串&…

大数据开发(Java面试真题-卷三)

大数据开发&#xff08;Java面试真题&#xff09; 1、简要介绍以下JVM有几种垃圾收集器&#xff1f;2、Java中Synchronized的底层原理是什么&#xff1f;3、Java String为什么是不可变的&#xff1f;为什么要设计成不可变&#xff1f;4、泛型&#xff1f;5、常用的反射方法&…

深入Java日志框架及其最佳实践

概述 在Java应用开发中&#xff0c;日志框架是确保应用稳定性和可观察性的关键组件。它帮助开发者记录应用的行为、诊断问题&#xff0c;并监控系统的健康状况。随着Java生态系统的不断发展&#xff0c;各种日志框架也应运而生&#xff0c;各有特点和优势。本文将详细探讨几个…

redis进阶(一)

文章目录 前言一、Redis中的对象的结构体如下&#xff1a;二、压缩链表三、跳跃表 前言 Redis是一种key/value型数据库&#xff0c;其中&#xff0c;每个key和value都是使用对象表示的。 一、Redis中的对象的结构体如下&#xff1a; /** Redis 对象*/ typedef struct redisO…

c# .net8 香橙派orangepi + hc-04蓝牙 实例

这些使用c# .net8开发&#xff0c;硬件 香橙派 orangepi 3lts和 hc-04蓝牙 使用场景&#xff1a;可以通过这个功能&#xff0c;手机连接orangepi进行wifi等参数配置 硬件&#xff1a; 1、带USB口的linux开发板orangepi 2、USB 转TTL 中转接蓝牙&#xff08;HC-04) 某宝上买…

Vue的响应式原理是如何实现的

Vue的响应式原理主要**基于JavaScript的Object.defineProperty方法实现**。具体如下&#xff1a; 1. 数据劫持&#xff08;Data Hijacking&#xff09; Vue在初始化时&#xff0c;会遍历data对象中的所有属性&#xff0c;并使用Object.defineProperty将这些属性转换为getter/s…

Flink:Temporal Table Function(时态表函数)和 Temporal Join

博主历时三年精心创作的《大数据平台架构与原型实现&#xff1a;数据中台建设实战》一书现已由知名IT图书品牌电子工业出版社博文视点出版发行&#xff0c;点击《重磅推荐&#xff1a;建大数据平台太难了&#xff01;给我发个工程原型吧&#xff01;》了解图书详情&#xff0c;…