公开/公告号CN101472090A
专利类型发明专利
公开/公告日2009-07-01
原文格式PDF
申请/专利权人 新奥特(北京)视频技术有限公司;
申请/专利号CN200710304293.2
申请日2007-12-27
分类号H04N5/262(20060101);H04N7/18(20060101);
代理机构北京天悦专利代理事务所;
代理人田明;王瑛
地址 100080 北京市海淀区西草场1号北京硅谷电脑城15层1501-1506室
入库时间 2023-12-17 22:10:28
法律状态公告日
法律状态信息
法律状态
2018-02-09
未缴年费专利权终止 IPC(主分类):H04N5/262 授权公告日:20111228 终止日期:20161227 申请日:20071227
专利权的终止
2011-12-28
授权
授权
2010-12-15
实质审查的生效 IPC(主分类):H04N5/262 申请日:20071227
实质审查的生效
2009-07-01
公开
公开
技术领域
本发明涉及视频预监技术,具体涉及一种用于视频服务器的硬件自适应多通道多模式视频预监方法。
背景技术
目前的视频服务器在采集状态下的预监方式,多为如采用占用视频IO卡的一路输出单路视频信号到监视器的方式,或使用软件监视窗口进行单路视频监看的方式。在多路信号同时采集的状态下,不能够同期对所有输入视频进行监控。使用板卡硬件通道,将受制于板卡的工作方式(如视频采集卡不支持双工模式),并增加系统成本;而目前软件化到PC监视器的视频预监方式,如要实现多路视频的混合(Mixing Blender),则一般要求显卡具有Video Overlay的功能,同样将制约视频服务器软件的可移植性。
发明内容
本发明的目的在于针对现有技术的缺陷,提供一种适用于视频服务器的硬件自适应的多通道多模式视频预监方法,通过调整数据源或视频排列方式,本发明可用于如模拟电视墙,素材浏览器等多种应用。
本发明的技术方案如下:一种用于视频服务器的硬件自适应多通道多模式视频预监方法,该方法接收输入的多路视频数据后,设置输入视频数据格式,并进行视频重采样;然后将多路视频数据进行视频混合,并将混合后的结果数据定位输出,通过配置预监画面位置,形成多通道视频预监窗口画面。
进一步,如上所述的用于视频服务器的硬件自适应多通道多模式视频预监方法,其中,当预监画面输出到PC显示器时,在视频数据输入之前,首先判断PC机环境是否具有硬件加速功能,在不具有硬件加速功能的情况下,创建视频合成器、输出定位器,定位输出到windows窗口,然后创建数据源包装器数组和视频预处理器数组,连接各处理模块等待视频数据输入;在具有硬件加速功能的情况下,创建DirectShow兼容数据源包装器数组和DirectShow兼容视频预处理器数组,并创建DirectShow体系中的Video Mixing Render渲染器,连接各处理模块等待视频数据输入。
如上所述的用于视频服务器的硬件自适应多通道多模式视频预监方法,其中,当预监画面输出到视频监视器时,在视频数据输入之前,创建视频合成器、输出定位器,定位输出到视频卡IO输出端,然后创建数据源包装器数组和视频预处理器数组,连接各处理模块等待视频数据输入。
如上所述的用于视频服务器的硬件自适应多通道多模式视频预监方法,其中,在PC机环境不具有硬件加速功能的情况下进行视频混合时,创建一个数据处理工作线程,用于对来自上游的不同输入(即不同预处理端输出)进行同步操作,在视频混合模块中,对每个输入端,实现一个先进先出(FIFO)队列,并设置监测队列数据到达的最大超时时长,当超过时长时,混合模块认为上游对应端输入未到达,以黑色填充数据帧,作为输入的对应占位,当所有输入数据帧补齐时,工作线程进行帧拼接,并将结果数据进行输出。
如上所述的用于视频服务器的硬件自适应多通道多模式视频预监方法,其中,预监源位置配置和监控由预监源混合观测器实施,预监源混合观测器提供标准模式模板供用户配置时直接载入,并提供用户自定义方式,使用户自定义预监源数量、视频通道位置、当前活动主预监源标识方式;预监源混合观测器以标准COM接口方式实现,其接口函数包括:更改视频位置ChangeFramePosition,更改视频大小ChangeFrameSize,同步更改到预处理模块NotifyPreprocessor,同步更改到混合模块NotifyMixer。
如上所述的用于视频服务器的硬件自适应多通道多模式视频预监方法,其中,在用户动态配置视频混合位置时,将在window窗体内由鼠标动作产生的矩形区域更改映射到混合视频帧上的矩形区域更改,设窗体离散坐标系的一个坐标轴的区间为:[a0,…a1],混合帧上一个坐标轴的区间为:[b0,…b1],则其取值范围为:
从用户GDI区域到视频混合帧内存表面的坐标映射公式为:
公式中,坐标b是坐标a在混合帧上的映射。
本发明适用于(但不限于)视频服务器的多通道视频数据采集模式下各个通道的视频数据同时监看的应用,通过该方法实现了视频预监的硬件自适应功能,以及多通道数据的视频混合功能,并能以多种模板形式予以显示,通过调整数据源或视频排列方式,本发明将可用于如模拟电视墙,素材浏览器等多种应用。
附图说明
图1为视频预监方法的数据输入输出模块组成示意图。
图2为以UML类图模型描述实现各模块接口的最小实现类示意图。
图3为基于DShow结构的工作模式的数据输入输出模块组成示意图。
图4为在软件加速模式下系统工作状态示意图。
图5为在通过单个硬件通道预监的工作模式下系统工作状态示意图。
图6为本发明所应用的系统初始化流程图。
图7为在软件加速模式和通过单个硬件通道预监的工作模式下连接处理模块流程图。
图8为连接成功后,在无混合更改操作激发的情况下视频混合工作流程图。
图9为预监源混合观测器以UML类图模型描述实现各模块接口的最小实现类示意图。
图10为被混合视频位置变更的系统工作流程图。
图11为预处理输出视频大小变更的系统工作流程图。
具体实施方式
下面结合附图和具体实施例对本发明进行详细的描述。
在描述本发明之前先对所用到的相关名词缩略进行介绍:
视频预监窗口——VW;
微软DirectShow技术体系结构——DShow;
DShow中的Video Mixing Render——VMR;
DShow中的Filter组件——Filter;
DShow中的Filter连接集合-Graph;
统一建模语言:UML;
线程(指Win32系统中的狭义线程):Thread。
为达成硬件自适应预监目的,要求软件模块设计实现:(a)自主监测硬件配置(b)基于硬件环境配置最优工作状态。
为达成多路预监目的,要求软件在模块中设计实现:(a)隔离不同信号源数据,(b)自动检测信号源状态,(c)提供预监信号输出路径选择模式。
为达成多模式预监目的,要求软件模块设计实现:(a)通过人机交互运行时配置预监画面主次,(b)运行时配置预监画面位置,(c)用户可定义预监方式模板。
本发明所提供的用于视频服务器的硬件自适应多通道多模式视频预监方法,是在接收输入的多路视频数据后,设置输入视频数据格式,并进行视频重采样;然后将多路视频数据进行视频混合,并将混合后的结果数据定位输出,通过配置预监画面位置,形成多通道视频预监窗口画面。
下面对该方法实现的具体结构设计进行介绍。视频预监方法的数据输入输出模块组成如图1所示。
定义输入输出模块名称如下;接口(Interface)函数描述(英文为函数名,中文为函数功能描述)如下:
(1)视频输入模块(Source)
a.接收输入视频数据(PushFrame)
PushFrame的输入为非压缩视频数据,即一连续内存数据块。收到数据后,此函数检查格式兼容性并立即把数据向下游模块传送。
b.设置输入视频数据格式(SetInputMediaType)
SetInputMediaType的输入参数的关键字包括:视频数据格式(标准颜色空间Format,如RGB,YUY2),视频帧的长宽,每象素比特数等。一旦设置完成,输入数据将被默认为按此数据格式组织,并不能更改.
(2)视频预处理模块(Preprocessor)
a.接收输入视频数据(PushFrame)
PushFrame被上游模块调用,输入为非压缩视频数据,即一连续内存数据块。收到数据后,此函数检查格式兼容性并调用重采样函数,将重采样结果数据向下游输出。
b.设置输入视频数据格式(SetInputMediaType)
SetInputMediaType,正确调用模式下,此函数输入与Source中的SetInputMediaType输入参数兼容,若非,PushFrame在检查兼容性时返回失败。
c.设置重采样格式(SetOutputMediaType)
SetOutputMediaType,设置输出视频格式,当此格式与输入数据不同时,重采样功能被启动。
d.进行视频重采样(ResizeFrame)
ResizeFrame的输入为一帧非压缩数据,输出为变换后的一帧非压缩数据,进行视频重采样,在Source和Preprocessor的函数中,只有ResizeFrame对视频数据进行变换(transform),其他数据相关操作仅完成内存数据的拷贝,或内存指针的传递,是传递(transmit)过程。
从物理意义上讲,ResizeFrame实现了对二维数据的重采样滤波过程,对重采样滤波器的选择和实现(如基于线性空域不变系统的二维重采样滤波器),本文档不做约束。
(3)视频混合模块(Mixer)
a.查询新视频帧到达标志(CheckArrivalTimeOut)
CheckArrivalTimeOut,在视频混合模块中,创建了一个数据处理工作线程,用于对来自上游的不同输入(即不同预处理端输出)进行同步操作。Mixer中,对每个输入端,实现一个先进先出(FIFO)队列,并设置监测队列数据到达的最大超时时长,当超过时长时,混合模块认为上游对应端输入未到达,以黑色填充数据帧,作为输入的对应占位。当所有输入数据帧补齐时,工作线程调用MixFrames进行帧拼接。MixFrames的结果送SendFrame输出。
b.设置视频表面覆盖位置(SetOverlayPosition)
SetOverlayPosition的输入参数为输入帧标识符(ID),输入帧相对于目标帧右上角位置的坐标,输入帧透明度(alpha)预设值。输入帧长宽由SetInputMediaType函数决定。本函数不强制进行区域重合检测,所以输入的两帧或多帧视频位置重合被视为合法操作。
c.设置输入视频数据格式(SetInputMediaType)
SetInputMediaType输入参数为输入视频标识符(id),输入视频格式结构体。设置输入数据格式操作要求与对应预处理模块视频输出格式设置兼容,否则返回失败值。
d.设置输出视频数据格式(SetOutputMediaType)
SetOutputMediaType输出参数为输出视频格式结构体。
e.接收输入视频数据(ReceiveFrame)
ReceiveFrame由视频预处理器模块调用,负责将预处理模块的处理结果收入对应先进先出(FIFO)队列。
f.混合视频数据(MixFrames)
MixFrames由工作线程调用,其输入参数为携带视频数据内容的内存指针数组(数组长度为通道数量)。MixFrames完成视频的混合操作
g.输出混合后视频数据(SendFrame)
SendFrame由工作线程调用,将混合后的结果数据送给视频输出模块。
(4)视频输出模块(Output)
a.定位输出(RedirectOutput)
RedirectOutput输入参数为标识输出定位的枚举型变量(在可能的情况里,会标识输出到显示器窗口,或通过板卡IO输出到TV监视器)。输出模块根据定位标志不同,创建实体动作代理,根据所采用的第三方板卡不同,需要参考不同的板卡开发库(SDK),本文档不做进一步限制。
b.设置输入视频数据格式(SetVideoMediaType)
SetVideoMediaType,输出模块作为系统终端模块,没有输出端口。输入视频数据格式需要匹配Mixer模块的输出视频数据模式,否则进入错误处理。
c.输出视频数据(RenderFrame)
RenderFrame由Mixer模块的工作线程调用,完成到监视端的视频输出工作。
以上接口以标准COM接口方式实现,以UML类图模型描述,上述接口最小实现类可表示如图2。
在本系统实现中,当软件系统所被布置的PC机环境具有硬件加速功能时,上述模块在定位输出到PC显示器时将工作在基于DShow结构的工作模式。在基于DShow结构的工作模式中,图1的输入输出模块中的各子模块可被替换为如图3所示的Filter-Graph集,输出级的末端两个模块被DShow中的VMR替代。预处理模块的包装Filter在此状态下被设置为直通状态,即视频输入输出格式相同,视频重采样工作由VMR完成。
在基于DShow的工作模式下,系统中不再存在Mixer和Output模块,数据源(Source)和预处理模块(Preprocessor)除需要实现如图2所示的接口函数外,需要按的开发协议,分别支持标准源Filter(Source Filter)和传输Filter(Trans form Filter)的协议接口函数。此部分内容,可参见由微软公开的《Microsoft DirectX 9.0联机帮助》文档的“DirectShow”章节部分。
在非基于DShow结构的工作模式下,以GPU为基础的硬件加速模式,将仍然基于如图1的框架,如图4。各模块接口定义不变。在此结构中,Preprocessor仍将工作在直通状态,需要替换的部分包括Mixer中MixFrames函数和Output中RenderFrame函数的具体实现。若以Direct3D技术实现此部分内容,可参见由微软公开的《Microsoft DirectX 9.0联机帮助》文档的“DirectX Graphics”章节部分。
本发明在软件加速模式下,系统工作状态如图4所示;在通过单个硬件通道预监的工作模式下,系统工作状态如图5所示。系统初始化流程如图6所示。当预监画面输出到PC显示器时,在视频数据输入之前,首先判断PC机环境是否具有硬件加速功能,在不具有硬件加速功能的情况下,创建视频合成器、输出定位器,定位输出到windows窗口,然后创建数据源包装器数组和视频预处理器数组,连接各处理模块等待视频数据输入;在具有硬件加速功能的情况下,创建DirectShow兼容数据源包装器数组和DirectShow兼容视频预处理器数组,并创建DirectShow体系中的Video Mixing Render渲染器,连接各处理模块等待视频数据输入。当预监画面输出到视频监视器时,在视频数据输入之前,创建视频合成器、输出定位器,定位输出到视频卡IO输出端,然后创建数据源包装器数组和视频预处理器数组,连接各处理模块等待视频数据输入。在上述工作状态下,连接处理模块流程如图7所示,连接成功后,在无混合更改操作激发的情况下(参见视频混合观测器),视频混合工作流程如图8所示。
视频预监窗口VW提供了多种标准模式模板供用户配置时直接载入,同时提供用户自定义方式,使用户自定义预监源数量、视频通道位置、当前活动主预监源标识方式等。
预监源位置配置和监控由预监源混合观测器实施。预监源混合观测器(VideoMixingObersever)的动作(接口函数)定义如下:
a.更改视频位置(ChangeFramePosition)
ChangeFramePosition的输入包括,视频通道标志符(id),新视频在目标帧上相对左上角的坐标,新视频覆盖在目标帧上时的透明度(alpha),本函数首先检查并确认相关参数存在更改情况,并更新更改参数到观测器模块类的成员数组中,设置更改脏标记。
b.更改视频大小(ChangeFrameSize)
ChangeFrameSize的输入包括,视频通道标志符(id),新视频重采样后的大小。类似a,本函数首先检查并确认相关参数存在更改情况,并更新更改参数到观测器模块类的成员数组中,设置更改脏标记。
c.同步更改到预处理模块(NotifyPreprocessor)
NotifyPreprocessor的输入包括,视频通道标志符(id),即确认通知某特定视频通道变更重采样参数。为将更改情况同步到每一个输出帧,即在一次混合处理循环中,若产生更改命令(即消息),此更改将延迟到下一帧视频时,也就是本次所有通道处理处理完毕后,再被实施。本函数将在ChangeFrameSize中更新的参数通知相应的预处理模块,并调用其SetOutputMediaType函数进行数据属性变更。
d.同步更改到混合模块(NotifyMixer)
NotifyMixer的输入包括,以视频通道标志符(id)为id的位置坐标数组。类似于NotifyPreprocessor,为将更改情况同步到每一个输出帧,即在一次混合处理循环中,若产生更改命令(即消息),此更改将延迟到下一帧视频时,也就是本次所有通道处理处理完毕后,再被实施。本函数将在ChangeFramePosition中更新的参数通过并调用视频混合模块中的SetOverlay-Position函数进行数据属性变更。
预监源混合观测器以标准COM接口方式实现,以UML类图模型描述,其最小实现类可表示如图9。被混合视频位置变更的系统工作流程如图10所示,预处理输出视频大小变更的系统工作流程如图11所示。
在用户动态配置视频混合位置时,用户将在系统给定区域内(即系统生成的一个标准windows窗体)进行鼠标的拖放。此操作将对应到视频混合观测器上,即,将在window窗体内由鼠标动作产生的矩形区域更改映射到混合视频帧上的矩形区域更改。抽象的,这是从一个离散坐标系到另一个离散坐标系的映射。
设窗体离散坐标系的一个坐标轴的区间为:[a0,…a1],混合帧上一个坐标轴的区间为:[b0,…b1],则其取值范围为:
设坐标b是坐标a在混合帧上的映射,则由平面几何知识,有:
最终有:
上式即本系统中采用的从用户GDI区域到视频混合帧内存表面的坐标映射公式。
本发明所述的方法并不限于具体实施方式中所述的实施例,本领域技术人员根据本发明的技术方案得出其他的实施方式,同样属于本发明的技术创新范围。
机译: 高效的视频点播(VOD)服务器,基于客户的兴趣模式,利用自适应共振方法对视频节目进行预取
机译: 视频编码方法,超序列比特格式,视频编码器,预解码方法,预解码器,用于重建视频序列的方法,用于从压缩视频序列重建原始视频序列的设备,包括计算机可读程序的记录介质其上,以及用于过滤从基于小波的向下采样获得的图像的方法
机译: 视频会议系统中的视频显示方法和视频显示控制方法,用于视频会议系统的用户终端和服务器计算机,以及用于视频会议系统的用户终端程序和服务器计算机程序