[技术干货] 使用FFmpeg+Nginx+VideoJS将摄像头rtsp流转码成rtmp流并播放

工具介绍

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服务器

image.png

双击启动nginx.exe, 服务器窗口会一闪而过, 此时查看任务管理器, 如果有两个nginx进程在运行, 则说明启动成功

image.png

2.使用FFmpeg转流, 并推送给nginx


win+r打开cmd窗口, 进入FFmpeg服务器所在的目录, 使用如下命令将本地摄像头的rtsp码流转成rtmp码流, 并推送给nginx

ffmpeg -i "rtsp://username:password@IP/LiveMedia/ch1/Media1/trackID=1" -vcodec copy -an -f flv "rtmp://127.0.0.1:1935/live/test"

其中rtsp://username:password@IP/LiveMedia/ch1/Media1/trackID=1为本地摄像头的码流地址, rtmp://127.0.0.1:1935/live/test是nginx推送rtmp的地址(具体端口可以在nginx.conf中修改)

此时rtsp流就通过FFmpeg转码, 并通过nginx服务器发布出来了


3.使用VideoJS播放rtmp视频流


3.1.在web工程中导入VideoJS项目

image.png

3.2.配置rtmp地址到VideoJS

<!DOCTYPE html>
<html>
 
<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控件

image.png

3.4.播放效果

image.png

到此, 摄像头rtsp流通过FFmpeg成功转成了rtmp流并在nginx中发布, 并在video.js中播放


原文链接:https://blog.csdn.net/liu844133828/java/article/details/89704314