时间:2024-05-04
周斌 李和
摘 要:文章主要研究了视频信号的采集与压缩编码,在分析了现有的视频传输格式后,利用ARM Cortex A8为核心的嵌入式Linux系统对所采集的视频信号以硬件编码的方式实现H.264压缩编码,在保证视频清晰度的同时完成视频的压缩并编码,同时,通过串口发送压缩后视频信息流。最后经测试,压缩编码后的视频传输稳定,画面清晰流畅。
关键词:Linux;H.264;编码
1 关键技术分析与选择
1.1 嵌入式操作系统的选择
一个合格的嵌入式操作系统选取应该包含以下几点要求:(1)稳定性,在嵌入式运行过程中需要满足全天候不间断工作,这就对系统的稳定性提出了较高的要求。作为运行软件的基础平台,系统的稳定运行是第一要务。(2)可移植性,在现代社会,市场上有大量的嵌入式设备可供选择,有着完全不同的体系结构,为了降低程序的二次开发难度,本次研究所选的操作系统应该具备良好的代码可移植性。
1.2 处理器的选择
芯片集成度是否满足要求,即处理器应集成的控制器是否有适合项目的接口与控制设备,通常会选择在完成任务的情况下选择耗能较少的处理器。硬件成本合适,价格低廉性能优良的处理器较为合适。
1.3 图像压缩编码选择的标准
常用的编码格式有MPEG4,H.263,H.264,H.265,都能满足要求。H.265是新的视频编码标准,目前使用度并不高,主要因为在使用难度上它的需求高。考虑到项目研究需求以及使用场合,主要是使用视频压缩编码技术,传输带宽有一定的要求,综上所述,MPEG4和H.264较为符合要求[1]。嵌入式系统CPU中包含使用硬件编码的MFC模块。但在同等的传输带宽下,相比较下H.264比MPEG4有着更好的数字传输特性。
2 软件设计与实现
2.1 系统软件总体结构
一个完整的嵌入式系统软件需要满足:含有应用程序库、操作系统、以及驱动系统。(1)内核版本,本次研究考虑到系统的完整性、稳定性等一系列要求,认为3.0.8内核版本较为合适。由于系统需要更小的体积以及更高的传输效率,所以在操作过程中尽量降低内核体积,在通过使用嵌入式开发环境进行编译,在生成最新的内核映像文件后,使用SD卡烧写用于操作系统内核的安装。(2)设备驱动,Linux操作系统作为驱动以及硬件的操作系统,系统驱动程序上需要检查主要包括USB/UART芯片CH340驱动、硬件编码器MFC驱动等。(3)应用程序,系统应用程序中含有视频采集模块以及视频压缩转换模块,USB/UART模块。(4)库在嵌入式系统,其使用编译代表了资源的多少,在这个过程中会需要使用到很多的库用于进行编译码的运行处理[2]。系统框架如图1所示。
2.2 视频采集模块
在嵌入式视频采集方案中最通用的协议是V4L2,它是V4L的改进版,在Linux2.5.x中就被加入到Linux内核中。另外,V4L2支持UVC免驱设备,省去了USB摄像头驱动移植的困难,极大地方便了视频采集模块的开发。在研究中采用罗技C270摄像头来开发视频采集应用,开发板Tiny210,当USB摄像头连接后,Linux会在/dev目录下创建USB摄像头操作接口Video3。使用V4L2的视频采集后,就能通过使用内存映射的方式将USB摄像头采集到的数据映射到可操作的用户空间。这里调用线程实现重复采集数据并保存在mmap映射内存中,方便下一步调用显示函数和H.264编码函数[3]。在视频采集中的重要步骤如下:
使用open(“/dev/video3”,O_RDWR | O_NONBLOCK)函数通过非阻塞的方式打开USB摄像头/dev下的video3驱动。使用ioctl(cam_fd,VIDIOC_ENUM_FMT,&fmt)枚举视频设置支持的格式,ioctl(cam_fd,VIDIOC_QUERYCAP,&cap)查询视频设备支持的功能。这里将摄像头参数打印出来,可知USB摄像头支持的视频采集格式为YUYV。设置摄像头采集参数ioctl(cam_fd,VIDIOC_S_FMT,&stream_fmt)。结构体stream_fmt参数如下:
stream_fmt.type = V4L2_BUF_TYPE_VIDEO_CAPTURE;
stream_fmt.fmt.pix.width =320;
stream_fmt.fmt.pix.height =240;
stream_fmt.fmt.pix.pixelformat = PIXELFMT;
stream_fmt.fmt.pix.field= V4L2_FIELD_INTERLACED;
初始化完成后用ioctl(cam_fd,VIDIOC_QUERYBUF,&buf)將申请到的buf地址放入视频采集缓存中使用,用于存储视频数据。调用ioctl(cam_fd,VIDIOC_STREAMON,&type)函数,开始进行采集图像工作。
从buf地址中获取图像并复制给新的存储地址,把buf重新归队继续采集图像数据形成循环采集获取到视频流。当需要停止时使用ioctl(cam_fd,VIDIOC_STREAMOFF,&type)停止视频采集。并且使用unmap()函数释放被占用的视频缓存区buf。再关闭驱动文件close(cam_fd)就可以停止视频采集。
2.3 视频压缩程序设计
(1)通过函数打开MFC硬件编码设备:
SsbSipMfcEncOpen(&buf_type)。
(2)初始化编码器对编码结构体SSBSIP_MFC_ENC_H264_PARAM进行必要的参数设置。如采用什么编码类型、编码图像的高度和宽度、比特率、量化参数和帧率等选项进行设置。主要地配置如下:
err=SsbSipMfcEncInit(openHandle, param);
param->codecType = H264_ENC;
param->SourceWidth = CapWidth;
param->SourceHeight = CapHeight;
param->Bitrate = 30000;
param->FrameQp = 30;
param->FrameRate = 30。
(3)建立和獲取数据输入的缓存地址:
err = SsbSipMfcEncGetInBuf(openHandle,&iinfo);
err = SsbSipMfcEncSetInBuf(openHandle,&iinfo)。
(4)调用编码函数进行H.264视频压缩编码:
err = SsbSipMfcEncExe(openHandle)。
(5)建立和获取编码输出的缓存地址:
SSBSIP_MFC_ENC_OUTPUT_INFO oinfo;
err=SsbSipMfcEncSetOutBuf(openHandle,phyOutbuf,virOutbuf,outbufSize);
err = SsbSipMfcEncGetOutBuf(openHandle,&oinfo)。
(6)编码完成后,硬件编解码器设备MFC:
err = SsbSipMfcEncClose(openHandle)。
3 系统嵌入式硬件平台测试
采用“友善之臂”提供的Tiny210方案,可以外接7寸的液晶屏。开机后正常运行,进入系统后运行“友善之臂”提供的检测软件测试各种功能是否正常使用。使用串口转USB模块连接电脑后,可以通过PC机上的SecureCRT查看目录文件是否被成功挂载。最后对硬件接口进行功能测试,如进到/dev下,观察是否有ttyUSB0串口设备接口文件,如果没有说明串口接口电路有问题,需重新检查串口模块是否能正常使用。
3.1 图像采集和显示功能验证
在验证初期,通过使用代码编写图片的采集截取一帧使视频通过BMP格式保存图片信息,验证V4L2可操作USB摄像头。后续实现连续的图像采集形成视频流文件,通过fwrite保存视频文件来实现在PC机上使用PotPlayer播放器播放视频文件,分析播放效果,一步步完善代码实现视频的采集与播放功能。图2为所采集图像在7寸LCD液晶屏播放的效果,图像清晰、画面流畅、运行稳定。
3.2 图像压缩功能验证
图像压缩主要就是对视频信号进行H.264压缩编码[4],观察压缩后数据量与压缩前数据量大小是否变化,将编码后的H.264文件通过SD卡复制到电脑上,就能用具有解码工具的软件进行播放,如H.264文件可以用PotPlayer软件进行播放,观察播放效果,判断是否编码成功,并进一步改善代码,使得视频压缩比例可调,以应对不同带宽需求的场景。图2上方是未压缩前的视频图像,下方是经压缩处理过的视频图像,对比两张图像可以看出经压缩处理的视频图像质量很好,尽管清晰度有所下降但不影响观看。
4 结语
通过研究基于ARM-Cortex A8的嵌入式Linux开发平台中关于视频编码设计,主要完成了有关V4L2协议下的USB摄像头的视频采集,采用S5PV210上的MFC硬件编码对视频数据进行H.264格式编码,并使用串口进行数据流发送,对后期无线数字调制传输具有较高的参考价值。
[参考文献]
[1]李毓强.基于H_264和流媒体的嵌入式多路网络视频监控系统设计与实现[D].南京:南京邮电大学,2016.
[2]姚莉,邓丹君.基于A8的嵌入式Linux远程视频监控系统的设计与实现[J].物联网技术,2016(5):24-26.
[3]杨建国,蔡立志,郑红.基于ARM的嵌入式视频监控系统的设计与实现[J].计算机应用与软件,2018(10):31-33.
[4]吴大中,胡江浪.基于ARM的移动视频监控系统设计[J].现代电子技术,2016(4):123-127.
我们致力于保护作者版权,注重分享,被刊用文章因无法核实真实出处,未能及时与作者取得联系,或有版权异议的,请联系管理员,我们会立即处理! 部分文章是来自各大过期杂志,内容仅供学习参考,不准确地方联系删除处理!