流媒体方案之Nginx——实现物联网视频监控项目

目录

前言

一、Nginx是什么

二、Nginx在流媒体方案中的位置​编辑

三、软硬件准备

四、移植编译Nginx

五、运行Ngnix

六、测试流媒体方案

七、浏览器播放


前言

最近想做一个安防相关的项目,所以跟着韦东山老师的视频来学习视频监控方案的相关知识,韦东山老师讲的课非常好,本章主要介绍推流端Nginx

一、Nginx是什么

  • 一套开源软件,纯C语言编写,效率高
  • HTTP和反向代理web服务器,同时也是一个 IMAP、POP3、SMTP 代理服务器
  • 稳定、高效,支持高并发
  • 即使强如阿里巴巴,也是使用Nginx:
    http://tengine.taobao.org/,它就是在Nginx的基础上,针对大访问量网站的需求,添加了很多高级功能和特性。
  • 我们只关注Nginx可以作为流体服务器,支持RTMP、HTTPFLV、HLS等协议

二、Nginx在流媒体方案中的位置

推流端

  • FFmpeg使用RTMP协议向Nginx推流

拉流端

  • VLC播放器使用RTMP或HTTPFLV协议从Nginx拉流
  • 浏览器使用HTTPFLV协议从Nginx拉流(安装flv.js)

让Ngnix支持RTMP、HTTPFLV协议
Nginux需要第3方模块
nginx-rtmp-module:实现了RTMP协议
nginx-http-flv-module:在nginx-rtmp-module的基础上,实现了HTTPFLV,并覆盖nginx-rtmp-module的所有功能
所以,我们将会在Nginx上使用nginx-http-flv-module
第3方模块源码:
https://github.com/winshining/nginx-http-flv-module/
添加第三方模块这部分下面配置buildroot会涉及到。

三、软硬件准备

硬件:

  • 100ASK_IMX6ULL开发板 (或其他Linux开发板)
  • USB摄像头

软件:

  • Ubuntu;
  • Buildroot(Buildroot会自动下载其他软件: MJPG-streamer, ffmpeg, nginx);

四、移植编译Nginx

这里跟我前两篇文章移植编译 FFmpeg 和 MJPG-streamer 一样有两种方法:
方法1:下载源码,手工编译
方法2:使用Buildroot,配置选择Nginx,直接编译生成映象文件
我们使用Buildroot:

  1. 设置交叉编译工具链
  2. 下载第3方模块: 在Buildroot目录下,创建目录:mkdir dl/nginx 使用git下载:cd dl/nginx && git clone https://github.com/winshining/nginx-http-flv-module.git
  3. 在Buildroot根目录 make menuconfig
    把原来的lighttpd去掉。(否则板子也会自动启动它,就会有两个HTTP服务了:lighttpd, nginx)
  4. 如图选择Nginx,建议把所有功能都选上
  5. 并且设置额外的参数,在“additional modules”中添加:
    $(TOPDIR)/dl/nginx/nginx-http-flv-module
  6. 最后执行(先删除之前编译的nginx,我发现有时设置的第3方模块不起作用,删除后再make就可以了):rm -rf
    output/build/nginx-1.15.7 && make
  7. 这会在Buildroot的dl/nginx目录下自动下载源码,并编译
  8. 结果保存在output/images目录下,有emmc.img, sdcard.img,可以直接烧写到板能的EMMC或SD卡上

五、运行Ngnix

在开发板上烧写好映像文件后,开发板启动时会自动运行Ngnix
为了让它支持RTMP、HTTPFLV,需要修改配置文件/etc/nginx/nginx.conf :

修改后重启Nginx服务:

/etc/init.d/S50nginx restart

六、测试流媒体方案

在开发板上运行了Nginx后,它就已经是一个WEB站点了。
可以在电脑浏览器里输入开发板的IP访问开发板:如图

推流
在开发板上执行:

ffmpeg -f v4l2 -framerate 10 -i /dev/video1 -q 10  -f flv rtmp://127.0.0.1/live/wei

拉流
在PC上安装VLC播放器:https://www.videolan.org/

  1. 使用RTMP协议拉流:VLC播放器中点击“媒体”->“打开网络串流”,输入:rtmp://192.168.5.9/live/wei
    就可以播放了
  2. 使用HTTPFLV协议拉流:VLC播放器中点击“媒体”->“打开网络串流”,输入: http://192.168.5.9/test?app=live&stream=wei ,就可以播放了

缺点
IMX6ULL性能太弱,在VLC播放器里看到的视频很卡,很滞后
我们可以上传一个mp4文件到开发板,把它推到

Nginx: ffmpeg -re -i test.mp4 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/wei
然后再用VLC拉流看看,会发现很顺畅

笔记:推送mp4文件就不会涉及到编解码 就会快 会把mp4里面的视频音频原样推送给nginx -re :保持原来的播放速度(就不用一下子把文件全推)

-i test 取test这个文件

-vcodec copy -acodec copy 视频、音频编解码器 保持跟原来的一样 。

framerate 10 代表1秒10帧 –q 10 代表质量是10
-f flv rtmp://127.0.0.1/live/wei 以rtmp协议推送给本地服务器
rtmp://192.168.1.6/live/wei 使用rttp拉流
live是app stream name是wei 从开发板找到live这个app里面wei的这个流

http://192.168.1.6/test?app=live&stream=wei 是用httpflv协议拉流 test是目录

对应前面写的节点 去这个目录里面拉这个app live的stream 就可以播放了

七、浏览器播放

参考:
无插件web直播解决方案,ffmpeg+nginx-http-flv-module+flv.js
【入门】无插件web直播解决方案,ffmpeg+nginx-http-flv-module+flv.js_ffmpeg + nginx + nginx-http-flv-module + flv-CSDN博客
HTTP-FLV直播初探
https://www.cnblogs.com/saysmy/p/7851911.html
具体参考步骤如下:
1.修改/etc/nginx/nginx.conf:
如下:
location /test {
flv_live on;
chunked_transfer_encoding on;
add_header ‘Access-Control-Allow-Origin’ ‘*’;
add_header ‘Access-Control-Allow-Credentials’ ‘true’;
}

2.编写一个html网页
无插件web直播解决方案,ffmpeg+nginx-http-flv-module+flv.js
https://blog.csdn.net/string_kai/article/details/100598268
Heml的demo:
HTTP-FLV直播初探
https://www.cnblogs.com/saysmy/p/7851911.html
新建一个html文件,复制里面的源码

  1. 修改里面的url地址 https://xl.live-play.acgvideo.com/live-xl/520658/live_12860646_332_c521e483.flv?wsSecret=778d91efcb22c588be28cb67ebe57082&wsTime=1510929009
    修改为: http://192.168.5.9/test?app=live&stream=wei (我们的html拉流串流)
  2. 他用到一个flv.js文件 我们本地没有 所以要去网上下载 在html中改: <script src=“./flv.js?v=2”>
    改为

3.把开发板中的 /usr/html/index.html里面的内容改为上述保存的html的内容,就大功告成了。
此时在浏览器中输入开发板的ip,便可以访问监控页面,如图。

注意我的开发板的ip是192.168.5.9,老师使用的是192.168.1.6

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/194899.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

lv11 嵌入式开发 ADC 16

目录 1 ADC 简介 2 Exynos4412下的ADC控制器 2.1 总览 2.2 特征 2.3 ADC转换时间 2.4 IO口 ​编辑3 ADC寄存器详解 3.1 寄存器介绍 3.2 ADCCON控制寄存器 3.3 ADCDAT 3.4 CLRINTADC 3.5 ADCMUX ​编辑 4 ADC编程 1 ADC 简介 ADC(Analog to Digital Converter)即…

Android开发,JNI开发项目创建

文章目录 Android开发&#xff0c;JNI开发项目创建1.jni是什么 Android开发&#xff0c;JNI开发项目创建 创建工程 1.jni是什么 使得java可以访问底层c语言&#xff0c;java本地化接口&#xff0c;是桥梁。 运行下我们的项目 出现这个就是我们的JNI开发环境已经配置好了 是…

【SpringBoot】SpringBoot配置Swagger

文章目录 前言配置步骤使用步骤总结 前言 使用Swagger只需要按照规范去定义接口及接口的相关信息&#xff0c;就可以做到生成接口文档和在线接口调试页面 官网&#xff1a;Swagger官网 Knife4j是为Java MVC框架集成Swagger生成Api文档的增强解决方案 配置步骤 1.导入knife4j的m…

shell命令编写

1. 1 #!/bin/bash 2 3 directory_path"/txh"4 5 # 使用 find 命令查找指定路径下的文件&#xff0c;并使用 wc 命令统计行数&#xff08;即文件个数&#xff09;6 7 file_count$(find "directory_path" -type f | wc -l)8 9 10 echo "在路径$director…

网工学习5 交换机端口相关配置

交换机的接口属性默认支待一般网络环境&#xff0c;一般情况下是不需要对其接口进行设置的。在某些情况下需 要对其端口属性进行配置时&#xff0c;配置的对象主要有接口隔离、速率、双工等信息。 5.1 接口隔离设置 > 配置接口 GE0/0/1 和 GE0/0/2 的接口隔离功能&#xf…

Leetcode1094. 拼车

Every day a Leetcode 题目来源&#xff1a;1094. 拼车 解法1&#xff1a;差分数组 对于本题&#xff0c;设 a[i] 表示车行驶到位置 i 时车上的人数。我们需要判断是否所有 a[i] 都不超过 capacity。 trips[i] 相当于把 a 中下标从 fromi 到 toi−1 的数都增加 numPassenge…

【ArcGIS Pro微课1000例】0045:深度学习--车牌模糊

借助ArcGIS Pro提供的车牌模糊训练模型,可以很方便实现车牌模糊。 文章目录 一、车牌模糊对比二、工具介绍三、案例实现一、车牌模糊对比 车牌模糊前: 车牌模糊后: 二、工具介绍 本功能使用的依然是ArcGIS Pro提供的深度学习工具中的使用深度学习分类像素(Classify Pixel…

JavaScript基础知识20——循环结构:退出循环

哈喽&#xff0c;大家好&#xff0c;我是雷工&#xff01; 最近一段时间没学习JavaScript&#xff0c;今天看数字孪生的资料&#xff0c;发现很多低代码开发还是得必须熟悉JavaScript才行&#xff0c;为了以后方便搞数字孪生&#xff0c;有时间还是继续学习下JavaScript。 以下…

如何开启Windows Server 2016 远端桌面

使用GUI 设定 服务器管理器–> 本地服务器–> 远端桌面 启用远端桌面 远端–> 允许远端连线至此电脑 会提示防火墙设定跟电源设定 防火墙之前已经关闭了 完成

matlab 多目标粒子群优化算法MOPSO

1、内容简介 略 21-可以交流、咨询、答疑 多目标、粒子群 2、内容说明 多目标粒子群优化算法MOPSO 3、仿真分析 略 %% Problem Definition TestProblem3; % Set to 1, 2, or 3 switch TestProblem case 1 CostFunction(x) MyCost1(x); nVar5; …

数据库管理-第120期 初探Halo数据库(202301201)

数据库管理-第120期 初探Halo数据库&#xff08;202301201&#xff09; 12月份正好也是第120期&#xff0c;新的一篇文章&#xff0c;尝试一条新的路线。其实吧&#xff0c;Halo&#xff08;羲和&#xff09;这个数据库我较早时间就听说过&#xff08;早于今年DTCC&#xff0c…

时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标)

时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标) 目录 时序预测 | Python实现LSTM长短期记忆神经网络时间序列预测(多图,多指标)预测效果基本介绍环境准备程序设计参考资料预测效果 基本介绍 LSTM是一种递归神经网络(RNN)的变体

HCIP —— OSPF 综合实验

实验拓扑&#xff1a; 实验要求&#xff1a; 1&#xff0c;R4为ISP&#xff0c;其上只能配置IP地址&#xff1b;R4与其他所有直连设备间均使用公有IP 2&#xff0c;R3-R5/6/7为MGRE环境&#xff0c;R3为中心站点&#xff1b; 3&#xff0c;整个OSPF环境IP基于172.16.0.0/16划分…

如何从 Jira 成功迁移到极狐GitLab,看这个就够了!

内容来源&#xff1a;https://about.gitlab.com/blog 作者&#xff1a;Melissa Ushakov Atlassian 之前表示&#xff0c;到 2024 年 2 月会全面终止对于其服务器端产品的支持。 随着 Jira Server 的生命周期即将结束&#xff0c;众多组织都在考虑将其敏捷项目管理工具从Jira 迁…

van-list的onload事件多次触发的问题

一、问题描述 如图所示&#xff0c;页面刷新的时候&#xff0c;调了3次接口&#xff08;总共27条数据&#xff0c;我分页10条&#xff09;&#xff0c;一直莫名奇妙的 我期望是默认加载第一页&#xff0c;然后我上拉的时候再push第二页的数据 二、解决方法 还是要多看文档 1…

彻底解决ModuleNotFoundError: No module named ‘exceptions‘【Bug完美解决】

文章目录 项目场景:问题描述原因分析:解决方案:此Bug解决方案总结心得项目场景: 根据本文可找到bug原因并彻底解决**ModuleNotFoundError: No module named ‘exceptions‘**Bug 报错: E:\Anconda\python.exe c:\Users\24190\PycharmProjects\pythonProject4py尝试 gong…

RK3568平台开发系列讲解(Linux系统篇) dtb 到 device_node 的转化

🚀返回专栏总目录 文章目录 一、dtb 展开流程二、dtb 解析过程源码分析沉淀、分享、成长,让自己和他人都能有所收获!😄 📢本篇将介绍通过设备树 dtb 如何展开成 device_node 一、dtb 展开流程 设备树源文件编写: 根据设备树的基本语法和相关知识编写符合规范的设备树。…

c# OpenCV 读取、显示和写入图像(二)

读取、显示和写入图像是图像处理和计算机视觉的基础。即使在裁剪、调整大小、旋转或应用不同的滤镜来处理图像时&#xff0c;您也需要先读取图像。因此&#xff0c;掌握这些基本操作非常重要。 imread()读取图像imshow()在窗口中显示图像imwrite()将图像保存到文件目录里 我们…

YOLOV7改进:在C5模块不同位置添加SegNext_Attention

1.该文章属于YOLOV5/YOLOV7/YOLOV8改进专栏,包含大量的改进方式,主要以2023年的最新文章和2022年的文章提出改进方式。 2.提供更加详细的改进方法,如将注意力机制添加到网络的不同位置,便于做实验,也可以当做论文的创新点。 3.涨点效果:SegNext_Attention注意力机制,实现…

毕业论文管理系统的设计与实现

摘要 毕业论文工作是高等学校本科培养阶段的一个重要环节。目前论文管理工作存在着许多问题,例如人工管理极为不便;学生对论文所要撰写的内容并不十分了解,与指导老师的沟通非常不便;老师的指导监督也很难完全到位;手工评审的效率低等。而现有的一些毕业论文信息管理或答辩评审…