`
fanxiaojun
  • 浏览: 54705 次
  • 性别: Icon_minigender_2
  • 来自: 广州
社区版块
存档分类
最新评论

视频监控开发的最佳方法

阅读更多

     在开发视频监控系统应用软件时,大家往往把关注的焦点集中于数字音/视频的编解码的实现上,而忽略了视频监控系统应用软件的整体架构。当然视频监控的核心也是在于音视频编解码上,佰锐的Anychat SDK 主要就是在音视频领域这块,长期研究音视频即时通讯,对于音视频处理模块(采集、编解码)、流媒体管理模块(丢包重传、抖动平滑、动态缓冲)、流媒体播放模块(多路混音、音视频同步)以及P2P网络模块(NAT穿透、UPnP支持)等多个子模块,封装了底层的硬件操作(音视频采集、播放)、封装了流媒体处理(编解码、网络传输)等非常专业和复杂的技术,为上层应用提供简单的API控制接口,可以在极短的开发周期,以及极少的人力资源投入下为客户的现有平台增加音视频即时通讯、多方会议的功能。AnyChat SDK可以让企业越过复杂的底层技术实现,而把主要精力投入项目的业务逻辑处理上,加快项目开发进展,从而为企业赢得市场先机。
     视频监控系统中,一个优秀的音/视频编解码算法固然很重要,但其中是整个视频监控系统应用软件的一个重要组成部分。视频监控系统应用程序还涉及到如何搞笑地输入/输出数字音/视频数据,这些数据又如何与音/视频编解码算法协调、配合,以及视频监控系统应用软件各个模块之间如何协调工作。本文主要阐述软件开发方法,说明层次化软件开发方法优越性。

 

传统的软件开发方法

     传统的软件开发方法是一种线性的程序流程,首先以功能模块对整个程序进行模块化,然后选择ASM或C语言,从零开始编写各个子模块,最后编写一个主循环,将这些子模块线性地顺序循环执行。

     传统的软件开发方法的优点是:整个程序的控制流、数据流完全由编程者掌握,程序直观、易理解。但其缺点是:各个子模块之间紧密耦合,修改某一子模块,将可能影响整个程序,也即其代码的重复使用率不高,导致相似系统之间程序的移植性差;由于程序顺序、循环执行,在算法对数据进行处理前,需要花大量时间来等待输入/输出数据就绪,导致CPU的利用率低,同样,简单的顺序、循环执行,只能管理和调度单一任务,不能实现多任务的管理和调度。

 

倡导的DSP软件开发方法

     为了加速DSP软件开发,一套完善的、规范的、标准化的DSP软件开发方法称之为DSP软件技术。它是以DSP/BIOS实时多任务操作系统为核心,以层次化结构为基础的一种软件开发方法,其优点是

     软件结构层次化:各层之间均采用标准的API,修改某一层不会影响其它层,提高了代码的重复使用率,改善和提高相似系统之间的程序移植性;

     应用层;

     设备驱动层;

     硬件设备层;

     以DSP/BIOS实时多任务内核为主控,使CPU得利用率最大化;

     DSP/BIOS负责程序的管理和调度;

     DSP/BIOS可对程序的控制流、数据流及程序执行效率进行实时分析。

     缺点是:整个程序的控制流、数据流由DSP/BIOS来管理,程序将不再直观和易理解。豪宅DSP/BIOS提供了实时分析模块,可全程实时分析控制流、数据流及程序执行效率。

 

层次化的设备驱动程序模型

     一个设备驱动程序开发包,为设备驱动程序设计一个层次化的模型,称为IOM模型,IOM模型将设备驱动程序分为2层,上层为与硬件无关的层称为类设备驱动程序,负责管理设备实例、同步和I/Q请求串行化等操作。与硬件五官的下层称为迷你设备驱动程序,负责对实际的设备进行初始化或必要的控制操作。

类设备驱动程序

     类设备驱动程序是设备驱动程序的上层抽象,时期与特定设备无关,DDK为每一类的类设备驱动程序定义了一组标准的API函数,应用程序均只能通过此组API函数来调用设备驱动程序,从而使应用程序与设备驱动程序分离。

    DDK定义了3大类的类驱动程序:SIO、PIP和GIO。

    SIO:流I/O接口,由SIO和DIO组成,PIO负责缓冲器管理、信号同步以及底层迷你驱动程序接口。

    GIO:通用I/O,允许进行块读块写,设备驱动程序开发者可以用其来实现新的、专用的类设备驱动程序。

    DDK中已完整地实现了SIO和PIP类设备驱动程序,使用SIO和PIP类设备驱动程序的设备驱动程序开发者无需再编写任何类设备驱动程序代码。而对于使用GIO类设备驱动程序的设备驱动程序开发者来说,DDK已为GIO实现了一组基本的API函数,所以开发者只需通过宏定义来调用此组API函数,实现自己专用的类设备驱动程序。

迷你设备驱动程序

    迷你设备驱动程序时设备驱动程序的底层抽象,与特定设备有关,对硬件设备进行实际操作,DDK为迷你设备驱动程序规定一组标准的API函数,类设备驱动程序通过这些标准化了的API函数来调用迷你设备驱动程序,而对设备驱动程序开发者来说,只需为特定的函数体。在此组API函数的特定的函数体中,用户则可以通过调用CLS/BSL库来对设备的具体硬件进行初始化和相关的控制操作。

为什么要用IOM设备驱动程序模型

    IOM设备驱动程序模型是层次化了的设备驱动程序,层次化设计通过使层之间的接口标准化,并且只有相邻层之间才可相互调用,来有效地将上层应用程序与下层具体的硬件设备的操作细节分离。所以,当更换其中的某些硬件外设时,通常只需修改底层的迷你驱动程序,而上层应用程序的修改则可最小化,从而提高上层应用程序的通用性、可重复使用性和可移植性。

 

IOM模型的设备驱动程序中包含什么

     在程序设备是用来完成数据输入/输出的、完整的数据链路,有时单个外设并不一定称为设备,如:音频输入/输出设备。它是由DSP片商McBSP+IIC+DMA+中断+片外Codec等片上/片外外设器件构成。在这样一个数据链路中,单独的一个片上/片外外设并不能完成数据真正的输入/输出,不能称为设备。那么设备室如何来完成相应的数据输入/输出?

     首先,需要对构成设备的各外设进行初始化,设置它们的工作方式,这些外设才能正确操作。另外,外设的某些功能需要外设操作过程中动态调节,如:A/D转换器的采样率可能需要应用程序动态地调整;UART器件的波特率可能需要应用程序动态地调整;外设所对应的中断、DMA/EDMA通道等也可能要由应用程序根据需要动态来修改。所以设备驱动程序必定有设备初始化函数、和某些相关的设置函数。

    其次,需要对其进行读/写操作,即完成外设最基本的输入/输出功能。应用程序一般是成批地处理数据,而外设往往一个接一个地输入/输出数据,二者之间需要缓冲器来进行缓存,设备驱动程序的输入/输出函数完成外设的时间读/写操作,将数据存入/读出缓冲器,应用程序则在缓冲器可用时,进行相应的处理。由此可见,缓冲器是在应用程序与设备驱动程序之间来回切换的,不同的应用所需的缓冲器的大小不同,而且为了避免数据的覆盖,可能需要用多个缓冲器来进行切换。缓冲器的大小、缓冲器的个数、缓冲器由驱动程序管理还是由应用程序管理可根据应用的需要灵活安排。外设的读/写操作并非随时可以进行,必须满足一定条件,此条件一般用于作为中断信号或标志信号,另外,为了提升输入/输出的效率,往往需要用DMA/EDMA配合工作,驱动程序往往会中断、DMA/EDMA相关联。

    最后,驱动程序输入/输出的数据必须由应用程序来处理,应用程序只有在数据就绪时,才能对缓冲器进行读/写操作,就存在驱动程序与应用程序同步的问题,同步一般有二种方式,一种是“阻塞”,另一种带回调函数的非“阻塞”。二种不同的同步方式,实际对应“阻塞”方式时,选用软件中断型线程。

 

结语

    采用IOM模型来开发底层设备驱动程序,要比传统的软件开发更复杂,整个程序的控制流和数据流更不直观和不易理解,但掌握这样的软件开发方法,那么在下一个项目中已开发完的程序的继承性和可移植性将得到充分发挥,在我们今后的软件开发中,将起到事半功倍的作用。如今市场竞争越来越激烈,如何在有限的时间内完成项目,满足客户的需求成为企业决策者所需要面对的现实。Anychat可以为您节约开发时间,缩短项目开发周期;节省开发费用,减少人力资源投入;平台自主开发,提升企业综合竞争力;产品跨平台,应用领域广阔;API接口丰富,方便与第三方业务集成;专业技术支持,性能稳定可靠。

分享到:
评论

相关推荐

    实战突击:C#项目开发案例之家庭视频监控系统

    本源程序在Windows 2000、Windows 2003、Windows 7下开发的,程序测试环境为Windows Server ... 分辨率:最佳效果1024×768。  开发环境:Microsoft Visual Studio 2008;  程序运行环境:.NET Framework 3.5。

    爱特生短信彩信开发平台视频监控方案

    本文介绍了针对深圳A...在根据爱特生短信彩信开发平台提供的整体解决方案,完成二次开发后,附加价值得到大大的提升,应用的灵活性和应用领域也得到很大扩展,在视频监控领域又迈出了新的一步,再次走在行业的前列。

    JAVA视频监视系统

    1 Flex项目文件构成 其中client.mxml文件供客户观看,server.mxml供后台使用(客户看不...9 前7步已经说明了怎样运行此软件,至于web监控只要把Flex项目中的bin目录下的相关文件拷贝到tomcat下,并键入相应的URL即可。

    安防与监控中的浅谈电信机房视频监控解决方案

    解决视频监控联网问题,使用北京洛达公司的DSN-3000视频监控联网主机是目前最好的解决方案,DSN-3000是针对视频监控联网开发的,可以兼容数十个品牌的视频监控系统,可以无缝连接,已经广泛用于北京、广州、杭州、...

    模拟技术中的浅谈视频监控存储的三大格局与六种方式

    解决视频监控联网问题,使用北京洛达公司的DSN-3000视频监控联网主机是目前最好的解决方案,DSN-3000是针对视频监控联网开发的,可以兼容数十个品牌的视频监控系统,可以无缝连接,已经广泛用于北京、广州、杭州、...

    视频监控系统(C#,Access)

    使用了Access数据库。... 需要安装天敏公司的VC4000视频采集卡及SDK开发包,最好安装监控摄像头。 系统主窗体是Main,登录窗体是Login,登录用户名是111,密码是111。 建议使用Visual Studio.NET 2010

    安防与监控中的浅谈2010新兴视频监控技术(一)

    解决视频监控联网问题,使用北京洛达公司的DSN-3000视频监控联网主机是目前最好的解决方案,DSN-3000是针对视频监控联网开发的,可以兼容数十个品牌的视频监控系统,可以无缝连接,已经广泛用于北京、广州、杭州、...

    通信与网络中的浅析视频监控系统软件现状及技术

    解决视频监控联网问题,使用北京洛达公司的DSN-3000视频监控联网主机是目前最好的解决方案,DSN-3000是针对视频监控联网开发的,可以兼容数十个品牌的视频监控系统,可以无缝连接,已经广泛用于北京、广州、杭州、...

    通信与网络中的浅谈视频监控要点回顾和未来

    解决视频监控联网问题,使用北京洛达公司的DSN-3000视频监控联网主机是目前最好的解决方案,DSN-3000是针对视频监控联网开发的,可以兼容数十个品牌的视频监控系统,可以无缝连接,已经广泛用于北京、广州、杭州、...

    串口监控精灵

    全新开发的CommMonitor 使用内核驱动ComDrv模块,更准确的监视串口数据,事件。 CommMonitor 侦测、拦截、逆向分析串口通信协议, 是侦测RS232/422/485串行端口的专业工具软件,是软硬件工程师的最佳助手。...

    多媒体编程开发之FFmpeg基础库

    关于 FFmpeg 是多媒体程序核心开源库,涉及广播电视行业、视频监控行业、互联网视 频行业等,涉及流媒体、音视频编解码、容器、格式转换、以及后期处理等技术。 本书旨在让更多的人深入理解 FFmpeg 框架库,通过使用...

    基于java的-621-校园视频监控系统--LW-源码.zip

    通过分析和运行源码,你将深入了解各平台开发的技术细节和最佳实践,逐步培养起自己的项目开发和问题解决能力。此外,在求职或创业过程中,具备跨平台开发能力的大学生将更具竞争力。 其他说明: 为了确保源码资源的...

    2018年全球软件开发大会资料PPT第二部分

    《Prometheus监控系统最佳实践与常见陷阱》-Julius Volz.pdf 《Raft在百度云的实践》-王耀.pdf 《RandonDb新一代分布式关系型数据库》-张雁飞.pdf 《Reactive架构升级实践》--李鼎.pdf 《Redliner—.pdf 《Saga...

    基于SSM+JSP+HTML的校园视频监控系统(毕业设计,包括数据库,源码,教程).zip

    计算机毕业设计,SSM课程设计,基于SSM开发的,含有代码注释,新手也可看懂,可作为毕业设计,课程设计。 包含:项目源码、数据库脚本、部署说明等,该项目可以作为课程设计使用,前后端代码都在里面。 该系统功能...

    Go容器化微服务系统实战(全套视频+资料).rar

    教程内容涵盖了从微服务架构设计到Docker容器化部署的全过程,通过实例演示和详细讲解,带领学习者逐步掌握Go语言在微服务开发中的应用技巧和最佳实践。 适用人群: 对Go语言和容器化微服务开发感兴趣的开发者和...

    ElasticSearch5.2全网最全技术视频

    (4)学完课程之后,学员除了可以开发复杂的es搜索/分析系统之外,还可以掌握在任何一个公司里,从零开始搭建一个分布式的大型es集群,并制定完善的监控,运维,管理,优化等方案 (4)大型项目架构篇 课程特点 (1...

    RNSS介绍资料

    网络视频监控系统(RNSS)是一套基于网络的数字化视频监控管理系统,采用先进的Mpeg4/H.264视频编解码技术,采用C/S、B/S相结合的架构模式,基于面向对象的开发技术,对信息采集、存储、传输、控制和维护的全过程...

Global site tag (gtag.js) - Google Analytics