目录

  • 一、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流媒体传输协议的视频监控)相关推荐

  1. Linux下使用Nginx搭建Rtmp流媒体服务器,实现视频直播功能

    一.环境介绍 操作系统:虚拟机运行的Ubuntu18.04 64位系统 二.流媒体服务器介绍 百度百科: 流媒体指以流方式在网络中传送音频.视频和多媒体文件的媒体形式.相对于下载后观看的网络播放形式而 ...

  2. 基于srs流媒体服务器搭建gb28181视频平台的微服务系统架构

    gb28181安防视频平台 引言 安防就是视频监控,小区或者办公室装几个摄像头,物业或者保安在监控室盯着大 屏坐一整天. 对于安防架构的理解:摄像头+网络布线+数据存储管理硬盘 (RAID)+媒体软件 ...

  3. 最详细的流媒体传输协议-rtsp协议详解

    流媒体传输协议-rtsp协议详解 参阅:RTSP协议详解和分析从零开始写一个RTSP服务器(一)RTSP协议讲解关于RTSP_RTP_RTCP协议的深刻初步介绍 rtsp RTSP出现以前,最热的大概 ...

  4. 流媒体传输协议之 RTP

    引言 本系列文章将整理各路流媒体传输协议,包括RTP/RTCP,RTMP,希望通过深入理解各个流媒体传输协议的设计细节,对今后流媒体部分的开发工作有一定的启发.更多相关文章和其他文章均收录于贝贝猫的文 ...

  5. 流媒体传输协议之 RTP (上篇)

    本系列文章将整理各个流媒体传输协议,包括 RTP/RTCP,RTMP,希望通过深入梳理协议的设计细节,能够给流媒体领域的开发者带来一定的启发. 作者:逸殊 审核:泰一 介绍 RTP,即 real-ti ...

  6. android jmf,基于JMF与Android的无线视频监控系统的设计与实现

    摘要: 视频监控系统是一种防范能力很强的综合系统,是安防领域的重要组成部分.随着无线网络与流媒体传输技术的飞速发展,视频监控系统也朝着无线化,高清化,智能化的方向发展.针对这一需求,通过研究JAVA多 ...

  7. 技术博客|第15期:流媒体传输协议简介 - HLS协议

    在Hulu及Disney+流媒体平台上,自适应流媒体传输技术被广泛使用,它可以根据用户的网络情况相应地调整视频码率,为用户带来良好的观看体验.为了实现这一点,视频将被编码成不同码率的版本,并且在每个版 ...

  8. 流媒体传输协议浅析(一)

    一.常见的流媒体协议 关于流媒体传输协议,涉及到不同领域,不同业务场景,种类众多,下面一张图是目前常见的流媒体协议. 常见的流媒体传输协议 1)从交互方式来看,流媒体分为点播(VOD)和直播(LIVE ...

  9. 流媒体传输协议系列之----RTP/RTCP协议解析

    https://blog.csdn.net/davidsguo008/article/details/73658422?utm_medium=distribute.pc_relevant_downlo ...

最新文章

  1. c语言节点的作用,C语言链表(基本功能函数)
  2. cocos2d-x解决中文乱码问题的几种办法
  3. 全排列:不含重复元素和含重复元素的全排列
  4. Node.js—简介
  5. java-Transient关键字、Volatile关键字介绍和序列化、反序列化机制、单例类序列化
  6. OS_CORE.C(2)
  7. CookiePolicy 原理解析
  8. 汽车租赁php参考文献,求租赁或者汽车租赁的英文参考文献
  9. 【转】 已知有个rand7()的函数,返回1到7随机自然数,让利用这个rand7()构造rand10() 随机1~10...
  10. JQuery DataTables改变行或列的背景或字体颜色
  11. 第一章:1-01、计算机网络的发展可划分为几个阶段?每个阶段各有何特点?
  12. mysql核心内幕_MySQL核心内幕
  13. python堆结构heapq
  14. python循环语句打印矩形_pycharm软件python的一些循环语句的用法
  15. VOC2007-2012数据集
  16. Unity3D 从 ipa 中提取游戏资源
  17. 送书 | 《Python3爬虫实战——数据清洗、数据分析与可视化》
  18. 声反馈系统:陷波型啸叫抑制器的啸叫检测方法大总结
  19. 幼儿的健脑菜谱:椰子鸡汤
  20. 【强大的PDF格式转换工具】Lighten PDF Converter OCR for Mac 6.2.0

热门文章

  1. 计算机专业兴趣分析,浅谈计算机专业英语的兴趣教学
  2. visio 怎么画出加法器(一个圆圈 里面一个加号)和乘法器(一个圆圈里面一个乘号)
  3. 谈谈构建有效数据治理策略的十条建议
  4. 管道文件 linux 流程图,怎样绘制工艺管道仪表流程图(PID图)和工艺流程图
  5. kindle 应用程序出错,无法启动选定的应用程序,请重试。问题排查过程及处理方案。...
  6. 【RT-Thread】SGM706独立看门狗软件包
  7. LED灯显示电池电量的原理图
  8. 【GIT】GitHub中的readme.md说明文档中如何将表格居中显示?
  9. Kyligence:深耕大数据 拓展全球“朋友圈”
  10. WPF 几行代码实现窗体毛玻璃效果(Aero Glass)