使用rtsp带starttime和endtime进行历史回放报453 Not Enough Bandwidth(带宽不足)

  • 问题解析
  • 解决方案


系列文章:
浏览器不支持flash插件之后,h5播放rtmp直播流的解决方案使用JavaCV实现海康rtsp转rtmp实现无插件web端直播(无需转码,低资源消耗)海康sdk捕获码流数据通过JavaCV推成rtmp流的实现思路(PS流转封装RTMP)海康sdk项目(java)部署Linux环境相关问题总结

系列专栏:
流媒体技术FFmpegJavaCV海康sdk二次开发

rtsp进行历史回放是的格式:

ffmpeg -rtsp_transport tcp -i rtsp://admin:abcxxxxx@192.168.x.xxx:554/Streaming/tracks/101?starttime=20200113t100000z’&'endtime=20200113t100030z -vcodec copy -acodec copy -f flv rtmp://localhost:1935/history/stream

问题解析

在进行监控安防设备通过web浏览器进行直播和点播的时候,很多人会采用rtsp-rtmp-nginx-flash这种方案来进行开发。针对海康的设备,可以通过使用JavaCV拉rtsp视频流,转封装推成rtmp的流,通过video.js
来进行播放。 使用JavaCV实现海康rtsp转rtmp实现无插件web端直播(无需转码,低资源消耗)

在实现的时候发现,对于直播来说,rtsp转rtmp可以很好的满足需求。但是对于按需点播,历史回放的时候,尝试使用:

rtsp://admin:abcxxxxx@192.168.x.xxx:554/Streaming/tracks/101starttime=20200113t100000z'&'endtime=20200113t100030z

这样rtsp指令,通过拼接’ starttime ’和’ endtime ’指定开始时间和结束时间来进行点播或者历史回放时发现经常会遇到两个问题:
1.程序阻塞,卡着不动
2.ffmpeg报错,rtsp返回错误码及错误信息:453 Not Enough Bandwidth(带宽不足)

原因是因为海康nvr有带宽限制,通常出现这种情况后,需要等待很久才能再次访问。并且通过rtsp来进行历史回放本身就是一种’ 非主流 ‘的操作。这个问题基本无解,只能通过其他思路来实现需求。

解决方案

虽然rtsp带时间参数来进行点播无法满足需求,并且无法解决。但是海康web3.0可以进行历史回放,所以可以考虑对海康的sdk进行二次开发,自己手动捕获到直播和回放的码流数据,处理过后推成rtmp的流。

可以参考: 海康sdk捕获码流数据通过JavaCV推成rtmp流的实现思路(PS流转封装RTMP)


1、快速使用maven配置:<dependency> <groupId>ch.qos.logback</groupId> <artifactId>logback-classic</artifactId> <version>1.2.3</version> <scope>test&l