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

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

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

系列专栏:
流媒体技术
FFmpeg
JavaCV
海康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)

  • 0
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 8
    评论
RTSP回放时返回状态码453的原因是因为海康威视设备的RTSP服务器检测到了客户端请求的速度过快,超出了其限制。为了解决这个问题,可以在Java代码中添加一个延时等待的机制,使得请求发送的速度不会过快。 以下是一个示例代码,使用了Java的Thread.sleep()方法来实现延时等待: ``` import java.net.*; import java.io.*; public class RTSPClient { public static void main(String[] args) throws Exception { String server = "192.168.1.1"; int port = 554; String path = "/playback.sdp"; String user = "admin"; String pass = "123456"; // 创建连接 Socket socket = new Socket(server, port); // 构建请求 String request = "DESCRIBE rtsp://" + server + path + " RTSP/1.0\r\n" + "CSeq: 1\r\n" + "Authorization: Basic " + Base64.getEncoder().encodeToString((user + ":" + pass).getBytes()) + "\r\n" + "User-Agent: Java/1.8.0_291\r\n" + "Accept: application/sdp\r\n" + "Connection: close\r\n" + "\r\n"; // 发送请求 OutputStream os = socket.getOutputStream(); os.write(request.getBytes()); os.flush(); // 读取响应 InputStream is = socket.getInputStream(); byte[] buffer = new byte[4096]; int bytesRead = is.read(buffer); String response = new String(buffer, 0, bytesRead); System.out.println(response); // 延时等待 Thread.sleep(1000); // 关闭连接 socket.close(); } } ``` 在以上代码中,我们在请求发送后加入了一个1秒钟的延时等待,以避免请求发送过快导致453错误。你可以根据实际情况调整延时等待的时间。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

banmajio

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值