Giter Club home page Giter Club logo

rtsp-websocket-server's Introduction

RTSP-WEBSOCKET-SERVER

Language-java8 SpringBoot-2.3.4.RELEASE Idea-2022.02.03 CopyRight-Oscura License

简述

  • 技术结构 RTSP + H264 + FMP4 + WebSocket + MSE + WEB
  • 目前支持海康、大华摄像头RTSP视频流在WEB页面上显示,亲测有效
  • 视频流获取支持TCP/UDP两种方式,任意切换
  • 纯JAVA开发,没有任何其他依赖,无插件轻量级,还可以定制化扩展开发
  • 视频响应快速,延时 < 1s,几乎无延时实时性强,即开即用
  • 采用的通信库: https://github.com/xingshuangs/iot-communication

整体结构

Camera ==> JAVA Server(Proxy) ==> HTML5 Page.

structure.png

使用指南

1. rtsp-websocket-server-sample(rtsp地址模式)

  1. jar包启动 或 IDEA启动
  2. 登录访问地址:http://127.0.0.1:8088
  3. 输入正确的摄像头RTSP地址
  4. 点击页面上的打开按钮

rtsp-websocket.png

2. rtsp-websocket-server-starter(订阅模式)

先在配置文件中配置RTSP的访问地址

rtsp:
  addresses:
    - number: 1001
      url: rtsp://admin:[email protected]:554/h264/ch1/main/av_stream
    - number: 1002
      url: rtsp://admin:[email protected]:554/h264/ch1/main/av_stream
  1. jar包启动 或 IDEA启动
  2. 登录访问地址:http://127.0.0.1:8089
  3. 点击websocket的连接
  4. 选择对应的视频通道,点击订阅

rtsp-websocket-starter.png

联系方式

如果有任何问题,可以通过以下方式联系作者,作者在空余时间会做解答。

许可证

根据MIT许可证发布,更多信息请参见LICENSE
@2019 - 2099 Oscura版权所有。

赞助

一杯奶茶足矣
微信 (请备注上你的姓名)
微信

rtsp-websocket-server's People

Contributors

xingshuangs avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

rtsp-websocket-server's Issues

com.github.xingshuangs.iot.exceptions.AuthenticationException: nonce为空

你好,这个填写rtsp地址后点击打开会报错,是需要改什么吗,这是报错信息
2023-08-09 17:17:18.316 ERROR 4092 --- [nio-8088-exec-1] c.g.x.r.s.controller.WebSocketServer : nonce为空

com.github.xingshuangs.iot.exceptions.AuthenticationException: nonce为空
at com.github.xingshuangs.iot.protocol.rtsp.authentication.DigestAuthenticator.createResponse(DigestAuthenticator.java:80) ~[iot-communication-1.4.1.jar:na]
at com.github.xingshuangs.iot.protocol.rtsp.model.RtspMessageRequest.addCommonRequestHeader(RtspMessageRequest.java:95) ~[iot-communication-1.4.1.jar:na]
at com.github.xingshuangs.iot.protocol.rtsp.model.RtspMessageRequest.toObjectString(RtspMessageRequest.java:74) ~[iot-communication-1.4.1.jar:na]
at com.github.xingshuangs.iot.protocol.rtsp.service.RtspNetwork.readFromServer(RtspNetwork.java:173) ~[iot-communication-1.4.1.jar:na]
at com.github.xingshuangs.iot.protocol.rtsp.service.RtspNetwork.describe(RtspNetwork.java:277) ~[iot-communication-1.4.1.jar:na]
at com.github.xingshuangs.iot.protocol.rtsp.service.RtspNetwork.doAfterConnected(RtspNetwork.java:155) ~[iot-communication-1.4.1.jar:na]
at com.github.xingshuangs.iot.net.client.TcpClientBasic.getAvailableSocket(TcpClientBasic.java:137) ~[iot-communication-1.4.1.jar:na]
at com.github.xingshuangs.iot.net.client.TcpClientBasic.connect(TcpClientBasic.java:109) ~[iot-communication-1.4.1.jar:na]
at com.github.xingshuangs.iot.protocol.rtsp.service.RtspClient.start(RtspClient.java:47) ~[iot-communication-1.4.1.jar:na]
at com.github.xingshuangs.iot.protocol.rtsp.service.RtspFMp4Proxy.start(RtspFMp4Proxy.java:277) ~[iot-communication-1.4.1.jar:na]
at com.github.xingshuangs.rtsp.server.controller.WebSocketServer.openRtspFmp4Proxy(WebSocketServer.java:112) ~[classes/:na]
at com.github.xingshuangs.rtsp.server.controller.WebSocketServer.onMessage(WebSocketServer.java:74) ~[classes/:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) ~[na:na]
at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77) ~[na:na]
at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) ~[na:na]
at java.base/java.lang.reflect.Method.invoke(Method.java:568) ~[na:na]
at org.apache.tomcat.websocket.pojo.PojoMessageHandlerWholeBase.onMessage(PojoMessageHandlerWholeBase.java:80) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.tomcat.websocket.WsFrameBase.sendMessageText(WsFrameBase.java:402) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.tomcat.websocket.server.WsFrameServer.sendMessageText(WsFrameServer.java:119) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.tomcat.websocket.WsFrameBase.processDataText(WsFrameBase.java:502) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.tomcat.websocket.WsFrameBase.processData(WsFrameBase.java:301) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.tomcat.websocket.WsFrameBase.processInputBuffer(WsFrameBase.java:133) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.tomcat.websocket.server.WsFrameServer.onDataAvailable(WsFrameServer.java:82) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.tomcat.websocket.server.WsFrameServer.doOnDataAvailable(WsFrameServer.java:171) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.tomcat.websocket.server.WsFrameServer.notifyDataAvailable(WsFrameServer.java:151) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.tomcat.websocket.server.WsHttpUpgradeHandler.upgradeDispatch(WsHttpUpgradeHandler.java:148) ~[tomcat-embed-websocket-9.0.38.jar:9.0.38]
at org.apache.coyote.http11.upgrade.UpgradeProcessorInternal.dispatch(UpgradeProcessorInternal.java:54) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.coyote.AbstractProcessorLight.process(AbstractProcessorLight.java:59) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.coyote.AbstractProtocol$ConnectionHandler.process(AbstractProtocol.java:868) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1590) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at org.apache.tomcat.util.net.SocketProcessorBase.run(SocketProcessorBase.java:49) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1136) ~[na:na]
at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:635) ~[na:na]
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61) ~[tomcat-embed-core-9.0.38.jar:9.0.38]
at java.base/java.lang.Thread.run(Thread.java:833) ~[na:na]

2023-08-09 17:17:18.318 ERROR 4092 --- [nio-8088-exec-1] c.g.x.r.s.controller.WebSocketServer : 发生错误,sessionId=0,错误信息=Cannot invoke "com.github.xingshuangs.iot.protocol.rtsp.model.base.RtspSessionInfo.getSessionId()" because "this.sessionInfo" is null
2023-08-09 17:17:18.322 INFO 4092 --- [nio-8088-exec-1] c.g.x.i.p.rtsp.service.RtspFMp4Proxy : 关闭FMp4代理服务端
2023-08-09 17:17:18.322 INFO 4092 --- [nio-8088-exec-1] c.g.x.r.s.controller.WebSocketServer : 有一连接关闭!,当前在线人数为0,sessionId=0

是否支持海康的RTSP回放流播放

在使用海康回放流时出现空指针异常,url(rtsp://192.168.1.220:554/Streaming/tracks/201?starttime=20231106t063812z&endtime=20231106t064816z)
使用iot-communication运行DemoRtspFMp4ProxyTcpSync
Exception in thread "main" java.lang.NullPointerException: Cannot read the array length because "this.data" is null
at com.github.xingshuangs.iot.common.buff.ByteReadBuff.checkCondition(ByteReadBuff.java:130)
at com.github.xingshuangs.iot.common.buff.ByteReadBuff.getBytes(ByteReadBuff.java:325)
at com.github.xingshuangs.iot.protocol.rtsp.model.sdp.RtspTrackInfo.createTrackInfo(RtspTrackInfo.java:84)
at com.github.xingshuangs.iot.protocol.rtsp.service.RtspNetwork.describe(RtspNetwork.java:328)
at com.github.xingshuangs.iot.protocol.rtsp.service.RtspNetwork.doAfterConnected(RtspNetwork.java:175)
at com.github.xingshuangs.iot.net.client.TcpClientBasic.getAvailableSocket(TcpClientBasic.java:168)
at com.github.xingshuangs.iot.net.client.TcpClientBasic.connect(TcpClientBasic.java:140)
at com.github.xingshuangs.iot.protocol.rtsp.service.RtspClient.start(RtspClient.java:78)
at com.github.xingshuangs.iot.protocol.rtsp.service.DemoRtspTcpAuthenticator.main(DemoRtspTcpAuthenticator.java:68)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.