基于Linux操作系统实现移动视频监控终端的设计

发布者:琴弦悠扬最新更新时间:2018-02-16 来源: eefocus关键字:Linux  操作系统  移动视频监控终端 手机看文章 扫描二维码
随时随地手机看文章

    0 引言

    随着人们对生活和工作环境的安全性的要求不断提高,安全防范的重要性越来越突出。视频监控技术在各个领域发挥着越来越重要的作用,比如对森林、旅游景点、城市小区等通过视频监控来实时监控现场发生的情况。将嵌入式技术和无线网络技术应用于视频监控终端,与传统的有线视频监控相比,无线视频监控摆脱了网络电缆的束缚,提高了视频监控的灵活性和可扩展性。监控人员可以携带手持监控设备而不必在固定位置值守来监控现场。

    在无线网络环境下传输视频,庞大的视频信息量对有限的传输带宽是难以承受的,成为阻碍其应用的瓶颈之一,因此,需要高效率的视频压缩标准来满足无线传输带宽的需求。新一代视频压缩标准H.264是面向Internet和无线网络的视频图像编解码技术,它不仅提高了压缩效率,而且增加了网络适应能力,降低了网络带宽的需求。H.264标准定义了视频编码层VCL(Video Coding Layer)和网络提取层NAL(Network Abstraction Layer)。视频编码层主要采用帧内预测、帧间预测、变换和量化、熵编解码等技术实现视频压缩功能,网络提取层将编码后的数据封装成NALU单元,以适应在无线网络中传输。

    移动视频监控终端以ARM微处理器为核心,剪裁适合视频监控终端的嵌入式Linux操作系统。通过配备无线网卡接收监控前端压缩视频数据,解码、显示监控前端发送的视频流,实时显示前端监控画面。本文将重点阐述在视频传输过程中采用RTP/UDP/IP协议时,出现的视频包乱序、丢包处理方法,以及在ARM平台上对H.264解码器的移植和实现。

    1 系统的硬件平台

    系统硬件平台主要由嵌入式微处理器、NANDFLASH,SDRAM,IEEE802.11协议无线网卡、LCD模块组成。本系统的微处理器选用三星公司ARM9内核的S3C2440,系统时钟采用400 MHz的工作频率。S3C2440内部集成了大量的功能单元,包括:存储器控制器有8个Bank区间、LCD控制器、USB控制器以及丰富的外设接口资源,根据视频监控终端的需求,在此基础上进行外围电路的配置和扩展。视频监控终端硬件框图如图1所示。

b.JPG

    存储器包括ROM和RAM两部分,ROM配备了非线性结构的K9F1208UOM容量为64M×8 b的NAND FLASH芯片;RAM配备2片HY57V561620BT—H组成32位数据总线的SDRAM,适用监控终端处理庞大视频数据的需求。在USB Host接口上外接一块基于IEEE802.11协议的无线网卡,通过无线AP端点接收监控前端视频数据。液晶屏选用TFT真彩液晶屏,并配备相应的触摸屏实现人机交互的目的。

    2 系统的软件设计

    移动视频监控终端软件设计以嵌入式Linux操作系统为核心,作为一种开源操作系统,Linux具有支持多种硬件平台、丰富的设备驱动和良好的网络功能等特点。针对监控终端的具体应用对内核进行配置,剪裁出合适的系统。监控终端应用软件是建立在操作系统之上,为实现RTP/UDP/IP协议下接收H.264视频流和ffmpeg解码库实时解码视频流。

    2.1 H.264视频流的传输

    2.1.1 传输方式选择

    视频的实时传输要求较低的时间延迟,并且允许一定的丢包率。由于TCP协议的3次握手以及丢包重传机制会造成一定的延时,在实时监控系统中有一定缺陷,而UDP协议是面向无链接、不可靠的传输层协议,具有消耗资源小,传输速度快等特点,在视频传输过程中偶尔丢包不会对监控画面产生较大影响。UDP协议不提供数据包分包、封装、数据包排序等缺点,为保障视频流传输的可靠性,网络传输部分采用建立在UDP协议之上的RTP(Real-time Transport Protocol)实时传输协议来实现,通过套接字与前端建立连接,以接收视频流数据。RTP提供带有实时特性的端对端数据传输服务,包括有效载荷类型的定义、序列号、时间戳和传输检测控制。基于RTP/UDP/IP协议传输视频流封装格式如图2所示。c.JPG

    2.1.2 视频流传输

    采用UDP协议传输RTP包时会出现乱序的现象,所谓乱序就是监控终端接收到RTP包顺序可能前端发送的顺序不一致,因此,首先要对接收的RTP包排序。采用在内存中建立一个双向链表来保存接收的RTP包,按照RTP报头的序列号(Sequence Number)顺序存放到链表中,双向链表结构体定义如下,部分变量用于RTP分片封包模式。

    d.JPG
    每当接收到一个新的RTP包后,根据序列号从链表尾开始搜索并插入到合适的位置,比如,接收到一个序列号SN=26的RTP包在链表中分配内存,找到位于25,27之间的位置插入该包,RTP包排序过程如图3所示。

e.JPG

    H.264视频流NALU单元封装成RTP包时,要遵循RTP负载格式标准,H.264负载格式定义了3种类型的负载结构:单一NALU模式、组合封包模式、分片封包模式。单一NALU模式是一个RTP包仅由一个完整的NALU组成;组合封包模式是可能由多个NALU组成一个RTP包;分片封包模式是将一个NALU单元封装成多个RTP包,采用分片封包模式的原因是网络传输协议有最大传输单元(MTU)一般为1500B上限,如果NALU大于MTU,IP层将其自动分割为几个小于MTU的数据包,这样无法检测数据包是否有丢失,所以有必要采取分片封包模式,在接收端把拥有相同时间戳的多个RTP包按照序列号重组成一个完整的NALU。分片封包模式的RTP包格式如图4所示。f.JPG

    FU inDICator的Type字段表示RTP采用的负载结构,28,29时表示采用分片封包模式,NRI字段的值根据NALU的NRI值设置。FU header的S位置1时表示该包是NALU的起始分片,E位置1时表示该包是NALU的结束分片。

    2.1.3 RTP丢包处理

    由于网络稳定性原因,可能造成RTP丢包的情况。针对单一NALU模式和组合封包模式丢包不会影响解码器的正常工作,会导致监控画面花屏或跳帧想象,但对于实时监控是在可承受的范围。对于分片封包模式丢包会造成接收端收到一个不完整的NALU,对一个不完整的NALU解码可能造成解码失败,甚至系统崩溃。因此,对于分片封包模式的RTP包需要判断接收的NALU是否丢包。

    传输分片封包模式的NALU时,一个NALU分割封装成若干个RTP包具有相同的时间戳、依次递增的序列号。对接收的RTP包根据FU header头信息做不同的处理:接收到起始分片(S=1),根据序列号在链表中添加节点,保存视频数据、起始分片序列号,计数器加1;接收到中间分片,在链表中找到时间戳相同的节点,将此RTP包序列号与起始序列号相减,计算出视频数据在链表的相对偏移,存储视频数据到链表相应位置,计数器加1;接收到结束分片(E=1),同中间分片一样,但还需要保存结束分片序列号。每接收一个RTP包后判断NALU完整性,在接收到起始分片、结束分片的前提下,结束分片序列号与起始分片序列号之差是否等于计数器的值,以此判断一个NALU是否接收完整,若接收到所有分片,置位结构体中FrameCompelere,解码器可根据此位判断NALU完整性。

    2.2 H.264解码器的实现

    监控终端通过网络接收到H.264视频流后,需要移植H.264的解码库实现实时解码。在众多解码器中经对比和分析,选用ffmpeg开源解码器来实现。ffmpeg库为音视频数据分离、转换、解码提供了完整解决方案,其中两个重要库libavformat和libavcodec,分别支持各种音视频文件格式和音视频解码器。

    利用ffmpeg的API函数进行视频流解码,先做好解码前的准备工作。调用av_register_all()函数注册所有的文件格式和编解码器的库,也可以只注册特定的解码器。关于解码器的信息在AVCodeCContext结构体中,它包含解码器所有信息,查找H.264解码器CODEC_ID_H264,通过avcodec_open()函数打开解码器。用avcodec_alLOC_frame()函数分配一帧的存储空间,存储解码后输出的数据。

    在双向链表中已经保存了接收的视频流,从链表头读取NALU进行解码,每读取一个NALU将链表头指向下一个单元,释放已读取NALU占有的内存。NALU的头信息定义了视频流所属类型,一般包括增强信息(SEI)、序列参数集(SPS)、图像参数集(PPS)、条带(SlICe)等。先将SPS、PPS参数集通过解码器解码出来设置解码图像尺寸、片组数、参考帧数、量化和滤波参数等。依次从链表头读取NALU,调用avcodec_decode_ video()函数解码输出到分配的存储空间,当完成一帧的解码,就需要对解码后的图像显示到液晶屏。解码输出的图像格式为YUV420P,可以采用ffmpeg提供的sws_seale()把图像格式转换为RGB格式显示,也可以采用其他SDL之类的库直接YUV覆盖显示。整个解码流程如图5所示。

g.JPG

 

    3 结语

    系统采用S3C2440硬件平台和嵌入式Linux操作系统相结合,设计了移动视频监控终端,重点阐述了用RTP协议在网络中通过套接字传输视频流,结合开源解码库ffmpeg实时解码H.264视频流的解决方案。经测试,对于QCIF分辨率监控画面具有较好的实时性和可靠性。当视频分辨率增大时,解码器的解码性能成为视频监控终端的瓶颈。因此,本文的后续工作就是针对ffmpeg解码库在ARM9平台的优化,提升解码性能。


关键字:Linux  操作系统  移动视频监控终端 引用地址:基于Linux操作系统实现移动视频监控终端的设计

上一篇:基于ARM嵌入式电站动态数据监控的一种新设计方案
下一篇:MiniGUI移植到S3C2440的过程介绍

推荐阅读最新更新时间:2024-03-16 15:55

专家详解为何鸿蒙有机会成为世界第一大操作系统
专家项立刚认为鸿蒙有机会成为世界第一大操作系统,具体有以下几个原因。 图片来源:微博 1、人类电子产品有操作系统时,不同产品因为服务需要,系统是隔裂的,而且是适会某一类产品需要。如服务器、电脑等。电脑、手机、电视等不仅系统不同,而且系统架构的思维也不同。但是面向智能时代,对系统的要求是多设备互通,系统要在架构打通,实现互通和互操作。传统的系统的架构无法适应,鸿蒙的微内核是下一代系统,代表了操作系统的未来。可以把手机、智慧屏、无人机、智能汽车、智能家居打通。这会在体验上远远超越传统的系统。技术上鸿蒙有较大优势。 2、鸿蒙是一个开源的系统,所有厂商都可以使用,今天虽然很多手机厂商还在观望,但是相信未来华为对鸿蒙的处理会和谷歌一样
[手机便携]
专家详解为何鸿蒙有机会成为世界第一大<font color='red'>操作系统</font>
《ARM与Linux些许问题》第二章:Linux操作系统与ARM工作模式
====================================================================================================================================== 首先,ARM开发板在刚上电或复位后都会首先进入SVC即管理模式,此时、程序计数器R15-PC值会被赋为0x0000 0000;bootloader就是在此模式下,位于0x0000 0000的NOR FLASH或SRAM中装载的,因此、开机或重启后bootloader会被首先执行。 接着,bootloader引导Linux内核,此时、Linux内核一样运行在A
[单片机]
嵌入式linux串口应用编程设计
  本文基于嵌入式linux下串口应用编程进行了研究,详细介绍了串口设置的步骤,可以更好的理解串口的工作原理。   一、引言   串口是一种常用的接口,常用的串口有RS-232-C接口。S3C2410X内部具有两个独立的UART控制器,每个控制器都可以工作在Interrupt(中断)模式或者DMA(直接存储访问)模式。同时,每个UART均具有16字节的FIFO(先入先出寄存器),支持的最高波特率可达到230.4kb/s.   UART的操作主要可分为以下几个部分:数据发送、数据接收、产生中断、设置波特率、Loopback模式、红外模式以及硬软流控模式。   在linux中,所有的设备文件一般都位于 /dev 下,其中串口1和串
[单片机]
分时操作系统思想在单片机中的实现
前言 作为嵌入式系统主控单元——单片机,其软件往往是一个微观的实时操作系统,且大部分是为某种应用而专门设计的。系统程序有实时过程控制或实时信息处理的能力,要求能够及时响应随机发生的外部事件并对该事件做出快速处理。而分时操作系统却是把CPU的时间划分成长短基本相同的时间区间,即“时间片”,通过操作系统的管理,把这些时间片依次轮流地分配给各个用户使用。如果某个作业在时间片结束之前,整个任务还没有完成,那么该作业就被暂停下来,放弃CPU,等待下一轮循环再继续做。此时CPU又分配给另一个作业去使用。由于计算机的处理速度很快,只要时间片的间隔取得适当,那么一个用户作业从用完分配给它的一个时间片到获得下一个CPU时间片,中间有所“停顿
[单片机]
分时<font color='red'>操作系统</font>思想在单片机中的实现
OK6410A 开发板 (八) 118 linux-5.11 OK6410A linux对arm异常处理的相同部分解析
.section .vectors, ax , %progbits .L__vectors_start: W(b) vector_rst W(b) vector_und W(ldr) pc, .L__vectors_start + 0x1000 W(b) vector_pabt W(b) vector_dabt W(b) vector_addrexcptn W(b) vector_irq W(b) vector_fiq 每种处理方式中相同的部分 // 8个入口 1. 直接定义 2个 vector_rst: ARM( swi SYS_ERROR0 )
[单片机]
Google Brillo物联网操作系统技术观察
    DIGITIMES Research观察,Google虽已进一步揭露其物联网作业系统Brillo的技术细节与商业合作伙伴,但现阶段仍缺乏系统合作业者(在此指硬体装置的系统商,而非规划、布建的系统整合商)与产品具体应用方向,且Google主张高度掌握作业系统运作、更新、终端使用行为等资讯,此均可能成为Brillo推行上的隐忧。 Brillo确定支援x86、ARM、MIPS等3种处理器架构,记忆体最低需求量为32MB,储存空间最低需求量为128MB,并支援Wi-Fi、蓝牙等无线通讯,且Brillo核心服务中已包含Weave通讯协定。 Google承诺Brillo作业系统的线上更新与周期性更新,每6个星期进行次要更新,每6个月进行
[手机便携]
arm-linux-gcc4.4.3编译s3c2410平台linux内核
一、首先下载linux内核: linux-2.6.14.tar.bz2 下载地址: http://www.kernel.org/pub/linux/kernel/v2.6/linux-2.6.14.tar.bz2 二、解压linux-2.6.14.tar.bz2: tar -jxvf linux-2.6.14.tar.bz2 三、配置Makefile文件: 1、打开源码根目录下的Makefile文件: gedit Makefile 修改Makefile文件: ARCH ?= arm CROSS_COMPILE ?= arm-linux- 2、查看目录结构: ls -l linux-2.6.14/arch/arm/ d
[单片机]
基于嵌入式Linux图形用户接口的实现方法
随着Internet与网络的迅速发展 并向家庭领域不断扩展,使消费电子、计算机、通信(3C)一体化趋势日趋明显,嵌入式系统再度成为研究与应用的热点。嵌入式实时Linux操作系统以价格低廉、功能强大又易于移植而正在被广泛采用,成为新兴的力量,如今随着WAP手机、PDA、机顶盒、及DVD/VCD播放机已经迅速普及,用户对这些手持式设备的GUI提出了更高的要求,希望能看到像PC机才拥有的华丽美观的GUI。GUI已经成为了人与机器沟通的桥梁,嵌入式系统对GUI的需求越来越高,而这一切均要求有一个轻型、占用资源少、高性能、高可靠、可配置及美观的GUI支持。   1 Java的图形界面工具   Java技术对于服务器,个人电脑和嵌入式系统
[工业控制]
基于嵌入式<font color='red'>Linux</font>图形用户接口的实现方法
小广播
添点儿料...
无论热点新闻、行业分析、技术干货……
设计资源 培训 开发板 精华推荐

最新单片机文章
何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2024 EEWORLD.com.cn, Inc. All rights reserved