首页> 中国专利> 一种HTML5标准下基于Webkit内核的视频地址提取方法

一种HTML5标准下基于Webkit内核的视频地址提取方法

摘要

本发明公开了一种HTML5标准下基于Webkit内核的视频地址提取方法,属于网络通信和多媒体信息处理技术领域。该方法主要通过Webkit内核浏览器解析视频网站,从浏览器对网页分析的流程中提取网络视频的真实地址,通过InjectedBundle接口,控制网页解析的流程,屏蔽与网络视频无关的网络请求,从简化的流程中得到视频地址。相应程序包括三个部分:一、与Webkit解析网页流程进行通信并对其控制的功能库;二、面向顶层应用的接口,负责与应用程序进行通信;三、相应的数据结构,用来维护和控制视频地址提取功能库的网址数据和运行过程。由于浏览器解析视频网站的过程是通用的,用户可以通过该功能对各大视频网站的视频网址进行解析,获取视频的真实地址。

著录项

  • 公开/公告号CN103458065A

    专利类型发明专利

  • 公开/公告日2013-12-18

    原文格式PDF

  • 申请/专利权人 深圳市佳创视讯技术股份有限公司;

    申请/专利号CN201310411248.2

  • 发明设计人 胡勇;刘睿;陈鹏;袁鑫;韦唯;

    申请日2013-09-10

  • 分类号H04L29/12(20060101);

  • 代理机构44223 深圳新创友知识产权代理有限公司;

  • 代理人江耀纯

  • 地址 518000 广东省深圳市福田区滨河路以南、沙嘴路以东中央西谷大厦15层01-0816层04-06

  • 入库时间 2024-02-19 22:23:04

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2016-09-28

    授权

    授权

  • 2014-01-15

    实质审查的生效 IPC(主分类):H04L29/12 申请日:20130910

    实质审查的生效

  • 2013-12-18

    公开

    公开

说明书

技术领域

本发明属于网络通信和多媒体信息处理领域,具体涉及Webkit(一个开源 的浏览器引擎)浏览器内核(苹果ios的内置浏览器Safari、Android的内置浏览 器Google Chrome等均采用Webkit浏览器内核)及其InjectedBundle接口(Webkit 提供的类似于插件的、单独编译成的一个动态库,运行在内核进程,用于提供 对内核数据的操作)的视频真实地址提取方法。

背景技术

目前不论网络中视频的数量还是视频网站的数量都飞速增加,每天有不计 其数的视频上传到各大视频网站,并不断有新的视频网站出现。同时人们对视 频的需求也在与日俱增,除了对内容的需求,对视频播放方式的需求也在不断 的变化,目前大部分移动设备都已支持视频的播放。

除了在网络上在线观看视频,许多人还需要把视频从网络上下载下来以备 多次反复观看、欣赏或者收藏。而目前的视频网站种类繁多,有些网站提供视 频下载服务,但是有些网站不提供视频下载服务,给用户带来了不便。在观看 视频网页中的视频时,除了在视频原始地址中可以进行观看,该网页中的视频 还对应这一个服务器存放的地址,由视频原始地址进行调用和播放,该视频地 址在本发明中称为视频的真实地址,利用视频的真实地址可单独调用视频进行 播放,方便用户对视频进行收藏与分享。针对视频网站的这个特点,网络上还 有一些专门用于转换视频原始地址和视频真实地址的网站。但是因为视频网站 的数量很多,每个网站都有自己的视频原始地址和视频真实地址之间的计算方 法,这些网站难以覆盖所有的视频网站。并且由于视频网站为了避免被网络爬 虫等工具获取视频资源,会不断更新视频原始地址和视频真实地址之间的转换 算法,转换地址的网站有时会跟不上视频网站的更新速度,导致用户无法及时 得到视频真实地址,影响了用户对视频正常的分享及收藏等行为。同时,由于 新一代HTML标准HTML5的诞生,视频网站对视频的支持将向HTML5标准 发展。在HTML5标准中,与传统的网页视频播放不同,网络视频多以流媒体的 方式加载,解析视频地址的方式也需要适应新的标准。

所以,目前还缺乏一种通用的方法来提供视频原始地址和视频真实播放地 址之间转换的通用方法。

发明内容

本发明设计了一种HTML5标准下基于Webkit内核的视频地址提取方法, 利用浏览器解析网络视频的通用流程提供了一种输入网络视频地址,输出视频 真实地址的方法,满足人们对下载欣赏各类网络视频的需要,解决了目前缺乏 通用的提取视频真实地址方法这一缺陷。该功能库不受限于不同网站的不同算 法以及网站对地址算法的改变,并且由于采用了开源浏览器内核,具有良好的 拓展性和可移植性。

为了实现上述目的,本发明的功能库实施例提供了基于Webkit内核的视频 真实地址提取方法,包括以下步骤:步骤一:从顶层应用程序传入视频原始地 址;骤二:通过InjectedBundle接口控制Webkit浏览器内核载入视频原始地址; 筛选需要的地址并得到视频真实地址;筛选时根据用户传入的视频网站属性, 判断用户传入的视频属于哪个视频网站,根据不同的视频网站启用不同的视频 地址判断机制;该判断机制是基于视频真实地址的一般结构进行判断,将符合 该结构的地址定义为视频真实地址;步骤四:利用消息机制把视频真实地址发 送到应用程序。

优选地,视频真实地址会存入相应的数据结构,用户输入的网址和数据结 构一一对应;所述网址数据结构包括但不限于以下内容:(2.1)用户传入的网址 字符数据;(2.2)用户传入的网址所属的视频网站;(2.3)与用户传入网址相对 应的视频真实地址网址字符数据。

其工作过程通过如下接口函数控制:createView和goToURL;其中 createView接口用于初始化InjectedBundle并创建Webkit的view对象;goToURL 接口用于加载用户传入的视频原始地址。

所述步骤一中通过InjectedBundle接口控制Webkit浏览器内核载入视频原 始地址包括如下步骤:将视频地址所属的视频网站记录在host属性中,并通过 InjectedBundle的消息机制传入到Webkit中,并调用Webkit内核开始加载用户 传入的视频原始地址。

所述步骤三中筛选需要的地址并得到视频真实地址包括如下步骤:在 Webkit加载网页时,每次Webkit准备发送请求前实现回调函数,监视每个请求 的地址,并通过地址和对应文件的类型来判断是否属于请求视频真实地址所必 要的请求,并且屏蔽不必要的请求。

所述步骤四中利用消息机制把视频真实地址发送到应用程序包括如下步 骤:每次发送请求时请求的网络地址都要经过筛选,并把符合规则的视频地址 提取出来保存在一个数组当中,在网页加载完毕时实现回调,将数组中最符合 视频真实地址的地址作为消息的内容通过InjectedBundle的消息机制传递到与顶 层应用程序交互的功能库中,再由此功能库传递给顶层的应用程序。

当用户传入一个视频地址时,相应的数据结构进入等待解析的状态,并检 查目前功能库是否正在解析其他的视频网址,若有正在解析的视频网址,则将 上一个正在解析的网址的数据结构转入中止解析的状态,并载入下一个数据结 构对应的视频地址,同时将该数据结构的状态改为正在解析的状态;当成功提 取了视频真实地址时,视频真实地址会存入相应的数据结构并将该数据结构的 状态改为解析成功,若因为网络或其他原因无法提取相应地址,则将该数据结 构的状态改为解析失败,同时等待新一个请求的到来。

与顶层应用程序交互的通用接口createView接口的流程为:首先创建 InjectedBundle的context对象,利用该context对象和从createView形参中传入 的窗口句柄创建一个与Webkit绑定的view对象,同时注册与InjectedBundle进 行通信的消息机制。

与顶层应用程序交互的通用接口goToURL接口的流程为:为用户传入的视 频原始地址创建一个WKURLRef对象,WKURLRef为Webkit中定义的类型; 再根据调用createView时创建的view对象获取Webkit中的page对象,并将page 对象和用户传入的地址一起传入Webkit中,开始加载相应的网址。

判断是否属于请求视频真实地址所必要的请求并且屏蔽不必要的请求的流 程为:根据某一个视频网站加载视频的流程,通过文字解析发送网络请求地址 的方式,寻找网络地址中是否有与视频加载流程相关的关键字,从而判断发送 的网络请求地址是否与请求视频真实地址有关,若发起的网络请求为请求视频 真实地址的关键请求,则保留该请求的内容;若为与请求视频真实地址无关的 请求,则将该次请求置为空,从而屏蔽该请求。

本发明用到了开源浏览器内核Webkit及其InjectedBundle接口。Webkit是 一个开源的浏览器引擎,苹果的Safari、谷歌的Chrome浏览器都是基于这个框 架来开发的。Webkit浏览器的优势是高效稳定,兼容性好,并且Webkit的源码 结构清晰,易于维护。目前大部分的网站,包括各类视频网站,都已经兼容Webkit 内核浏览器,可以在以Webkit为框架的浏览器中顺利播放视频。同时,除了PC 端,Webkit内核还被广泛利用于各类移动平台的浏览器中,使得利用Webkit为 框架开发的功能库具有很强的移植性,可适用于各个平台。InjectedBundle是由 Webkit提供的用于操作内核数据的接口,类似于一个插件,单独编译成一个动 态库。在Webkit的代码中,InjectedBundle在执行加载网页时的关键步骤代码部 分插入了回调函数,关键步骤例如创建page,发送请求和加载网页完成等等, 相应的回调函数可由用户自己编写InjectedBundle来实现。

本发明的优势在于:

1.根据浏览器解析视频网页的通用过程提取视频真实地址,无需具体研究不 同视频网站对视频地址的具体算法,只需要用到视频原始地址和视频真实地址 各自的基本地址结构;因为网站的视频原始地址到视频真实地址的转换算法会 时常发生改变,但视频原始地址和视频真实地址各自的基本地址结构不会发生 变化;因此,即使网站更新了视频原始地址和视频真实地址之间的转换算法, 用户也可以及时得到视频真实地址。

2.即使视频网站改变了计算视频真实地址的算法,解析流程仍然符合浏览器 解析网络视频的通用流程,所以该方法具有通用性;

3.本方法通过将与视频无关的资源请求进行了屏蔽,简化了Webkit内核在 加载视频时的步骤和所需要的时间,在一定程度上加速了视频的载入。

附图说明

图1是本发明一种HTML5标准下基于Webkit内核的视频地址提取功能库 的结构示意图;

图2是本发明与应用程序之间的交互过程示意图;

图3是本发明一种HTML5标准下基于Webkit内核的视频地址提取功能库 的工作流程示意图。

具体实施方式

本发明实施例是以库文件形式为程序提供功能,例如Windows系统中的动 态链接库dll文件和Android系统下的动态链接库so文件。该功能库不受限于不 同网站的不同算法以及网站对地址算法的改变,并且由于采用了开源浏览器内 核,具有良好的拓展性和可移植性。

动态链接库与普通程序之间的区别在于动态链接库向应用程序暴露了一定 的接口,应用程序通过调用动态链接库提供的接口可实现动态链接库提供的功 能。

更具体地,本发明提供的下述实施例是在Windows平台下实现的基于 Webkit内核的视频地址提取功能库,并且将功能库封装为dll形式的动态链接库。 在调用时,利用Windows的动态调用方式调用功能库中的接口,输入视频原始 地址,等待功能库解析网页,解析完成后将视频真实地址以消息的方式回传给 应用程序。

该方法包括如下步骤:

初始化过程:

1.顶层应用程序初始化窗口和消息循环;

2.顶层应用程序动态调用本发明实施例的功能库;

3.顶层应用程序调用功能库中的createView接口,并将窗口的句柄作为参数 传入;

4.createView接口利用InjectedBundle创建context对象;

5.根据传入的窗口句柄和创建的context对象创建Webkit的view对象;

6.注册InjectedBundle的收发消息机制。

提取视频真实地址过程:

1.调用功能库中的goToURL接口,将用户需要下载的视频的原始地址和视 频地址所属的视频网站作为参数传入;

2.检测目前功能库的运行状态,若正在解析其他网页,则停止加载过程,加 载;

3.利用用户传入的视频原始地址创建Webkit的WKURLRef对象;

4.根据view对象得到Webkit的page对象;

5.Page对象创建完之后注册Webkit发送请求时的回调函数 willSendRequestForFrame和frame加载完成时的回调函数 didFinishLoadForFrame;

6.根据用户传入的视频网站属性,判断用户传入的视频属于哪个视频网站, 根据不同的视频网站启用不同的视频地址判断机制;该判断机制是基于视频真 实地址的一般结构进行判断,方法中将符合该结构的地址定义为视频真实地址, 网站的视频原始地址到视频真实地址的转换算法会时常发生改变,但视频原始 地址和视频真实地址各自的基本地址结构不会发生变化;

7.调用Webkit的加载网页接口WKPageLoadURL,将WKURLRef对象和 page对象作为参数传入,Webkit开始加载网页;

8.加载网页过程中Webkit每发送一次网络请求都触发一次发送请求的回调 函数willSendRequestForFrame,将要发送的网络请求被传入回调函数中,函数 对网络请求的目标地址进行文字解析,判断是否为请求视频的关键请求。若该 网络请求是请求视频真实地址必要的,则保留原请求;若是其他与视频无关资 源的请求,则返回空请求。如果加载网页中出现异常状况,例如网页无法打开, 功能库会停止加载,将地址数据结构的状态设置为解析失败,同时向应用程序 抛出异常信息。

9.通过文字解析,将符合解析要求的网络请求地址作为视频真实地址的可能 址保存在数组中;

10.当网页有frame加载完成时,会触发didFinishLoadForFrame回调函数, 在函数中判断是否是主frame加载完成。若是不是主frame,则不作任何处理, 继续加载网页;若是主frame,则判断为网页完成加载,将数组中保存的所有符 合规则的地址逐个比较,找出最合适的地址作为视频的真实地址;(所谓合适, 其判断机制是基于视频真实地址的一般结构进行判断,方法中将符合该结构的 地址定义为最合适的地址,即视频真实地址);

11.将赋入了视频真实地址的地址数据结构作为消息主体,将消息通过 InjectedBundle消息机制发送到负责与顶层应用程序通信的功能库中;还将视频 真实地址会存入相应的数据结构,用户输入的网址和数据结构一一对应;

所述网址数据结构包括但不限于以下内容:

(2.1)用户传入的网址字符数据;

(2.2)用户传入的网址所属的视频网站;

(2.3)与用户传入网址相对于的视频真实地址网址字符数据。

所述等待解析、正在解析、中止解析、解析成功、解析失败的状态按如下 方式确定:当用户传入一个视频地址时,相应的数据结构进入等待解析的状态, 并检查目前功能库是否正在解析其他的视频网址,若有正在解析的视频网址, 则将上一个正在解析的网址的数据结构转入中止解析的状态,并载入下一个数 据结构对应的视频地址,同时将该数据结构的状态改为正在解析的状态;当成 功提取了视频真实地址时,视频真实地址会存入相应的数据结构并将该数据结 构的状态改为解析成功,若因为网络或其他原因无法提取相应地址,则将该数 据结构的状态改为解析失败,同时等待新一个请求的到来。

12.负责与顶层通信的功能库将地址通过系统消息的形式发送给应用程序, 应用程序得到了视频的真实地址,可进行下一步处理。

图1是本发明提供的实施例结构示意图,101为网络中各主流视频网站的网 络视频服务器,在实际应用当中,视频网站可以是:优酷、土豆、56视频、乐 视、新浪、搜狐等主流视频网站。

102是开源浏览器内核Webkit的核心功能库,本实施例中,由于采用的平 台是Windows系统,所以使用Webkit源代码在Windows环境下编译生成的 Webkit.dll和JavascriptCore.dll等核心库作为Webkit部分的功能库。

103是本发明实现的功能库,连接了应用程序和Webkit,为用户从网络视频 的原始地址中获取视频的真实地址提供了便利的方式。

104是需要调用视频真实地址的应用程序,例如应用程序将视频原始地址传 入功能库中,等待功能库返回视频真实地址,由相应的播放器直接打开播放或 者下载软件进行下载。

105是Webkit中为操作内核数据提供的InjectedBundle接口,用于本发明实 现的功能库与Webkit核心功能库之间的交互。

以图1为例,进一步描述基于Webkit内核的视频地址提取功能库的实现方 法。

用户启动调用本发明功能库的应用程序,应用程序随即调用地址提取功能 库的初始化函数,完成地址提取功能库的初始化过程。初始化代码片段如下所 示:

上述程序首先得到了Bundle的路径,通过这个路径创建了InjectedBundle 的上下文变量context。通过context创建了Webkit的view对象,这个对象是用 来承载InjectedBundle对象以及一些其他的存在于Webkit中的对象。接下来, 通过定义ContextInjectedBundleClient对象注册了一些回调函数,供提取视频真 实地址的时候调用。

应用程序完成初始化之后,用户在应用程序中输入想要下载观看或收藏的 视频链接,应用程序随即调用地址提取功能库的goToURL接口,传入视频地址 和视频所在网站名称。goToURL完成调用Webkit内核加载网页的流程,代码片 段如下:

上述程序首先记录了视频的初始URL地址,接着根据初始化代码中的view 对象得到了Webkit的page对象,一个page对应一个页面。通过对视频初始地 址的文本解析我们可以得出该视频是属于哪个视频网站的,将视频网站的信息 存放在host属性中,例如若是优酷的视频,就将"youku"存放在"host"属性中, 并将其以Message的形式发送给InjectedBundle。完成这些工作之后判断Webkit 是否正在工作,若Webkit没有正在加载的网页,则加载该视频地址;若Webkit 正在加载网页,则将先前的加载停止以后再加载网页。

Webkit在创建page对象的过程中调用功能库中的回调函数didCreatePage, 地址提取功能库在回调中注册willSendRequestForFrame和 didFinishLoadForFrame,代码片段如下:

上述程序从page对象中获取主框架对象,并保存供后续操作使用,通过 BundlePageResourceLoadClient对象和BundlePageLoaderClient对象注册了 willSendRequestForFrame和didFinishLoadForFrame两个回调函数并将对象和 page绑定在一起。

地址提取功能库在注册完成相应的回调函数后开始加载视频原始地址,先 下载网页的HTML脚本,按照HTML脚本中的内容依次下载各种资源,对每次 向服务器端发送网络请求前都会触发功能库中实现的回调函数 willSendRequestForFrame,由该函数判断本次请求是否为得到视频真实地址的必 要请求,代码片段如下:

上述程序首先从请求request中得到所请求的服务器的地址,保存在url对 象中。通过接收顶层功能库发送的host消息,功能库得到了该视频的来源网站, 程序根据不同的网站切换不同的地址判断机制。本实施例的代码片段中以56视 频网站为例,当检测视频网站的来源是优酷时,切换为优酷的地址判断机制。 每个网站判断机制都是根据每个视频网站中视频真实地址的构成特点进行定 制,通过文本解析的方式对不同的视频网站编写不同的地址判断机制。程序通 过CheckIfUrlNeeded()检测本次请求的目标地址是否为加载视频必须的请求,若 是必须的请求,进一步检测是否为视频真实地址,若是真实地址,则插入视频 真实地址的列表UrlList中,若不是真实地址,则保留并返回原请求,继续请求 过程;若不是必须的请求,则直接返回空请求,通过return0屏蔽该资源的下载。

检测本次请求的目标地址是否为加载视频必须的请求,是根据某一个视频 网站加载视频的流程,通过文字解析发送网络请求地址的方式,寻找网络地址 中是否有与视频加载流程相关的关键字,从而判断发送的网络请求地址是否与 请求视频真实地址有关,若发起的网络请求为请求视频真实地址的关键请求, 则保留该请求的内容;若为与请求视频真实地址无关的请求,则将该次请求置 为空,从而屏蔽该请求。

当页面加载完成时,会触发回调函数didFinishLoadForFrame,处理当加载 完成后对视频真实地址的判断和消息的发送,代码流程如下:

代码首先判断结束加载的frame是否为主frame,若不是主frame,则不作 任何处理,若是主frame,则判断为网页加载完成,检测视频真实地址列表中的 地址,通过特定的判断方式,例如提取最新的地址,作为视频的真实地址,采 用InjectedBundle消息机制发送给地址提取功能库,再由功能库用Windows消息 发送给应用程序,由应用程序对视频真实地址进行进一步处理。

图2是本发明与应用程序之间的交互过程示意图;图3是上文中描述地址 提取功能库工作流程的流程示意图。

根据本发明提供的实施例,以提取56视频网站视频为例说明本发明对视频 网页加载流程的具体处理。56视频网站在没有使用本地址提取功能库时,加载 一个典型视频网页的流程如表1所示。

表1

表格中粗体(表中第29行)即为视频真实地址,从上表可看出在加载完整 的视频网页流程中,浏览器除了下载与视频有关的资源,还请求了大量脚本、 图片等与请求视频无关的资源,所以本功能库在提取视频真实地址的过程中屏 蔽了无关请求,得到的请求流程如表2所示。

表2

表2中粗体(表中第18行)即为视频真实地址,通过表1和表2的对比可 见,在利用本发明的视频地址提取功能库加载视频网页之后,原表1中的图片 等资源被判断为与加载视频无关的资源被功能库屏蔽,简化了提取视频真实地 址的流程。

本发明通过具体实施例进行说明,本领域技术人员应当明白,在不脱离本 发明范围的情况下,还可以对本发明进行各种变换及等同替代。另外,针对特 定情形或具体情况,可以对本发明做各种修改,而不脱离本发明的范围。因此, 本发明不局限于所公开的具体实施例,而应当包括落入本发明权利要求范围以 内的全部实现方式。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号