工具介绍
FFmpeg: FFmpeg是一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。github地址:https://github.com/FFmpeg/FFmpeg
Nginx: Nginx (engine x) 是一个高性能的HTTP和反向代理web服务器,同时也提供了IMAP/POP3/SMTP服务。因它的稳定性、丰富的功能集、示例配置文件和低系统资源的消耗而闻名。
nginx-rtmp 是由俄罗斯人开发的 NGINX 模块,该模块完善了 NGINX 对视频的支持,并且实现了对 HLS 的支持。
VideoJS: Video.js 是一个通用的在网页上嵌入视频播放器的 JS 库,Video.js 自动检测浏览器对 HTML5 的支持情况,如果不支持 HTML5 则自动使用 Flash 播放器。
转流步骤
摄像头IP Camera输出的视频流一般为rtsp流, 系统播放需要先将rtsp流转为rtmp流.
转流可以使用ffmpeg程序, 将摄像头rtsp流转为rtmp流, 推送给nginx-rtmp服务器, 发布出来.
1.启动nginx-rtmp服务器
双击启动nginx.exe, 服务器窗口会一闪而过, 此时查看任务管理器, 如果有两个nginx进程在运行, 则说明启动成功
2.使用FFmpeg转流, 并推送给nginx
win+r打开cmd窗口, 进入FFmpeg服务器所在的目录, 使用如下命令将本地摄像头的rtsp码流转成rtmp码流, 并推送给nginx
ffmpeg -i "rtsp://admin:root123456@10.10.2.74:554/h264/ch1/main/av_stream" -vcodec copy -an -f flv "rtmp://127.0.0.1:1935/live/test"
其中rtsp://admin:root123456@10.10.2.74:554/h264/ch1/main/av_stream为本地摄像头的码流地址, rtmp://127.0.0.1:1935/live/test是nginx推送rtmp的地址(具体端口可以在nginx.conf中修改)
此时rtsp流就通过FFmpeg转码, 并通过nginx服务器发布出来了
3.使用VideoJS播放rtmp视频流
3.1.在web工程中导入VideoJS项目
3.2.配置rtmp地址到VideoJS
<!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>Test</title> <script src="js/video-js-5.19.2/video.js"></script> <link type="text/css" rel="stylesheet" href="js/video-js-5.19.2/video-js.css" /> <!--<script> videojs.options.flash.swf = "video-js.swf"; </script>--> </head> <body> <video id="example_video_1" class="video-js vjs-default-skin" controls preload="none" width="640" height="480" data-setup="{}"> <source src="rtmp://127.0.0.1:1935/live/test" type="rtmp/flv" /> <!--<source src="http://localhost:10080/hls/ipc1/ipc1.m3u8" />--> </video> </body> </html>
3.3.运行播放
如果chrome浏览器无法播放, 则设置启用flash控件
3.4.播放效果
到此, 摄像头rtsp流通过FFmpeg成功转成了rtmp流并在nginx中发布, 并在video.js中播放
测试工程包地址
https://download.csdn.net/download/liu844133828/11175176