使用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服务器
双击启动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中播放
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构