海思开发板FFmpeg+Nginx,推流RTMP播放(优秀教程收集+实操整理)

ffmpeg+nginx+nginx-rtmp-module 搭建 rtmp hls http 流媒体服务器 HTTP Live Streaming(HLS)是苹果公司(Apple Inc.)实现的基于HTTP的流媒体传输协议,可实现流媒体的直播和点播,相对于常见的流媒体直播协议,例如RTMP协议、RTSP协议、MMS协议等,HLS直播最大的不同在于,直播客户端获取到的,并不是一个完整的数据流。Nginx本身是一个非常出色的HTTP服务器,FFMPEG是非常好的音视频解决方案.这两个东西通过一个nginx的模块nginx-rtmp-module,组合在一起即可以搭建一个功能相对比较完善的流媒体服务器。 阅读详情
AI摘要

本文介绍了如何在海思开发板上使用FFmpeg推流并结合Nginx实现RTSP播放。涉及FFmpeg的安装、配置以及移植过程,包括静态库编译、第三方库路径设置等。还提到了Nginx在Windows和Ubuntu上的安装,并分享了遇到的编译问题如‘cbrt’声明冲突和srt库找不到的解决方案。最后,展示了推流和拉流播放的命令。

安装FFmpeg及移植

FFmpeg是一款功能强大的集合库,能够编辑视频,能够截取图片,也可生成git图片,简直不要太好用。这里就简单介绍一下这个库的其中一个用的比较多的功能–推流。

我的配置是: 开发板拉取摄像头流,推到winodows的Nginx服务器,然后用Ubuntu 的FFplay进行播放,若你的配置方案和我的不一样,下面也整理了对应完整例程供参考。一起交流学习~


一般而言,对于大部分的linux的库的源码方式安装,都离不开几个步骤:
1.通过官网下载源码/其他途径获取源码
2.解压 tar -zxvf xxx.tar.gz / tar -jxvf xxx.tar.bz2
3.编写简单脚本 main.sh 调用configure (不用命令行慢慢输入,好配置编译选项)
4.编译 make
5.安装 make install(安装进你指定的目录)
6.编译生成文件夹下的/bin放进开发板的/bin 。/lib放进/lib

PS:想指明第三方库所在路径,有四种方法:,
1,在 /etc/ld.so.conf 文件中添加库的搜索路径。将库文件的绝对路径/lib直接写进去就OK。
2,丢到编译器的默认搜索路径。使用 arm-前缀-gcc -print-file-name=xxx.so 来找到默认路径
3,在configure阶段,添加-LDFLAG 增加编译选项给编译器直接增加搜索路径
4,指定搜索路径export LD_LIBRARY_PATH=/yourdir/:$LD_LIBRARY_PATH ,或添加xx.pc文件的路径export PKG_CONFIG_PATH=/xxx:$PKG_CONFIG_PATH 如果你移动了lib库文件,对应的xx.pc(若有)也要同步更新

这个xxx.pc 相当于库的说明文件,声明lib和include文件放在哪个目录。
这样pkg-config命令才能找到这些依赖库。
(比如你已经把语句--with--xxx=DIR 添加进sh脚本,但是configure总是说找不到,
就export PKG_CONFIG_PATH=.....$PKG_CONFIG_PATH 把那个依赖库的/lib/pkgconfig/xxx.pc 文件路径添加进去)

步骤2里还是不行的话分两种情况处理:
【如果没有生成Makefile】,就把对应库文件INCLUDE 和lib,放到你gcc编译器使用的lib目录。
交叉编译器的lib目录可能要费点心思,根据常用库看看在哪里,如线程库find ./ -name "libpthread*"。
普通的桌面gcc目录就去/usr/include
【生成了Makefile就好办】,直接根据提示的错误找到Makefile文件的对应行,在对应语句后面增加搜索路径 -L/xx/xxx/lib -lxx(库名字)

1.通过官网下载源码/其他途径获取源码
xvid、x264、ffmpeg源码下载及编译
官方的ffmpeg源码下载z
FFmpeg的configure 配置选项的翻译(根据需要编译)
我的ffmpeg移植到开发板,这里附上我的FFmpeg配置脚本,供大家参考:

#!/bin/bash   
./configure \
	--prefix=/home/ouser/temp/ffmpeg_hisix200/ \   # 存放位置
	--disable-debug  \
	--disable-avdevice \
	--enable-encoders \
	--enable-ffmpeg \
	--enable-gpl \
	--enable-small \
	--target-os=linux \
	--arch=arm \                              # 目标为arm平台
	--enable-nonfree \
	--enable-cross-compile \
	--cross-prefix=arm-himix200-linux- \      #定义编译工具前缀
	--enable-encoder=libx264 \
	--enable-libx264 \  #表示引入x264库,下面两句是指明x264路径,还需在profile内添加语句
	--extra-cflags=-I/home/ouser/temp/x264/include \   
	--extra-ldflags=-L/home/ouser/temp/x264/lib \ 
	--enable-static \               # 编译为静态库(把库整合编译进/bin下可执行文件,10MB左右,)
	--cc=arm-himix200-linux-gcc \   # 再次定义交叉工具链为海思提供的工具链

附上我x264解码库的配置脚本(如果ffmpeg选择需要x264库,就需要在下面的开发板/etc/profile文件里添加它的编译后的lib库,否则会报错找不到库):

#!/bin/bash
./configure \
--prefix=/home/ouser/temp/x264 \
--host=arm-himix200-linux \
--cross-prefix=arm-himix200-linux- \
--enable-shared \
--disable-asm





编译完FFmpeg及想要的编解码库之后,安装就非常简单了:
1,找到你指定的安装目录,
2,把bin目录下的文件丢去/usr/bin 
3,把lib目录下的文件丢去/usr/lib,
这样就完成了。但是如果像我一样根目录(/ )下空间不足,无奈只能放在其他挂载在大分区下的文件系统的情况,就需要在开发板的 /etc/profile 处加下面两句让系统找得到可执行文件和链接库 【$后的语句类似int a= 0 的 a,是变量描述符】:

```bash
export LD_LIBRARY_PATH=[你放的目录]:$LD_LIBRARY_PATH
export PATH=[你放的目录]:$PATH

最后附上FFmpeg官方文档
官方英文文档 - 最全文档,但全英文
GitHub中文档 - 东西比较少,但好歹看得懂

FFmpeg编译问题收录:

static declaration of ‘cbrt’ follows non-static declaration

有些版本的ffmpeg会有些奇怪的问题,就比如下图:
在这里插入图片描述
查看出问题的libm.c就知道了,是没有声明该函数。这并不是源码错误,而是./config.h里面设置出错了,在./config.h找到对应的项目的宏定义,改为1开启它即可。
在这里插入图片描述

ERROR: srt >= 1.3.0 not found using pkg-config

这种情况一般是libsrt没有安装到位,编译器找不到它。一种是libsrt编译中找不到依赖库。具体情况具体分析,根据提示,可以查看./ffbuild/config.log找到原因。
在这里插入图片描述
我遇到的问题是srt依赖库libgcc_s.so libstdc++.so无法找到。这两个库的关系可以点这里看,而我的编译工具是交叉编译工具,默认库搜索路径比较复杂,所以通过arm-himix200-gcc -print-file-name=libstdc++.so找到了库实际所在目录。找到文件就好办,链接它呗!

想让编译器搜索到指定库,可以通过
①编译脚本添加$LD_LIBRARY_PATH 、
②编译脚本添加--extra-cflags=-L/xx/ --extra-ldflags=-L指定搜索路径。
③最终大招在已有搜索路径下建立软连接
很幸运我前两个方法还是失败,查看./ffbuild/config.log发现总是有部分文件在编译时无法链接到srt依赖库libgcc_s.so libstdc++.so
在这里插入图片描述

--extra-ldflags=-rpath的解释

最后通过第三招在默认搜索路径增加软连接成功通过configure阶段。软连接添加命令ln -s /源文件 ./要生成的目标文件

遇到过一种比较坑爹的情况,就是ffmpeg链接库的时候会调用pkg-config工具,但我这个linux版本居然没有这个工具,于是参考文章步骤安装了pkg-coinfig。pkg-config源码下载

在这里插入图片描述

其余问题集锦


Nginx的安装(windos\Ubuntu):

Nginx在Ubuntu下的安装

Nginx在Windows下的安装并配置rtmp模块


我的Nginx是放在windows的,windows下安装完成后,在conf/nginx.conf 文件添加RTMP直播支持
这样推流的rtmp服务器地址是 rtmp://your_ip:1935/live/test1

rtmp_auto_push on;
rtmp {
    server {
        listen 1935;

        application live {
            live on;
        }
		
		application history {
            live on;
        }
		
        application hls {
            live on;
            hls on;  
            hls_path temp/hls;  
            hls_fragment 8s;  
        }
    }
}
#这样推流的rtmp服务器地址是 rtmp://your_ip:1935/live/test1

完事了在Nginx目录shift+右键命令行,输入:

nginx.exe -c conf\xxx.conf //执行rtmp配置文件,不同版本配置文件名不一样,要注意,你上面修改了哪个,就执行哪个配置文件。

注意:此时命令行会一直处于执行中 不用理会。

开始推流

到这一步,确定你的Nginx服务器已经搭建好,FFmpeg也移植好后,就执行这条命令
这里我测试的是Nginx搭建在Windows下,海思开发板循环推流一个mp4文件到windos的Nginx服务器:

//开发板端:
ffmpeg -re -stream_loop -1 -i 123test.mp4 -c:av copy -f flv rtmp://192.168.0.100:1935/live
[-stream_loop -1]: 表示无限循环播放该视频
[rtmp://192.168.0.100:1935/live]: ip:端口号/live代表是直播

//测试保留-----把rtsp获取的视频流推流到rtmp服务器
ffmpeg -re -i rtsp://username:password@ip:port/xxxxxxx -vcodec copy -acodec copy -f flv -y rtmp://ip:port/live/test

图呢?图离家出走了…

附上其他博主的详细教程
Nginx在windos下的参考文章
Nginx在Ubuntu下的参考文章

拉流播放

这个就简单了,桌面Ubuntu:

ffplay rtmp://192.168.0.100:1935/live

桌面windos: 就直接使用VLC,然后媒体选择网络串流,输入URL即可。VLC播放器百度一下即可找到下载链接

下面例图,视频来源是一个网络摄像头,它会自行推RTSP流到局域网,海思板子去对应地址抓取并转发到Nginx(RTMP),然后在linux ffplay里播放。由于是局域网,速度很快。同时开了几个去测试效果

6666


最后感谢上面所有被我引用了文章的博主!

【ffmpeg命令入门】Nginx的安装与制作HLS流媒体服务器 在数字内容传输和流媒体服务中,HLS(HTTP Live Streaming)已经成为一种流行的解决方案,特别是在视频直播和点播应用中。要实现高效的HLS流媒体服务,Nginx作为一个高性能的Web服务器和反向代理服务器,提供了强大的支持。通过安装和配置Nginx,可以轻松创建一个功能强大的HLS流媒体服务器。本文将介绍Nginx的基础知识以及如何通过它来搭建HLS流媒体服务器。Nginx是一个高性能的Web服务器和反向代理服务器,由Igor Sysoev于2002年开发。 阅读详情

相关推荐

使用nginx和ffmpeg搭建HLS流媒体服务器

最近研究HLS流媒体协议,需要临时搭建HLS服务器,这里记录下搭建的过程(操作系统:CentOS Linux release 7.9.2009 (Core))

技术控的笔记 21万+

使用nginx和ffmpeg搭建HTTP FLV流媒体服务器(摄像头RTSP视频流->RTMP->http-flv)

名词解释RTSP是一种网络协议,用于控制实时流媒体的传输。它是一种应用层协议,通常用于在客户端和流媒体服务器之间建立和控制媒体流的传输。RTSP允许客户端向服务器发送请求,如播放、暂停、停止、前进、后退等,以控制媒体流的播放和操作。RTSP可以与不同的传输协议(如RTP、TCP、UDP)结合使用,以实现实时的音视频流传输。它在视频监控、流媒体直播、视频会议等应用中广泛使用。RTMPRTMP(Real-Time Messaging Protocol)是一种用于实时数据传输的网络协议。

weixin_38340874的博客 1万+

Linux环境傻瓜式nginx+rtmp+ffmpeg套餐安装详解(获取拉流人数)

本文图文并茂地介绍了如何安装nginx+rtmp+ffmpeg组合套装,为了偷懒不重复上传同样的文本和图片信息,直接附上本人的制作的文档链接,请点击直接查看。 【腾讯文档】Nginx+rtmp+ffmpeg安装 https://docs.qq.com/doc/DWFRpSVBOWENLdnV4 ...............

a342874650的专栏 4958

Nginx+rtmp+ffmpeg搭建视频转码服务

(1)首先安装yasm, FFmpeg 为了提高编译速度,使用了汇编指令,如MMX和SSE等。因为nginx搭建流媒体服务需要用到 nginx-rtmp-module 模块,所有先安装nginx-rtmp-module。还可以使用浏览器这样访问 http://192.168.1.11/hls/22.m3u8。此时通过端口查看命令可以看见linux监听的80端口和1935端口已经全部启动。(3)拷贝命令到/usr/bin(方便后面调用)打开VLC 媒体——>流——>网络。(4) 通过ffmpeg推流。

那些乐趣的博客 7865

OpenEarthMap 与 xBD 数据集合并

整合好的数据:链接: https://pan.baidu.com/s/1uJ_Zg6n-s3u1D49OW52D7Q?pwd=2vwx 提取码: 2vwx完整整合步骤与代码如下。

qq_60293814的博客 1594

Cadence 中Cutout、Design_Outline 和 Outline的区别

摘要: 在PCB设计中,Cutout、Design_Outline和Outline都与电路板外形相关但用途不同。Cutout用于定义切割区域(如孔、槽),直接影响制造;Design_Outline仅标记设计边界,作为参考不影响切割;Outline则是实际切割轮廓层,用于制造。三者区别在于:Cutout针对具体切割区域,Design_Outline是设计参考,Outline是最终切割依据。设计时需根据需求选择合适层:外形参考用Design_Outline/Outline,切割区域用Cutout。

卤煮小鱼的博客 1789

ffmpeg+nginx-rtmp转发视频流

视频流转发基础操作

Solititude的博客 2509

orangepi香橙派用户名及密码修改和VNC远程登陆

1、修改 /etc/passwd用户信息文件 vim /etc/passwd #admin❌503:501::/home/admin:/bin/bash #把用户名admin改成rest #test❌503:501::/home/test:/bin/bash 2、修改 /etc/shadow用户密码文件 vim /etc/shadow #admin:Dnakfw28zf38w:8764:0:168:7::: #由于密码加密方式存放,只修改用户名即可(密码不变) #test:Dnakfw28zf38w:876

weixin_40227845的博客 5661

FFMPEG+Nginx搭建视频推流

Window 需下载nginx-1.7.11.3-Gryphon 版本支持推流。Integrated Camera 是我本地摄像头名称,可根据需求修改。启动start.bat完成本地摄像头转码。Linux可任意版本但需单独安装组件。

luguoing的博客 574

使用 PLS 回归进行近红外光谱的异常值检测

在光谱数据中,并非每个数据点都是有效的,因此,在构建模型时找到与大部分数据不符合的数据点是一种必要的操作。这些数据我们称之为。在这篇文章中,我们将使用PLS回归进行红外光谱数据的异常值检测。

qq_44204759的博客 1423

Dify基础:Dify平台的本地化部署(含windows部署中,常见问题及解决方案)

第一种比较简单,只需要在浏览器中,打入https://dify.ai/就可以。这个指令虽然看起来简单,但实际上涉及到对docker的使用。这个项目既然有github地址,那它一般就是开源的。我们点开这个github地址,便能看到dify的私有化部署方式。我们可以看到,还是上面那个图,有个按钮,是指向该项目的Github地址的。第二步:按照dify的github给出的指令,对dify进行安装。第一步:我们把dify下载到自己的电脑(或者服务器)上。这里,我们只考虑第二种方式,也就是私有化部署。

xiezhipu的博客 1万+

unbuntu 20.04 通过ffmpeg + nginx实现网络推流

通过ffmpeg 和 nginx 实现rtmp推流,并可以通过vlc播放网络串流。

weixin_44081378的博客 1569

[QMT量化交易小白入门]-二、如何用miniQMT获取沪深A股的板块列表、历史行情数据和实时行情数据

本专栏主要是介绍QMT的基础用法,常见函数,写策略的方法,也会分享一些量化交易的思路,大概会写100篇左右。QMT的相关资料较少,在使用过程中不断的摸索,遇到了一些问题,记录下来和大家一起沟通,共同进步,自己淋过雨了,希望大家都有一把伞。

木头大左的博客 5656

海思SD3403开发板学习(三)

海思SD3403开发板学习系列:三 CANN和MindStudio安装

蘑菇炒辣椒的优快云 4590

Linux系统之部署经典魔塔小游戏

Linux系统之部署经典魔塔小游戏

jks212454的博客 1817

YOLOv8独家原创改进:SPPF原创自研创新 | SPPF创新结构,重新设计全局平均池化层和全局最大池化层,增强全局视角信息和不同尺度大小的特征

SPPF_improve利用全局平均池化层和全局最大池化层,加入一些全局背景信息和边缘信息,从而获取全局视角信息并减轻不同尺度大小所带来的影响

①答疑群聊服务;②YOLO大模型知识问答系统;③计算机视觉论文生成智能体; 4684

海思Hi3516DV300开发环境搭建

海思Hi3516DV300开发板开发环境搭建以及解决make all编译不成功问题,各种分支技术问题。

m0_72065741的博客 4440

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

搭建基于 Nginx 的 RTMP 服务器,并用 ffmpeg 来进行推流和拉流

下载编译 将安装包下载到指定目录文件夹cd /opt/nginx //进入目录 wget http://nginx.org/download/nginx-1.12.2.tar.gz //下载安装包tar zxvf nginx-1.12.2.tar.gz //解压 (3)配置 cd nginx-1.12.2 ./configure --help//列出大部分常用模块和编译选项 ./configure//配置 默认情况下nginx将被配默认情况下/usr/local/nginx

一起来学习嵌入式! 5643

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

ffmpeg + nginx 实现rtsp视频流转m3u8视频流,转码推流(linux)

FFmpeg即是一款音视频编解码工具,同时也是一组音视频编码开发套件,作为编码开发套件,它为开发者提供了丰富的音视频处理的调用接口。FFmpeg提供了多种媒体格式的封装和解封装,包括多种音视频编码、多种协议的流媒体、多种多彩格式转换、多种采样率转换、多种码率转换等;FFmpeg框架提供了多种丰富的插件模块,包含封装与解封装的插件、编码与解码的插件等。同时也可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。

恋上、小幸福的博客 6039

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

nginx+ffmpeg+flv实现rtsp转rtmp和flv推流(同时拉流)实现浏览器展示监控

因本人公司业务需要浏览器展示海康威视监控视频,所以在此记录一下。以防下次使用不记得。此监控视频解决方案有10s左右的延迟,如果公司没有强制要求还是可以使用的。如果介意10s延迟的话可以使用第三方平台liveNVR流媒体播放器比较成熟。也有3s左右的延迟。可以直接将rtsp转为flv,直接可以在浏览器播放。只需参考对应官网文档调用其接口即可,但是是收费的。有半个月的试用期。原生video支持播放的流1.原生H5支持的媒体格式主要有MP4、OGG、WebM、M3U8。

m0_58074386的博客 1万+

nginx+ffmpeg推流环境搭建

1.将下方文本替换/usr/local/nginx/conf/nginx.conf中的文本。5.增加安装目录的动态链接库。2.配置nginx编译环境。4.设置Nginx环境变量。1.解压ffmpeg软件包。6.设置Nginx环境变量。1.获取nginx软件包。3.Nginx编译&安装。1.解压到对应目录下。2.移动到相应目录下。2.查看是否修改成功。

qq_61435940的博客 1008

使用ffmpeg和nginx实现推流和拉流

首先保证已经安装好了ffmpeg,其次源码安装好了nginx和nginx-rtmp-module,配置nginx的配置文件加入下面这一部分 rtmp{ server{ listen 1935; chunk_size 4000; application live{ live on; allow play all; } } } 如图加载这里,其他的不用改 启动nginx服务器,看到这个页面表示启动成功 查看监听的1935端口是否打开 netstat -an | grep 1

reg183的专栏 6872

【FFmpeg】ffmpeg+nginx-rtmp实现视频流转发

应用场景 目前的摄像头厂家能提供给

JeffHan^_^的博客 7172

FFMPEG 推流至 NGINX-RTMP 服务

NGINX 是一个非常出色的 HTTP 服务器,FFMPEG 是非常好的音视频框架。通过 NGINX 的 nginx-rtmp-module 模块结合在一起,实现一个流媒体服务器,它支持 RTMP 和 HLS(Live Http Stream)。

wxl5018的专栏 1639

nginx+ffmpeg实现rtsp转flv推流(拉流)实现h5实时预览

Windows下nginx+ffmpeg+flv实现rtsp转rtmp和flv推流(拉流)实现h5实时预览

木亢的博客 1222

搭建 ffmpeg + nginx流媒体服务器,并用C++推流

或者ffmpeg -re -i 01.mp4 -vcodec libx264 -acodec copy -f flv rtmp://192.168.32.137:1935/mobile/ha。输入流地址rtmp://localhost/mobile/ha即可观看视频,不过本地播放有些卡顿,网络播放更卡。往/usr/local/nginx/conf/nginx.conf添加以下内容。编译和安装配置有nginx-rtmp模块的nginx。将脚本复制到/etc/init.d/目录下。# 解决依赖包zlib安装。

wyf的博客 1531
下一篇: Ubuntu 18.04安装QtMqtt模块、低于QT5.0有其他mqtt sdk库
温柔大猩猩
博客等级 码龄7年 65粉丝 14原创
评论 7
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值