自制Linux功能板-新增功能(基于RTMP流媒体传输协议的视频监控)
目录
- 一、ffmpeg工具
- 1、简介
- 2、移植相关库
- 二、RTMP的nginx服务器
- 1、简介
- 2、移植
- 三、运行测试
- 1、启动nginx
- 2、使用 FFmpeg 推流
引言:小板子能联网还有摄像头,组合起来会怎么样呢?
大体结构:v4l2的摄像头=>ffmpeg的视频流=>基于nginx的RTMP流媒体服务器=>客户端接收视频流
(v4l2在初始文章已完成了驱动,后期只需调用/dev/video1设备)
一、ffmpeg工具
1、简介
参考博文:博文
ffmpeg
(fast forward moving picture expert group),是一套可以用来记录
、转换数字音频、视频格式
,并能将其转化为流
的开源计算机程序
。采用LGPL或GPL许可证。它提供了录制、转换以及流化音视频的完整解决方案。它包含了非常先进的音频/视频编解码库
libavcodec,为了保证高可移植性和编解码质量,libavcodec里很多code都是从头开发的。
所谓封装格式
是指音视频的组合格式,例如最常见的封装格式有mp4、mp3、flv
等。简单来说,我们平时接触到的带有后缀的音视频文件都是一种封装格式。不同的封装格式遵循不同的协议标准。
视频的编码格式为YUV420P
,音频的编码格式为PCM
。以此进行相应的音视频压缩,不做深究。
2、移植相关库
参考博文:iTOP-iMX6ULL 开发板-FFmpeg 移植实现视频采集
网上的参考一般移植ffmpeg时都会带上x264库,
- x264是一种
视频编码器
,将数据
(例如YUV420P)编码成一种h.264标准的视频流
(ES流) - ffmpeg自带h264解码功能,带上x264就完美了。
2.1 x264移植
源码:x264-master.tar.bz2
解压:略
配置:
- 目录下
./configure --enable-shared --prefix=${PWD}/install --host=arm-linux-gnueabihf --disable-asm
//注释
--prefix:指定安装目录
--host:指定交差编译器
--enable-shared:允许共享
--disable-asm:跳过汇编
- 修改配置文件 config.mak
//换成交叉编译器
CC= arm-linux-gnueabihf-gcc
LD=arm-linux-gnueabihf-gcc -o
AR= arm-linux-gnueabihf-ar rc
RANLIB= arm-linux-gnueabihf-ranlib
编译、安装:
make
make install
移植:
安装后输出文件在install目录下,将
xxx/bin/x264->板子/usr/bin
xxx/lib/xx.so.**(动态链接库)->板子/usr/lib
//测试,(提前chmod 755)
./x264 -h
经验:板子的软件资源目录/usr下的bin和lib专门用于用户自己手动移植的库,好像系统能让可执行文件bin找到lib下属于自己的库,并且让可执行文件拥有全局环境变量。
2.2 ffmpeg移植
源码:ffmpeg-snapshot.tar.bz2
解压:略
配置:这个配置比较麻烦,在网上找了一通,终于配置好了。
//添加刚刚的x264相关库的环境变量
export PKG_CONFIG_PATH=/home/alientek/rtmp/x264-master/install/lib/pkgconfig
//然后再配置,添加了最后一句pkg-config --static,就不会报错说找不到目标文件了
./configure \
--cross-prefix=arm-linux-gnueabihf- \
--enable-cross-compile \
--target-os=linux \
--cc=arm-linux-gnueabihf-gcc --arch=arm --prefix=${PWD}/install --enable-shared \
--disable-static \
--enable-gpl \
--enable-nonfree \
--disable-ffplay \
--enable-swscale \
--enable-pthreads \
--disable-x86asm \
--disable-stripping --enable-libx264 --enable-decoder=h264 --enable-parser=h264 --enable-demuxer=h264 \
--extra-cflags=-I/home/alientek/rtmp/x264-master/install/include \
--extra-ldflags=-L/home/alientek/rtmp/x264-master/install/lib --extra-libs=-ldl \
--pkg-config="pkg-config --static"
编译、安装:这是个大工程,分线程编译吧,节约时间。
make -j4
make install -j4
移植:
安装后输出文件在install目录下,将
xxx/bin/ffmpeg->板子/usr/bin
xxx/lib/xx.so.**(动态链接库)->板子/usr/lib
//测试,(提前chmod 755)
./ffmpeg -h
二、RTMP的nginx服务器
1、简介
RTMP
( Real Time Message Protocol),实时消息流媒体传输协议
,用来解决多媒体数据传输流
的多路复用(Multiplexing)和分包(packetizing)的问题,优势在于低延迟,稳定性高,支持所有摄像头格式
,浏览器加载 flash 插件就可以直接播放。
这里使用 Nginx 来搭建 RTMP 流媒体服务器,如果有时间,可以在一台公网 IP 主机上搭建流媒体服务器(需要内网穿透)。
2、移植
源码:哈哈,自己网上搜去吧,或者原子应用开发文档里有连接。
- nginx-1.20.0.tar.gz
- nginx-rtmp-module 模块(原生的 Nginx 并不支持 RTMP, 我们需要安装第三方模块)
解压:略
配置:
//1、临时使用这种交叉编译环境
source /opt/fsl-imx-x11/4.1.15-2.1.0/environment-setup-cortexa7hf-neon-poky-linux-gnueabi
//2、简单修改
//xxx/auto/cc/name 文件,将 21 行处的”exit 1”给注释掉!
//auto/types/sizeof 文件,将 15、 43行处的” ngx_size=”修改为” ngx_size=4”,并且将 36 行处的”$CC”修改为”gcc”
//3、配置命令
/configure --prefix=${PWD}/install \
--with-http_ssl_module \
--with-http_mp4_module \
--with-http_v2_module \
--without-http_upstream_zone_module \
--add-module=/home/dt/tools/nginx-rtmp-module
//--add-module 用于添加第三方模块
配置时会出现缺少相关库的问题,就是下图,那几个库,整的人很难受,缺那个就用命令安装或者自己编译安装。
编译:
make
//正常会出错, xxx/objs/ngx_auto_config.h 文件第3行添加
#ifndef NGX_HAVE_SYSVSHM
#define NGX_HAVE_SYSVSHM 1
#endif
//然后再编译即可
安装:
make install
移植:
install/所有目录->板子/etc/nginx/目录下,作为nginx的配置担当install/sbin/nginx->自己喜欢的位置,如家目录。file nginx可以查看当前执行文件的相关属性(运行平台,版本等)板子上ldd nginx可查看文件关联的链接文件./nginx -V用于测试是否成功,提前chmod 755
遇到的问题:在板子上测试失败,原因是openssl的版本不对,需要的时1.0.2d,板子上的时1.0.2g,导致执行文件读取/lib/arm-linux-gnueabihf/下的openssl相关库文件失败。
解决方法:自己把板子上的openssl版本重新安装了1.0.2d。安装之后虽然有警告,但是能正常运行。
三、运行测试
1、启动nginx
板子上./nginx -p /etc/nginx
客户端浏览器:输入局域网ip可看到欢迎界面,说明建立连接成功。
板子上/etc/nginx/conf/nginx.conf
配置添加项,添加到events{}后边:
rtmp {server {listen 1935; # 监听 1935 端口chunk_size 4096;application live{allow publish 127.0.0.1;allow play all;live on; # 打开直播record off; # 关闭 recordmeta copy;}application hls {live on;hls on;hls_path /tmp/hls;hls_fragment 8s;}}
}
然后重启
./nginx -p /etc/nginx -s reload
2、使用 FFmpeg 推流
板子服务器端
ffmpeg程序负责将视频推流
,到nginx的rtmp流媒体服务器。
ffmpeg -f v4l2 -video_size 320x240 -framerate 15 -i /dev/video1 -q 10 -f flv rtmp://127.0.0.1/live/mytest
客户端
安装VLC 软件从服务器进行拉流
。下载地址
“媒体” —>“打开网络串流” ,结果如下图。目前仅能用于局域网的视频监控,将来可内网穿透使用公网访问。另外,这个小板子Cotex-A7架构,属于中低端的也没有硬件编码,所以视频流传输的延时有5秒左右。
自制Linux功能板-新增功能(基于RTMP流媒体传输协议的视频监控)相关推荐
- Linux下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能
一.环境介绍 操作系统:虚拟机运行的Ubuntu18.04 64位系统 二.流媒体服务器介绍 百度百科: 流媒体指以流方式在网络中传送音频.视频和多媒体文件的媒体形式.相对于下载后观看的网络播放形式而 ...
- 基于srs流媒体服务器搭建gb28181视频平台的微服务系统架构
gb28181安防视频平台 引言 安防就是视频监控,小区或者办公室装几个摄像头,物业或者保安在监控室盯着大 屏坐一整天. 对于安防架构的理解:摄像头+网络布线+数据存储管理硬盘 (RAID)+媒体软件 ...
- 最详细的流媒体传输协议-rtsp协议详解
流媒体传输协议-rtsp协议详解 参阅:RTSP协议详解和分析从零开始写一个RTSP服务器(一)RTSP协议讲解关于RTSP_RTP_RTCP协议的深刻初步介绍 rtsp RTSP出现以前,最热的大概 ...
- 流媒体传输协议之 RTP
引言 本系列文章将整理各路流媒体传输协议,包括RTP/RTCP,RTMP,希望通过深入理解各个流媒体传输协议的设计细节,对今后流媒体部分的开发工作有一定的启发.更多相关文章和其他文章均收录于贝贝猫的文 ...
- 流媒体传输协议之 RTP (上篇)
本系列文章将整理各个流媒体传输协议,包括 RTP/RTCP,RTMP,希望通过深入梳理协议的设计细节,能够给流媒体领域的开发者带来一定的启发. 作者:逸殊 审核:泰一 介绍 RTP,即 real-ti ...
- android jmf,基于JMF与Android的无线视频监控系统的设计与实现
摘要: 视频监控系统是一种防范能力很强的综合系统,是安防领域的重要组成部分.随着无线网络与流媒体传输技术的飞速发展,视频监控系统也朝着无线化,高清化,智能化的方向发展.针对这一需求,通过研究JAVA多 ...
- 技术博客|第15期:流媒体传输协议简介 - HLS协议
在Hulu及Disney+流媒体平台上,自适应流媒体传输技术被广泛使用,它可以根据用户的网络情况相应地调整视频码率,为用户带来良好的观看体验.为了实现这一点,视频将被编码成不同码率的版本,并且在每个版 ...
- 流媒体传输协议浅析(一)
一.常见的流媒体协议 关于流媒体传输协议,涉及到不同领域,不同业务场景,种类众多,下面一张图是目前常见的流媒体协议. 常见的流媒体传输协议 1)从交互方式来看,流媒体分为点播(VOD)和直播(LIVE ...
- 流媒体传输协议系列之----RTP/RTCP协议解析
https://blog.csdn.net/davidsguo008/article/details/73658422?utm_medium=distribute.pc_relevant_downlo ...
最新文章
- c语言节点的作用,C语言链表(基本功能函数)
- cocos2d-x解决中文乱码问题的几种办法
- 全排列:不含重复元素和含重复元素的全排列
- Node.js—简介
- java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化
- OS_CORE.C(2)
- CookiePolicy 原理解析
- 汽车租赁php参考文献,求租赁或者汽车租赁的英文参考文献
- 【转】 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10...
- JQuery DataTables改变行或列的背景或字体颜色
- 第一章:1-01、计算机网络的发展可划分为几个阶段?每个阶段各有何特点?
- mysql核心内幕_MySQL核心内幕
- python堆结构heapq
- python循环语句打印矩形_pycharm软件python的一些循环语句的用法
- VOC2007-2012数据集
- Unity3D 从 ipa 中提取游戏资源
- 送书 | 《Python3爬虫实战——数据清洗、数据分析与可视化》
- 声反馈系统:陷波型啸叫抑制器的啸叫检测方法大总结
- 幼儿的健脑菜谱:椰子鸡汤
- 【强大的PDF格式转换工具】Lighten PDF Converter OCR for Mac 6.2.0
热门文章
- 计算机专业兴趣分析,浅谈计算机专业英语的兴趣教学
- visio 怎么画出加法器(一个圆圈 里面一个加号)和乘法器(一个圆圈里面一个乘号)
- 谈谈构建有效数据治理策略的十条建议
- 管道文件 linux 流程图,怎样绘制工艺管道仪表流程图(PID图)和工艺流程图
- kindle 应用程序出错,无法启动选定的应用程序,请重试。问题排查过程及处理方案。...
- 【RT-Thread】SGM706独立看门狗软件包
- LED灯显示电池电量的原理图
- 【GIT】GitHub中的readme.md说明文档中如何将表格居中显示?
- Kyligence:深耕大数据 拓展全球“朋友圈”
- WPF 几行代码实现窗体毛玻璃效果(Aero Glass)