基于DSP的视频处理及传输系统设计

2017-04-25 06:38孟令军张慧慧
实验室研究与探索 2017年3期
关键词:服务器端线程解码

白 杰, 孟令军, 张慧慧

(中北大学 电子测试技术重点实验室,仪器科学与动态测试教育部重点实验室,太原 030051)

基于DSP的视频处理及传输系统设计

白 杰, 孟令军, 张慧慧

(中北大学 电子测试技术重点实验室,仪器科学与动态测试教育部重点实验室,太原 030051)

以数字信号处理(DSP)为硬件平台,对嵌入式视频软件系统的设计与实现进行了研究。提出了采用DSP核+DSP/BIOS方案进行系统设计。在嵌入式实时操作系统DSP/BIOS的基础上,通过达芬奇技术分别对系统中的视频采集、H.264编/解码器、网络传输、显示等各个软件模块进行设计。解决了低码率高清晰度实时视频处理及传输的问题。经过系统测试,实现功能需求。系统具有高性能低成本的特点,广泛适用于各类监控、实时视频传输场合。

数字信号处理; 视频处理; 传输系统

0 引 言

在PAL制式、CIF分辨率格式(352×288)、帧率25 f/s、RGB24的彩色图像的前提下,1 h内的视频数据量可大致估计为25.49 GB。虽然当前的存储设备的容量已经更新发展到TB的数量级,然而持续存储的视频数据将会是一个非常大的数据量。一般情况下,视频监控通常仅仅保存最近2~3个月的记录。估算可知,CIF的数据传输速率已经达到58 Mbit/s。尽管千兆光纤网已经非常普及,但是平常使用的2 MB带宽的网络已经无法满足现阶段进行实时传输的需求。而目前CIF正逐步退出历史的舞台,当前视频的主流格式为D1(720×576,标清)、D3(1920×1080,高清)。通过简单计算可知,D1分辨率及以上的视频图像在存储和传输中,进行编码压缩是势在必行。

如何进行高效的编码与传输[1],以及海量视频数据的存储,现已成为视频实时处理领域需要亟待解决的问题。

1 整体方案

1.1 系统整体架构

系统使用高分辨率的CCD摄像头,将采集到的视频图像经过预处理,并通过特定的视频编码算法[2-3]进行压缩处理为低码率的数据流[4],然后由以太网进行实时传输,只需将客户端和服务器端连接到同一个交换机或路由器,并将服务器和客户端设置为同一网段,此时客户端可以观看服务器端采集到的视频数据,系统最大的特点就是允许多个客户端同时登录观看服务器端采集的视频数据。视频处理及传输系统框图如图1所示。

图1 视频处理及传输系统

1.2 硬件平台及软件系统架构

采用TI公司的DSP(TMS320DM6437[5],该处理器工作主频为600 MHz)。具有VelociTI.3(第3代超长指令集结构),内核为C64x+TM系列,指令数据的最高计算能力达5 600 MI/s;同时支持多种、多个数据位类型的并行乘加运算操作,所以,在视频处理时可以实时的对多路视频格式(CIF、D1)进行编、解码[6]。

基于DSP核+DSP/BIOS下的软件系统架构如图2所示。

图2 基于DSP核+DSP/BIOS下的软件系统架构

2 视频处理及传输模块设计

2.1 视频采集与显示模块

视频采集与显示模块如图3所示。视频采集模块主要包括摄像头(CCD)、TVP5151、及VPFE三部分。在CCDC启动前要先完成对TVP5151的配置;CCD摄像头将采集的视频数据传输给TVP5151,经TVP5151解码为YCbCr422类型的视频数据,同时它的输出满足ITU-RBT.656协议格式[7]。经上述一系列转换之后再传输到视频处理前端VPFE进行预处理,最终将数据帧缓存于DDR2中。

图3 采集与显示模块

视频显示模块:主要包括VPBE及显示设备,而VPBE由OSD(On-Screendisplay)与VENC(Vidio Encode)组成。其中,OSD负责从DDR2中获取已经过处理的视频数据,VENC接收来自于OSD的数据,并选择不同的视频格式输出,然后通过液晶屏或LCD显示器进行显示。

2.2 视频处理模块

Codec Engine(简称CE框架)是一组用来配置和运行XDM算法的API接口。该框架提供了一系列VISA接口,与符合XDM标准的算法进行交互。

(1) 模块的使用。命令xdc.useModule允许一个应用程序使用一个特定的模块,本文需要使用的模块如下所示:

Var osalGlobal = xdc.useModule

(′ti.sdo.ce.osal.Global′),操作系统抽象层;

Var H264ENC = xdc.useModule

(′ti.sdo.codecs.h264enc.ce.H264ENC′),H.264编码;

Var H264DEC = xdc.useModule

(′ti.sdo.codecs.h264dec.ce.H264DEC′),H.264解码;

Var Engine = xdc.useModule (′ti.sdo.ce.Engine′),Codec Engine模块。

(2) 模块参数设定。

osalGlobal.runtimeEnv = osalGlobal.DSPBIOS;

osalGlobal.defaultMemSegId =“DDR2”;

Var ver. = Engine. Create ("encdec", [{Name: "h264enc", mod: H264ENC, groupId: 0, local: true}, {Name: "h264dec", mod: H264DEC, groupId: 0, local: true},]);

在该CE框架下,DM6437提供了一组VISA接口,使用VISA接口调用H.264编、解码库。其CE引擎包括核心引擎APIs及VISA APIs两部分,其中,核心引擎部分由以下模块构成:①初始化(CERuntime_),位于ti.sdo.ce包的CERuntime.h中;②Codec引擎运行态(Engine_),位于ti.sdo.ce包的Engine.h中;③针对Memory的OS抽象层(Memory_),位于ti.sdo.ce.osal包的Memory.h中。

本文使用的核心接口函数:①Engine_open()。打开CE引擎,返回创建的引擎句柄;②Engine_close()。关闭打开的CE引擎。VISA类为编码、解码器提供了下列的APIs,此处的xxx代表VISA模块前缀:①xxx_create():创建此类算法模型的例程;②xxx_process():使用此类算法例程中的“数据处理”方法;③xxx_control():执行此类算法例程中的“控制”方法;④xxx_delete():删除此类算法特定的例程。使用CE框架调用VISA提供的函数接口实现H.264算法下的编、解码如下。

H.264编码部分:

(1) Engine_Handle *ce= Engine_open(h264encdec, NULL, NULL)。创建一个编解码引擎对象,*ce代表新创建的编解码引擎句柄。

(2) VIDENC_Handle *enc = VIDENC_create(*ce, encoderName, &vencParams)。encoderName代表编码器的名称h264enc,vencParams代表编码器的静态配置参数结构体,用作初始化及配置编码器。该函数功能是在CE引擎的基础上创建编码器算法实例,初始化并分配H.264编码器,程序运行的实际效果,随该函数参数的不同而变化。

(3) VIDENC_Status encStatus=VIDENC_control(*enc,XDM_SETPARAMS,&encDynParams,&encStatus)。文中使用的是720×480的视频图像格式,其中encDynParams代表VIDENC_DynamicParams结构体,encStatus代表VIDENC_Status结构体。该函数的作用为配置图像的宽和高、比特率、码率、帧率、输入视频格式等,而且该函数还可以改变创建编码器的效果。

(4) Int32 retVal= VIDENC_process(enc,&inBufDesc, &outBufDesc, &encInArgs, &encOutArgs)。其中inBufDesc、outBufDesc代表XDM_BufDesc结构体,encInArgs代表VIDENC_InArgs结构体,encOutArgs代表VIDENC_OutArgs结构体。该函数为视频数据处理的核心部分,经编码压缩处理后的数据存放于outBufDesc中,同时outBufDesc中的数据是进行下一步视频解码的关键。

H.264解码部分:

(1) VIDDEC_Handle *dec = VIDDEC_create(*ce, decoderName, &vdecParams)。decoderName代表H.264解码器[8]的名称h264dec,vdecParams代表H.264视频解码器的静态参数结构体VIDDEC_Params,用于初始化及配置解码器的参数。该函数功能是在CE引擎的基础上创建解码器算法实例,初始化并分配H.264解码器,程序运行的实际效果,随该函数参数的不同而变化。

(2) VIDDEC_Status decStatus=VIDDEC_control(*dec,XDM_SETPARAMS,&decDynParams,&decStatus)。其中,decDynParams代表VIDDEC_DynamicParams结构体,decStatus代表VIDDEC_Status结构体。该函数的作用为配置图像的宽和高、帧率、码率、输入数据的大小端格式等。

(3) Int32 retVal= VIDDEC_process(dec, &inBufDesc, &outBufDesc, &decInArgs, &decOutArgs)。其中,inBufDesc、outBufDesc代表XDM_BufDesc结构体,decInArgs代表VIDDEC_InArgs结构体,decOutArgs代表VIDDEC_OutArgs结构体。该函数为视频数据处理的核心部分,经解码处理后的数据存放于outBufDesc中,同时outBufDesc中的数据可以进行视频显示。

2.3 网络传输模块

2.3.1 服务器端设计

服务器端的功能主要有:摄像头采集的视频数据传输给H.264编码器进行编码,压缩编码生成H.264码流之后,通过网络传输线程将H.264码流发送给远端的H.264解码客户端。

服务器端程序(见图4):①通过调用socket()函数创建套接字,该函数中需要使用no-copy型的数据流式套接字类型(SOCK_STREAMNC)及IPPROTO_TCP(TCP协议[9]);②通过函数bind()实现IP和端口Port的绑定;③使用listen()函数对①中的套接字监听;④在监听套接字的基础上,等待客户端的连接请求,通过函数accept()实现;⑤假如监听到有客户端登入服务器,便向客户端发送H.264码流信息(大小和数据),通过函数send()实现;⑥发送完成后向编码线程发送消息,此时网络程序再度进入挂起状态,等待下一次H.264码流的到来。⑦若并未监听到任何的连接请求或是新接入的套接字无效,则直接将其关闭,并终止网络线程。

图4 服务器端任务线程执行图示

2.3.2 客户端设计

客户端的功能主要有:通过网络接收线程接收来自于网络的H.264码流,然后由H.264解码线程[10]进行解码处理,解码完成后进行LCD设备的显示或在上位机软件上显示。

客户端程序(见图5):①首先进行网络套接字的创建,通过调用socket()函数实现,该函数中需要使用no-copy型的数据流式套接字类型(SOCK_STREAMNC)及IPPROTO_TCP(TCP协议);②使用connect()函数向远端服务器发送连接请求(请求的IP:192.168.1.120,Port:8000);③假如已经登录到服务器中,此时便可以接受远端服务器发送过来的H.264码流信息,通过调用函数recv()[11]实现数据的接受;④网络线程接收到数据之后便处于挂起状态并向解码线程发送消息,在解码线程解码完网路传输过来的H.264码流之后,就可以在LCD上进行显示,此时,解码线程会向网络线程发送解码、显示完成的消息;⑤假如网络线程受到解码线程发送来的消息则会继续进行网络数据的接收,而没有收到解码线程发送的消息的话,则会一直处于挂起状态,直至接收到消息为止。

图5 客户端任务线程执行程序

2.4 多线程调度模块设计

DSP需要完成的功能包括:采集、编码、传输、接收、解码、显示以及NDK的初始化[7]等功能。各模块所要完成的任务是相对独立的,所以每个模块,对应地建立一个线程负责功能的运作。本系统对于线程之间的同步机制使用的是邮箱传递消息的方法。共需要设置以下8个邮箱(通过在IPNC_Server_H264.tcf文件和IPNC_Client_H264.tcf中静态创建邮箱对象)。

服务器端:

bios.MBX.create ("VIDEO2ENC"); bios.MBX.create ("ENC2VIDEO");

bios.MBX.create ("ENC2NET"); bios.MBX.create ("NET2ENC");

客户端:

bios.MBX.create ("VIDEO2DEC"); bios.MBX.create ("DEC2VIDEO");

bios.MBX.create ("DEC2NET"); bios.MBX.create ("NET2DEC");

Msg结构体(全局数据[12])中包含数据帧缓冲、数据量大小两部分。对于以上邮箱中消息的传递及接收,使用MBX_post()和MBX_pend()可以实现相关功能。例如:服务器端MBX_post(&VIDEO2ENC,&msg,SYS_FOREVER)代表视频采集完成后,将采集到的视频数据通过邮箱[13],将消息传递给H.264编码器。该系统完成了一系列的初始化之后中,H.264编码任务线是处于挂起状态的,而该功能是通过MBX_pend(&VIDEO2ENC,&msg,SYS_FOREVER)这个函数实现的,当接收到来自于视频采集任务发送过来的消息之后,便进行编码操作;客户端:网络接收、视频解码、视频显示部分中涉及的4个邮箱及相关Msg消息的线程间数据同步与服务器端的视频采集、视频编码、网络发送是相同的。

3 测试与结果分析

在采集模块程序中添加视频文件写入本地硬盘操作,将每次采集的视频数据写入*.yuv格式的文件中,然后使用Raw player软件对文件进行查看。测试参数如表1所示,测试实例如图6所示。

表1 512 Kb/s码率下视频数据编、解码的测试参数

(a) CCD摄像头采集的(Raw)图像

(b) H.264解码后的视频数据512 Kbps码率

以上为视频处理及传输系统的综合演示实例,连接点有:①服务器;②客户端;③PC机。三者处于同一网段,并通过D-Link交换机进行连接,其中服务器端IP地址为:192.168.1.120,客户端IP地址为:192.168.1.226,PC机端IP地址为:192.168.1.110。

通过实际测试,摄像头采集数据后通过H.264编码器进行处理,待处理完成后,将数据通过网络发送给客户端,其中客户端文中使用上位机或开发板客户端均可接受H.264码流,接收到数据之后开始进行H.264解码,解码完成后便可以进行显示。该系统在H.264 Baseline Profile编码下30帧/s、512 Kb/s码率下,DSP的负载在43%左右,视频效果非常好。

4 结 语

本文在达芬奇技术的基础上进行视频处理及传输系统的软件设计与实现,以DM6437为硬件设计平台,嵌入式实时操作系统DSP/BIOS[14]为基础,以及在网络开发工具包NDK的协同配合下,设计出具备H.264编/解码功能的视频传输系统。该系统实现了低码率、高清晰度的视频处理与传输。可广泛应用于实时性要求高,带宽限制的视频监控与传输等领域。

[1] 路锦正.MPEG-4/H.264视频编解码工程实践[M].北京:电子工业出版社.2011.

[2] Koli S M,Purandare R G,Kshirsagar S P,etal.Improved compression performance of H.264/MPEG4-AVC for digital video using DVDP[J].Wireless Personal Communications: An Internaional Journal, 2014, 77(3):1659-1675.

[3] Kim IL-Koo, Lee Sunil, Piao Yinji,etal.Coding efficiency comparison of new video coding standards: HEVC vs VP9 vs AVS2 video[C]//2014 IEEE International Conference on Multimedia and Expo Workshops: 2014 IEEE International Conference on Multimedia and Expo Workshops (ICMEW 2014), July 14-18 2014, Chengdu, China.2014:1-6.

[4] Grois Dan, Marpe Detlev, Mulayoff Amit,etal.Performance comparison of H.265/MPEG-HEVC, VP9, and H.264/MPEG-AVC encoders[C]//2013 Picture Coding Symposium: 2013 Picture Coding Symposium (PCS 2013), December 8-11 2013, San Jose, California, USA, 2013:394-397.

[5] 孙雪松.基于DM6437的视频压缩系统设计与实现[D].西安:西安电子科技大学,2014.

[6] 张慧强.基于DM6437的H.264编码器研究与实现[D].太原:太原理工大学,2011.

[7] 周恒国,黄 方.基于NDK的DSP网络设计[J].微型机与应用,2013,32(2):54-56.

[8] 杜欣慧,蔡春花.基于NDK的DSP网络通信的设计与实现[J].电子世界,2014(21):105-106.

[9] 贾 浩.基于TMS320DM6437平台视频系统的研究与设计[D].北京:清华大学,2010.

[10] 邓 博.基于DM6437的网络智能监控系统研究和设计[D].郑州:郑州大学,2013.

[11] 臧 博,吴裕斌,曹丹华,等.基于GIO/FVID的DSP视频处理驱动程序[J].单片机与嵌入式系统应用,2006(8):27-29, 42.

[12] 王 聪.基于NDK的网络开发研究[J].舰船电子对抗,2012,35(4):86-88.

[13] 郑树满.基于DM6437的网络视频监控系统的设计与实现[D].成都:电子科技大学,2007.

[14] 吴 皓,朱 沛.基于TMS320DM642实现网络通信功能的研究[J].火控雷达技术,2010,39(4):87-90.

坚持传授知识、培养能力、提高素质协调发展,注重对学生探索精神、科学思维、实践能力和创新能力的培养。

——摘自《教高[2005]8号文件》

Design of Video Processing and Transmission System Based on DSP

BAIJie,MENGLingjun,ZHANGHuihui

(Science and Technology on Electronic Test and Measurement Laboratory; Key Lab of Instrumentation Science & Dynamic Measurement, North University of China, Taiyuan 030051, China)

Using DSP as the hardware platform, software design and implementation of embedded video system were studied. The scheme of DSP core+DSP/BIOS program was proposed. Based on embedded real-time operating system DSP/BIOS, the DaVinci technology was used to design respectively video capture, H.264 encoding/decoding devices, network transmission, display and other software modules. The design solved the problem of video processing and real-time transmission with low bit rate and high-definition. After testing, all functions were realized. The system has high-performance and low-cost, can be widely applied in monitoring and real-time video transmission.

digital signal processing (DSP); video processing; transmission system

2016-07-20

国家自然科学基金资助项目(61274103)

白 杰(1990-),男,山西吕梁人,硕士生,主要从事测试计量技术与仪器方向的研究。

Tel.:18734920678;E-mail:18734920678@qq.com

孟令军(1969-),男,山东青岛人,博士,副教授,主要研究方向:动态测试,图像处理。

TP 393.09

A

1006-7167(2017)03-0111-05

猜你喜欢
服务器端线程解码
《解码万吨站》
Linux环境下基于Socket的数据传输软件设计
基于国产化环境的线程池模型研究与实现
解码eUCP2.0
NAD C368解码/放大器一体机
Quad(国都)Vena解码/放大器一体机
浅析异步通信层的架构在ASP.NET 程序中的应用
浅谈linux多线程协作
基于Qt的安全即时通讯软件服务器端设计
网页防篡改中分布式文件同步复制系统