中山网维科技

0760-28166688
WVNEW  SOFTWAVE
QQ

视频网站的建设要求

2015-06-17

坦洲网站建设的过程中,视频网站的建设要求有很多,比如采集卡实质上就是把连续的模拟视频信号转换为离散的数字视频信号的组芯片组。为了让大家对采集卡有一个比较清晰的认识,我们来把采集卡简单分一下类:

1) 按照通道来分:常见的有单卡单路\4路\8路\16路\32路;一般卡都支持多卡组合,比如你需要16路,你可以买一张单卡16路的、也可以买4张4路的、2张8路的;

2) 按照驱动来分类:主流是支持Windows DirectShow Interface由VFW和WDM驱动的采集卡; 不过在大陆,由厂商自己开发的驱动程序来驱动的采集卡,也是比较常见的,这类采集卡自带的驱动程序一般不支持DirectShow Interface,有的甚至连驱动程序的Interface也不对外公布,一般只有配套他们自己的软件才能使用;不过也有专业卖卡的厂商,他们提供自己的二次开发SDK,如果要做二次开发,需要用他们提供的专用接口函数;

3) 按照用途来分类,一般有用于数码编辑(DV制作、视频录制等)用的采集卡,这类卡的质量和性能要求都比较高,当然价格也较高;还有一类就是安防监控系统用的采集卡,这类卡又分为工厂用的用于监控仪器仪表用的采集卡和用于楼宇监控用的采集卡,前者要求精度比较高,性能和价格都要略高于后者;现在市面上的视频采集卡总体看还是比较乱的,没有一个统一的硬性标准。大家基本都有自己的从硬件到软件的一整套的系统,一般都是自己有自己的标准,接口互不公开,互不兼容。

总体来说,大陆产的视频采集卡几乎没有自己本身就配套VFW或WDM驱动的。还有一些小厂产的采集卡,干脆就不支持二次开发,虽然网站上介绍说是支持二次开发。这一点朋友们要注意了,买卡之前要问清楚了,买了块卡,居然被告知不支持二次开发,接口保密,是他们的技术秘密。如果读者也买了这样的采集卡,也不要着急,先看一下卡的芯片是什么然后到网上找一下有没有适用于这套芯片的公用驱动程序,这个驱动可能会是电视卡之类的驱动,不过别担心,它同样可以驱动采集卡;如果没有找到,就要考虑自己写驱动了,主要保证驱动为WDM模型就行了,有专用的写驱动的工具(DDK)。不过像比利时Euresys产的picolo系列、台湾ProVideo产的SecurityEyes系列均自带的有WDM驱动。picolo主要是工厂用于监控仪器仪表,ProVideo主要用于安防监控。

基于VFW的视频应用程序开发

当前,在Windows 平台下开发视频应用程序一般采用两种方式:一种是基于视频采集卡所附带的二次软件开发包SDK(Software development kit)进行。这种方式的优点是应用方便,容易上手,缺点是对硬件的依赖性较强,灵活性差,且功能参差不齐,不能充分满足各种视频应用程序的开发需要;另一种方式是基于VFW(Video for Windows)进行的。VFW 是Microsoft公司为开发Windows平台下的视频应用程序提供的软件工具包,提供了一系列应用程序编程接口(API),用户可以通过它们很方便地实现视频捕获[1]、视频编辑及视频播放等通用功能,还可利用回调函数开发更复杂的视频应用程序。它的特点是播放视频时不需要专用的硬件设备,而且应用灵活,可以满足视频应用程序开发的需要。Windows操作系统自身就携带了VFW,系统安装时,会自动安装VFW的相关组件。VC++自4.0以来就支持VFW,大大简化了视频应用程序的开发。目前,PC机上多媒体应用程序的视频部分,大都是利用VFW API开发的。

1 VFW 的体系结构

VFW以消息驱动方式对视频设备进行存取,可以很方便地控制设备数据流的工作过程。目前,大多数的视频采集卡驱动程序都支持VFW接口,它主要包括多个动态连接库,通过这些组件间的协调合作,来完成视频的捕获、视频压缩及播放功能。VFW体系结构如图1所示。

1)VICAP.DLL:主要实现视频捕获功能,包含了用于视频捕获的函数,为音像交错AVI (Audio video interleaved)格式文件和视频、音频设备程序提供一个高级接口。

2)MSVIDEO.DLL:能够将视频捕获窗口与获驱动设备连接起来,支持ICM视频编码服务。

3)MCIAVI.DRV:包含MCI(Media control interface)命令解释器,实现回放功能。

4)AVIFILE.DLL:提供对AVI文件的读写操作等文件管理功能。

5)ICM ( Installable compression manager ):即压缩管理器,提供对存储在AVI文件中视频图像数据的压缩、解压缩服务。

6)ACM ( Audio Compression Manager ):即音频压缩管理器,提供实时音频压缩及解压缩功能。

2 视频捕获

视频数据的实时采集,主要通过AVICAP模块中的消息、宏函数、结构以及回调函数来完成。视频捕获的一般过程如下:

(1)建立捕获窗口

利用AVICAP 组件函数 capCreateCaptureWindow() 建立视频捕获窗口,它是所有捕获工作及设置的基础,其主要功能包括:

① 动态地同视频和音频输入器连接或断开;

② 设置视频捕获速率;

③ 提供视频源、视频格式以及是否采用视频压缩的对话框;

④ 设置视频采集的显示模式为Overlay或为Preview;

⑤ 实时获取每一帧视频数据;

⑥ 将一视频流和音频流捕获并保存到一个AVI文件中;

⑦ 捕获某一帧数字视频数据,并将单帧图像以DIB格式保存;

⑧ 指定捕获数据的文件名,并能将捕获的内容拷贝到另一文件。

(2)登记回调函数

登记回调函数用来实现用户的一些特殊需要。在以一些实时监控系统或视频会议系统中,需要将数据流在写入磁盘以前就必须加以处理,达到实时功效。应用程序可用捕获窗来登记回调函数,以便及时处理以下情况:捕获窗状态改变、出错、使用视频或音频缓存、放弃控制权等,相应的回调函数分别为 capStatusCallback(), capErrorCallback(), capVideoStreamCallback(), capWaveStreamCallback(),capYieldCallback()。

(3)获取捕获窗口的缺省设置

通过宏capCaptureGetSetup(hWndCap,&m_Parms,sizeof(m_Parms))来完成。

(4)设置捕获窗口的相关参数

通过宏capCaptureSetSetup(hWndCap,&m_Parms,sizeof(m_Parms))来完成。

(5) 连接捕获窗口与视频捕获卡

通过宏capDriveConnect(hWndCap,0)来完成。

(6) 获取采集设备的功能和状态

通过宏capDriverGetCaps(hWndCap,&m_CapDrvCap,sizeof(CAPDRIVERCAPS))来获取视频设备的能力,通过宏capGetStatus(hWndCap,&m_CapStatus,sizeof(m_CapStatus))来获取视频设备的状态。

(7) 设置捕获窗口显示模式

视频显示有Overlay(叠加)和Preview(预览)两种模式。在叠加模式下,捕获视频数据布展系统资源,显示速度快,视频采集格式为YUV格式,可通过capOverlay(hWndCap,TRUE)来设置;预览模式下要占用系统资源,视频由系统调用GDI函数在捕获窗显示,显示速度慢,它支持RGB视频格式。

(8) 捕获图像到缓存或文件并作相应处理

若要对采集数据进行实时处理,则应利用回调机制,由capSetCallbackOnFrame(hWndCap, FrameCall-backProc)完成单帧视频采集;由capSetCallbackOnVideoStream(hWndCap, VideoCallbackProc)完成视频流采集。如果要保存采集数据,则可调用capCaptureSequence(hWnd);要指定文件名,可调用capFileSetCap-ture(hwnd, Filename)。

(9) 终止视频捕获,断开与视频采集设备的连接

调用capCatureStop(hWndCap)停止采集,调用capDriverDisconnect(hWndCap), 断开视频窗口与捕获驱动程序的连接。

3 视频编辑和播放

(1)利用VFW,不仅可以实现视频流的实时采集,还提供了编辑和播放功能,主要通过AVIFILE、ICM、ACM、MCIWnd 等组件之间的协作来完成。

1) AVIFileInit();//初始化;

2) AVIFileOpen(); //打开一个AVI文件并获文件的句柄;

3) AVIFileInfo(); //获取文件的相关信息,如图像的Width和Height等;

4) AVIFileGetStream(); //建立一个指向需要访问的数据流的指针;

5) AVIStreamInfo(); //获取存储数据流信息的AVISTREAMINFO结构;

6) AVIStreamRead(); //读取数据流中的原始数据, 对AVI文件进行所需的编辑处理;

7) AVIStreamRelease(); //释放指向视频流的指针;

8) AVIFileRelease();AVIFileExit(); //释放AVI文件。

若数据是压缩过的,则用AVIStreamGetFrameOpen(),AVIStreamGetFrame()和AVIStreamGetFrameClose()来操作,可以完成对视频流的逐帧分解。

(2) 视频播放

对于实现视频流的播放,VFW提供了MCIWnd窗口类[4],主要用于创建视频播放区,控制并修改MCI窗口当前加载媒体的属性。一个由函数、消息和宏组成的库与MCIWnd相关联,通过它们可以进行AVI文件操作,很方便地使应用程序完成视频播放功能。

1)MCIWndCreate(); //注册MCIWnd窗口类,创建MCIWnd窗口,并指定窗口风格;

2)AVIFileInit(); //初始化;

3) AVIFileOpen(); //打开AVI文件;

4) AVIFileGetStream(); //获得视频流;

5)运用相关函数进行各种播放任务:MCIWndPlay()正向播放AVI文件内容,MCIWndPlayReverse()反向播放,MCIWndResume() 恢复播放,MCIWndPlayPause()暂停播放,MCIWndStop()停止播放等等。

6) AVIStreamRelease(); //释放视频流;

7)AVIFileRease();AVIFileExit(); //断开与AVI文件的连接,释放视频源。

由以上步骤可以看出,视频播放是视频编辑其中的一种操作。

WDM 视频捕获介绍

Windos下视频捕获简史 WDM和视频捕获 VfWWDM Mapper WDM 视频捕获结构

DirectShow应用程序 DirectShow Filter Graph WDM数据流

视频捕获 Minidrivers Pins, Streams, Formats

视频流命名约定

DirectShow 视频捕获的接口和属性 捕获数据流类型 流输出数据格式 结束语

Windos下视频捕获简史

VFW(Video For Windows)1.0版本在1992年11月发布,它是为在

Windows3.1下将电影最优化地捕获到磁盘上而发布的。从那以后,视频捕获技术就越来越受到关注了。

VFW技术同样受到了很多批评,它捕获的数据保存到磁盘上会占用大量磁盘空间,每秒数据量超过20M,同时需要大量的客户端支撑软件,VFW体系架构上的不足在视频会议应用上和PC/TV应用上被暴露无遗,这样就要求一种新的视频捕获技术来弥补这些不足。

VFW的体系结构缺乏为视频会议,电视浏览,视频区域捕获和VBI(Vertical Blanking Interval)数据流提供强而有效的支持。一些视频卡等设备开发商在设计自己的产品时,针对这些缺陷,对VFW进行了功能扩展。由于没有统一的标准,我们的应用程序在使用这些扩充的功能时,就必须要写一些基于特定硬件的代码。这就意味着当要改变捕获驱动程序时,就必须要对显卡的驱动程序进行修改。

WDM和视频捕获

WDM 视频捕获设计就是为了来解决VFW体系结构中存在的这些问题。WDM视频捕获主要的好处体现在:可以为设备(如基于USB,IEEE 1394通讯方式的摄像头)提供32位的驱动程序。允许DirectShow 和 WDM 流协同工作。 可以在视频捕获设备和DVD/MPEG设备间,为硬件(如video操作系统仍然支持VfW驱动程序,但是依赖于VFW的开发将逐渐减少,这是因为下面三个原因:WDM数据流为基于电视浏览和视频会议的捕获设备提供了优化支持。DirectShow提供了更强的功能。Microsoft 将不会对VFW进行持续开发。

VfWWDM Mapper

VfWWDM mapper是Windows 98 和 Windows 2000 操作系统的一部分。它提供了WDM 驱动程序到基于VfW程序的向后兼容。对于Windows 98, 有一个驱动程序文件和一个动态链接库Vfwwdm.drv和 Vfwwdm32.dll。Windows 2000只要求一个DLL文件。典型的 mapper应用于显示视频捕获设备对话框、视频源选择对话框、摄像头控制面板和视频格式设置。

VfWWDM mapper 不是全面兼容并且不支持旧VFW的所有功能。例如不支持视频覆盖,也不支持视频端口implementations 。

WDM 视频捕获结构

WDM 视频捕获结构图如下:

DirectShow应用程序

DirectShow 用于控制多媒体数据流;它可以在运行时允许用户播放数字电影和对不同格式的声音进行解码,包括MPEG-1。

这种播放性能可以让音视频卡支持Microsoft DirectX®的API,DirectShow 同样可以播放AVI电影文件和Apple QuickTime (.mov)格式文件。

DirectShow 被广泛地应用于Windows 95, Windows 98, 和Windows 2000应用程序。DirectShow 直接和驱动程序通讯,DirectShow 不使用AVICap, 因为AVICap分配了数据缓冲区,如果一个DirectShow层没有放在AVICap 顶层,那么缓存区数据必须要通过转化去指向它,这样会造成效率地下。

DirectShow Filter Graph

DirectShow结构定义了标准的组件去控制处理带时间标记(time-stamped)的多媒体数据流,这些组件被称为过滤器(Filter)。把这些Filter放在一个容器中,这个容器就是Filter Graph。可能有三种类型的Filter:Source ,transform 和render。(注:有些资料将Filter翻译为过滤器,FilterGraph翻译为过滤器图表,这里我都用原单词)

应用程序可以通过Filter Graph管理器来进行数据访问。Filter Graph 管理器会对Filter Graph配置进行管理,同时还会通过Filter Graph控制数据的转移。Filter Graph 管理器提供了一套COM接口,去允许应用程序与Filter Graph实现通讯。

应用程序可以直接调用Filter Graph管理器接口去控制媒体流或者去获得Filter事件。还可以使用DirectShow ActiveX的OCX控件进行程序设计。还有ports 和 chip sets)共享一个分类的驱动程序结构(Stream.sys)。支持多个数据流。允许电视信号调频和输入选择。支持视频区域捕获,区域显示和VBI。允许使用DirectDraw® VPE (Video Port Extensions)管理视频输入。

在一个单独设备上可能会有多个组件共存的情况,这些组件包括DVD解码器,MPEG解码器,视频解码器,调谐器,音频解码器。WDM数据流就是用于解决这种情况而创建的。它是个统一的驱动模型,可以支持所有的这些设备和去处理它们的资源分配。

WDM数据流为标准数据类型和用户自定义数据类型提供了统一的数据模型,同样,它定义了大部分的标准设备的属性,并且根据需要可以很容易地实现扩充。因为按WDM数据流的协议,它支持在设备内核间进行数据传输,而不需要在用户模式下进行数据转换。这样可以获得较高的效率,减少不必要的工作。

一套MCI子集命令可以用来向后兼容Microsoft VFW 1.x版本和遵循OM-1 MPEG MCI 规范。

WDM数据流

WDM数据流主要应用包括视频捕获,电视浏览,VBI数据编码支持和DVD电影播放。DirectShow可以非常容易地使用这些数据。

视频捕获 Minidrivers

视频卡由一些组件构成,比如电视信号调谐器,AM/FM调谐器,视频解码器,音频解码器等,它们都由WDM Minidriver控制。使用Minidrivers ,就可以允许硬件开发商为不同的卡开发器驱动程序,他们只需要把Minidriver写到他们的卡上,当硬件设计修改后,不需要对修改驱动做更多的修改。

在Windows 98 和Windows 2000下,视频设备使用WDM 的Minidriver去控制视频数据流,视频捕获Minidrivers 相当与一个客户端,它会去控制处理硬件设备的图像数据和其他相关数据。Minidrivers提供了如下的功能:  捕获压缩和非压缩的视频数据流,VBI数据,时间编码和其他辅助数据流。控制视频流相关设备,比如电视信号调谐器,视频路由设备,电视音频控制器和视频压缩编码器。在流内核中完成处理工作,减少操作过程提高效率。

Pins, Streams, Formats

数据流视频捕获驱动程序可以同时支持多个压缩数据,非压缩数据,时间编码, VBI解码数据以及自定义数据。为了保证每种数据同步匹配,捕获驱动程序为这些数据创建了一个新的数据流。每个流都会用一个WDM流针脚(Pin)来传递,通过针脚,单个数据流就可以把它的数据连接到不同的流Filter中去,还可以通过DirectShow 用户Filter的输出针脚,把数据转换输出给用户。(前面我们提到Filter的3种类型:Source ,transform 和render。Source只有输出针脚,而transform有输入、输出2个针脚,render只有输入针脚)在内核模式下,流格式使用KSDATAFORMAT数据结构。这个结构可以被扩展去包含其它特别的数据格式信息。

typedef union { struct {

ULONG FormatSize; ULONG Flags; ULONG SampleSize; ULONG Reserved; GUID MajorFormat; GUID SubFormat; GUID Specifier; };

ULONGLONG Alignment;

} KSDATAFORMAT, *PKSDATAFORMAT, KSDATARANGE, *PKSDATARANGE;

DirectShow 视频捕获的接口和属性

DirectShow 提供了与许多视频相关的接口,它们中的一些还有附带相关的属性。下面列出的这些接口是实际应用较多,并不带相关属性的:  IAMAudioInputMixer  IAMDroppedFrames  IAMStreamConfig

 IAMVfwCaptureDialogs  IAMVfwCompressDialogs  IcaptureGraphBuilder  ICreateDevEnum

每个针脚都可以支持多种不同的数据格式。比如,一个针脚它可以提供RGB16, RGB24, YVU9,和 JPEG 数字视频。针脚可以连接到一个共享的系统内存的数据缓存区,它还可以直接连接到硬件设备。

视频流命名约定

通常,DirectShow 和 WDM 流会共享媒体的格式定义和流命名约定。但是基于内核模式(Kernel-mode)和用户模式(User-mode)下的命名约定有一些小的命名差异。比如,内核模式下的很多格式定义和GUID定义会在名称前加个”KS”前缀,BITMAPINFOHEADER就是用户模式下的定义,而

KS_BITMAPINFOHEADER就是内核模式下的相同结构的定义。

捕获数据流类型

视频流大致由时间标记,数字视频,和其他相关信息(比如VBI,时间编码)组成,流可以被暂停,开始和停止。流一般是100ns一次进行数据采样,大多数情况下,每个数据帧存放在每个ImediaSample缓存区中。

流输出数据格式

流的数据类型由KSDATARANGE 数据结构的StreamDescriptionFlags 字段来标识,它们定义如下:

KS_VIDEOSTREAM_CAPTURE

主要的视频流格式,用于视频会议和把数据写入磁盘。 KS_VIDEOSTREAM_PREVIEW

用于显示视频,它使用的是没有压缩的数据格式,所以不需要进行特别的解压操作。

KS_VIDEOSTREAM_VBI 用于VBI应用。

KS_VIDEOSTREAM_NABTS 用于NABTS 解码VBI 采样. KS_VIDEOSTREAM_CC KS_VIDEOSTREAM_EDS

KS_VIDEOSTREAM_TELETEXT 用于图文信息

KS_VIDEOSTREAM_STILL 用于Still image.

KS_VIDEOSTREAM_IS_VPE 用于基于VPE的数据流。

扫描二维码,信息随身看

Copyright ©2011~2019 wvnew.com Inc.All Rights Reserved. 版权所有 中山网维软件技术有限公司

粤ICP备13044604号