纯GO语言开发RTSP流媒体服务器-RTSP推流直播、本地保存录像、录像回放、http-flv及hls协议分发

温馨提示:我们分享的文章是给需要的人,不需要的人请绕过,文明浏览,误恶语伤人!

前言

在软件开发中遇到使用流媒体音视频的行业比较多,如安防监控系统、无人机巡逻视频上云处理、直播平台、教育与企业培训、内部通讯与协作等场景软件都需要把视频流实时传回并快速处理,这需要能容易开发、处理速度快速、由于视频流处理很耗硬件资源则需要开发语言对应硬件的利用率要高、而且有的场景有众多接入设备需要开发对并发我们良好支持。综合这些要求Go语言是目前为止最合适开发语言,有朋友可能说C和rust也合适,但对于我们做web应用出生来说他们学习和开发成本太高,所以对应我们web开发者朋友还是选择Go语言吧。

简单说一下为什么选择RTSP?

   RTSP作为一种网络控制协议,在流媒体传输领域具有广泛的应用。它提供了对媒体流的控制功能,支持多种传输层协议和媒体格式,具有良好的可扩展性和跨平台性。通过与RTP和RTCP等协议协同工作,RTSP可以实现高质量的流媒体传输和控制,满足各种流媒体应用场景的需求。RTSP的媒体服务器可以轻松处理大量的 RTSP 流,因为 RTSP 协议是通过客户端-服务器模式构建的。它原生支持无人机、物联网和机器人等各种设备,具有广泛的兼容性。

 RTMP也是常见的流媒体协议,我们为什么不选,主要原因有RTMP 流经常会出现低带宽问题,造成视频中断,还有是RTMP由 Macromedia(后来被 Adobe 收购)开发,用于流式传输到 Flash 播放器,由于安全原因flash已经被抛弃了,相应的RTMP协议也应该被抛弃。

目前视频监控设备的海康威视、大华、宇视、华为等很多安防设备RTSP协议,还有物联网场景中视频传输也选择RTSP,下面看是这两场景选择RTSP说明:

  • IP 摄像机选择RTSP

    几乎所有 IP 摄像机都支持 RTSP,这是因为 IP 摄像机早在 RTMP 协议创建之前就已经存在,与 RTSP 和 IP 摄像机结合使用时,IP 摄像机本身充当 RTSP 服务器,这意味着要将摄像机连接到 IP 摄像机服务器并广播视频。

  • 物联网设备选择RTSP

     RTSP 通常内置在无人机或物联网软件中,从而可以访问视频源,它的好处之一是低延迟,确保视频中没有延迟,这对于无人机来说至关重要。

我们知道了RTSP重要性后,我们就进入正题了,一起看如何开发掌握开发自己RTSP流媒体服务,在软件项目开发者我们不必从零自己搜戳一个,自己开发耗时长且不稳定,在项目我们不会有太多时间来搞,很多项目都希望我们快速开出来使用。既然没有时间拖,我们就得找个能修改二次开发基础框架,如果基础功能满足就不用开发,不满足我们还可以进行功能扩展。基于实战考虑我们基于把RTSP流媒体服务通用功能开发出来提供给大家,用到时直接安装。配有详细开发文档也方便开发者开始二开。

RTSP插件使用

基础功能支持RTSP推流直播、把RTSP推送到服务器的视频流保存成mp4格式或者m3u8格式录像,可以查看回放。

  • 安装代码

获取代码有两种方式1.到社区代码市场下载,2.是在管理后台代码仓直接安装,如下图:

GoFly社区代码市场下载代码包
管理后台的代码仓安装

  • 启动服务及推流到服务器

启动Go服务后,在终端看到RTSP服务地址,测试我们用ffmpeg工具来推送RTSP流,如下图,推流命令如下:

ffmpeg -re -stream_loop -1 -i D:\Download\ffmpeg\m.mp4 -vcodec copy -rtsp_transport tcp -f rtsp rtsp://127.0.0.1:554/scenery

  • 后台RTSP直播流
管理RTSP流信息
  • 用VLC播放RTSP视频流

  下载VLC Media Player:​​https://www.videolan.org/vlc/​​

  下载安装VLC后我们用ffmpeg把视频推到服务器,然后我们在VLC中打开RTSP视频流,如下图:

安装好VLC后设置播放路径
播放RTSP效果
  • 在RTSP配置文件修改保存本地视频设置

 插件设计时把本地存储视频做成开关,可以根据需求打开或关闭保存视频功能,这样可以减少性能消耗。配置页面如下:

  • 管理本地存储录像
管理本地存储视频
在线播放录像

 结束语

本插件除了在GoFly快速开发框架使用外,我们可以把插件简单改造就可以加入到其他Go开发框架,也可以独立开发成存RTSP功能服务器,我们集成到的GoFly管理后台是方便和其他业务统一管理。

在开发中选择合适的RTSP流媒体服务器对于项目的成功至关重要。未来,这些服务器将继续发展,以满足不断变化的市场需求和技术挑战。

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

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

相关文章

如何快速使用Cesium完成项目

要快速使用Cesium完成项目,可以按照以下步骤进行: 学习基础知识: 首先,了解Cesium的基本概念和功能。可以通过阅读Cesium的官方文档和一些入门教程来掌握基础知识。例如,可以参考“Cesium速成教程:一小时入…

代码随想录(十二)——图论

并查集 并查集主要有三个功能。 寻找根节点,函数:find(int u),也就是判断这个节点的祖先节点是哪个将两个节点接入到同一个集合,函数:join(int u, int v),将两个节点连在同一个根节点上判断两个节点是否在…

阿里云物联网的通信方式

阿里云物联网通信的两种方式,一个是物模型(分为服务,事件,属性),一个是自定义topic(要另外设置数据流转) 1.使用产品内的功能定义,(其实也就是Topic中定义好的…

新手逆向实战三部曲之三——通过进入关键call追码注册软件(进阶)

教程开始: 通过前两次的学习,是不是感觉逆向也蛮有意思的呢,感兴趣的同学可以先看看前二次的内容再继续向下学习 新手逆向实战三部曲之一 新手逆向实战三部曲之二 有了上次爆破的基础,这次便省力了许多,这次从载入开始…

STM32第15章 RCC-使用HSE/HSI配置时钟

时间:2024.10.21-10.23 参考资料: 《零死角玩转STM32》“RCC-使用HSE/HIS配置时钟”章节 TIPS: 从前面的历程中我们知道,程序在启动的时候会执行汇编文件,汇编文件里会调用System_Init(固件库编程的函数),它里面会把时钟初始化成72M,因此前面我们在用固件库写程序的…

数据结构:“小猫钓鱼游戏”

一:题目 栈和队列的综合应用:“小猫钓鱼”的游戏规则是:将一副扑克牌平均分成两份,每人拿一份。玩家甲先拿出手中的第一张扑克牌放在桌上,然后玩家乙也拿出手中的第一张扑克牌,并放在玩家甲刚打出的扑克牌的…

采用Excel作为可视化设计器的开源规则引擎 NopRule

决策树和决策矩阵是业务人员可以直观理解的复杂IF-ELSE逻辑表达形式,也是规则引擎中最常用、最有用的部分。常见的规则引擎如Drools虽然提供了更加丰富的功能特性集, 特别是所谓的RETE算法可以用于高效复用多次重复出现的表达式片段,但在实际…

SpringSecurity + Jwt权限校验,接口调用403 Forbidden问题排查与解决

问题背景:部分接口调用正常,部分接口调用报403Forbidden,postman不显示具体报错信息。 问题描述: 接口调用报错,经排查,权限校验认证通过,可以进入接口,但是在执行过程中&#xff0…

深入了解 Android 中的命名空间:`xmlns:tools` 和其他常见命名空间

在 Android 开发中,xmlns (.xml的namespace)命名空间是一个非常重要的概念。通过引入不同的命名空间,可以使用不同的属性来设计布局、设置工具属性或者支持自定义视图等。除了 xmlns:tools 以外,还有很多常见的命名空间…

从0到1学习node.js(npm)

文章目录 一、NPM的生产环境与开发环境二、全局安装三、npm安装指定版本的包四、删除包 五、用npm发布一个包六、修改和删除npm包1、修改2、删除 一、NPM的生产环境与开发环境 类型命令补充生产依赖npm i -S uniq-S 等效于 --save -S是默认选项npm i -save uniq包的信息保存在…

webpack 老项目升级记录:从 node-sass 限制的的 node v8 提升至支持 ^node v22

老项目简介 技术框架 vue 2.5.17webpack 4.16.5"webpack-cli": "3.1.0""node-sass": "^4.7.2" 几个阶段 第一步:vue2 升级到最新 第一步:升级 vue2 至最新版本,截止到目前(2024-10-…

ATom:加州理工学院化学电离质谱仪(CIT-CIMS)的现场数据,V2版

目录 简介 摘要 代码 引用 网址推荐 知识星球 机器学习 ATom: In Situ Data from Caltech Chemical Ionization Mass Spectrometer (CIT-CIMS), V2 ATom:加州理工学院化学电离质谱仪(CIT-CIMS)的现场数据,V2版 简介 该数…

trueNas 24.10 docker配置文件daemon.json无法修改(重启被覆盖)解决方案

前言 最近听说truenas的24.10版本开放docker容器解决方案放弃了原来难用的k3s,感觉非常巴适,就研究了一下,首先遇到无法迁移老系统应用问题比较好解决,使用sudo登录ssh临时修改daemon.json重启docker后进行docker start 容器即可…

十一、数据库配置

一、Navicat配置 这个软件需要破解 密码是:123456; 新建连接》新建数据库 创建一个表 保存出现名字设置 双击打开 把id设置为自动递增 这里就相当于每一次向数据库添加一个语句,会自动增长id一次 二、数据库的增删改查 1、Vs 建一个控…

Java设计模式之代理模式(二)

一、CGLIB动态代理 JDK动态代理要求被代理的类必须实现接口,有很强的局限性,而CGLIB动态代理则不要求被代理类实现接口。简单的说,CGLIB会让生成的代理类继承被代理类,并在代理类中对代理方法进行强化处理(前置处理、后置处理等)。…

git的学习之远程进行操作

1.代码托管GitHub:充当中央服务器仓库的角色 2.git远程进行操作 3.配置本地服务器的公钥 4.推送 5.git远程操作 pull .gitignore 6.给命令配置别名 git config --global alias.st status 7.标签管理 git tag -a [name] -m "XXX" [commit_id] 操作标签…

基于Python的自然语言处理系列(46):4-bit LLM 量化与 GPTQ

在本篇文章中,我们将深入探讨如何使用 GPTQ (Generative Pre-trained Quantization) 进行4-bit大语言模型(LLM)的量化。在大规模语言模型训练和推理的背景下,模型的量化不仅能够大大降低计算成本,还能够提高推理速度,因此对构建高…

查找与排序-插入排序

1.直接插入排序的基本思想 假设n个数据元素关键字存储在静态数组a中,则直接插入排序的基本思想可做如下描述: (1)初始有序子序列由一个元素a[0] 组成; (2)从a[1]开始,对于序列中每…

leetcode 75-13 k和数对的最大数目

我的思路 sort函数排序 然后双指针判断 这样时间复杂度nlgn 题解给出了一种空间换时间方法 用哈希表 注意一下写法 现在完全不会这样写 还有就是注意sort函数的代码 怎么写排序也给忘了 sort用的是什么排序方法

自由职业者的一天:作为小游戏开发者的真实工作日记

大家好,我是小蜗牛。 在这个快节奏的数字时代,自由职业者的生活往往充满了挑战与机遇。作为一名微信小游戏开发者,我的日常工作并不像人们想象中的那样充满光鲜亮丽的画面,而是由无数的编码、调试和创意碰撞组成的。今天&#xf…