文档库 最新最全的文档下载
当前位置:文档库 › 应用软件设计和功能实现说明文档

应用软件设计和功能实现说明文档

应用软件设计和功能实现说明文档
应用软件设计和功能实现说明文档

1 车载监控系统概述

整套监控系统将包括车载设备、网络服务器、客户端三大组成部分。客户端通过服务器的中转与车载设备间接通信,以实现从车载设备接收监控信息和向车载设备发送控制指令等。所预计的主要功能将包括视频音频监控,酒精检测,传感器报警,语音对讲,远程云台控制等。车载设备通过3G无线数据模块无线接入网络,以实现车载移动监控。

系统部署图

整个系统部署结构如图,其中:

车载设备连接模拟摄像机,并通过3G数据模块拨号连接网络。实现视频音频采集,可以把实时音频视频发送至服务器。并且可以挂接硬盘存储设备,把采集的视频和音频存储至硬盘。存储的视频可通过网络点播,并可以通过模拟输出端口直接把存储的视频音频输出到电视机进行播放,播放时有图形操作界面。

车载设备的通过带酒精度传感器的外接设备进行酒精检测。酒精检测后将检测数值传到服务器,并发送提醒短信到用户手机。在本地对酒精值进行分析和声音播报。

车载设备的报警传感器安装在需要的位置,检测到非法入侵时,可通过3G模块以发送手机短信的方法通知用户。

车载设备可从服务器接收音频数据并且进行播放。

服务器可将车载设备的视频音频数据转发至客户端,可以把来自客户端的指令信息和音频数据转发至车载设备。

客户端可接收视频音频数据并进行播放,可以控制车载设备的摄像机云台,可以通过话筒向车载设备讲话。

客户端与网络服务器逻辑分开,服务器可以同时连接多个车载设备和多个客户端。并把每个客户端与该客户的若干设备对应。根据实际需要,PC客户端也可以并入服务器系统。

系统功能流程

4.1 1.1

1.服务器监听连接请求,服务器分别通过针对双方的TCP控制端口监听来自监

控前端和来自客户端的TCP连接。

2.前端设备注册,当有监控前端连接到服务器后,监控前端会发送注册指令信

息到服务器,指令信息中的数据区包含设备号信息。并连接到语音流转发TCP 端口。服务器将该设备注册为在线设备。

3.客户端登陆,当客户端连接到服务器后,客户端会发送指令信息到服务器,

指令信息中的数据区包含用户名和密码。服务器需对登陆请求进行处理,发送应答信息,接受或者拒绝。若拒绝,应答指令中数据区包含错误信息,用户名密码错误或者设备被占用等。登陆成功后向服务器连接视音频流接收TCP端口,此端口校验成功后连接。并开启一个UDP端口监听来自该客户端的语音流。

4.用户设备列表,用户成功登陆后,服务器需对该用户有权限访问的在线设备

列表,并将列表发送至客户端。指令信息中的数据区中存放设备列表信息。

5.用户指令转发,用户对某个前端发送控制指令时,将指令转发到对应的监控

前端。

6.视音频传输,当服务器接收到视频请求指令后,服务器开启TCP端口监听来

自前端的连接请求。前端设备通过此TCP端口连接服务器,服务器接收到来自监控前端的音频、视频流时,通过视频音频流转发专用TCP端口,将数据转发至对应的客户端。

7.用户指令处理,当从客户端对服务器发送指令时,服务器接收并处理。例如

用户修改密码,数据区会包括新的密码,服务器需要进行数据库更新。

8.语音对讲,当收到语音对讲指令时,服务器开启一个UDP端口监听来自客户

端的数据流,并通过语音流转发专用TCP端口转发至对应的前端。

9.断开连接,TCP连接断开后,注销设备,并通过该端口继续监听。

数据流程图

4.2 1.2

车载视频监控系统的数据流程图

2 车载前端方案概述

车载设备配备视音频处理芯片,可以连接最多4路摄像机,可连接GPS 设备和报警传感器等设备,在Linux 系统上运行车载监控端的应用程序,实现各功能模块。通过3G 无线数据模块联网,与服务器进行连接。并通过服务器把与客户端进行数据交互,包括音视频流的发送,指令消息的收发,音频数据的接收。车载设备在客户端请求任一路或多路实时视频音频时,将视频音频编码后进行封装,通过服务器转发给客户端;也可应客户端请求查找并调用本地存储的视频音频数据,发送至客户端。客户端可接收来自客户端的音频数据并解码播放。设备启动时或接受到客户端指令时,会进行酒精检测。

车载监控前端系统架构

硬件层

软件层

应用软件层

车载设备系统架构图

3 前端软件功能模块

1.视频处理模块,实现多路实时视频数据采集、图像处理、基于H.264技术的

编解码压缩与数据存储;可进行存储数据的查找和调用。可通过模拟视频输出端口对存储的视频进行播放。车载设备从摄像机采集视频音频数据,并将每一个摄像机获取的视频数据缩放为2种分辨率视频流,一路高清视频数据压缩后的数据保存在本地硬盘,另外一路较低分辨率的可压缩后通过网络传输到服务器。

2.音频处理模块,实现多路实时音频数据采集,基于G.711-u技术的编解码压

缩,编码后的数据进行本地存储,也可通过网络传输;存储数据的查找和调用。可通过模拟音频输出端口对存储的音频进行播放。

3.网络通信模块,设备启动时通过3G数据模块使用ppp协议拨号接入网络,

与网络服务器进行连接。把数据进行封装,通过服务器与客户端间接通信,进行数据交互。并可通过AT指令发送手机短信。

4.网络指令处理模块,系统启动后采用TCP协议向服务器连接,建立TCP指

令通道,通道建立后先向服务器发送注册信息。之后进行监听,从服务器接收转发自客户端的指令,并进行处理。

5.云台控制模块,接受到云台控制指令后,进行处理。采用RS485通信接口通

信控制云台,实现云台控制。

6.酒精检测模块,在设备启动后或接到客户端的指令后,进行酒精检测。酒精

检测后将检测数值传到服务器,并发送提醒短信到用户手机。并在本地对酒精值进行分析和声音播报。

7.自动报警模块,红外传感器被触发后,系统可检测到并经由3G模块发送报

警手机短信。

8.语音对讲模块,可接收来自客户端的语音流,采用G.711-u算法解码并实现

播放。

4.软件结构与功能实现说明

客户端功能概述

4.1PC

应用软件采用多线程实现,Xxx_tsk.c中包含每个独立线程。

1.int xxx_tskCreate( CAPTURE_CreatePrm *prm)

创建线程结构,为线程分配内存。

OSA_cmemAlloc() 申请内存空间。

OSA_cmemAllocCached () 申请内存空间(缓存模式)。

OSA_cmemGetPhysAddr() 映射物理地址。

2.int xxx_tskDelete()

清除线程占用的内存。

OSA_cmemFree() 释放内存区。

3.int xxx_tskRun()

线程处理入口函数

Int xxx_tskMain()

线程的主函数

OSA_msgGetPrm() 读取指令存储队列

OSA_tskWaitMsg() 监听线程控制指令

OSA_tskAckOrFreeMsg() 清空指令存储区当前指令

4.Int xxx_sendCmd()

发送线程控制指令

OSA_mbxSendMsg() 发送指令到指令存储区

5.int xxx_create(xxx_CreatePrm *prm)

创建线程

OSA_tskCreate() 创建线程,运行处理主函数

OSA_mbxCreate() 创建线程指令存储队列

6.int xxx_delete()

删除线程

OSA_tskDelete() 删除线程

OSA_mbxDelete() 删除线程指令存储区

4.2视频采集

视频处理的实现涉及3个线程。视频采集线程、视频编码线程和存储处理线程。

图4-1 视频处理模块流程图

Capture_tsk.c中是视频采集线程的实现,包括视频数据采集和缩放。

1.通过MCVIP_getBuf(),MCVIP_getBufInfo()两个函数获取经tvp5158芯片采

集得到的yuv422图像数据。实现VIDIOC_DQBUF,出队列以取得已采集数据的帧缓冲,取得原始采集数据。

2.再通过MCVIP_putBuf()实现VIDIOC_QBUF,将缓冲重新入队列尾,这样可以

循环采集。

3.CAPTURE_tskProcessFrame()中做的是视频图像的缩放。通过

ENCODE_getEmptyBuf()申请视频编码缓冲队列中的空buffer,将输出buffer 设置为编码压缩的输入区。ENCODE_putFullBuf()将存储有处理后数据的buffer入视频编码队列。

4.支持2路输出缩放,可做双码流输出。

5.CAPTURE_tskCalcReszClkDiv()传入参数。

6.DRV_reszRun()进行缩放。缩放后的数据在ENCODE_getEmptyBuf()申请的

buffer中等待压缩。

4.3视频压缩

Encode_tsk.c中为视频压缩线程的实现。Encode_tsk.c中采集缩放后通过Encode_sendCmd()发送ENCODE_CMD_RUN指令,控制压缩函数的执行压缩多帧图像。

1.设置压缩分辨率

vidEncCreatePrm.width =

vidEncCreatePrm.height =

vidEncCreatePrm.offsetH =

vidEncCreatePrm.offsetV =

2.设置压缩比特率,即编码码率

pChInfo->newBitrate =

3.通过OSA_bufGetFull()和OSA_bufGetBufInfo()申请视频编码缓冲队列内的

一个buffer出队列,作为编码器输入buffer。编码后OSA_bufPutEmpty()将缓冲区入编码缓冲队列。

4.WRITER_getEmptyBuf()申请存储缓冲队列中的空buffer,将输出buffer设置

为存储的输入区。WRITER_putFullBuf()将存储有处理后数据的buffer入存储队列。

5.ALG_vidEncRun()进行压缩。压缩后的数据在WRITER_getEmptyBuf()申请的

buffer中等待存储和网传。

4.4音频采集压缩

图4-2 音频处理流程图

音频采用G.711-μ方式编码。在Audio_tsk.c中为音频采集编码线程。

1.gAUDIO_ctrl.pCreatePrm()为MCVIP_CreatePrm()类型的结构体,其中包含了

声音参数设置。

2.AUDIO_Record()调用MCVIP_audioRecord()获取音频数据。

3.AudioWRITER_getEmptyBuf()申请音频存储缓冲队列中的空buffer,将输出

buffer设置为存储的输入区。AudioWRITER_putFullBuf()将存储有处理后数据的buffer入音频存储队列。

4.AUDIO_audioEncode()压缩音频数据。编码后的数据在AudioWRITER

_getEmptyBuf()申请的buffer中等待压缩。

4.5流媒体存储

Writer_tsk.c中为视频和音频的存储线程的实现。Encode_tsk.c中编码结束后通过WRITER_sendCmd()发送WRITER_CMD_RUN和

AUDWRITER_CMD_RUN指令控制流媒体存储线程中存储函数的执行。

1.每一帧视频编码后WRITER_putFullBuf()调用WRITER_sendCmd()发送指令

WRITER_CMD_RUN到指令队列。WRITER_tskRun()中通过

OSA_bufGetFull()和OSA_bufGetBufInfo()申请视频存储缓冲队列内的一个buffer出队列,存储后调用OSA_bufPutEmpty()将存储缓冲区入视频存储队列。

2.每一帧视频编码后AudioWRITER_putFullBuf()调用WRITER_sendCmd()发

送指令AUDWRITER_CMD_RUN到指令队列。AudWRITER_tskRun()中通过OSA_bufGetFull()和OSA_bufGetBufInfo()申请音频存储缓冲队列内的一个buffer出队列,存储后调用OSA_bufPutEmpty()将存储缓冲区入音频存储队列。

3.WRITER_fileSaveRun()进行流媒体存储。在存储的同时,调用函数

videostreamFunc()进行网络视频传输,audiostreamFunc()进行网络音频传输。

4.6网络通信

图5-4 指令通信处理流程图

Rawsockio.c中是网络通信的实现。LSOCK为指令通信通道。CSOCK为语音接收通道。DSOCK为流媒体发送通道。

1.MainSocketConnect()中创建了3个TCP套接字。设置3个套接字的参数。

connect_to_server()中实现了本地向服务器的连接。

2.ReadSocketData()为建立连接后对数据接收处理的实现。LSOCK对接收的数

据进行处理,通过*msgfunc[cmd]函数指针调用指令处理函数。CSOCK调用AUDIO_tskTalkBack()对语音流数据进行循环接收,解码播放。DSOCK不做接受,建立后等待通过该通道发送流媒体数据。

4.7指令处理

Msghandler.c中定义了网络指令与指令处理入口函数的映射表。通过*msgfunc[cmd]调用指令对应的指令处理函数。Process.c中是各指令处理函数的实现。

4.8流媒体传输

1.Vstream.c文件中videostreamFunc()为视频网络传输的实现。

SystemInfo.StreamEnable为视频网络传输的标识开关。当接受到视频网络传输的指令并建立传输通道口,变开启视频传输。

2.Astream.c文件中audiostreamFunc()为音频网络传输的实现。

SystemInfo.aStreamEnable为音频网络传输的标识开关。当接受到音频网络传输的指令并建立传输通道口,便开启音频传输。

3.数据包格式

数据包头为3字节:

typedef struct _TEST_PACK_HEAD

{

unsigned char FrameType; //帧格式视频I帧、P帧、音频帧

unsigned short PackLoadLength; //载荷数据长度

}TEST_PACK_HEAD;

载荷数据长度最大为1024字节。载荷数据超过1021字节的话进行帧切割操

作。

4.9酒精检测

图5-5 酒精检测流程图

Wine_tsk.c中是酒精检测线程的实现。"/dev/ttyS0"是RS485设备文件,通过RS485接收读取酒精检测设备的数值。"/dev/dm365_gpios"是GPIO设备文件,用于读取IO口数值。

1.set_speed()和set_parity()函数用于设置RS485参数。

2.通过设置IO口值控制RS485读取,然后读取RS485接收的酒精参数。格式

为“‘w’+酒精值+饮酒程度”。

3.接收数值后进行分析。然后通过AUDIO_audioDecode()和AudioPlayback()解

码并播放声音提示文件。

4.通过TCP指令通信通道向客户端发送测试报告指令,并调用sendMessage()

发送短信报警。

4.10红外检测

图5-6 红外检测流程图

Gpio_tsk.c中是网络通信的实现。

1系统运行后线程开始执行,GPIO设备

fdser = open("/dev/dm365_gpios", O_RDWR);

2进行循环读取IO口数据

count=read(fd1,buf,6); //读取IO数据

接收数值后进行分析。然后可通过AUDIO_audioDecode()和AudioPlayback()解码并播放声音提示文件。

通过TCP指令通信通道向客户端发送报警指令,并调用sendMessage()发送短信报警。

3短信发送通过3G网卡进行。

fd=open("/dev/ttyUSB2",O_RDWR | O_NOCTTY); //打开3G数据设备通过AT指令发送短信,使用pdu方式发送中文短信。

相关文档