视频图像的重定向方法、计算机可读存储介质
技术领域
本发明涉及云计算领域,具体涉及一种视频图像的重定向方法、计算机可读存储介质。
背景技术
目前云桌面产品中对USB外设,通常捕获原应由总线传输的数据,改由网络传输到远程虚拟机所在宿主机,写入虚拟总线对应的HUB(多端口的转发器),从而实现设备重定向。原理即是网线替代USB总线,使虚拟机应用认为设备直接接在虚拟机上。
但是上述方法中数据未经过应用层处理、压缩,占用大量带宽,对并发数的提高有很大限制。
发明内容
针对现有技术的不足,本发明提供了一种视频图像的重定向方法、计算机可读存储介质,解决了视频图像占用带宽的问题。
为实现以上目的,本发明通过以下技术方案予以实现:
根据本发明的第一方面,提供一种视频图像的重定向方法,包括:
终端模块将获取的图像数据压缩编码形成流媒体,并基于所述流媒体生成RTSP服务;
虚拟机驱动层模块拉取所述RTSP服务中的流媒体并将所述流媒体输出;
虚拟机应用层模块接收所述虚拟机驱动层模块输出的所述流媒体。
进一步地,还包括:
终端模块将获取的图像数据压缩编码形成流媒体后推送到流媒体转发模块;
所述流媒体转发模块接收所述终端模块推送的流媒体,供所述虚拟机驱动层模块拉取所述流媒体;
其中,所述虚拟机驱动层模块根据所述终端模块发出的流媒体转发地址拉取所述流媒体。
进一步地,所述虚拟机模块根据所述终端模块发出的流媒体转发地址拉取所述流媒体,包括:
所述终端模块将流媒体转发地址传输至所述宿主机模块;
所述宿主机模块通过虚拟字符设备将所述流媒体转发地址写入所述虚拟机模块的配置文件;
所述虚拟机模块根据所述配置文件拉取流媒体。
进一步地,所述终端模块将获取的图像数据压缩编码形成流媒体后推送到流媒体转发模块,包括:
所述推送模块将压缩编码后的所述图像数据拆成RTP封包,通过RTSP协议推送至流媒体转发模块。
进一步地,所述终端模块将获取的图像数据压缩编码形成流媒体,包括:
所述终端模块根据当前网络条件调节所述图像数据的压缩码率及分辨率。
根据本发明的第二方面,提供一种基于虚拟机的视频图像重定向方法,包括:
获取流媒体服务的远程访问的URL地址,所述流媒体服务由终端制成;
根据所述URL拉取流媒体码流,将所述流媒体码流作为视频源填充到虚拟机应用层。
进一步地,还包括:
接收宿主机发送的关联推送流媒体的转发URL地址,记录在预设的配置文件上;
读取所述转发URL地址,并拉取流媒体码流作为视频源填充到虚拟机应用层;
其中,所述转发URL地址由终端生成,并关联终端推送至流媒体转发服务器的流媒体。
进一步地,所述接收宿主机发送的关联推送流媒体的转发URL地址,包括:
通过虚拟字符设备将转发URL地址写入配置文件;
读取所述转发URL地址用以拉取流媒体。
进一步地,所述读取所述转发URL地址,并拉取流媒体码流作为视频源填充到虚拟机应用层,包括:
读取所述转发URL地址,通过虚拟摄像头拉取流媒体并解码,将流媒体码流并作为视频源填充到虚拟机应用层。
根据本发明的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述基于虚拟机的视频图像重定向方法。
本发明实施例提供了一种视频图像的重定向方法、计算机可读存储介质。具备以下有益效果:
本发明通过将视频图像数据压缩编码后形成流媒体,以流媒体的形式重定向至虚拟机应用层,可降低图像类外设数据重定向所使用的带宽。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本发明中一实施例中示出的视频图像的重定向方法的流程图。
图2是本发明中另一实施例中示出的视频图像的重定向方法的流程图。
图3是本发明中一实施例中示出的基于虚拟机的视频图像的重定向方法的流程图。
图4是本发明中又一实施例中示出的虚拟机的视频图像的重定向方法的流程图。
图5是本发明中一实施例中示出的虚拟机与终端机宿主机的方框图。
具体实施方式
为使本发明实施例的目的、技术方案和优点更加清楚,下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
现有技术中关于USB重定向有两种方式:
云桌面spice协议USB重定向:相当于将终端上USB工作流程里的USB设备驱动到USB总线驱动之间的这段进行拉长,加入代理隐瞒设备实际上在远程终端的事实。该方法设备兼容性好,但对于图像类外设(如摄像设备)占用带宽过高。
云桌面HDX协议USB重定向:为每一类USB外设设备提供从终端到虚拟机的映射,并在应用层提供专门的通道,将不同的流量隔离开来。通过在虚拟机上创建一个虚拟的USB驱动,来和终端的USB驱动交互数据。该方法传输速率高,延时低,但对于图像类外设也占用较大带宽。
因此,为解决现有技术中的不足,可将监控直播的技术和云桌面技术结合,将原先处于驱动层(驱动层中不可被压缩)USB协议数据提取到应用层进行压缩(图像数据流量大),经网络传输到虚拟机后,利用Windows系统图像类应用软件都是基于DirectShow开发的特性,重载DirectShow的相关类,实现欺骗上层应用的目的,使图像数据回到虚拟机驱动层,完成重定向。
基于上述提供一种视频图像的重定向方法,以降低USB图像类外设占用宽带过高的问题。下面通过以下实施例对本发明作进一步地说明。
图1是本发明中一实施例中示出的视频图像的重定向方法的流程图。如图1所示,本发明提供的视频图像的重定向方法,包括:
在步骤101中,终端模块将获取的图像数据压缩编码形成流媒体,并基于所述流媒体生成RTSP服务。
在该步骤中,作为外设USB设备的视频设备(摄像头)采集视频图像,终端模块通过驱动获取视频图像数据,由于图像类外设传输的流媒体并不需要无损,终端模块可使用H.264实现编码标准压缩,再通过UDP(User Datagram Protocol用户数据报协议,是OpenSystem Interconnection OSI开放式系统互联参考模型中一种无连接的传输层协议,提供面向事务的简单不可靠信息传送服务传输)完成传输。终端模块将图像数据压缩编码的方式包括采用openh264或x264对获取的图像数据进行编码。作为参考的:由于一般摄像头采集的数据格式是yuv422,故使用x264时可以按YUYV格式直接进行编码,使用openh264时需要先转成YUV420再进行编码。压缩过程中,终端模块根据当前网络条件调节所述图像数据的压缩码率及分辨率;带宽高则提高压缩码率及压缩分辨率,反之降低压缩码率及压缩分辨率。
基于终端模块的操作系统,可使用现有的图像采集开发框架,将图像数据从外设采集到终端。例如:在Linux系统中,V4L2(video for linux2)框架是针对uvc(USB videoclass USB视频捕获设备定义的协议标准)免驱USB设备的编程框架,主要用于采集USB摄像头等的数据;可基于上述获取USB摄像头采集的图像数据,其步骤可以包括:(1)打开设备文件,(2)校验能力集,(3)设置视频参数,(4)向驱动申请帧缓冲,(5)申请物理内存,(6)开始采集。在Windows系统中,DirectShow是微软在ActiveMovie和Video forWindows的基础上推出的新一代基于COM(Component ObjectModel)的流媒体处理的开发包,可基于该开发包获取USB摄像头采集的图像数据,其步骤可以包括:(1)环境初始化,(2)配置视频源,(3)创建视频底图模块,(4)连接视频设备,(5)增加图像捕获模块到底图模块中,(6)开始采集。
在终端模块基于流媒体生成RTSP(Real Time Streaming Protocol实时流传输协议)服务后,获取所述流媒体时可以一边播放一边下载,类似于视频点播,而无需将视频数据通过网络直接重定向至宿主机。
在步骤102中,虚拟机驱动层模块拉取所述RTSP服务中的流媒体并将所述流媒体输出。
在该步骤中,可使用VCam(虚拟摄像头)开源项目框架开发一个COM组件注册到虚拟机模块系统中,欺骗虚拟机的上层应用程序认为有摄像头的存在,使其认为流媒体是从外设直接获取的,其中以RTSP码流作为视频源。其步骤可以包括:(1)宿主机通过spiceport channel(网络传输)和vdmonitor(虚拟字符设备传输)将终端模块推送的流媒体形成的RTSP服务的URL地址传输到虚拟机的驱动层模块,记录在其配置文件上,以虚拟机uuid(Universally Unique Identifier唯一识别码)作为串流名称(stream name)。(2)虚拟机驱动层模块读取所述URL地址,根据所述URL地址拉取码流作为视频源,逐帧使用ffmpeg(一套可以用来记录、转换数字音频、视频,并能将其转化为流的开源计算机程序)解码后填充到Directshow IAMStreamConfig接口的Source filter(源过滤器)指定的内存(Buffer)中。采用该方法步骤可支持所有使用VFW和DirectShow的视频应用程序,如QQ、MSN、Skype,包括Windows系统自带的摄像头查看程序。
虚拟驱动层模块在拉取流媒体时可将视频流解码转成RGB格式,再通过虚拟摄像头组件解码后将每一帧数据填充到虚拟机Windows系统缓冲,通过重载Windows系统程序中的类,如CSourceStream(DirectShow)、IAMStreamConfig IKsPropertySet(Windows SDK),欺骗上层应用程序将此码流当作Windows系统直接采集的图像数据。虚拟模块解码转成RGB格式,再通过虚拟摄像头组件注入到应用软件的源过滤器中,应用软件获取视频数据时认为是从真实摄像头获取的,使虚拟机用上插在终端的图像外设,用以实现重定向。
在步骤103中,虚拟机应用层模块接收所述虚拟机驱动层模块输出的所述流媒体。虚拟机应用层模块接收所述流媒体,完成视频图像的重定向。
由上述实施例可知,本发明将摄像头采集数据经过终端业务层分析后压缩编码形成流媒体,则其占用带宽较低,方便图像类外设采集图像数据的重定向。
本发明还提供另一种视频图像的重定向方法,该方法可以适用于终端模块与虚拟机模块网络不通的图像数据转发。如图2所示,该方法包括以下步骤:
在步骤201中,终端模块将获取的图像数据压缩编码形成流媒体后推送到流媒体转发模块。
在该步骤中,所述终端模块包括推送模块,该推送模块可将压缩编码后的所述图像数据拆成RTP封包,通过RTSP协议推送至流媒体转发模块。压缩过程中,终端模块根据当前网络条件调节所述图像数据的压缩码率及分辨率;带宽高则提高压缩码率及压缩分辨率,反之降低压缩码率及压缩分辨率。举例而言,使用x264按YUYV格式进行编码,然后将编码后的数据拆成RTP包,采用参考live555DarwinInjector接入Darwin服务器的方法,采用RTP over RTSP协议推送流媒体。推送库的技术基于开源的DarwinInjector实现,当然,基于ffmpeg也可以用来实现推送。
在步骤202中,所述流媒体转发模块接收所述终端模块推送的流媒体,供所述虚拟机拉取所述流媒体。
在该步骤中,所述终端模块将流媒体转发地址URL传输至所述宿主机模块,所述宿主机模块通过虚拟字符设备将所述流媒体转发地址URL写入所述虚拟机驱动层模块的配置文件,所述虚拟机驱动层模块根据所述配置文件读取URL拉取流媒体。具体可在计算结点上部署流媒体转发服务器EasyDarwin(一种流媒体服务器),可以将推送来的摄像头流媒体形成一个RTSP服务,供虚拟机拉取码流。
在步骤203中,虚拟机驱动层模块根据所述终端模块发出的流媒体转发地址拉取所述流媒体,将所述流媒体填充到虚拟机应用层模块中。
同上述实施例的步骤102,包括步骤:(1)宿主机模块通过spice port channel(网络传输)和vdmonitor(虚拟字符设备传输)将终端推送流媒体形成的RTSP服务的URL传输到虚拟机应用层内,记录在配置文件上,以虚拟机uuid作为streamname。(2)读取URL,拉取码流作为视频源,逐帧使用ffmpeg解码后填充到Directshow IAMStreamConfig接口的Sourcefilter指定的Buffer中。
上述两个实施例,可分别用于终端模块与虚拟机模块在有网络连接(图1所示实施例)与无网络连接(图2所示实施例)的状态下使用,可以方便用户传输视频数据,同时也有利于降低数据传输占用的带宽。
本发明还提供一种基于虚拟机的视频图像重定向方法,其可基于程序实现。如图3所示,该方法包括:
在步骤301中,获取流媒体服务的远程访问的URL地址,所述流媒体服务由终端制成。
在步骤302中,根据所述URL拉取流媒体码流,将所述流媒体码流作为视频源填充到虚拟机应用层。
例如,视频设备采集视频图像,终端通过驱动获取视频图像数据,基于该视频图像数据编码为流媒体。终端经视频图像数据编码后形成RTSP服务,虚拟机可直接从终端拉取流媒体,虚拟机通过虚拟摄像头接收数据并解码转成RGB格式,再通过虚拟摄像头组件注入到应用软件的源过滤器中,欺骗上层应用认为有流媒体时从摄像头获取的。具体可参考图1所示实施例中各数据交互及实现方法。
图3所示的实施例中,适用于终端与虚拟机有网络连接时使用,若终端与虚拟机无网络连接时则可采取图4所示的实施例实现视频数据重定向。
图4是本发明中另一实施例中示出的基于虚拟机的视频图像的重定向方法的流程图。该方法包括:
在步骤401中,接收宿主机发送的关联推送流媒体的转发URL地址,记录在预设的配置文件上。其中,所述转发URL地址由终端生成,并关联终端推送至流媒体转发服务器的流媒体。
视频设备采集视频图像,终端通过驱动获取视频图像数据,基于该视频图像数据编码为流媒体,然后将流媒体推送至流媒体转发服务器。终端在推送流媒体后会产生关联所述流媒体的流媒体转发地址URL,该流媒体转发地址URL被发送至宿主机。所述宿主机通过虚拟字符设备将所述流媒体转发地址URL写入所述虚拟机驱动层的配置文件,所述虚拟机根据所述配置文件读取所述转发URL地址用以拉取流媒体。具体可在计算结点上部署流媒体转发服务器EasyDarwin(一种流媒体服务器),可以将推送来的摄像头流媒体形成一个RTSP服务,供虚拟机拉取码流。
在步骤402中,读取所述转发URL地址,并拉取流媒体码流作为视频源填充到虚拟机应用层。
宿主机模块通过spice port channel(网络传输)和vdmonitor(虚拟字符设备传输)将终端推送流媒体形成的RTSP服务的URL传输到虚拟机内,记录在配置文件上,以虚拟机uuid作为stream name。虚拟机读取所述转发URL地址,通过虚拟摄像头拉取流媒体并解码,将流媒体码流并作为视频源填充到虚拟机应用层。具体可参考图2所示实施例中各数据交互及实现方法。
基于上述基于虚拟机的视频图像的重定向方法实施例,可参考图5所示的虚拟机与终端机宿主机连接的方框图进行理解。如图5所示,图像外设通过USB连接线与终端连接,图像外设采集数据图像,终端获数据图像并进行编码。终端通过网络向流媒体转发服务器推送流媒体,终端还通过网络与宿主机交互,将流媒体转发地址URL发送给宿主机,宿主机通过虚拟字符设备将流媒体转发地址URL写入虚拟机内配置文件,虚拟机根据流媒体转发地址URL从流媒体转发服务器拉取流媒体,解码转成RGB格式,再通过虚拟摄像头组件注入到应用软件的源过滤器中。
使用本公开提供的方法将视频图像压缩,使用流媒体传输实现重定向,可降低使用带宽,提高了用户体验。以640x480分辨率的摄像头为例,现有技术中USB重定向方案中需要占用终端对服务器上行带宽10MB/S以上,采用本方法中占用不到200KB/S。此外,采用流媒体方式,可以跨平台移植而不依赖于系统内核的支持。
本发明将摄像头采集数据经过终端业务层分析后压缩编码,再由终端推送给流媒体转发服务器,而虚拟机拉取流媒体服务器上的视频流后解码转成RGB格式,再通过虚拟摄像头组件注入到应用软件的源过滤器中,应用软件获取视频数据时认为是从真实摄像头获取的,使虚拟机用上插在终端的图像外设,如此即实现了重定向。
需要说明的是,上述各实施例之间在不冲突的情况下可相互作为补充说明。
本发明还提供一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一项实施例所述的基于虚拟机的视频图像重定向方法的步骤。
本领域内的技术人员应当明白,本发明的实施例可提供方法、系统、或计算机程序产品。因此,本发明可采用完全硬件实施例、完全软件实施例、或结合软件与硬件方面的实施例的形式。而且,本发明可采用在一个或多个其中包含有计算机可用程序代码的计算机可用非瞬时性存储介质(包括但不限于磁盘存储器、CD-ROM、光学存储器等)上实施的计算机程序产品的形式。
本发明时参照根据本发明实施例的方法、设备(系统)和计算机程序产品的流程图和/或方框图来描述的。应理解为可由计算机程序指令实现流程图和/或方框图中的每一个流程和/或方框、以及流程图和/或方框图中的流程和/或方框的结合。可提供这些计算机程序指令到通用计算机、专用计算机、嵌入式处理机或其他可编程数据处理设备的处理器以产生一个机器,使得通过计算机或其他可编程数据处理设备的处理器执行的指令产生用于实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能的装置。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可存储在能引导计算机或其他可编程数据处理设备以特定方式工作的计算机可读存储器中,使得存储在该计算机可读存储器中的指令产生包括指令装置的制造品,该指令装置实现在流程图一个流程或多个流程和/或多个流程和/或方框图一个方框或多个方框中指定的功能。
这些计算机程序指令也可转载到计算机或其他可编程数据处理设备上,使得在计算机或其他可编程设备上执行一系列操作步骤以产生计算机实现的处理,从而在计算机或其他可编程设备上执行的指令提供用于实现在流程图一个或多个流程和/或方框图一个方框或多个方框中指定的功能的步骤。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
以上实施例仅用以说明本发明的技术方案,而非对其限制;尽管参照前述实施例对本发明进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本发明各实施例技术方案的精神和范围。