实时视频解决方案 RTSP转RTMP,并转发FLV格式流
最近公司有个项目,要可以看各个设备的实时视频,本来在两天内找了一些参考材料写了一下,里面的链接都是对我开发很有启发的帖子
方案来源参考
方案一: html5 + websocket_rtsp_proxy 实现视频流直播
- 服务器安装streamedian服务器
- 客户端通过video标签播放
缺点:收费的,免费版有很多限制
暂未尝试
方案2 VLC插件
放弃,chrome不支持
方案3:ffmpeg + nginx + videojs,rtsp转rtmp播放
rtmp的播放严重依赖flash,而由于flash本身的安全,现代浏览器大多禁用flash
所以需要结合nginx 作为流媒体服务器,在接收rtmp流的同时 转发 flv 格式流出来
方案4 ffmpeg + video,rtsp转hls播放
以下主要介绍一下我尝试方案3和方案4的过程
方案 3 过程
nginx安装 nginx-http-flv-module 模块
nginx配置
可以通过nginx服务同时分发rtmp流和http-flv流。
rtmp { server { listen 1935; application live { live on; } application history { live on; } application hls { live on; hls on; hls_path temp/hls; hls_fragment 8s; } } } http { ...... server { listen 8080; server_name localhost; 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'; } } ...... }
安装ffmpeg
yum安装
下载安装
在window平台安装nginx模块
这个比较复杂,我还没去尝试,因为已经确定服务会部署在 centos 7 上
window安装ffmpeg
https://zhuanlan.zhihu.com/p/118362010
Path添加环境变量
bin目录下执行 ffmpeg –version 验证安装成功
ffmpeg推流 将rtsp转为rtmp
1
我试了没有成功
ffmpeg -i "rtsp://admin:a1234567@192.168.33.3:554" -vcodec copy -acodec copy -f flv "rtmp://127.0.0.1:1935/live/"
2
我试了没有成功
ffmpeg -rtsp_transport tcp -i rtsp://admin:a1234567@192.168.33.3:554 -f flv -r 25 -s 1920*1080 -an rtmp://localhost:1935/live/
3
执行下面推流成功! 让他视频转rtmp
ffmpeg -rtsp_transport tcp -i rtsp://admin:a1234567@192.168.33.3:554 -vcodec h264 -f flv -an rtmp://localhost:1935/live/room
rtmp://localhost:1935/live/room
使用VLC测试可以正常播放
http部分配置
和上面的nginx.conf一样,这个部分作用主要是转发flv
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'; }
访问可以下载无后缀类型文件
使用 flv.js 实现网页播放
flv.js 构建出错
直接下载js
问题:
使用 flv.js 过程产生的常见问题
使用flv
问题:
chrome自动播放失败解决
flv.js 不支持rtmp视频流
videojs播放rtmp流
提示 No compatible source was found for this video
解决方案:
1.将文件放到服务器上,就是别用本地文件的方式打开
方案 4 过程
该方案只要ffmpeg ,不需要nginx代理 http-flv ,但是播放端不好处理
ffmpeg 推流
ffmpeg -i "rtsp://admin:a1234567@192.168.33.3:554" -c copy -f hls -hls_time 2.0 -hls_list_size 0 -hls_wrap 15 "C:/Users/HLF/Desktop/videojs/hls/test.m3u8"
VLC可以播放,但是播放完片段会暂停
问题:播放完片段后会卡住,不知道要怎么使它连续播放
视频大小
25帧 360p (480x360)
1分钟视频大小 接近 3M