Giter VIP home page Giter VIP logo

gin-rtsp's Introduction

gin-rtsp

基于 JSMpeg 的原理,在HTML页面上直接播放RTSP视频流,使用Gin框架开发。

主要模块

  • API 接口:接收FFMPEG的推流数据和客户端的HTTP请求,将客户端需要播放的RTSP地址转换为一个对应的WebSocket地址,客户端通过这个WebSocket地址便可以直接播放视频,为了及时释放不再观看的视频流,这里设计为客户端播放时需要在每隔60秒的时间里循环请求这个接口,超过指定时间没有收到请求的话后台便会关闭这个视频流。

  • FFMPEG 视频转换:收到前端的请求后,启动一个Goroutine调用系统的FFMPEG命令转换指定的RTSP视频流并推送到后台对应的接口,自动结束已超时转换任务。

  • WebSocket Manager:管理WebSocket客户端,将请求同一WebSocket地址的客户端添加到一个Group中,向各个Group广播对应的RTSP视频流,删除Group中已断开连接的客户端,释放空闲的Group。

注意

  • 需要摄像头的码流为H264码流

编译

项目需要运行在安装有FFMPEG程序的环境中。

Docker

Dockerfile 中已经封装好了需要的环境,可以使用Docker build后,以Docker的方式运行。

$ docker build -t ginrtsp .
$ docker run -td -p 3000:3000 ginrtsp

本地编译

linux

go build -o ./bin/linux/rtsp-relay

windows

go build -o ./bin/windows/rtsp-relay.exe

环境变量

  • RTSP_PORT 默认为3000
  • RTSP_CORS 默认为false, 设置为true时跨域,其他不跨域

测试

使用内置的FFMPEG转换

将需要播放的RTSP流地址提交到 /stream/play 接口,例如:

POST /stream/play
{
   "url": "rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0"
}

后台可以正常转换此RTSP地址时便会返回一个对应的地址,例如:

{
    "code": 0,
    "data": {
        "path": "/stream/live/5b96bff4-bdb2-3edb-9d6e-f96eda03da56"
    },
    "msg": "success"
}

编辑html文件夹下view-stream.html文件,将script部分的url修改为此地址,在浏览器中打开,便可以看到视频了。

手动运行FFMPEG

由于后台转换RTSP的进程在超过60秒没有请求后便会停止,也可以通过手动运行ffmpeg命令,来更方便地在测试状态下查看视频。

ffmpeg -rtsp_transport tcp -re -i 'rtsp://admin:[email protected]:554/cam/realmonitor?channel=1&subtype=0' -q 0 -f mpegts -c:v mpeg1video -an -s 960x540 http://127.0.0.1:3000/stream/upload/test

通过如上命令,运行之后在view-stream.html文件的url中填入对应的地址为/stream/live/test,在浏览器中打开查看视频。

显示效果

参考

JSMpeg – MPEG1 Video & MP2 Audio Decoder in JavaScript

gin-rtsp's People

Contributors

alwxkxk avatar dependabot[bot] avatar idhowardgj94 avatar wanghaoxi3000 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  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  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  avatar

Watchers

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

gin-rtsp's Issues

请教,这三行me看懂

reflush := make(chan int) # make 不应该写在函数外层作为全局变量么。。
if cmd, stdin, err := runFFMPEG(service.URL, processCh); err != nil {
return serializer.Err(400, err.Error(), err)
} else {
go keepFFMPEG(cmd, stdin, &reflush, processCh)
}

"ffmpeg": executable file not found in %PATH%

在网上找到一段可以播放rtsp流,测试可以用,但掉接口 play 时报错,请教下这个时什么原因

2020-03-25 22:12:42 [I] Websocket manage start
2020-03-25 22:12:45 [I] Websocket client 01177f66-b333-443e-9c67-9437589b870c connect
2020-03-25 22:12:45 [I] Register client 01177f66-b333-443e-9c67-9437589b870c to 4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6 group success
[GIN] 2020/03/25 - 22:12:45 | 200 | 4.8815ms | 127.0.0.1 | GET /stream/live/4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6
2020-03-25 22:12:45 [I] Websocket client 78607b85-042f-4880-96ba-c694d17dfb48 connect
2020-03-25 22:12:45 [I] Register client 78607b85-042f-4880-96ba-c694d17dfb48 to 4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6 group success
[GIN] 2020/03/25 - 22:12:45 | 200 | 975.8µs | 127.0.0.1 | GET /stream/live/4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6
[GIN] 2020/03/25 - 22:13:00 | 200 | 975.9µs | 127.0.0.1 | POST /stream/play
2020-03-25 22:13:00 [E] Start ffmpeg err:exec: "ffmpeg": executable file not found in %PATH%
2020-03-25 22:13:00 [I] Stop translate rtsp rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov

子进程无法推送到子进程接口

FFMPEG 视频转换:收到前端的请求后,启动一个Goroutine调用系统的FFMPEG命令转换指定的RTSP视频流并推送到后台对应的接口,我这里一直没有收到推送的请求,很奇怪,不知道为什么

"ffmpeg": executable file not found in %PATH%

在网上找到一段可以播放rtsp流,测试可以用,但掉接口 play 时报错,请教下这个时什么原因

2020-03-25 22:12:42 [I] Websocket manage start
2020-03-25 22:12:45 [I] Websocket client 01177f66-b333-443e-9c67-9437589b870c connect
2020-03-25 22:12:45 [I] Register client 01177f66-b333-443e-9c67-9437589b870c to 4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6 group success
[GIN] 2020/03/25 - 22:12:45 | 200 | 4.8815ms | 127.0.0.1 | GET /stream/live/4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6
2020-03-25 22:12:45 [I] Websocket client 78607b85-042f-4880-96ba-c694d17dfb48 connect
2020-03-25 22:12:45 [I] Register client 78607b85-042f-4880-96ba-c694d17dfb48 to 4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6 group success
[GIN] 2020/03/25 - 22:12:45 | 200 | 975.8µs | 127.0.0.1 | GET /stream/live/4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6
[GIN] 2020/03/25 - 22:13:00 | 200 | 975.9µs | 127.0.0.1 | POST /stream/play
2020-03-25 22:13:00 [E] Start ffmpeg err:exec: "ffmpeg": executable file not found in %PATH%
2020-03-25 22:13:00 [I] Stop translate rtsp rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov

windows启动服务 浏览器请求错误

WebSocket connection to 'ws://127.0.0.1:3000/stream/live/08066448-ebcb-3465-996e-af4148687b23' failed: Error during WebSocket handshake: net::ERR_CONNECTION_RESET

一直报这个错误,请问如何解决呀

"ffmpeg": executable file not found in %PATH%

在网上找到一段可以播放rtsp流,测试可以用,但掉接口 play 时报错,请教下这个时什么原因

2020-03-25 22:12:42 [I] Websocket manage start
2020-03-25 22:12:45 [I] Websocket client 01177f66-b333-443e-9c67-9437589b870c connect
2020-03-25 22:12:45 [I] Register client 01177f66-b333-443e-9c67-9437589b870c to 4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6 group success
[GIN] 2020/03/25 - 22:12:45 | 200 | 4.8815ms | 127.0.0.1 | GET /stream/live/4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6
2020-03-25 22:12:45 [I] Websocket client 78607b85-042f-4880-96ba-c694d17dfb48 connect
2020-03-25 22:12:45 [I] Register client 78607b85-042f-4880-96ba-c694d17dfb48 to 4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6 group success
[GIN] 2020/03/25 - 22:12:45 | 200 | 975.8µs | 127.0.0.1 | GET /stream/live/4ff578b3-8a0e-37e9-91b8-1a57fc4c4af6
[GIN] 2020/03/25 - 22:13:00 | 200 | 975.9µs | 127.0.0.1 | POST /stream/play
2020-03-25 22:13:00 [E] Start ffmpeg err:exec: "ffmpeg": executable file not found in %PATH%
2020-03-25 22:13:00 [I] Stop translate rtsp rtsp://wowzaec2demo.streamlock.net/vod/mp4:BigBuckBunny_115k.mov

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.