当前位置: 首页 > news >正文

纯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.lryc.cn/news/470454.html

相关文章:

  • el-table相关的功能实现
  • 衡石分析平台系统分析人员手册-展示类控件创建富文本攻略
  • 为什么在网络中不能直接传输数据
  • javascript实现aes算法(支持微信小程序)
  • Centos系统新增网卡后获取不到网卡的IP地址解决方法
  • U-net医学分割网络——学习笔记
  • CIM+全场景应用,铸就智慧城市发展新篇
  • ts:对象数组的简单使用
  • 当我们在微服务中使用API网关时,它是否会成为系统的瓶颈?这种潜在的瓶颈如何评估和解决?如何在微服务架构中保证高效请求流量?|API网关|微服务|异步处理
  • 微服务设计模式 - 特性标志(Feature Flags)
  • 故障诊断 | MTF-TLSSA-DarkNet-GRU-MSA迁移学习故障识别程序(t分布+莱维飞行改进麻雀优化)
  • 【mysql 进阶】2-1. MySQL 服务器介绍
  • 基于Qt的多线程并行和循序运行实验Demo
  • 机器视觉-相机、镜头、光源(总结)
  • 第六十二周周报 HestGCL
  • 存储期类别
  • 开源模型应用落地-Qwen2-VL-7B-Instruct-vLLM-OpenAI API Client调用
  • 风电叶片损伤YOLO检测数据集(猫脸码客第229期)
  • 修改 RN 打包后生成的app-release 安装包的名称
  • 大模型EfficientSam用于图像语义分割自动标注
  • 一个关于@JsonIgnore的isxxx()问题
  • Django-cookie,session
  • HarmonyOS开发 - 本地持久化之实现LocalStorage支持多实例
  • 【已解决,含泪总结】非root权限在服务器Ubuntu18.04上配置python和torch环境,代码最终成功训练(二)
  • Flutter鸿蒙next 刷新机制的高级使用【衍生详解】
  • c/c++--静态变量和静态函数(static)
  • Windows系统启动MongoDB报错无法连接服务器
  • Linux的makefile与进度条小程序实践
  • latex写作基础
  • Chromium HTML5 新的 Input 类型email对应c++