当前位置:首页 > 物联网 > 《物联网技术》杂志
[导读]摘要:给出了在Linux系统下实现视频采集、数据传输以及视频显示的实现方法。该方法利用ARM开发板内核中的V4L2协议来完成图片的采集过程,并通过Linux下Socket编程实现图片数据从采集端到显示窗口的传输,视频显示终端则是基于Linux下Qt开发的数据窗口部件来实现的。

引言

嵌入式系统是一种“完全嵌入受控器件内部,为特定应用而设计的专用计算机系统”,是以应用为中心,以计算机技术为基础,其软硬件可裁剪,适用于对功能、可靠性、成本、体积、功耗有严格要求的专用计算机系统。与传统的操作系统相比,嵌入式系统是一个精简、高效、针对性强的相对简单的操作系统。

Linux系统是windows问世以来最热门的操作系统之一,其作为嵌入式系统的优势主要表现在以下几点:第一,Linux最重要的一个优点就是Linux的源代码的开放性,是免费的,只要遵守GPL(GNUGeneralPublicLicense)的规定,就可以免费获得拷贝,这也使众多的开发者为其打造了坚实的基础;第二,Linux支持多种硬件平台,现在已经被移植到ARM,CRIS,AMDX86-64,IBMS/390等各种体系结构上;第三,Linux操作系统功能强大,其可以提供多任务的进程调度,完全的内存保护机制,多进程间通信和同步机制,多种网络协议的网络支持等功能;第四,模块化设计,系统上的任务模块都可以在运行的时候被链接或者解除链接,使新模块的开发变得更加容易,而且可以减少内存的使用,这非常适合小型的嵌入式系统开发。

1系统功能模块的设计

根据各个功能模块的不同,本视频传输系统主要包括3个模块设计:其一是视频采集模块,完成的功能主要是设置和控制摄像头对视频数据进行采集,其二是视频发送接收模块,主要完成ARM板与显示终端之间的视频数据传送与接收,其三是视频显示模块,主要完成接收数据的实时动态显示,显示界面是基于Qt的窗口开发。

2视频采集模块

视频的采集要用到V4L2协议,即videoforLinux2,是运行在Linux操作系统之上的关于视频设备的内核驱动框架。它主要利用一系列的回调函数来实现程序监测设备和操作设备的能力,包括视频数据压缩的格式,摄像头频率、帧频的设置,图像的参数等。

V4L2是Linux内核提供给应用程序访问语音、视频驱动的API(ApplicationProgramInterface),它为应用层和驱动层提供接口函数,开发者调用函数就可以直接控制、操作相应的视频硬件设备。

视频传输系统中视频的采集主要包括以下几个部分:视频设备的打开,视频设备属性及采集方式的设置,视频数据的处理,关闭视频设备。

2.1视频设备的打开

在Linux操作系统中,设备文件被看做是文件类型,我们可以像操作文件一样去操作视频设备。该系统中采用中星微ZC301摄像头。采用非阻塞、可读可写模式,用open函数打开摄像头设备,其命令代码为:

intcamera_fd;

camera_fd=open(“/dev/video0”,O_RDWR|O_NONBLOCK);

应用程序中可以使用阻塞模式和非阻塞模式打开视频设备。如果使用非阻塞模式,即使视频设备没有捕获到信息,驱动依然会把缓存数据返回给应用程序;采用阻塞模式,则驱动会阻塞等待视频设备,直到采集到数据。

2.2视频设备属性及采集方式的设置

视频设备属性的设置主要通过ioctl函数来进行设置,loctl的调用格式为:

result=loctl(Fd,Command,Parameter);

其中Fd表示设备描述符,Command表示控制命令,Parameter表示控制命令需要的参数,loctl函数返回值result根据控制命令的不同而有不同的意义。Linux操作系统视频设备驱动V4L2支持的常用的控制命令及其功能为:

VIDIOC_ENUM_FMT;获取当前视频设备支持的视频格式;

VIDIOC_QUERYCAP;查询当前视频设备的功能;VIDIOC_S_FMT;设置视频设备的视频数据格式;VIDIOC_REQBUFS;请求V4L2驱动分配视频缓冲区;VIDIOC_QUERYBUF;查询已经分配的V4L2的视频缓冲区的相关信息;

VIDIOC_QBUF;投放一个空的视频缓冲区到视频缓冲区输入队列中。

当调用上述一系列的ioctl函数及控制命令后,视频设备已经准备就绪,等待视频采集的开始。

2.3视频数据的处理

当设置ioctl函数控制参数为VIDIOC_STREAMON时,即启动视频采集命令,视频设备驱动程序开始采集视频数据;采集过程中设置控制参数VIDIOC_DQBUF,从视频缓冲区的输出队列中取得一个已经保存有一帧视频数据的视频缓冲区。

在处理视频数据时,会牵涉到内存映射的概念。内存映射提供了一种机制:让用户程序可以直接访问设备内存,相比较在用户空间和内核空间互相拷贝数据,效率会得到明显的提高。Linux操作系统下,V4L2位于内核空间,运行在视频设备的驱动层中,应用程序不能直接访问,需要通过调用mmap函数把内核空间内存映射到用户空间,之后应用程序才能通过访问用户空间地址来访问内核空间。

内存映射需要调用mmap函数,其格式为:

void*mmap(void*start,size_tlength,intprot,intflags,intfd,off_toffset);

其中start指向映射的内存起始地址,length表示需要内存映射的文件大小,prot参数用来设置映射区域的保护方式,flags表示影响映射区域的各种特性,fd和offset分别表示要映射到内存的文件描述符和文件映射的偏移量。

视频传输系统的整个数据采集过程如图1所示,图中假设驱动程序向内核空间申请5个内存缓冲区,其中应用程序的数据处理是在用户空间,驱动程序采集数据的过程是在内核空间中。

基于Linux视频传输系统的设计与实现

2.4关闭视频设备

设置ioctl控制参数为VIDIOC_STREAMOFF时,即停

止视频采集命令,视频设备驱动程序不再采集视频数据,视频设备关闭:

close(fd);

3视频数据传输模块

视频数据在ARM板与显示终端之间通过网络编程中socket套接字进行通信。socket是一种特殊的I/O接口,是一种常用的进程之间的通信机制。简单的说,socket套接字是在用户层和TCP/IP协议之间封装了一系列的接口函数API。常见的socket有两种类型,流式socket和数据报socket,使用的协议分别为TCP协议和UDP协议,本文中使用TCP协议的流式套接字编程,其流程图如图2所示。

系统设计中ARM开发板作为客户端,显示终端作为服务器端,客户端通过connect函数与服务器端建立连接。准备就绪后,将采集模块中摄像头采集的视频数据发送至服务器端,即显示终端Qt界面,服务器端完成接收功能。

4视频显示模块

视频的显示终端是基于Qt设计的窗口控制部件,接收客户端的视频数据后,将数据以实时动态的图片显示在终端界面上。

基于Linux视频传输系统的设计与实现

Qt是一种跨平台的C++图形用户界面应用程序开发框架,

是一种面向对象的框架,它能够提供程序开发者建立图形用户界面所需要的所有功能。Qt包括250个以上的C++类,特别是其核心机制一信号和插槽机制,使得Qt的开发变得很方便。本系统的设计过程中,主要用到Qt库中QTCPServer,

QPixmap,Qlmage,QByteArray,QTextStream等相关的类,的视频监控方法,可以完成最基本的监控功能。相信安防在其界面开发效果如图3所示。

图3基于Qt的视频显示终端

5结语

本文设计实现了在Linux操作系统下,利用内核下V4L2协议驱动采集、发送、接收并实时动态显示视频监控的系统。本文中采用面向连接的TCP协议socket编程,保证了视频显示的准确性和流畅性,另外,基于Qt的界面开发也展现了其强大的功能。本系统实现了一套简单的、准确的、可移植性强未来的发展过程中,会有更广阔的应用和发展。

20211117_61950b9c18599__基于Linux视频传输系统的设计与实现

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

学习Linux动态链接库是一个绕不开的话题,我们今天就一起来看一下什么是动态链接库、动态链接库有什么好处、如何编译出一个动态链接库等几个关于动态链接库的几个基本概念,废话少说咱们直接开始

关键字: Linux 静态链接库 动态链接库

在Linux内核中,提供了一个用来创建双向循环链表的结构 list_head。虽然linux内核是用C语言写的,但是list_head的引入,使得内核数据结构也可以拥有面向对象的特性,通过使用操作list_head 的通...

关键字: Linux 内核链表

(全球TMT2022年9月15日讯)IBM于美国东部时间9月13日发布其下一代LinuxONE服务器,这是一个具有高度扩展性的基于Linux和Kubernetes的平台,旨在为企业提供所需的可扩展性,使其能用一个单一系...

关键字: IBM Linux NET 可扩展性

下一代LinuxONE服务器扩展了IBM帮助行业客户实现可持续目标的能力,花旗银行就是很好的例子 北京2022年9月14日 /美通社/ -- IBM(纽约证券交易所:IBM)于美国东部时间9月13日发布其下一...

关键字: IBM Linux X86 数据中心

(全球TMT2022年9月15日讯)IBM发布其下一代LinuxONE服务器,这是一个具有高度扩展性的基于Linux和Kubernetes的平台,旨在为企业提供所需的可扩展性,使其用一个单一系统就能支持成千上万的工作负...

关键字: GROUND IBM Linux 亚马逊

为了使得多种设备能通过网络相互通信,和为了解决各种不同设备在网络互联中的兼容性问题。

关键字: Linux 网络包

北京2022年8月26日 /美通社/ -- 双碳目标的实现或许任重道远,但是低碳、可持续的理念已经渗透到我们生活工作的方方面面。持续整个夏季的异常高温,以及四川等地限电,让许...

关键字: IBM 可持续发展 AI Linux

摩尔线程MTT S系列GPU与浩辰CAD Linux 版V2022软件产品近日完成兼容性适配。在双方工程师的通力协作下,摩尔线程MTT S系列GPU能够为浩辰CAD Linux软件提供快速运行所需的性能,并在持久的高负载...

关键字: 摩尔线程 GPU Linux

近日,摩尔线程MTT S系列GPU与中望二三维CAD Linux版产品完成产品兼容性认证。经摩尔线程和中望软件双方团队的共同严格测试,中望CAD Linux、中望3D Linux、中望CAD机械版Linux、中望CAD建...

关键字: 摩尔线程 GPU Linux

(全球TMT2022年6月7日讯)近日,上海安势信息技术有限公司(安势信息)对外宣布正式成为DevSecOps领域中国首家OpenChain项目会员。安势信息将同高通、谷歌、微软等其他全球企业共建可信、安全的软件供应链...

关键字: Linux PEN AI 供应链

《物联网技术》杂志

2510 篇文章

关注

发布文章

编辑精选

技术子站

关闭