草庐IT

基于imx6ull打造流媒体视频监控:ffmpeg + nginx + rtmp

@菠萝菠萝哒 2023-09-27 原文

0.平台简介

项目描述
硬件平台100ask_imx6ull_pro开发板
Linux内核Linux 4.9.88
Buildroot版本Buildroot 2019.02
FFmpeg版本3.4.5
Nginx版本1.15.7
摄像头支持UVC的USB摄像头

  总体的系统方案如下,是韦老师在【自己做一个物联网视频监控系统】系列视频中分享的一个实例,基本框架如下:

1.基于Buildroot编译相关软件

  前提,本文所使用的Linux内核已设置支持UVC设备类驱动,且基于此进行以下操作,使用韦老师所分享的Buildroot进行编译,需要首先进行对imx6ull_pro开发板的相关默认配置进行设置。首先需要在终端进行环境变量的设置。

colin@100ask:~/works/Buildroot_2019.02$ export ARCH=arm
colin@100ask:~/works/Buildroot_2019.02$ export CROSS_COMPILE=arm-linux-gnueabihf-
colin@100ask:~/works/Buildroot_2019.02$ export PATH=$PATH:/home/colin/100ask_imx6ull-sdk/ToolChain/gcc-linaro-6.2.1-2016.11-x86_64_arm-linux-gnueabihf/bin/

  执行make 100ask_imx6null_defconfig完成基础的配置之后,开始对ffmpeg和nginx的编译配置。

1.1 编译FFmpeg

  在Buildroot的根目录下make menuconfig,选择Target packages。

  进入Target packages路径之后选择Audio and video applications,在该路径下选择ffmpeg。

  之后执行make进行编译时,Buildroot会在dl/ffmpeg目录下自动下载源码进行编译。

1.2 编译Nginx

  该视频实时推流demo的视频推流借助第三方插件‣,该插件是基于nginx-rtmp-module的流媒体服务器。具备nginx-rtmp-module的所有功能,增加了HTTP-FLV,GOP缓存和VHOST(一个IP对应多个域名)的功能。插件传送门:https://github.com/winshining/nginx-http-flv-module,gitee传送门:https://gitee.com/winshining/nginx-http-flv-module/。支持的播放器如下:VLC (RTMP & HTTP-FLV) 、OBS (RTMP & HTTP-FLV) 、JW Player (RTMP) 、flv.js (HTTP-FLV)。将该插件下载在Buildroot的dl/nginx目录下后即可开始配置。
1)需要将原本编译的lighttpd模块这项去掉。

2)添加nginx模块:将nginx加入编译并使能相关功能,为了保险起见这里将nginx下的所有功能都添加进去进行编译了。

3)添加第三方插件路径。

$(TOPDIR)/dl/nginx/nginx-http-flv-module


  编译完成之后,会在生成output/image目录下生成相关镜像文件,其中emmc.img是我们要烧写在开发板中的添加了ffmepg和nginx软件模块的系统镜像文件。

2. 系统配置

  烧录完成,系统运行起来后检查ffmpeg和nginx是否编译安装成功,在终端下输入ffmpeg -v和nginx -v进行检查。


  除了基本的开发板的网络环境的设置之外主要的就是Nginx的配置,在运行之前还需要对nginx的配置文件进行修改。

vi /etc/nginx/nginx.conf

主要进行修改的有三点:

  • 1)将worker_processes设置为auto;
  • 2)新增rtmp配置。
rtmp{
    server{
		listen 1935;
	  chunk_size 4096;
	
	application live{
		allow publish 127.0.0.1;
		allow play all;
		live on;
		record off;
		meta copy;
	    }
    }
}
  • 3)新增location /test设置。
	location /test{
		flv_live on;
	}

  修改完配置文件,需要重启服务,在系统终端执行以下命令:

/etc/init.d/S50nginx restart

3. 流媒体视频监控测试

3.1 推流

  在开发板上执行以下命令进行摄像头数据推流:

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

3.2 拉流

  使用VLC播放器,播放器传送门:https://www.videolan.org/
  使用RTMP协议进行拉流,详细的操作步骤如下:1)VLC播放器点击媒体;2)打开网路串流;3)输入你设备的IP相关的推流地址如下图所示。

4. 测试效果


有关基于imx6ull打造流媒体视频监控:ffmpeg + nginx + rtmp的更多相关文章

  1. ruby-on-rails - 如何优雅地重启 thin + nginx? - 2

    我的瘦服务器配置了nginx,我的ROR应用程序正在它们上运行。在我发布代码更新时运行thinrestart会给我的应用程序带来一些停机时间。我试图弄清楚如何优雅地重启正在运行的Thin实例,但找不到好的解决方案。有没有人能做到这一点? 最佳答案 #Restartjustthethinserverdescribedbythatconfigsudothin-C/etc/thin/mysite.ymlrestartNginx将继续运行并代理请求。如果您将Nginx设置为使用多个上游服务器,例如server{listen80;server

  2. 怎样用一台手机做自媒体? - 2

    其实做自媒体的成本并不高,入门只需要一部手机即可!在手机上找视频素材、使用手机剪辑视频、最后使用手机发布视频作品获得收益!方法并不难,今天这期内容就来给粉丝们分享一种小方法,每天稳定收益100-300,抓紧点赞收藏!1、找素材(1)使用手机拍摄自己喜欢的经典段落,使用程序把文案内容提取出来(2)也可以在豆瓣、知乎、微博等网站中找一些自己需要的文案素材(3)把文案进行润色修改,可以加入一些自己的观点(4)视频素材可以使用软件中自带的素材,也可以在素材网站中下载完整版的素材2、文案配音(1)把复制好的文案直接导入小程序中(2)调整音色、音调后一键合成音频即可(3)可以选择自己朗读配音,需要花一点时

  3. python ffmpeg 使用 pyav 转换 一组图像 到 视频 - 2

    2022/8/4更新支持加入水印水印必须包含透明图像,并且水印图像大小要等于原图像的大小pythonconvert_image_to_video.py-f30-mwatermark.pngim_dirout.mkv2022/6/21更新让命令行参数更加易用新的命令行使用方法pythonconvert_image_to_video.py-f30im_dirout.mkvFFMPEG命令行转换一组JPG图像到视频时,是将这组图像视为MJPG流。我需要转换一组PNG图像到视频,FFMPEG就不认了。pyav内置了ffmpeg库,不需要系统带有ffmpeg工具因此我使用ffmpeg的python包装p

  4. ruby - 无法在 Ruby 中将 ffmpeg 作为子进程运行 - 2

    我正在尝试使用以下代码通过将ffmpeg实用程序作为子进程运行并获取其输出并解析它来确定视频分辨率:IO.popen'ffmpeg-i'+path_to_filedo|ffmpegIO|#myparsegoeshereend...但是ffmpeg输出仍然连接到标准输出并且ffmepgIO.readlines是空的。ffmpeg实用程序是否需要一些特殊处理?或者还有其他方法可以获得ffmpeg输出吗?我在WinXP和FedoraLinux下测试了这段代码-结果是一样的。 最佳答案 要跟进mouviciel的评论,您需要使用类似pope

  5. ruby-on-rails - 如何用不同的用户运行nginx主进程 - 2

    A/ctohttp://wiki.nginx.org/CoreModule#usermaster进程曾经以root用户运行,是否可以以不同的用户运行nginxmaster进程? 最佳答案 只需以非root身份运行init脚本(即/etc/init.d/nginxstart),就可以用不同的用户运行nginxmaster进程。如果这真的是你想要做的,你将需要确保日志和pid目录(通常是/var/log/nginx&/var/run/nginx.pid)对该用户是可写的,并且您所有的listen调用都是针对大于1024的端口(因为绑定(

  6. ruby-on-rails - Websocket-rails 不适用于 Nginx 和 Unicorn 的生产环境 - 2

    我有带有gemwebsocket-rails0.7的Rails3.2应用程序。在开发机上,一切正常在生产环境中,我使用Nginx/1.6作为代理服务器,Unicorn作为http服务器。Thin用于独立模式(在https://github.com/websocket-rails/websocket-rails/wiki/Standalone-Server-Mode之后)。nginx配置:location/websocket{proxy_passhttp://localhost:3001/websocket;proxy_http_version1.1;proxy_set_headerUp

  7. ruby - 没有 nginx 的 Puma - 同一 IP 上的多个 ruby​​ 应用程序 :PORT - 2

    Nginx在生产中的重要性通常基于它为慢速客户端提供服务的能力;在RESTfulAPI的设置中,它似乎是生产堆栈的一个不必要的层,尤其是Puma(不像广泛使用的unicorn可以处理nginx工作)。Pumacanallowmultipleslowclientstoconnectwithoutrequiringaworkertobeblockedontherequesttransaction.Becauseofthis,Pumahandlesslowclientsgracefully.HerokurecommendsPumaforuseinscenarioswhereyouexpect

  8. ruby-on-rails - Foreman无法启动Nginx,但我可以手动启动。为什么? - 2

    我目前正在运行Foreman在暂存(Ubuntu)上,一旦我开始工作,就会切换到使用upstart。我的Procfile.staging看起来像这样:nginx:sudoservicenginxstartunicorn:bundleexecunicorn-c./config/unicorn.rbredis:bundleexecredis-serversidekiq:bundleexecsidekiq-v-C./config/sidekiq.yml我可以使用以下方法成功启动nginx:$sudoservicenginxstart然而,当我运行$foremanstart时,当其他三个进程成

  9. Linux操作系统CentOS7安装Nginx[详细版] - 2

    Nginx安装1.官网下载Nginx2.使用XShell和Xftp将压缩包上传到Linux虚拟机中3.解压文件nginx-1.20.2.tar.gz4.配置nginx5.启动nginx6.拓展(修改端口和常用命令)(一)修改nginx端口(二)常用命令1.官网下载Nginxhttp://nginx.org/en/download.html这里我下载的是1.20.2版本,大家按需下载对应稳定版即可2.使用XShell和Xftp将压缩包上传到Linux虚拟机中没有XShell可以参考《Linux操作系统CentOS7连接XShell》3.解压文件nginx-1.20.2.tar.gz1)检查是否存

  10. ruby - 如何使用 bash 命令或 Ruby 使用 ffmpeg 将 mp4 文件批量转换为 ogg - 2

    我运行的是OSX,对视频转换一无所知。但我有大约200个视频都是mp4格式,无法在Firefox中播放。我需要将它们转换为ogg才能使用html5视频标签。这些文件位于一个文件夹结构中,这使得一次一个地处理一个文件变得困难。我希望bash命令或Ruby命令遍历所有子文件夹并找到所有.mp4并转换它们。我找到了一份关于如何使用Google执行此操作的引用资料:http://athmasagar.wordpress.com/2011/05/12/a-bash-script-to-convert-mp4-files-to-oggogv/#!/bin/bashforfin$(ls*mp4|se

随机推荐