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连接断开后,注销设备,并通过该端口继续监听。
1.2数据流程图灰色底纹字体表示的数据服务器不做处理,只转发数据。
服务器前端交互监控前端注册转发控制指令转发语音流接收视频流音频流客户端交互用户校验登陆用户管理发送设备列表接收控制指令转发视频流音频流接收语音流数据库用户信息:用户ID登陆密码所有权限车载视频监控系统的数据流程图TCPTCPUDP客户端登陆服务器发送用户指令接收设备列表发送控制指令接收视频流音频流发送语音流2车载前端方案概述车载设备配备视音频处理芯片,可以连接最多4路摄像机,可连接GPS设备和报警传感器等设备,在Linux系统上运行车载监控端的应用程序,实现各功能模块。
通过3G无线数据模块联网,与服务器进行连接。
并通过服务器把与客户端进行数据交互,包括音视频流的发送,指令消息的收发,音频数据的接收。
车载设备在客户端请求任一路或多路实时视频音频时,将视频音频编码后进行封装,通过服务器转发给客户端;也可应客户端请求查找并调用本地存储的视频音频数据,发送至客户端。
客户端可接收来自客户端的音频数据并解码播放。
设备启动时或接受到客户端指令时,会进行酒精检测。
车载监控前端系统架构应用软件层系统软件层硬件层硬件平台视频音频处理芯片传感器模拟摄像机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.1 PC应用软件采用多线程实现,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()删除线程指令存储区视频采集视频处理的实现涉及3个线程。
视频采集线程、视频编码线程和存储处理线程图4-1视频处理模块流程图Capture_tsk.c 中是视频采集线程的实现,包括视频数据采集和缩放。
1. 通过 MCVIP_getBuf() , MCVIP_getBuflnfo()两个函数获取经 tvp5158 芯片采 集得到的yuv422图像数据。
实现VIDIOC_DQBUF ,出队列以取得已采集数 据的帧缓冲,取得原始采集数据。
2. 再通过MCVIP_putBuf()实现VIDIOC_QBUF ,将缓冲重新入队列尾,这样可以 循环米集。
3. CAPTURE_tskProcessFrame(中做的是视频图像的缩放。
通过ENCODE_getEmptyBuf()申请视频编码缓冲队列中的空 buffer ,将输出buffer 设置为编码压缩的输入区。
ENCODE_putFullBuf()将存储有处理后数据的 buffer 入视频编码队列。
4. 支持 2 路输出缩放,可做双码流输出。
图像数据入队列编码后的图 *像数据队列向处理线程发 送消息视频米集获得 ―T* 一帧图像编码后的图像 数据入队列 对队列头部的 > 一帧数据进行 存储等处理计数器数值+1计数器清零, 并向编码线程 发送消息5. CAPTURE_tskCalcReszClkDiv() 传入参数。
6. DRV_reszRun()进行缩放。
缩放后的数据在ENCODE_getEmptyBuf()申请的buffer中等待压缩。
4.3视频压缩En code_tsk.c中为视频压缩线程的实现。
En code_tsk.c中采集缩放后通过Encode_sendCmd(发送ENCODE_CMD_RUN指令,控制压缩函数的执行压缩多帧图像。
1. 设置压缩分辨率vidEncCreatePrm.width =vidEncCreatePrm.height =vidEncCreatePrm.offsetH =vidEncCreatePrm.offsetV =2. 设置压缩比特率,即编码码率pChInfo->newBitrate =3. 通过OSA_bufGetFull()和OSA_bufGetBuflnfo()申请视频编码缓冲队列内的一个buffer出队列,作为编码器输入buffer。
编码后OSA_bufPutEmpty()将缓冲区入编码缓冲队列。
4. WRITER_getEmptyBuf()申请存储缓冲队列中的空buffer,将输出buffer设置为存储的输入区。
WRlTER_putFullBuf() 将存储有处理后数据的buffer 入存储队列。
5. ALG_vidEncRun() 进行压缩。
压缩后的数据在WRITER_getEmptyBuf() 申请的buffer 中等待存储和网传。