Skip to content

Commit

Permalink
完善项目文件布局和README文件
Browse files Browse the repository at this point in the history
  • Loading branch information
wanghaoxi3000 committed Dec 18, 2019
1 parent ae4ae48 commit a95fb61
Show file tree
Hide file tree
Showing 5 changed files with 56 additions and 22 deletions.
29 changes: 10 additions & 19 deletions Dockerfile
Original file line number Diff line number Diff line change
Expand Up @@ -6,20 +6,23 @@ ENV GO111MODULE=on
ENV GOPROXY=https://goproxy.io

COPY . ${APP_DIR}
WORKDIR ${APP_DIR}

RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list \
&& sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list \
&& apt-get update && apt-get install -y wget make g++ \
&& wget -nv https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz && tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz

WORKDIR ${APP_DIR}
RUN export PATH=$PATH:/usr/local/go/bin && make all
&& apt-get update \
&& apt-get install -y wget\
&& wget -nv https://dl.google.com/go/go${GO_VERSION}.linux-amd64.tar.gz \
&& tar -C /usr/local -xzf go${GO_VERSION}.linux-amd64.tar.gz \
&& export PATH=$PATH:/usr/local/go/bin \
&& go build -o gin-rtsp


FROM ubuntu:18.04

ENV TZ=Asia/Shanghai
ENV LANG=en_US.UTF-8
ENV LOG_LEVEL=info

RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list \
&& sed -i 's/security.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list \
Expand All @@ -29,21 +32,9 @@ RUN sed -i 's/archive.ubuntu.com/mirrors.aliyun.com/g' /etc/apt/sources.list \
&& localedef -i en_US -c -f UTF-8 -A /usr/share/locale/locale.alias en_US.UTF-8 \
&& apt-get clean && apt-get autoclean && rm -rf /var/lib/apt/lists/* /tmp/* /var/tmp/*

ENV APP_DIR=/usr/local/hkapi
ENV GIN_MODE=release
ENV LOG_LEVEL=info
ENV NVR_SAVE_PATH=/srv/hkapi/stream
ENV SQLITE_PATH=/var/hkapi/database
ENV DB_TYPE=sqlite3
ENV DB_DSN=${SQLITE_PATH}/sqlite.db

COPY --from=builder /go/src/lib ${APP_DIR}/lib
COPY --from=builder /go/src/hkapi.out ${APP_DIR}
COPY --from=builder /go/src/run.sh ${APP_DIR}
COPY --from=builder /go/src/gin-rtsp /usr/local/bin/gin-rtsp

EXPOSE 3000

WORKDIR ${APP_DIR}
RUN mkdir -p ${NVR_SAVE_PATH} && mkdir -p ${SQLITE_PATH} && chmod +x run.sh

ENTRYPOINT [ "./run.sh" ]
ENTRYPOINT [ "/usr/local/bin/gin-rtsp" ]
47 changes: 45 additions & 2 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,12 +1,55 @@
# gin-rtsp
基于[**JSMpeg**](https://github.com/phoboslab/jsmpeg/)的原理,在HTML页面上直接播放RTSP视频流,使用Gin框架开发。

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

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

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


## 测试
/stream/play
项目需要运行在安装有FFMPEG程序的环境中。通过编写了一份Dockerfile已经封装好了需要的环境,可以使用Docker build后,以Docker的方式运行。
```
$ docker build -t ginrtsp .
$ docker run -td -p 3000:3000 ginrtsp
```

### 使用内置的FFMPEG转换
将需要播放的RTSP流地址提交到 /stream/play 接口,例如:
```
POST /stream/play
{
"url": "rtsp://admin:password@192.168.3.10:554/cam/realmonitor?channel=1&subtype=0"
}
```

后台可以正常转换此RTSP地址时便会返回一个对应的地址,例如:
```
{
"url":"rtsp://admin:admin@192.168.1.11:554/cam/realmonitor?channel=1&subtype=0"
"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:password@192.168.3.10: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/upload/test,在浏览器中打开查看视频。


显示效果
![](./video-example.png)


## 参考
[JSMpeg – MPEG1 Video & MP2 Audio Decoder in JavaScript](https://github.com/phoboslab/jsmpeg/)
File renamed without changes.
2 changes: 1 addition & 1 deletion RtspWebSocket/view-stream.html → html/view-stream.html
Original file line number Diff line number Diff line change
Expand Up @@ -17,7 +17,7 @@
<script type="text/javascript" src="jsmpeg.min.js"></script>
<script type="text/javascript">
var canvas = document.getElementById('video-canvas');
var url = 'ws://127.0.0.1:3000/stream/live/5b96bff4-bdb2-3edb-9d6e-f96eda03da56';
var url = 'ws://192.168.3.19:4000/stream/live/5b96bff4-bdb2-3edb-9d6e-f96eda03da56';
var player = new JSMpeg.Player(url, {canvas: canvas});


Expand Down
File renamed without changes

0 comments on commit a95fb61

Please sign in to comment.