发布网友 发布时间:2022-04-22 05:40
共2个回答
热心网友 时间:2023-10-15 06:35
无线视频监控系统,是一款简单易用的小型远程数字监控系统,与网络摄像机配套使用,可采用有线或无线方式连接网络,易于安装部署,不需要用户额外配置专用电脑和采集录像等设备。用户可采用手机或电脑作为监控终端设备,可随时随地接收报警信息和查看监控视频。本系统具有稳定可靠、经济实用等特点,可用于防火防盗、安全护卫、人员监护、远程管理等,特别 适合个人、家庭、店铺等使用。
热心网友 时间:2023-10-15 06:36
??在视频监控系统的研发中,所涉及到核心技术首先是对视频的编码与解码处理。首先对系统中的编码流程进行说明,在具体实现过程中,需要借助FFMPEG所提供的编码方法,对从前端获取的视频进行编码处理。整个处理流程可以通过图4.1进行说明。系统中设定了相应的处理方法和具体操作步骤。在程序开发中,只需要调用相应的方法就可以对摄像机所获取的信息进行视频编码。
图4.1 压缩编码函数流程
根据程序开发要求,首先在编码中完成程序开发的注册,通过调用FFMPEG所提供的注册函数完成该过程,该函数的名称叫做av_register_all方法,当该部分的功能设计完成以后开发者就可以根据需要把视频转化成我们所需要的格式,通过Windows API实现对硬件设备的启用,包括驱动调用、端口监听以及数据获取等,并通过流的方式把信息通过Avcode_find_encoder方法进行数据处理,写入系统缓存以后进行保存到服务器端。其中,H.2 标准编码器的编码函数流程图如4.2所示。
图4.2 H.2 标准编码函数流程
4.1.2 视频解码实现
在所有的监控视频编码结束以后就会保存到服务器上, 而客户端如果要对这些食品进行获取,就需要根据自己的需求对这些视频进行解码处理,后到自己的手机或者是电脑上进行播放,这样就能够看到食品的详细信息。本系统对食品进行解码实现,主要遵循了图4.3的流程。在手机客户端,需要从服务器上获取相应的视频信息,然后通过解码到自己的客户端进行查看。该课程中涉及到Android开发中的服务器视频下载程序的实现,经过进行Java编程以后形成相应的APK程序,然后开程序在手机客户端进行安装,通过构建客户端与服务器应用程序之间的WebService达到对相应的视频文件进行下载的目的,最终这些视频信息也将在手机客户端进行播放。
针对视频解码进行实现需要用到第三方的插件技术,包括配置程序开发的NDK程序环境以及应用对应的.SO文件等工作。当程序开发结束以后,通过编译进行运行调试。
图4.3 Android程序开发流程
开发的Android程序需要经过编译才能在运行在手机客户端,这样通过手机功能才能查看所拍摄到视频,在视频信息交互中是通过在服务器端创建程序来实现的。Android程序进行开发需要对视频解码程序进行调用,通过在手机端的开发程序中引入进行视频解码的动态链接库,这样就可以实现对有关方法的调用,然后完成对服务器端视频文件的下载和解码,并通过手机端的视频播放器进行查看。为了能够更好的对服务器端的视频文件进行加载,需要通过NDK第三方工具进行方法的调用,然后通过SDK实现对有关程序的调用。这样所得到的数据才能由服务端实现到手机端的链接,并通过手机端的Java程序代码实现对有关视频文件的解码。对于本文所使用的NDK来说,目前主要支持三种解码方式,针对的编译器包括了X86系统、ARM以及MSM。在本文中使用了对智能手机的解码处理,因此系统中支持对ARM解码器的移植功能。在开发工作中通过一定的流程和调用具体的方法进行实现:
(1)搭建开发平台编译环境,这是进行解码工作的初始工作。通过在具体的NDK文件中的引用,并配置对应的程序目录,然后通过常量系统目录SYSROOT进行赋值,这样就指定了程序的根目录。
(2)当程序进行编译的过程中需要指定对应的调用程序,因此需要对编译器进行指定,并且指定对应的编译调用文件。通过代码引入程序代码GCC=" arm-Linux-Android-gcc"以及GAR="arm-Linux-Android-ar"等进行实现。
(3)根据程序开发需要选择是否支持优化处理。通过选择合适的ABI以及指定的CPU架构实现对应。根据开发文档,可以选择对应的CPU是否支持NEON优化处理,如果不支持优化需要选择相应的选项进行处理,否则程序编译时系统将会提示。
(4)进行其他必要的配置。如在程序开发前选择开发架构编译系统Linux、选择媒体播放支持模式等,最后通过编译形成可以在程序执行中进行调用的FFmpeg动态链接库。
为了能够更加清晰的对系统中的视频解码流程进行表达,这里通过程序开发流程图4.4对整个解码过程进行说明。
图4.4 系统视频解码流程图
当手机端和服务器端建立连接以后,从服务器端获取相应的程序文件,这些数据传递到手机端以后,手机端将通过程序进行判断,首先对手机软件是否支持硬解码进行判断,如果支持硬解码,那么就通过程序调用OpenMax模块中的处理方法进行,如果不支持硬解码就需要进行软解码,那么就需要通过调用程序中的NEON方法进行处理,具体来说就是程序载入调用的方法库进行处理,其中需要通过程序载入对应的.so库。在该过程中程序将进一步判断编写的程序是否支持这种优化方式,通过调用ffmpeg.so库实现默认优化处理方式。在这些准备工作结束以后,程序将进行方法的调用以及解码程序的初始化处理,然后对传入的视频进行解复用,通过调用程序的具体方法进行处理,在编程中可以借助面向对象的思想进行有关问题的处理。此外在该解码过程中,需要对音频和视频进行处理,虽然目前来说音频视频的处理要求没有那么严格,但是考虑到在视频播放过程中既有视频也有声音的情况,这样就可以进一步对混在一起的视频和音频进行处理,从而实现浏览者看到的音频统一,达到同步的效果。
在具体的视频解码过程中,通过实现接过化编程中的结构体的方式构建程序对象,然后通过构建程序处理方法,实现对视频色彩的处理,也就是通过YUV颜色进行编码处理,从而实现视频流的顺畅播放。通过面向对象方法Decode的子类进行处理,这样就可以把处理以后的视频文件通过具体的播放器进行放映,用户就可以通过手机查看相关视频信息了。其中,PC端视频解码流程如图4.5所示。
图4.5 视频解码流程图
上述针对视频文件进行解析的过程中,既需要注意视频中的音频和视频的处理,同时又要对其中的解码方式进行处理,需要对多种视频解析方式进行兼顾,比如有些系统支持进行硬解码,那么就可以直接调用对应的程序接口进行处理,这样的处理方式有助于快速进行视频获取。而有些系统无法借助硬解码进行处理,那么就需要调用程序进行处理,借助软件方法实现对视频的较快速处理,达到在客户端进行播放的目的。
4.1.3 音视频同步实现
视频解码中已经对音视频的同步进行了简单说明,在本次程序开发中为了能够实现较好的时间同步,还对视频解码进行了同步实现,通过定时器作为比较关键参数进行了同步。常用的视频与音频同步会涉及到三种方法,一种是时间戳法,二是借助多级服用法实现对视音频同步实现,三是通过同步标记法进行实现。在本课题的研究中主要采用了后一种方法进行同步处理。
在进行音频和视频的同步处理中,首先需要对一些基本概念进行了解,首先对于视频来说,其实是一些平均帧率集合而成,而对于音频来说则是采样频率的集合。因此在处理音视频文件的工作中需要对这些基础概念进行处理,同时还需要结合两个重要处理值进行处理,即DTS和PTS。要想在客户端实现对音频视频的同步处理就需要处理好这两个参数,它们与客户端解码中的几个参数密切相关,包括了I帧、B帧和P帧。其中I帧指的是一个完整的数据帧,B帧指的是通过I帧和B帧进行计算得出,而P帧是通过I帧进行一系列计算得到。但是B、P两个帧又存在明显的不同。B帧具有双向性,而P帧没有。因此对于B帧来说应该记录其传输的方向信息。
在本手机端程序的开发中,其中一个实现案例为PTS=132,DTS=123,然后通过音视频处理得到了实际的IPB帧。在进行音视频处理的时候,首先把音视频的有关参数进行获取,然后调用具体的方法进行处理。借助硬件中的处理函数av_read_framek函数对传输的信息进行读取,然后借助结构体进行传入帧的接收,程序中通过结构体DAVpacket进行数据获取。然后借助解码方法对其中的YUV数据进行获取,但是在实际的音视频获取的过程中往往不能直接获取到PTS值,因此就需要进行计算处理。这里设置PTS=0,然后对解码并得到PTS值,然后调用结构体中的具体对应属性进行接收,通过PTS=dopaque值,具体程序代码如下: