Kratos

A responsible theme for WordPress

浏览器实时播放摄像头rtsp流方案介绍—ffmpeg转发摄像头rtsp流,nodejs使用websocket发送

实现思路为:服务器安装ffmpeg以及nodejs等软件,ffmpeg用来采集摄像头rtsp流,nodejs启动websocket发送采集到的rtsp流,前端页面使用canvas实时渲染。

《浏览器实时播放摄像头rtsp流方案介绍—ffmpeg转发摄像头rtsp流,nodejs使用websocket发送》

实现步骤

1、安装最新版FFmpeg,安装资料:Linux环境如何安装最新版ffmpeg

2、安装nodejs,安装资料:Linux环境下安装最新版nodejs和npm教程

3、使用npm命令安装http-server

sudo npm -g install http-server

此处是为html文件启动服务供站外浏览器访问,当然也可以使用nginx、apache等,或者直接在windows客户端,打开静态文件即可,安装完成之后需要修改静态html文件里的视频流地址才可看到实时视频,修改view-stream.html中红框位置为你node服务器转发的视频流的ip地址加端口号。《浏览器实时播放摄像头rtsp流方案介绍—ffmpeg转发摄像头rtsp流,nodejs使用websocket发送》

4、下载jsmpeg项目文件

github地址:https://github.com/phoboslab/jsmpeg

下载zip包上传至服务器即可。

5、重命名文件名为jsmpeg,然后cd jsmpeg/

6、安装node. websocket依赖

npm install ws

7、启动Websocket中继。提供输入HTTP视频流的密码和端口,以及我们可以在浏览器中连接到的Websocket端口:

node websocket-relay.js supersecret 8081 8082

8、如果使用的http-server 需要启动第三步安装的http-server将view-stream.html提供访问服务,不启动话就是用第三步的本地方法进行访问。

9、在浏览器访问view-stream.html,这时还看不到任何视频画面

10、启动ffmpeg转发rtsp流至8081端口,例:rtsp流为rtsp://账号:密码@摄像头ip:访问端口/cam/realmonitor?channel=1&subtype=1,启动命令:

cd 到安装ffmpeg目录下的bin目录中
./ffmpeg -i "://账号:密码@摄像头ip:访问端口/cam/realmonitor?channel=1&subtype=1" -f mpegts -codec:v mpeg1video -s 640x480 -b:v 1000k -bf 0 http://127.0.0.1:8081/supersecret

至此,这种方法应该就可以在浏览器看到实时的摄像头画面了。

参考文章:

本文参考于github公开项目,以及互联网公开文章,具体文章链接如下:

https://github.com/phoboslab/jsmpeg

https://blog.csdn.net/yelin042/article/details/78134113

 

点赞
  1. 说道:

    请问为什么会出现Too many packets buffered for output stream 0:0.577014:3这种问题呢,试过在后面加-max_muxing_queue_size 1024,但是没有用

    1. Jason说道:

      一般都是缓存队列溢出导致的,或者视频本身存在一些问题导致,适当调整-max_muxing_queue_size参数再试试

发表评论

电子邮件地址不会被公开。 必填项已用*标注