纯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流媒体服务器对于项目的成功至关重要。未来,这些服务器将继续发展,以满足不断变化的市场需求和技术挑战。

上一篇:WPF+MVVM案例实战(八)- 自定义开关控件封装实现


下一篇:阿里云开源 AI 应用开发框架:Spring AI Alibaba-项目规划