支持视频插件接入的视频快速平滑显示的方法及装置的制作方法

文档序号:6431457阅读:102来源:国知局
专利名称:支持视频插件接入的视频快速平滑显示的方法及装置的制作方法
技术领域
本发明涉及视频显示技术领域,尤其涉及一种支持视频插件接入的视频快速平滑显示的方法及装置。
背景技术
目前,视频技术在安防、娱乐、通讯等方面得到越来越多的应用。越来越多的厂家开始生产视频设备并涌入市场,使得视频格式越来越多。因此,统一接入来自不同厂家的各种格式视频文件是个极需解决的问题。目前大部分集成商使用的解决方案是直接使用厂家提供的代码进行再编译,这种做法使得当再增加一种解码类型时,整个系统代码都需要重新编译;另外,随着系统支持的编码器越来越多,最终的可执行程序也会变得越来越大,对终端用户来说,却不能做到可动态裁剪,无法实现视频的平滑显示。

发明内容
本发明的主要目的在于提供一种支持视频插件接入的视频快速平滑显示的方法及装置,旨在实现视频的快速解码与平滑显示。为了达到上述目的,本发明提出一种支持视频插件接入的视频快速平滑显示的方法,包括接收流媒体数据,并存入缓冲池;根据预定的解码器及动态解码库文件对所述流媒体数据进行解码;将解码后的流媒体数据显示到终端。优选地,所述根据预定的解码器及动态解码库文件对所述流媒体数据进行解码的步骤包括当所述缓冲池中的流媒体数据达到预定阀值时,调取预定的解码器;通过所述预定的解码器加载相应的动态解码库文件,对所述缓冲池中的流媒体数据进行解码;将所述解码后的流媒体数据送入显示队列。优选地,所述加载相应的动态解码库文件的步骤包括通过调用动态解码库文件相应的解码DLL中的自我描述、创建及卸载函数与所述预定的解码器进行交互。优选地,所述流媒体数据包括录像数据流或来自前端设备的实时数据流。优选地,所述加载相应的动态解码库文件的步骤进一步包括通过调用动态解码库文件相应的解码DLL中的自我描述、创建及卸载函数与所述相应的录像协议器进行交互。优选地,所述将解码后的流媒体数据显示到终端的步骤包括按照预定的时间间隔从所述显示队列中取出YUV格式数据;
4
将所述YUV格式数据转换为RGB格式数据;对所述RGB格式数据进行视频叠加处理后,显示于终端预定的窗口。本发明还提出一种支持视频插件接入的视频快速平滑显示的装置,包括流媒体数据接收模块,用于接收流媒体数据,并存入缓冲池;数据解码模块,用于根据预定的解码器及动态解码库文件对所述流媒体数据进行解码;数据显示模块,用于将解码后的流媒体数据显示到终端。优选地,所述数据解码模块包括调取单元,用于当所述缓冲池中的流媒体数据达到预定阀值时,调取预定的解码器;加载解码单元,用于通过所述预定的解码器加载相应的动态解码库文件,对所述缓冲池中的流媒体数据进行解码;发送单元,用于将所述解码后的流媒体数据送入显示队列。优选地,所述加载解码单元还用于通过调用动态解码库文件相应的解码DLL中的自我描述、创建及卸载函数与所述预定的解码器进行交互;或者,通过调用动态解码库文件相应的解码DLL中的自我描述、创建及卸载函数与所述相应的录像协议器进行交互。优选地,所述数据显示模块包括获取单元,用于按照预定的时间间隔从所述显示队列中取出YUV格式数据;转换单元,用于将所述YUV格式数据转换为RGB格式数据;显示单元,用于对所述RGB格式数据进行视频叠加处理后,显示于终端预定的窗□。本发明提出的一种支持视频插件接入的视频快速平滑显示的方法及装置,通过定义统一的视频接入规则,由各待接入厂家提供相应的动态解码库文件,当新增加一个解码器时,不需要重新编译程序与发行版本,只需增加相应的动态解码库文件,根据预定的解码器及动态解码库文件对接收并缓存在缓冲池中的流媒体数据进行解码,可以选择用户指定所需要的解码器,也可由系统根据解码器的性能进行自动选择;同时使用多级缓存技术,保证了视频的高速解码与平滑显示。


图1是本发明支持视频插件接入的视频快速平滑显示的方法一实施例流程示意图;图2是本发明支持视频插件接入的视频快速平滑显示的方法一实施例中根据预定的解码器及动态解码库文件对流媒体数据进行解码的流程示意图;图3是本发明支持视频插件接入的视频快速平滑显示的方法一实施例中将解码后的流媒体数据显示到终端的流程示意图;图4是本发明支持视频插件接入的视频快速平滑显示的装置一实施例结构示意图;图5是本发明支持视频插件接入的视频快速平滑显示的装置一实施例中数据解码模块的结构示意图6是本发明支持视频插件接入的视频快速平滑显示的装置一实施例中数据显示模块的结构示意图。为了使本发明的技术方案更加清楚、明了,下面将结合附图作进一步详述。
具体实施例方式本发明实施例解决方案主要是通过定义统一的视频接入规则,由各待接入厂家提供相应的动态解码库文件,当新增加一个解码器时,不需要重新编译程序与发行版本,只需增加相应的动态解码库文件,根据预定的解码器及动态解码库文件对接收并缓存在缓冲池中的流媒体数据进行解码,同时使用多级缓存技术,以保证视频的高速解码与平滑显示。由于各厂家根据对象开发的特征,定义有抽象类模块,通过动态链接库技术,可以把不同厂家提供的抽象类模块加以链接。同理,也可将上述技术应用到包含各个厂家自定义的协议格式的录像文件之中,实现对各种格式的录像文件接入的功能。另外,在视频应用中,由于视频源的分布位置及网络环境的差异,有可能会导致视频流接收不顺畅。为了处理视频平滑显示,需要在流媒体数据接收时进行缓存处理,同时针对视频流的高速解码显示,在视频流的解码及显示过程中同样需要使用缓存的机制。如图1所示,本发明一实施例提出一种支持视频插件接入的视频快速平滑显示的方法,包括步骤S101,接收流媒体数据,并存入缓冲池;其中,流媒体数据的接收包括通过录像数据流读入线程读入录像数据流和直接来自前端设备的实时数据流。无论哪种流媒体数据,最终均统一接入到帧数据的缓冲池中。后续对流媒体数据的解码操作,均从缓冲池中获取流媒体数据。通过缓冲池对接收的流媒体数据进行缓存,有利于流媒体数据的快速解码及平滑显不。步骤S102,根据预定的解码器及动态解码库文件对流媒体数据进行解码;当缓存到缓冲池中的流媒体数据达到一定位置即预定阀值时,通知解码线程进行解码,解码线程通过调用指定的解码器加载相应的动态解码库文件对流媒体数据进行解码,完成解码后通知缓冲池并释放缓冲池控制权,同时把解码完后的YUV数据推送到可显示队列中。根据动态加载的需求,各解码库以单独文件即动态解码库文件存在于系统当中。 在解码需要用到解码库时,才动态地进行加载。为了防止定位到不正确的动态解码库文件, 可以在各个解码DLL里约定统一的自我描述、创建及卸载函数,其中自我描述函数,用于设定该解码库的性能参数;创建函数,用于将解码库实例化;卸载函数,用于回收创建时申请的系统资源。通过创建函数得到解码库的实例后,即可根据定义的抽象解码器进行解码。对解码库来说,并不关心各个解码器的具体实现。解码库只通过已经定义好的抽象解码器的方法来进行解码操作。解码库中只有CoderMng对象通过调用每个解码DLL里的自我描述、创建及卸载函数与各个解码器进行交互。
同理,解码库本身也不关心录像文件的具体格式。解码库中的RecFile对象通过调用每个解码DLL里的自我描述、创建及卸载函数与各个录象协议器进行交互。其中,解码器加载动态解码库文件的步骤包括1、指定需要加载的解码器的路径;2、通过模块加载API,加载解码器的DLL ;3、调用约定好的创建函数,实例化解码器;4、通过定义好的抽象类方法来使用解码实例进行解码操作;5、调用约定好的卸载函数,回收该解码实例所申请的系统资源。对于录像数据流,录像文件的回放步骤包括1、指定需要加载的录像协议器的路径;2、通过模块加载API,加载录像协议器的DLL ;3、调用约定好的创建函数,实例化录像协议器;4、通过定义好的抽象类方法来使用录像协议实例进行录像文件读入操作。5、调用约定好的卸载函数,回收该录像协议实例所申请的系统资源。步骤S103,将解码后的流媒体数据显示到终端。通过显示计时器按实际的帧间隔时间循环从显示队列中取出YUV格式的视频数据,进行显示操作。在显示操作中,需要将显示队列中取出的YUV格式的视频数据转换为RGB格式的视频数据,通过解码库预先设置好的回调函数通知外部应用层,使应用层可以进行自定义的视频叠加处理,最终将叠加处理后的视频数据显示到指定的窗口之中。显示操作完成后,通知可显示队列并释放队列控制权,在休眠与下帧数据之间的间隔后,重复上述从显示队列中取出YUV格式的视频数据,进行显示操作的步骤。上述YUV格式的数据与RGB格式的数据属于现有技术,在此不作详述。在具体实施时,如图2所示,步骤S102包括步骤S1021,当所述缓冲池中的流媒体数据达到预定阀值时,调取预定的解码器;步骤S1022,通过预定的解码器加载相应的动态解码库文件,对缓冲池中的流媒体数据进行解码;步骤S1023,将解码后的流媒体数据送入显示队列。如图3所示,步骤S103包括步骤S1031,按照预定的时间间隔从所述显示队列中取出YUV格式数据;步骤S1032,将YUV格式数据转换为RGB格式数据;步骤S1033,对RGB格式数据进行视频叠加处理后,显示于终端预定的窗口。本实施例通过定义统一的视频接入规则,由各待接入厂家提供相应的动态解码库文件,当新增加一个解码器时,不需要重新编译程序与发行版本,只需增加相应的动态解码库文件,根据预定的解码器及动态解码库文件对接收并缓存在缓冲池中的流媒体数据进行解码,可以选择用户指定所需要的解码器,也可由系统根据解码器的性能进行自动选择;同时使用多级缓存技术,保证了视频的高速解码与平滑显示。为了实现视频的平滑显示,则必须要在接收视频源的地方做帧数据的缓存,同时在解码线程中及时解码并推到显示缓存之中。最后,通过高精度的计时器,按各帧数据之间
7的实际时间间隔,定时进行显示操作。可以通过C++的特性进行派生类的开发,从而实现解码器的多态性;再通过 WINDOWS系统中的动态加载机制,实现各个解码器的独立分离。通过两者的结合,最终,解码库的规模可以由最终使用者自行定义,甚至可以由系统自动进行各种解码器的按优选择。对于数据缓冲池的实现,解码库中每一路工作是由几个独立的线程共同完成。线程间如果有太多的通讯,必然会导致程序的复杂度增加,由此也增加了程序的维护难度。在本实施例中,线程间通讯只通过对数据缓冲池或显示队列的访问来进行。也就是各个线程间,只负责对目标队列进行读或写操作,从而降低了程序的复杂度及维护难度。对于数据显示的实现,可通过微软提供的DirectDraw很方便地把YUV数据显示到终端。考虑到直接使用YUV数据,会导致绘图表面中的GDI句柄无效,由此,便无法通过回调 GDI句柄给外部应用层,这样,应用层便无法增加自定义的视频叠加处理,因此,本实施例需要将YUV数据转换为RGB格式再进行显示,在显示之前,通过回调函数来返回GDI句柄供应用层使用。如图4所示,本发明一实施例提出一种支持视频插件接入的视频快速平滑显示的装置,包括流媒体数据接收模块401、数据解码模块402以及数据显示模块403 ;其中流媒体数据接收模块401,用于接收流媒体数据,并存入缓冲池;数据解码模块402,用于根据预定的解码器及动态解码库文件对流媒体数据进行解码;数据显示模块403,用于将解码后的流媒体数据显示到终端。本实施例中,流媒体数据接收模块401接收的流媒体数据包括通过录像数据流读入线程读入的录像数据流和直接来自前端设备的实时数据流。无论哪种流媒体数据,最终均统一接入到帧数据的缓冲池中。后续对流媒体数据的解码操作,均从缓冲池中获取流媒体数据。数据解码模块402只与帧数据缓存池进行交互。同理,解码后的YUV格式的视频数据将放入到显示队列中,数据显示模块403并不直接与解码线程进行通讯,只与显示队列进行交互。通过缓冲池对接收的流媒体数据进行缓存,有利于流媒体数据的快速解码及平滑显不。当缓存到缓冲池中的流媒体数据达到一定位置即预定阀值时,数据解码模块402 通过解码线程进行解码,解码线程通过调用指定的解码器加载相应的动态解码库文件对流媒体数据进行解码,完成解码后通知缓冲池并释放缓冲池控制权,同时把解码完后的YUV 数据推送到可显示队列中。根据动态加载的需求,各解码库以单独文件即动态解码库文件存在于系统当中。 在解码需要用到解码库时,才动态地进行加载。为了防止定位到不正确的动态解码库文件, 可以在各个解码DLL里约定统一的自我描述、创建及卸载函数,其中自我描述函数,用于设定该解码库的性能参数;创建函数,用于将解码库实例化;卸载函数,用于回收创建时申请的系统资源。通过创建函数得到解码库的实例后,即可根据定义的抽象解码器进行解码。对解码库来说,并不关心各个解码器的具体实现。解码库只通过已经定义好的抽象解码器的方法来进行解码操作。解码库中只有CoderMng对象通过调用每个解码DLL里的自我描述、创建及卸载函数与各个解码器进行交互。同理,解码库本身也不关心录像文件的具体格式。解码库中的RecFile对象通过调用每个解码DLL里的自我描述、创建及卸载函数与各个录象协议器进行交互。其中,解码器加载动态解码库文件的步骤包括1、指定需要加载的解码器的路径;2、通过模块加载API,加载解码器的DLL ;3、调用约定好的创建函数,实例化解码器;4、通过定义好的抽象类方法来使用解码实例进行解码操作;5、调用约定好的卸载函数,回收该解码实例所申请的系统资源。对于录像数据流,录像文件的回放步骤包括1、指定需要加载的录像协议器的路径;2、通过模块加载API,加载录像协议器的DLL ;3、调用约定好的创建函数,实例化录像协议器;4、通过定义好的抽象类方法来使用录像协议实例进行录像文件读入操作。5、调用约定好的卸载函数,回收该录像协议实例所申请的系统资源。数据显示模块403通过显示计时器按实际的帧间隔时间循环从显示队列中取出 YUV格式的视频数据,进行显示操作。在显示操作中,需要将显示队列中取出的YUV格式的视频数据转换为RGB格式的视频数据,通过解码库预先设置好的回调函数通知外部应用层,使应用层可以进行自定义的视频叠加处理,最终将叠加处理后的视频数据显示到指定的窗口之中。显示操作完成后,通知可显示队列并释放队列控制权,在休眠与下帧数据之间的间隔后,重复上述从显示队列中取出YUV格式的视频数据,进行显示操作的步骤。具体地,如图5所示,数据解码模块402包括调取单元4021、加载解码单元4022 以及发送单元4023,其中调取单元4021,用于当缓冲池中的流媒体数据达到预定阀值时,调取预定的解码器;加载解码单元4022,用于通过预定的解码器加载相应的动态解码库文件,对缓冲池中的流媒体数据进行解码;发送单元4023,用于将解码后的流媒体数据送入显示队列。具体地,加载解码单元4022还用于通过调用动态解码库文件相应的解码DLL中的自我描述、创建及卸载函数与所述预定的解码器进行交互;或者,通过调用动态解码库文件相应的解码DLL中的自我描述、创建及卸载函数与所述相应的录像协议器进行交互。如图6所示,数据显示模块403包括获取单元4031、转换单元4032以及显示单元4033,其中获取单元4031,用于按照预定的时间间隔从显示队列中取出YUV格式数据;转换单元4032,用于将YUV格式数据转换为RGB格式数据;显示单元4033,用于对RGB格式数据进行视频叠加处理后,显示于终端预定的窗□。
本发明实施例支持视频插件接入的视频快速平滑显示的方法及装置,通过定义统一的视频接入规则,由各待接入厂家提供相应的动态解码库文件,当新增加一个解码器时, 不需要重新编译程序与发行版本,只需增加相应的动态解码库文件,根据预定的解码器及动态解码库文件对接收并缓存在缓冲池中的流媒体数据进行解码,可以选择用户指定所需要的解码器,也可由系统根据解码器的性能进行自动选择;同时使用多级缓存技术,保证了视频的高速解码与平滑显示。以上所述仅为本发明的优选实施例,并非因此限制本发明的专利范围,凡是利用本发明说明书及附图内容所作的等效结构或流程变换,或直接或间接运用在其它相关的技术领域,均同理包括在本发明的专利保护范围内。
权利要求
1.一种支持视频插件接入的视频快速平滑显示的方法,其特征在于,包括 接收流媒体数据,并存入缓冲池;根据预定的解码器及动态解码库文件对所述流媒体数据进行解码; 将解码后的流媒体数据显示到终端。
2.根据权利要求1所述的方法,其特征在于,所述根据预定的解码器及动态解码库文件对所述流媒体数据进行解码的步骤包括当所述缓冲池中的流媒体数据达到预定阀值时,调取预定的解码器; 通过所述预定的解码器加载相应的动态解码库文件,对所述缓冲池中的流媒体数据进行解码;将所述解码后的流媒体数据送入显示队列。
3.根据权利要求2所述的方法,其特征在于,所述加载相应的动态解码库文件的步骤包括通过调用动态解码库文件相应的解码DLL中的自我描述、创建及卸载函数与所述预定的解码器进行交互。
4.根据权利要求3所述的方法,其特征在于,所述流媒体数据包括录像数据流或来自前端设备的实时数据流。
5.根据权利要求4所述的方法,其特征在于,所述加载相应的动态解码库文件的步骤进一步包括通过调用动态解码库文件相应的解码DLL中的自我描述、创建及卸载函数与所述相应的录像协议器进行交互。
6.根据权利要求2-5中任一项所述的方法,其特征在于,所述将解码后的流媒体数据显示到终端的步骤包括按照预定的时间间隔从所述显示队列中取出YUV格式数据;将所述YUV格式数据转换为RGB格式数据;对所述RGB格式数据进行视频叠加处理后,显示于终端预定的窗口。
7.一种支持视频插件接入的视频快速平滑显示的装置,其特征在于,包括 流媒体数据接收模块,用于接收流媒体数据,并存入缓冲池;数据解码模块,用于根据预定的解码器及动态解码库文件对所述流媒体数据进行解码;数据显示模块,用于将解码后的流媒体数据显示到终端。
8.根据权利要求7所述的装置,其特征在于,所述数据解码模块包括调取单元,用于当所述缓冲池中的流媒体数据达到预定阀值时,调取预定的解码器; 加载解码单元,用于通过所述预定的解码器加载相应的动态解码库文件,对所述缓冲池中的流媒体数据进行解码;发送单元,用于将所述解码后的流媒体数据送入显示队列。
9.根据权利要求8所述的装置,其特征在于,所述加载解码单元还用于通过调用动态解码库文件相应的解码DLL中的自我描述、创建及卸载函数与所述预定的解码器进行交互;或者,通过调用动态解码库文件相应的解码DLL中的自我描述、创建及卸载函数与所述相应的录像协议器进行交互。
10.根据权利要求8或9所述的装置,其特征在于,所述数据显示模块包括 获取单元,用于按照预定的时间间隔从所述显示队列中取出YUV格式数据; 转换单元,用于将所述YUV格式数据转换为RGB格式数据; 显示单元,用于对所述RGB格式数据进行视频叠加处理后,显示于终端预定的窗口。
全文摘要
本发明涉及一种支持视频插件接入的视频快速平滑显示的方法及装置,其方法包括接收流媒体数据,并存入缓冲池;根据预定的解码器及动态解码库文件对流媒体数据进行解码;将解码后的流媒体数据显示到终端。本发明通过定义统一的视频接入规则,由各待接入厂家提供相应的动态解码库文件,当新增加一个解码器时,不需要重新编译程序与发行版本,只需增加相应的动态解码库文件,根据预定的解码器及动态解码库文件对接收并缓存在缓冲池中的流媒体数据进行解码,可以选择用户指定所需要的解码器,也可由系统根据解码器的性能进行自动选择;同时使用多级缓存技术,保证了视频的高速解码与平滑显示。
文档编号G06F9/445GK102447965SQ20111024661
公开日2012年5月9日 申请日期2011年8月25日 优先权日2011年8月25日
发明者梁伟忠 申请人:深圳市佳信捷电子有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1