首页 > 其他分享 >RTSP协议视频智能安防监控平台EasyNVR的录像播放及下载接口支持返回在线m3u8格式视频流

RTSP协议视频智能安防监控平台EasyNVR的录像播放及下载接口支持返回在线m3u8格式视频流

时间:2023-09-08 15:35:32浏览次数:39  
标签:视频流 return m3u8 RTSP 录像 EasyNVR mp4 http 下载


随着视频智能安防监控系统的普及,安防监控平台在各行各业的项目中得到了广泛应用。未来,AI智能将成为安防监控的主导方向。为了满足行业需求,TSINGSEE青犀视频不断提升现有产品的适应能力,进一步推动智能安防监控系统的发展。目前,EasyNVR作为TSINGSEE青犀视频开发的稳定可靠的智能安防监控平台,具备视频采集、直播、转码、分发等功能。在录像功能方面,除了支持调取录像视频进行直接回放外,还可以通过接口调用下载录像文件。不过目前下载和播放的视频文件格式仅限于MP4格式。

RTSP协议视频智能安防监控平台EasyNVR的录像播放及下载接口支持返回在线m3u8格式视频流_时间段

根据部分项目团队提出的新需求,他们希望EasyNVR的录像接口调用功能能够在指定时间段返回在线的m3u8格式视频,以便进行在线观看和下载。

目前,EasyNVR的录像文件确实是以m3u8格式存储在服务器中。然而,在调用指定时间段的录像播放及下载接口时,由于EasyNVR会将录像文件通过ffmpeg转换为mp4格式,所以当前的下载和播放功能仅限于mp4格式的视频。

RTSP协议视频智能安防监控平台EasyNVR的录像播放及下载接口支持返回在线m3u8格式视频流_ffmpeg_02

实现该项目的需求,我们可以定位到EasyNVR接口中找到指定时间段录像播放及下载接口具体逻辑处。首先将接口改变下,需要添加个字段判断获取m3u8格式的视频还是mp4的视频,这个字段为file,这个新接口的file字段不能为空。参考代码如下:

/**
 * @api {get} /api/v2/record/video/:operate/:file/:id/:starttime/:endtime 指定时间段录像播放及下载
 * @apiGroup record
 * @apiParam {String=play,download} operate 调用操作 play:播放 download下载
 * @apiParam {String=mp4,m3u8} file 文件类别 m3u8:(只提供在线地址) mp4:支持
 * @apiParam {String} id 通道号
 * @apiParam {String} starttime 开始时间, YYYYMMDDHHmmss
 * @apiParam {String} endtime 结束时间, YYYYMMDDHHmmss
 * @apiSuccessExample 播放示例
 * 播放mp4
 * http://localhost:10800/api/v2/record/video/play/mp4/1/20180911101139/20180911101248
 * 播放m3u8
 * http://localhost:10800/api/v2/record/video/play/m3u8/1/20180911101139/20180911101248
 * @apiErrorExample 下载示例 (不支持下载m3u8)
 * 下载mp4
 * http://localhost:10800/api/v2/record/video/download/mp4/1/20180911101139/20180911101248
 */
func (h *APIHandler) VideoFileMP4(c *gin.Context) {
   operate := c.Param("operate")
   fileType := strings.ToLower(c.Param("file"))
   if fileType == "" {
      c.AbortWithStatusJSON(http.StatusBadRequest, "文件类别不能为空")
      return
   }
   var err error
   id := c.Param("id")
   if id == "" {
      c.AbortWithStatusJSON(http.StatusBadRequest, "未指定通道号")
      return
   }
   streamID := channels.StreamIDString(id)
   starttime := c.Param("starttime")
   endtime := c.Param("endtime")
   if matched, err := regexp.MatchString(`^\d{14}$`, starttime); !matched || err != nil {
      c.AbortWithStatusJSON(http.StatusBadRequest, "开始时间格式不合法,正确格式:YYYYMMDDHHmmss")
      return
   }
   if matched, err := regexp.MatchString(`^\d{14}$`, endtime); !matched || err != nil {
      c.AbortWithStatusJSON(http.StatusBadRequest, "结束时间格式不合法,正确格式:YYYYMMDDHHmmss")
      return
   }
   start := ff.StrYYYYMMDDHHmmssToTime(starttime)
   end := ff.StrYYYYMMDDHHmmssToTime(endtime)
   if start.After(end) {
      c.AbortWithStatusJSON(http.StatusBadRequest, "开始时间要小于结束时间")
      return
   }
   if end.Unix()-start.Unix() > 10800 {
      c.AbortWithStatusJSON(http.StatusBadRequest, "最大播放/下载录像间隔是3小时!")
      return
   }
   videoID := fmt.Sprintf(`%s_%s_%s`, id, starttime, endtime)
   recordCachePath := dss.RecordDir()
 
   if operate == "play" && fileType == "m3u8" {
      resPath, ok, _ := ff.GetRecordM3U8File(id, start, end, videoID, false)
      if ok != "Complete" {
         c.AbortWithStatusJSON(http.StatusBadRequest, "获取录像错误!")
         return
      }
      c.JSON(http.StatusOK, resPath)
      return
   }
 
   mp4Path := filepath.Join(recordCachePath, fmt.Sprintf(`Stream_%s.mp4`, videoID))
   if utils.Exist(mp4Path) {
      //存在直接返回
      ff.RecordCacheTime[videoID] = ff.RecordCacheTimeStruct{
         Time: time.Now(),
         Path: mp4Path}
      ff.OperFile(c, operate, mp4Path, videoID)
      return
   }
   //判断任务是否在处理
   if _, OK := ff.RecordCacheTime[videoID]; OK { //存在任务
      c.AbortWithStatusJSON(http.StatusBadRequest, "合成中")
      return
   }

安防监控系统支持直接下载并进行部署测试,如果您对其感兴趣,可以直接下载并进行测试。在测试期间,您仍可调用二次开发接口,并享有定制、修改和功能拓展的支持。 

标签:视频流,return,m3u8,RTSP,录像,EasyNVR,mp4,http,下载
From: https://blog.51cto.com/u_16247540/7411087

相关文章

  • RTSP流媒体服务器EasyNVR在直播项目中如何自定义直播背景音乐
    TSINGSEE青犀视频开发的平台主要用于安防直播,除了在安防领域的应用外,也已经成功落地于许多其他领域,包括景区直播。在普通的安防直播场景中,对于视频监控背景音乐并没有特别的要求。然而,对于景区来说,监控的目的不仅限于安防,还包括向外界展示和宣传。因此,在景区直播中,可以结合背景音乐......
  • RTSP协议视频平台EasyNVR接入大华摄像头无法拉取H265格式视频流的解决方案
    EasyNVR作为视频智能安防监控平台,在早期版本中已经集成了EasyPlayer.JS播放器。随着EasyPlayer.JS网页视频播放器的升级,EasyNVR也支持了H.265编码格式的视频播放。此外,EasyNVR还可以集成iframe的视频播放功能,这些功能的存在为EasyNVR智能安防监控平台带来了更多的扩展性。我们将Eas......
  • 智能安防监控系统EasyNVR支持获取RTSP视频流实时快照图片
    TSINGSEE青犀视频作为网页无插件直播视频平台的积极开拓者,在行业内推出了多项产品,如EasyNVR、EasyDSS等,并已成功应用于多个项目。TSINGSEE青犀视频安防视频智能监控系统支持视频直播、录像回放,并提供视频流快照保存功能。在用户使用过程中,有人需要从RTSP视频流中获取自定义时间的视......
  • 智慧园区安防互联网直播应用:RTSP流媒体服务器EasyNVR云边端一体化协同解决方案
    近期有用户询问,在5G边缘计算这一背景下,边缘计算是不是可以替代云计算了?边缘计算和云计算在智慧园区等场景中是相互补充的关系,能够共同发挥作用。边缘计算注重将计算能力推向靠近终端设备的边缘位置,使数据在本地进行处理和分析,从而减少了数据传输延迟和网络带宽的压力。边缘计算适合......
  • 视频监控汇聚平台EasyNVR安防视频平台新版本无法对接到EasyNVS平台并报错login error,
    安防监控系统EasyNVR视频云存储平台可实现设备接入、实时直播、录像、检索与回放、视频云存储、视频分发等视频能力服务,可覆盖全终端平台(pc、手机、平板等终端),在智慧工厂、智慧工地、智慧社区、智慧校园等场景中有大量落地应用。 有用户反馈,在使用新版本EasyNVR时,出现了无法对......
  • RTSP流媒体服务器EasyNVR视频平台以服务方式启动异常却无报错,该如何解决?
    EasyNVR是基于RTSP/Onvif协议的安防视频云服务平台,可实现设备接入、实时直播、录像、检索与回放、云存储、视频分发、级联等视频能力服务,可覆盖全终端平台(电脑、手机、平板等终端),在智慧工厂、智慧工地、智慧社区、智慧校园等场景中有大量落地应用。 有用户反馈,在项目现场启动Ea......
  • 视频监控汇聚平台EasyNVR安防视频内核启动正常,但视频无法播放是什么原因?
    EasyNVR是基于RTSP/Onvif协议的安防视频云服务平台,可实现设备接入、实时直播、录像、检索与回放、云存储、视频分发、级联等视频能力服务,可覆盖全终端平台(电脑、手机、平板等终端),在智慧工厂、智慧工地、智慧社区、智慧校园等场景中有大量落地应用。 近期有用户向我们求助,EasyNV......
  • 基于WebRtc的web播放大华海康rtsp视频流(延迟一秒以内)
    下载WebRtc链接:https://pan.baidu.com/s/1LY59YoKoc3oTargJiOFX7w?pwd=ulc3提取码:ulc3解压后的文件:运行Rtc双击webrtc-streamer.exe即可运行这个画面就是运行成功我们要保证8000端口没有被其他程序占用测试Rtc由于没有摄像头用测试直播源rtsp://wowzaec2demo.streamloc......
  • ZLMeidaKit在Windows上启动时:计算机中丢失MSVCR110.dll,以及rtmp推流后无法转换为flv
    场景ZLMediaKit在Windows上实现Rtmp流媒体服务器以及模拟rtmp推流和http-flv拉流播放:https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/130221608按照以上教程启动MediaServer.exe时提示:无法启动此程序,因为计算机中缺失MSVCR110.dll,尝试重新安装程序以解决此问题......
  • 国标GB28181视频平台LiteCVR配置公网后Webrtc格式视频流无法播放怎么办
    根据使用者的反馈,他们在现场部署了LiteCVR,并配置了公网以便设备能够通过国标GB28181协议接入平台。然而,他们遇到了一个问题,即无法通过WebRTC格式播放视频,但其他格式如RTSP和FLV却能正常播放。针对这一问题,我们立即进行了排查,并发现问题出在使用者的配置上。我们注意到,在LiteCVR2.7......