目录
一、背景
1. 环境
jetsonNano(ubuntu系统,通过4G模块联网) 开发板做推流端(由于板子被焊起来了,这里用windows11主机代替);腾讯云公网服务器(用来部署nginx做转发);任意连网设备通过公网URL获取视频流。
因为现在浏览器不支持flash,所以这里用到了nginx-http-flv-module,来将rtsp转成http协议的flv;
推流端(jetsonNano/win11主机),腾讯云服务器,客户端(任意设备),海康威视网络摄像头。
2. 流程介绍
-
通过ffmpeg将同一网段下的海康威视视频流推流到公网服务器;
-
公网服务器部署nginx服务器;
-
客户端通过公网nginx获取视频流;
-
前端代码获取视频流进行开发。
二、具体流程
1. 下载安装ffmpeg(这里可以参考现有的博客
2. 公网配置nginx
- 下载nginx并解压
wget http://nginx.org/download/nginx-1.22.1.tar.gz tar -zxvf nginx-1.22.1.tar.gz
- 下载nginx依赖(pcre, zlib, ssl)
sudo su # 进入管理员模式 apt-get install libpcre3 libpcre3-dev apt-get install zlib1g-dev apt-get install openssl
-
下载nginx-http-flv-module
git clone https://github.com/winshining/nginx-http-flv-module.git
-
编译
./configure --prefix=/usr/local/nginx --add-module=/home/user/nginx-http-flv-module --with-http_ssl_module make make install
-
修改nginx.conf(如果上一步是跟着我走的话,那就在/usr/local/nginx/conf/nginx.conf)
vim /usr/local/nginx/conf/nginx.conf # 按i后可以开始编辑文件 # 按Esc退出编辑 # 然后,在Esc环境下,按:wq保存并退出
以下是要修改的地方
# 最外层 rtmp { server { listen 1935; chunk_size 4000; application live{ live on; gop_cache on; } } } # http里面的server里面 # 可能有冗余或者不需要的地方,我懒得测试了 location /hls { root html; types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } #add_header Cache-Control no-cache; add_header Access-Control-Allow-Origin *; } location /live { flv_live on; chunked_transfer_encoding on; #open 'Transfer-Encoding: chunked' response add_header 'Access-Control-Allow-Credentials' 'true'; #add additional HTTP header add_header 'Access-Control-Allow-Origin' '*'; #add additional HTTP header add_header Access-Control-Allow-Headers X-Requested-With; add_header Access-Control-Allow-Methods GET,POST,OPTIONS; add_header 'Cache-Control' 'no-cache'; types { application/vnd.apple.mpegurl m3u8; video/mp2t ts; } }
记得开放1935和80端口,如果80冲突就修改,记得开放修改后的端口
-
启动niginx服务
# 这里的相关操作都要管理员权限 ./usr/local/nginx/sbin/nginx # 启动nginx ./usr/local/nginx/sbin/nginx -s reload # 重启nginx,修改配置文件后可以重启下 ./usr/local/nginx/sbin/nginx -s stop # 关闭nginx
3. 推流
本地视频流推到公网服务器
ffmpeg -i rtsp://admin:123jicheng@192.168.1.64/Streaming/Channels/1 -an -c:v copy -f flv -rtsp_transport udp rtmp://192.168.1.22/live/test # 192.168.1.22换成公网ip
其中
-i rtsp://admin:123jicheng@192.168.1.64/Streaming/Channels/1中
admin 是摄像头用户名,第一次使用摄像头时需要注册的;
123jicheng 是密码,同上;
后面的是海康威视摄像头具体的视频流通道;
-an 是屏蔽音频(发现屏蔽音频了才能在前端用
-c:v copy 是复制视频流(因为音频流会导致前端代码无法显示视频)
-f flv 是视频流格式,
-rtsp_transport udp 传输协议(因为要多设备访问所以用udp而不是tcp)
4. 拉流
前端就可以直接拿下面地址用了,前端代码我这里就不展示了,网上随便搜一个demo就可以试
http://192.168.1.22/live?port=1935&app=live&stream=test # 192.168.1.22换成公网ip
延迟问题5,6秒吧差不多