专栏首页嵌入式Linux系统开发视频监控之 ffmpeg + nginx + rtmp/httpflv

视频监控之 ffmpeg + nginx + rtmp/httpflv

通过上一篇文章,我们实现了了局域网内 MJPG-Streamer 的物联网监控方案,今天带领大家完成《ffmpeg + nginx + rtmp/httpflv》的公网视频监控。

上一篇文章链接如下:

手把手教你视频监控之 MJPG-Streamer 方案

今天这篇文章,我们先看效果:

1、获取板子上摄像头的视频流,使用 ffmpeg 进行 RTMP 推流到板子上的 nginx 服务器,在外网使用 vlc 播放器从 nginx 服务器获取这个视频流(拉流)。

我中间进行了暂停,因为 imx6ull 性能较差,RTMP 推流拉流中对视频流进行编解码需要40秒左右,所以进行了暂停。(由视频中可以看出,我获取视频流中间采用的是 http://23872841lv.zicp.vip/ 这个网址,而不是IP地址,说明拉流是在公网,在局域网内输入IP地址也是可以的)

推流命令:

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

拉流命令:

http://23872841lv.zicp.vip/test?app=live&stream=wei

想要在公网进行拉流,需要购买花生壳的内网穿透进行域名映射,将板子的IP地址映射到外网:

2、如果觉得使用 vlc 软件拉流不方便,因为还要下载软件,可以自己弄个 html 网页,对视频流进行解析。但是博主照的韦老师的教程弄了个可以解析视频流的 html 网页,获取摄像头图像太卡,所以这里改成获取板子上的 mp4 文件,然后在自己的网页进行拉流:

可以使用网页进行解析的原因,是因为 RTMP 推流本身不像 RTSP 那样复杂, RTMP 推的流只需要在浏览器安装插件就可以播放视频流,这里使用flv.js,这是b站的开源播放器,GitHub有1W多star。

推流命令:

ffmpeg -re -i test.mp4 -vcodec copy -acodec copy -f flv rtmp://127.0.0.1/live/wei

拉流命令(直接访问板子 IP 即可,有一个自己写的 index.html,html 会获取视频流):

http://23872841lv.zicp.vip/

实现

架构:

Nginx在流媒体方案中的位置

推流端

FFmpeg 使用 RTMP 协议向 Nginx 推流。

拉流端(二选一)

1、VLC 播放器使用 RTMP 或 HTTPFLV 协议从 Nginx 拉流。

2、浏览器使用 HTTPFLV 协议从 Nginx 拉流(安装flv.js)。

具体的实现大家可以看韦老师的教程,手把手教学:

https://www.100ask.net/detail/p_5f0fc9e9e4b0ee0b8872c2c3/6

也有PPT

我们只说几个知识点

不光是在 imx6ull 板子可以实现,在其他板子也可以。因为我们知道,在嵌入式 linux 中是分层的,如果在其他板子实现:

1、首先,我们需要一个对应板子的 uboot 。

2、我们需要有对应板子的内核(使能UVC:usb video capture)和设备树文件。我们使用的是USB摄像头,所以 USB 驱动部分不可以有问题,这样摄像头插入板子以后,会在/dev/video*下面产生一个新的设备节点,我们读写这个设备节点可以获取视频流。

3、视频监控项目所需要的 ffmpeg、nginx 等都是在文件系统中,所以我们只需要使用 buildroot 编译新的文件系统,对所需要软件进行移植。编译完成可以下载进板子,也可以通过 nfs 挂在到板子上。

为了方便,博主的 uboot 是下载到板子中,linux 内核和设备树是通过 tftp 挂载到板子上,根文件系统由于太大,是通过 nfs 挂载到板子上,调试很方便。

手把手教你用 buildroot 构建根文件系统

Nginux本身不支持RTMP,需要第3方模块。

nginx-rtmp-module:实现了RTMP协议

nginx-http-flv-module:在nginx-rtmp-module的基础上,实现了HTTPFLV,并覆盖nginx-rtmp-module的所有功能。

所以,我们将会在 Nginx 上使用nginx-http-flv-module。源码位置:https://github.com/winshining/nginx-http-flv-module/,我们可以按照韦老师的教程移植到文件系统中。

目前几种视频流的简单对比:

  • RTMP(Real Time Messaging Protocol)是基于TCP的,由Adobe公司为Flash播放器和服务器之间音频、视频传输开发的开放协议。
  • HLS(HTTP Live Streaming)是基于HTTP的,是Apple公司开放的音视频传输协议。
  • HTTP FLV则是将RTMP封装在HTTP协议之上的,可以更好的穿透防火墙等。

note:使用 vlc 播放器点播 mp4 文件或者直播获取摄像头视频流都可以,使用浏览器的话,flv.js 现阶段支持的较少,手机端浏览器基本不支持,电脑端浏览器看情况支持,未能做到很好的兼容,请注意!!!

·················· END ··················

本文分享自微信公众号 - 嵌入式Linux系统开发(Jason_Linux_),作者:Jasonangel

原文出处及转载信息见文内详细说明,如有侵权,请联系 yunjia_community@tencent.com 删除。

原始发表时间:2021-07-05

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 监控摄像头RTSP协议对接腾讯云直播

    传统监控高清摄像机ip camera(如: 海康,大华等)遵循监控行业标准,一般只支持rtsp传输协议,互联网直播通用标准为rtmp协议,将这些摄像机视频流引入...

    tylerliu
  • HTTP-FLV直播初探

    目前几种视频流的简单对比: 协议 httpflv rtmp hls dash 传输方式 http流 tcp...

    smy
  • 工具系列 | 视频监控RTSP转HLS解决方案

    由于公司业务,需要实现基于WEB访问监控摄像头实时流的预览,经过各种百度,补充了不少相关知识,了解到了很多大神的实现方法,也因为很多过时的帖子,而踩了不少的坑。

    Tinywan
  • RTSP?不存在的 -> 前端实时流探索记

    传送门:https://segmentfault.com/a/1190000022994032

    ConardLi
  • iOS直播app之Mac搭建nginx+rtmp服务器

    前言 今年移动直播行业的兴起,很多公司都在做直播,转眼间过了大半年了,直播的各种技术相对成熟了起来。今天我们公司也追赶潮流,索性我也转战直播,下面从第一步开始...

    s_在路上
  • ubuntu搭建推流服务器Nginx+rtmp

    AlicFeng
  • 协议转换之rtsp转rtmp推流

    近些年,每一年的风口,几乎都离不开音视频。2020年了,音视频依然很火,只不过是火的领域有所不同,从年初受疫情而爆发的视频会议,到后来为了大力发展网络经济的直播...

    视界音你而不同
  • 简单的 H5 视频推流解决方案

    作者:周超 导语 随着直播平台爆发式增长,直播平台从 PC 端转战移动端,紧跟着直播的潮流,自己学习实现了一套简单的 H5 视频推流的解决方案,下面就给小伙伴...

    云加社区
  • Qt显示视频流——nginx+rtmp搭建直播服务器(二)

    上次介绍的是使用ffmpeg推流,这次介绍的是使用nginx + rtmp搭建直播服务器。

    用户5908113
  • 手把手教你使用ffmpeg及nginx实现直播、点播、安防监控

    2. ffmpeg作为推送端,将视频流转为adobe flash flv格式封装后推送到nginx rtmp服务

    IT大咖说
  • EasyNVR是如何做到无插件播放RTSP摄像机,完美将海康、大华、宇视等安防设备向互联网转化的

    5G快来了,视频将会是跑在网络上流量最多的东西,短视频、长视频、电影、视频通话、视频监控,各种各样的,而在消费级领域,监控视频近些年也越来越受到关注和欢迎,从萤...

    EasyNVR
  • centos7安装nginx-rtmp

    RTMP流媒体协议是 一套 Adobe 开发的音频视频实时传输协议;nginx-rtmp 是一个基于nginx的 RTMP服务模块,开源,免费

    菲宇
  • RTMP服务器搭建(crtmpserver和nginx)简介

    这里使用VLC播放器,下载VLC 开始播放,点击[媒体]->[流]->[网络] 输入刚刚推流的地址。然后选在下方的播放。

    用户2929716
  • 如何开发一款 H5 小程序直播?

    大前端这几年算是一个热词,对于前段来说如果不是大前端,技术相对来说就已经算是落后了。如果还停留在对ES6,Vue这些基本技能的学习只能说处于一个及格线。

    Nealyang
  • 视频直播| 搭建一个本地nginx服务器以及实现推流和拉流

    原想用mac中自带的Apache搭建,但是naginx是轻量级的,同样起web 服务,也比apache 占用更少的内存及资源,nginx 处理请求是异步非阻塞的...

    進无尽
  • 实时视频RTMP

    由于经常接触实时视频, 对实时视频略有了解. 实时视频是将视频流实时上传到服务器端进行解析, 由RTMP服务器处理.

    louiezhou001
  • 搭建直播系统并实现h5播放rtmp

    推流只能用rtmp协议,拉流可以使用rtmp协议和hls协议。rtmp协议时adobe公司开发的开放协议,hls是苹果公司推出的直播协议。我们使用nginx的r...

    我的小熊不见了丶
  • FFmpeg推流到Nginx并使用播放器播放

    如今直播很火,下面就简单分享下我是如何直播的。必备工具:FFmpeg,Nginx,还有一个播放器。之前在实例解析中分享过如何用FreeSWITCH来做直 播,这...

    Seven Du
  • 开源流媒体服务器SRS学习笔记(2) - rtmp / http-flv / hls 协议配置 及跨域问题

    对rtmp/http-flv/hls这三种协议不熟悉的同学,强烈建议先看看网友写的这篇文章科普下:理解RTMP、HttpFlv和HLS的正确姿势 。

    菩提树下的杨过

扫码关注云+社区

领取腾讯云代金券