当前位置:首页 > 范文大全 > 教学设计 >

教学设计

基于FFMPEG实时视频传输系统设计

2021-11-08 10:42:12教学设计
明瑞张金奎胡杰摘要:实时视频监控是如今各个领域必不可少的关键技术。本文设计的基于FFMPEG多媒体工

明瑞 张金奎 胡杰

摘要:实时视频监控是如今各个领域必不可少的关键技术。本文设计的基于FFMPEG多媒体工具的实时视频传输系统,采用Raspberry Pi CM4高性能处理器搭载Ubuntu16.04操作系统,利用视频内核驱动Video for linux2获取摄像头图像数据,结合X264、FFMPEG等库实现图像的压缩编码、封装,H264视频流通过EC20 4G模块上传至远程视频服务器,有效地实现了在服务器端进行实时监控功能,该系统可广泛应用于野外、偏远地区的实时可视化,具有部署便捷、传输稳定、可扩展性强、成本低等特点。

关键词:Raspberry Pi;4G;EC20;FFMPEG;实时视频传输

中图分类号:G642      文献标识码:A

文章编号:1009-3044(2021)15-0025-03

Abstract:
Real-time video surveillance is an essential key technology in various fields today. The real-time video transmission system based on FFMPEG multimedia tools designed in this paper adopts Raspberry Pi CM4 high-performance processor with Ubuntu16.04 operating system, and uses video kernel to drive Video for linux2 to obtain camera image data. Combining X264, FFMPEG and other libraries to achieve image compression, encoding and packaging. H264 video streams are uploaded to a remote video server through the EC20 4G module, effectively realizing the real-time monitoring function on the server side. The system can be widely used in the wild and remote areas. Real-time visualization has the characteristics of convenient deployment, stable transmission, strong scalability, and low cost.

Key words:
Raspberry Pi; 4G; EC20; FFMPEG; Real-time Video Transmission

随着物联网技术的发展,越来越多的设备需要远程控制、实时收发传输数据,对可视化的需求愈发强烈。本系统利用在可视化航标项目,选择内河航道的交通环境作为采集目标,为满足航道交通的实时监控和航行交通事故仲裁视频回溯。在当今4G通信技术领域,4G LTE 无线视频综合成本低、二次开发兼容性强、传输性能稳定,通信速率快[2],人工维护费用低,可以将不同航道的现场信息实时通过无线通讯手段传送到无线监控中心,并且自动形成视频数据库便于日后的检索。在高速率的传输保障下,本系统可广泛应用于野外、偏远地区的实时可视化,并且可根据不同的应用需求拓展其他的硬件设备。

1 系统框架

本系统由高性能处理器树莓派CM4、500W像素 CSI摄像头、EC20 4G模块、远程视频服务器构成。Raspberry Pi Compute module4尺寸小巧,核心板集成4核ARM Cortex-A72内核,可满足图像压缩视频编码的算力需求解决了数据传输中的带宽限制问题,以达到实时性的目的。CSI摄像头通过15cm软排线连接至树莓派CSI接口,利用Linux系统内核驱动Video4Linux2采集Raw Video图像信息,对原始图像进行像素转换生成YUV420P像素格式数据、压缩编码成H264视频流、封装生成FLV格式的文件,最终以文件流的形式通过EC20模块的TCP/IP协议栈提供的AT指令集访问FTP服务器实现实时视频上传至视频服务器。服务器端亦可根据通信协议下达关机、重启等系统命令,也可调节视频码率、压缩比和帧率等参数,当指令下发至EC20模块,Linux系统根据指令的种类触发相应的软中断处理命令,达到远程控制的功能。系统框图如图1所示。

2 系统硬件设计

Raspberry Pi CM4-EC20终端为本系统的主要硬件设计,搭载博通公司生产的 BCM2711高性能处理器 、亚博公司生产的CSI摄像头以及移远的EC20 4G模块。树莓派操作系统为自裁剪制作的轻量版Ubuntu16.04,该系统镜像编译安装OPENCV、FFMPEG、X264等环境。CSI摄像头是一款兼容树莓派的图像传感器可以以SVGA、UXGA、VGA等时序输出RGB565、YUV、JPEG等格式的图像,其图像像素可高达500W(2925x1944),本系统调用Linux内核驱动Video4Linux2获取Raw Video原始图像,并在内存中将YUV422像素格式数据通过双三次缩放算法(Bicubic)输出为640x480分辨率的YUV420P格式数据便于压缩成H264视频流,对编码视频流加以封装即可生成视频文件,采用循环覆盖写入,多线程处理,实时上传视频给远程服务器。在网络环境恶劣情况下,同时本地也保存有视频录像备份,便于航道交通事故回溯,有理有据。4G模块EC20 –R2.1 Mini Pcle提供了PCI ExpressMini Card标准接口,支持最大上行速率50Mbps,在多網络制式下能够从3G网络轻松平滑过渡到4G网络,其USB通信口与树莓派主控芯片通信,通过AT指令拨号上网FTP连接服务器,负责将视频流数据传送至云端服务器。

3 系统软件设计

3.1 树莓派-CSI摄像头H264编码系统设计

硬件部分驱动应用程序采用Ubuntu 16.04操作系统下VS Code开发平台,C/C++语言编程,其设计流程如图2所示。

1)读取摄像头设备:

在Linux系统中,V4L2(video4linux2)内核驱动下摄像头作为文件对象打开读取视频数据。由于本系统只有一个摄像头,利用Opencv中VideoCapture类创建一个捕获对象camera,通过成员函数open( )来打开/dev/video0设备[2]。为了节省内存和CPU的算力,在判断设备开启后,利用carmera.set( )函数设置摄像头输出图像数据的分辨率为1280 x 720、帧数为25 帧。

2)读取视频信息,初始化像素转换句柄:

上一步骤中已经设置了图像的长、宽和帧率,本环节主要读取视频帧的图片格式——RGB565,视频编码H264仅支持YUV4:2:0的连续或隔行视频的编码,因此需要初始化像素转换任务句柄,像素转换可以转换图片分辨率、像素格式等,将操作句柄设置为RGB565像素格式转YUV420P格式,图片分辨率转变为640 x 480,采用双三次插值算法缩小图像。

3)创建编码器,初始化编码器:

基于ffmpeg的视频压缩,编码器不能为空指针必须要动态申请内存创建。与此同时创建h264的流媒体准备存储编码过后的视频流,创建文件名为video.h264的文件以便封装流媒体。打开编码器关联输出流媒体和输出文件,初始化像素格式为AV_PIX_FMT_YUV420P,图像宽为640, 高为480,比特率为1800000(分辨率一定的情况下,比特率越高图像越清晰,但是数据量会更大),设置图像层组大小为10(关键帧的周期,此数值越大图像编码后的数据越小,但会增加编码的时间),设置B帧数量为3(该帧为视频图片空间的前后预测帧,相同码率的情况下, 越多 B 帧的视频,越清晰但对于编码的复杂度较高)[3]。

4)写入视频头:

写入视频之前会对接口设置检查,音频、视频的通道检查,视频的参数检查,检查输出封装是否支持h264编码格式。经过以上检查,对video.h264文件写入文件头信息。

5)读取视频帧,对图像序列转换

Opencv读取的帧像素格式为BGR格式,需要利用ffmpeg转码成为YUV240P才能满足H264编码的要求,与RGB要求三个独立的通道传输信号相比YUV占用更少的带宽。“Y”表示明亮度,“U”和“V”表示色度即分别为色调与饱和度,这样的色彩模型使亮度和色度分开,从而更适用于编码压缩。图像由720P缩放至640 x 480采用双三次插值法。该算法利用待采样点周围16个点的灰度值作三次插值,不仅考虑到4 个直接相邻点的灰度影响,而且考虑到各邻点间灰度值变化率的影响,三次运算可以得到更接近高分辨率图像的放大效果[4]。这种算法需要选取插值基函数来拟合数据,其最常用的插值基函数如图3所示。

利用求得缩放图像某像素点在原图像的相对位置,通过此坐标找到距离最近的16个像素点,利用插值基函数,即可求出对应每个像素的权值进而获得缩放后的像素值。

6)压缩编码

调用X264编码器编码YUV420P序列时需调整对应Y、U、V数据地址的偏移。以第一帧为例Y数据为 307200(640 *480)Byte,U、V數据均为分别为76800(640*480/4 )Byte。那么对应视频帧的第一帧存储顺序依次为存储Y信息、U信息、V信息。公式如图4所示。

FrameData [0]=  data[0]

FrameData [1]=  data[0] + w*h

FrameData [2]=  data[0]+ w*h*5/4

其中FrmaeData为视频编码输入数组,data为转换后的YUV420P像素格式图片数据。

7)写入文件封装文件尾:

编码一帧即打包一帧视频到AVPacket缓存中,再调用文件写入函数fwrite完成视频写入文件。最后写入文件尾,封装成为FLV格式的视频文件。文件采用循环覆盖方式[4]。

3.2 FTP实时文件上传系统设计

初始化EC20,通过USB发送AT指令查看SIM卡是否正确插入、检查SIM卡是否注册GPRS功能以及误码率、设置GPRS的APN获取相关运营商的信息后完成入网。调用FTP AT指令连接远程服务器,发起FTP请求,设置用户名和密码,二进制文件传输模式以及FTP文件传输地址端口即可开始视频上传。调用AT指令AT+QFTPPUT传出文件。

4 测试结果

针对船舶交通实时监控中,船舶均为体积庞大的沙船、货船,航行速率偏低。本系统在多次测试调试如表1下得出该系统在640x480分辨率下的图像清晰,帧数在25帧以上,流畅度和清晰度能满足预期航道实时监控的需求。

5 结束语

本文基于ffmpeg设计的航道实时视频传输系统,在整个系统硬件的选择和软件的构件上有效地满足了可视化航标灯的项目需求,4G网络给予本系统实时性保证、稳定性,可将航道上交通信息实时视频传输至数据中心,事故回溯有理有据,一次投放部署即可在服务器端通过命令远程控制模块的启动、复位和需求变化。本系统应用潜力巨大,可满足偏远、恶劣环境下的远程监控,日后随着嵌入式设备图像处理、数据压缩技术的不断提升,ffmpeg实时视频传输系统的应用将在各个领域发挥重要作用。

参考文献:

[1] 王建,林楚婷.基于4G数据传输模块的数据采集传输系统设计[J].工业控制计算机,2020,33(2):37,40.

[2] 迟颖.基于ARM和OpenCV的视频监控系统设计[D].大连:大连海事大学,2016.

[3] 杨培凯.无线图像传输在粮虫检测中的应用[D].武汉:武汉轻工大学,2016.

[4] Keys R.Cubic convolution interpolation for digital image processing[J].IEEE Transactions on Acoustics,Speech,and Signal Processing,1981,29(6):1153-1160.

[5] 闫春秀.基于行车记录仪的视频监控存储策略的研究与实现[D].成都:电子科技大学,2020.

【通联编辑:梁书】

猜你喜欢 编码摄像头像素 “像素”仙人掌红领巾·萌芽(2019年8期)2019-08-27人眼如何解读像素华夏地理(2018年10期)2018-08-06高效视频编码帧内快速深度决策算法计算机应用(2016年10期)2017-05-12一种电脑专用摄像头科技资讯(2016年9期)2016-05-14高像素不是全部CHIP新电脑(2016年3期)2016-03-10无法开启摄像头的解决方案网络与信息(2009年6期)2009-07-31找出摄像头花屏的“罪魁祸首”网络与信息(2009年8期)2009-05-10不断修缮 建立完善的企业编码管理体系中国计算机报(2009年27期)2009-04-27您的像素,饱和吗?[上]数码影像时代(2006年5期)2006-05-29

推荐访问:实时 传输 设计