一种iptv浏览器页面实现方法及iptv浏览器
阅读说明:本技术 一种iptv浏览器页面实现方法及iptv浏览器 (IPTV browser page implementation method and IPTV browser ) 是由 胡丽娟 姜超 陈世庆 于 2019-08-05 设计创作,主要内容包括:本发明公开了一种IPTV浏览器页面实现方法及IPTV浏览器,涉及浏览器技术领域。IPTV浏览器页面实现方法包括:IPTV浏览器响应启动指令,通过自定义的ShellManager子类调用Chromium内核的网页加载方法加载认证页面,并在认证成功后加载IPTV页面;以及,在加载的页面中,通过所述ShellManager子类处理遥控器按键事件以及实现IPTV业务平台的认证对象,并通过自定义的播放接口控制媒体播放。本发明不依赖framework层提供的API,直接基于Chromium内核实现IPTV浏览器的定制化功能。(The invention discloses an IPTV browser page implementation method and an IPTV browser, and relates to the technical field of browsers. The IPTV browser page implementation method comprises the following steps: the IPTV browser responds to the starting instruction, calls a webpage loading method of a chrome kernel through a self-defined ShellManager subclass to load an authentication page, and loads an IPTV page after authentication is successful; and processing a remote controller key event and realizing an authentication object of the IPTV service platform through the ShellManager subclass in the loaded page, and controlling media playing through a self-defined playing interface. The invention does not depend on API provided by a frame layer, and directly realizes the customized function of the IPTV browser based on a Chromium kernel.)
技术领域
本发明涉及IPTV(Internet Protocol Television,交互式网络电视)终端,具体来讲涉及一种IPTV浏览器页面实现方法及IPTV浏览器。
背景技术
随着网络的发展,搭载Android(安卓)系统的智能终端设备正以井喷式的速度增长。而IPTV浏览器是建立智能终端与IPTV业务平台的桥梁,有了IPTV浏览器,智能终端可以随时随地访问IPTV业务平台并享受平台所提供的视讯业务及服务。
传统的IPTV浏览器都是基于Android系统在framework(架构)层中提供的与webkit(开源浏览器引擎)相关的API(Application Programming Interface,应用程序编程接口)实现,并根据运营商提供规范,做定制化的修改(包括增加framework层的API等),实现IPTV业务平台的定制化功能。
但是Android系统更新带来了两个问题:从Android5.0开始,系统已经不带浏览器内核;并且Android版本变化导致framework层接口也发生变化。那么IPTV的传统实现方式就不能实现IPTV的所有功能,因为IPTV的定制化修改会涉及到对framework层的API的修改,而API的修改需要与浏览器内核相互关联,由于Android5.0开始的系统架构中不包含浏览器内核源码,导致浏览器内核中针对IPTV定制化的功能的修改无法实现。
发明内容
针对现有技术中存在的缺陷,本发明的目的在于提供一种IPTV浏览器页面实现方法及IPTV浏览器,不依赖framework层提供的API,直接基于Chromium内核实现IPTV浏览器的定制化功能。
本发明提供一种IPTV浏览器页面实现方法,包括:
IPTV浏览器响应启动指令,通过自定义的ShellManager子类调用Chromium内核的网页加载方法加载认证页面,并在认证成功后加载IPTV页面;以及,
在加载的页面中,通过所述ShellManager子类处理遥控器按键事件以及实现IPTV业务平台的认证对象,并通过自定义的播放接口***体播放。
在上述技术方案的基础上,所述ShellManager子类调用addJavascriptInterface方法将所述认证对象映射到自定义的认证类,调用Shell类的getWebContents方法获取WebContents类,通过JavascriptInjector类关联WebContents类和自定义的认证类。
在上述技术方案的基础上,所述播放接口包括自定义的JNI类和媒体播放类,以及使用接口定义语言IDL创建的媒体播放对象和播控方法,其中,所述媒体播放对象包括获取本地播放器序号方法和以下播控方法中的至少一种:设置视频窗口位置、从头开始播放和加入组播;
在第一进程中,根据所述媒体播放对象新建与本地播放器相对应的媒体播放对象,新建的媒体播放对象通过LocalFrame类在LocalFrameClient子类和RenderFrameImpl类中增加自定义的播控通信方法,用于通过进程间通信IPC与RenderFrameHostImpl类中对应的播控通信方法之间传递播控指令;
在第二进程中,RenderFrameHostImpl类通过所述JNI类的播控方法以及媒体播放类中对应的播控方法控制本地播放器的播放。
在上述技术方案的基础上,IPTV浏览器响应遥控器按键事件,通过Android系统调用View类的dispatchKeyEvent方法发送获取的按键键值,ContentViewCore接收按键键值并调用键值转换方法和blink进程,执行页面中按键键值所对应的JS处理逻辑;所述ShellManager子类内设的dispatchKeyEvent方法接收按键键值并对指定键值进行处理。
在上述技术方案的基础上,IPTV浏览器基于本地播放器的播放信息,通过自定义的Event类从本地播放器获取并存储播放信息,以及调用所述ShellManager子类内设的dispatchKeyEvent方法发送指定键值;
ContentViewCore获取指定键值,并调用blink进程执行页面中指定键值所对应的JS处理逻辑,JS处理逻辑调用JS扩展对象Utility的getEvent方法,以获取存储的播放信息并执行相应操作,其中,JS扩展对象Utility是通过所述ShellManager子类实现的。
在上述技术方案的基础上,根据设于DOMWindow类中自定义的焦点导航对象,在页面中新建焦点导航对象并传入LocalFrame类名,并通过LocalFrame类调用render进程实现焦点框显示和/或默认导航使能;
其中,焦点导航对象是使用接口定义语言IDL实现的IPTV业务平台的JS扩展对象。
本发明还提供一种IPTV浏览器,其包括:
页面加载模块,其用于响应启动指令,通过自定义的ShellManager子类调用Chromium内核的网页加载方法加载认证页面,并在认证成功后加载IPTV页面;
认证模块,其用于在认证页面中通过所述ShellManager子类实现IPTV业务平台的认证对象,并进行认证操作;
遥控按键模块,其用于在加载的页面中,通过所述ShellManager子类处理遥控器按键事件;
媒体播放模块,其用于在加载的页面中,通过自定义的播放接口***体播放。
在上述技术方案的基础上,所述ShellManager子类调用addJavascriptInterface方法将所述认证对象映射到自定义的认证类,调用Shell类的getWebContents方法获取WebContents类,通过JavascriptInjector类关联WebContents类和自定义的认证类。
在上述技术方案的基础上,所述播放接口包括自定义的JNI类和媒体播放类,以及使用接口定义语言IDL创建的媒体播放对象和播控方法,其中,所述媒体播放对象包括获取本地播放器序号方法和以下播控方法中的至少一种:设置视频窗口位置、从头开始播放和加入组播;
所述媒体播放模块用于在第一进程中,根据所述媒体播放对象新建与本地播放器相对应的媒体播放对象,新建的媒体播放对象通过LocalFrame类在LocalFrameClient子类和RenderFrameImpl类中增加自定义的播控通信方法,用于通过IPC与RenderFrameHostImpl类中对应的播控通信方法之间传递播控指令;还用于在第二进程中,RenderFrameHostImpl类通过所述JNI类的播控方法以及媒体播放类中对应的播控方法控制本地播放器的播放。
在上述技术方案的基础上,所述遥控按键模块用于响应遥控器按键事件,通过Android系统调用View类的dispatchKeyEvent方法发送获取的按键键值,ContentViewCore接收按键键值并调用键值转换方法和blink进程,执行页面中按键键值所对应的JS处理逻辑;所述ShellManager子类内设的dispatchKeyEvent方法接收按键键值并对指定键值进行处理。
所述IPTV浏览器还包括焦点导航模块和媒体信息模块;
焦点导航模块用于根据设于DOMWindow类中自定义的焦点导航对象,在页面中新建焦点导航对象并传入LocalFrame类名,并通过LocalFrame类调用render进程实现焦点框显示和/或默认导航使能;其中,焦点导航对象是使用接口定义语言IDL实现的IPTV业务平台的JS扩展对象;
媒体信息模块用于基于本地播放器的播放信息,通过自定义的Event类从本地播放器获取并存储播放信息,以及调用所述ShellManager子类的dispatchKeyEvent方法发送指定键值;ContentViewCore获取指定键值,并调用blink进程执行页面中指定键值所对应的JS处理逻辑,JS处理逻辑调用JS扩展对象Utility的getEvent方法,以获取存储的播放信息并执行相应操作,其中,JS扩展对象Utility是通过所述ShellManager子类实现的。
与现有技术相比,本发明实施例提供一种IPTV浏览器页面实现方法,包括:IPTV浏览器响应启动指令,通过自定义的ShellManager子类调用Chromium内核的网页加载方法加载认证页面,并在认证成功后加载IPTV页面;以及,在加载的页面中,通过所述ShellManager子类处理遥控器按键事件以及实现IPTV业务平台的认证对象,并通过自定义的播放接口***体播放,不依赖framework层提供的API,直接基于Chromium内核实现IPTV浏览器的定制化功能。
附图说明
为了更清楚地说明本发明实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1为本发明实施例IPTV浏览器的架构示意图;
图2所示是页面加载模块加载认证页面的过程;
图3所示是认证模块执行的认证过程;
图4所示是遥控按键模块响应遥控器按键事件的过程;
图5所示是媒体播放模块通过播放接口控制本地播放的过程;
图6是本发明另一实施例IPTV浏览器的架构示意图;
图7所示是焦点导航模块的处理过程;
图8所示是媒体信息模块的处理过程;
图9为本发明实施例IPTV浏览器页面实现方法流程图。
具体实施方式
以下结合附图及实施例对本发明作进一步详细说明。
如图1所示为本发明实施例IPTV浏览器的架构示意图,IPTV浏览器包括页面加载模块、认证模块、遥控按键模块和媒体播放模块。
页面加载模块用于响应启动指令,通过自定义的ShellManager子类调用Chromium内核的网页加载方法加载认证页面,并在认证成功后加载IPTV页面。
认证模块用于在认证页面中通过ShellManager子类实现IPTV业务平台的认证对象,并进行认证操作。
遥控按键模块用于在加载的页面中,通过ShellManager子类处理遥控器按键事件。
媒体播放模块用于在加载的页面中,通过自定义的播放接口***体播放。
页面加载模块和认证模块是IPTV浏览器的基础模块,主要功能是响应启动指令,通过http请求,将IPTV终端的账号、密码、STBID(Set Top Box ID,机顶盒ID)、mac(MediaAccess Control,媒体访问控制)地址等信息上传给IPTV业务平台。IPTV业务平台验证通过后会将IPTV首页的地址下发到IPTV终端,IPTV终端根据IPTV业务平台下发的http页面的指引(location.href)跳转到IPTV首页。后续用户通过遥控器选定要跳转的链接后,IPTV终端同样是通过页面加载模块发送http请求给IPTV业务平台,实现页面的切换。
为了实现http请求功能,页面加载模块是在IPTV浏览器中创建网页的显示窗口并加载页面。自定义的ShellManager子类调用launchShell方法创建并显示网页窗口,并在创建网页窗口时绑定Shell类并调用其中的页面加载方法。
图2所示是页面加载模块加载认证页面的过程,首先,预先创建的ShellManager子类继承自Chromium内核的ShellManager类,ShellManager子类调用ShellManager类的launchShell方法实现网页窗口的显示,并且在launchShell方法执行的过程中将ShellManager子类与Chromium内核自带的Shell类绑定。请求认证地址时可以通过ShellManager类的getActiveShell方法获取到这个Shell类,并调用此Shell类的loadUrl(页面加载)方法来加载认证地址。后续页面的跳转可以通过上述ShellManager子类调用Chromium内核的原始功能来实现。
认证模块的主要功能是实现IPTV业务平台需求的JS扩展对象Authentication(IPTV规范中定义的认证对象)以及此对象的两个方法:SetConfig(设置配置)与GetConfig(获取配置),IPTV业务平台通过Authentication类的SetConfig方法下发频道列表等信息,并通过GetConfig方法获取IPTV终端的信息。
在认证模块中,通过自定义的ShellManager子类调用addJavascriptInterface方法将认证对象(Authentication,JS扩展对象)映射到自定义的认证类(JsAuthentication,是一个JAVA类),调用Shell类的getWebContents方法获取WebContents类,通过JavascriptInjector类关联WebContents类和自定义的认证类。
图3所示是认证模块执行的认证过程,自定义的ShellManager子类调用addJavascriptInterface方法将Authentication映射到JsAuthentication;自定义的ShellManager子类通过图2中的ShellManager类调用Shell类的getWebContents方法,获取到WebContents类,然后通过JavascriptInjector类的fromWebContents方法将WebContents转化成JavascriptInjector类,通过JavascriptInjector类的addPossiblyUnsafeInterface方法,将自定义的JAVA类(JsAuthentication)与转化得到的JavascriptInjector类绑定,从而完成了WebContents与Authentication的关联。这样IPTV业务平台通过IPTV浏览器的JS处理逻辑直接经由ShellManager子类调用到WebContents的evaluateJavaScript方法,从而实现调用Authentication的SetConfig和GetConfig方法。
其中,Chromium内核自带的类及其方法包括:
Shell类:getWebContents方法;
WebContents类:evaluateJavaScript方法;
JavascriptInjector类:fromWebContents方法和addPossiblyUnsafeInterface方法。
Chromium内核本身不支持遥控器按键,但是支持键盘和鼠标的按键。所以实现遥控按键处理等关键技术是将遥控器按键转换成IPTV平台认识的键值,并实现对应键值所需执行的JS处理逻辑。
由于ShellManager子类继承的ShellManager的基类是Android系统的图形显示View类,遥控按键模块响应遥控器按键事件,通过Android系统调用View类的dispatchKeyEvent方法发送获取的按键键值,ContentViewCore接收按键键值并调用键值转换方法和blink进程,执行页面中按键键值所对应的JS处理逻辑;ShellManager子类内设的dispatchKeyEvent方法接收按键键值并对指定键值进行处理,实现页面中按键对应的JS处理逻辑。JS处理逻辑是IPTV业务平台提供的JS脚本。
图4所示是遥控按键模块响应遥控器按键事件的过程,当有用户按键时,本身会调用到View类的dispatchKeyEvent(分发按键消息)方法,入参是Android系统的KeyEvent(键值),此时ContentViewCore和ShellManager子类内设的dispatchKeyEvent方法都会被调用到,ContentViewCore接收到按键后,会先经过KeyboardCodeFromAndroidKeyCode(键值转换)方法的转换,将Android系统的键值转换成IPTV业务平台认识的键值,然后调用blink进程,实现页面中按键对应的JS处理逻辑。ShellManager子类中dispatchKeyEvent方法可以针对一些特殊按键作特殊处理,实现定制化按键的需求。
其中,Chromium内核自带的类和进程包括:
ContentViewCore:显示网页内容的JAVA类,继承自View类;
Blink process:浏览器渲染引擎。
媒体播放模块主要是为了实现IPTV业务平台调用本地播放功能的通道。关键技术主要有两个:实现JS处理逻辑调用Mediaplayer(IPTV规范中定义的JS扩展对象的名字)对象;以及Chromium内核调用到本地的JAVA类JSMediaplayer(自定义的与内核中的Mediaplayer对应的JAVA类的名字),最终实现本地播放的控制功能。
媒体播放模块用于在加载的页面中,通过自定义的播放接口***体播放。播放接口包括自定义的JNI类和媒体播放类,以及使用接口定义语言IDL(InterfaceDescription Language)创建的媒体播放对象和播控方法,其中,媒体播放对象包括获取本地播放器序号方法和以下播控方法中的至少一种:设置视频窗口位置、从头开始播放和加入组播。
在第一进程中,根据媒体播放对象新建与本地播放器相对应的媒体播放对象,新建的媒体播放对象通过LocalFrame类在LocalFrameClient子类和RenderFrameImpl类中增加自定义的播控通信方法,用于通过进程间通信IPC(Inter-Process Communication)与RenderFrameHostImpl类中对应的播控通信方法之间传递播控指令。
在第二进程中,RenderFrameHostImpl类通过JNI类的播控方法以及媒体播放类中对应的播控方法控制本地播放器的播放。
图5所示是媒体播放模块通过播放接口控制本地播放的过程,其中,播放接口主要包括:
1)通过IDL增加MediaPlayer对象以及对应的播控方式:getNativePlayerInstanceID(获取本地播放器序号)、setVideoDisplayArea(设置视频窗口位置)、playFromStart(从头开始播放)和joinChannel(加入组播)等。
2)自建的JNI类Fhplayer(Chromium内核中创建的与MediaPlayer对象对应的JAVA类)的NativefhMediaPlayerGetValue(播放函数)方法、Fhplayer的子类JSMediaplayer的fhMediaPlayerGetValue方法、以及RenderFrameHostImpl中自定义的OnFhMediaPlayerControl(用于通信的函数)。
在图5中,首先,在页面通过JS新建MediaPlayer对象时,由于IPTV存在同时观看多个视频的功能,因此将新建的MediaPlayer对象与本地播放器通过playid(播放器识别号)实现对应;MediaPlayer对象通过LocalFrame类在LocalFrameClient子类和RenderFrameImpl类中增加MediaPlayerGetValue(自定义的用来通信的函数名)方法;然后通过IPC通信将播控指令发送给RenderFrameHostImpl中的OnFhMediaPlayerControl(自定义的用来通信的函数名)中,实现不同进程的通信;最终由RenderFrameHostImpl调用自建的JNI类Fhplayer的NativefhMediaPlayerGetValue方法调用到Fhplayer的子类JSMediaplayer的fhMediaPlayerGetValue方法,实现对本地播放器(nativePlayer)的调用。
其中,Chromium内核自带的类及其方法包括:
LocalFrameClient:LocalFrame的子类,主要用来处理进程间消息通信;
RenderFrameImpl:用户进程间通信的类。
本发明实施例屏蔽了对Android系统的framework层中webkit接口的调用,有效的减少了Android系统升级导致的IPTV应用无法正常使用的情况。IPTV应用(浏览器)只依赖于Android系统运行,那么只要是安装Android系统的终端都可以运行该IPTV应用。
参见图6所示,在一种可选的实施方式中,IPTV浏览器还包括焦点导航模块和媒体信息模块。
焦点导航模块主要是为了实现IPTV业务平台对IPTV终端是否显示焦点框或者是否进行默认导航功能的控制。关键技术在于实现页面通过JS调用扩展对象Navigation(IPTV规范中定义的JS扩展对象的名字)的disableDefaultNavigation(禁止默认焦点导航),enableDefaultNavigation(使能默认焦点导航)、disableHighlight(禁止显示默认焦点框)、enableHighlight(显示默认焦点框)方法。
焦点导航模块用于根据设于DOMWindow类中自定义的焦点导航对象,在页面中新建焦点导航对象并传入LocalFrame类名,并通过LocalFrame类调用render进程实现焦点框显示和/或默认导航使能;其中,焦点导航对象是是使用接口定义语言IDL实现的IPTV业务平台的JS扩展对象。
图7所示是焦点导航模块的处理过程,在DOMWindow类中增加导航对象(Navigation),然后给Navigation对象增加上诉四种方法,这四种方法根据创建Navigation对象时传入的LocalFrame类,通过调用LocalFrame类的setSpatialNavigationEnabled方法以及setFocusWidth方法,最终Chromium内核会在需要导航或者需要绘制焦点框的地方判断是否需要导航或者是否需要绘制焦点框。
其中,Chromium内核自带的类及其方法包括:
DOMWindow:JS语法中,与全局变量window对应的Chromium内核中的C++类的名字;
LocalFrame:Chromium内核中与html网页对应的类名,包括设置是否使能默认导航setSpatialNavigationEnabled方法和设置默认焦点框宽度setFocusWidth。
媒体信息处理模块主要是为了将本地播放的信息(视频播放到头或者到尾等状态)主动传递给IPTV平台。本模块的关键技术有两个:本地播放信息如何通过JAVA类通知IPTV平台;IPTV平台如何通过JS扩展对象Utility(IPTV规范中定义的JS扩展对象)对象获取到播放信息,JS扩展对象Utility的实现方式与Authentication对象的实现方式相同,不再赘述。
媒体信息模块用于基于本地播放器的播放信息,通过自定义的Event类从本地播放器获取并存储播放信息,以及调用ShellManager子类的dispatchKeyEvent方法发送指定键值;ContentViewCore获取指定键值执行页面中指定键值所对应的JS处理逻辑,JS处理逻辑调用blink进程和JS扩展对象Utility的getEvent(获取媒体消息)方法,以获取存储的播放信息并执行相应操作,其中,JS扩展对象Utility是通过ShellManager子类实现的。
图8所示是媒体信息模块的处理过程,当本地播放器有播放信息需要发送给IPTV业务平台时会调用自定义的消息类Event的addMediaEvent(存储媒体消息)方法存储播放信息,然后调用ShellManager子类的dispatchKeyEvent方法发送特定键值(例如768),此时会经过遥控按键模块的处理(blink process),将键值传给Chromium内核,然后调用页面中对768键值的JS处理逻辑,JS处理逻辑通过调用Utility的getEvent方法,获取到之前通过addMediaEvent存储的播放信息,然后JS处理逻辑中会根据不同的播放消息执行不同的命令。
参见图9所示,本发明实施例提供一种IPTV浏览器页面实现方法,基于前述实施例IPTV浏览器,IPTV浏览器页面实现方法包括:
S110IPTV浏览器响应启动指令,通过自定义的ShellManager子类调用Chromium内核的网页加载方法加载认证页面。
S120在认证页面中,通过ShellManager子类处理遥控器按键事件以及实现IPTV业务平台的认证对象。
S130在认证成功后加载IPTV页面,通过ShellManager子类处理遥控器按键事件,并通过自定义的播放接口***体播放。
具体的,IPTV浏览器在标准浏览器内核(Chromium)的基础上,通过前述实施例的六个模块实现IPTV功能的流程是:
1)通过页面加载模块加载认证页面;在加载认证页面的过程中认证模块实现与IPTV业务平台的交互,从而进入到IPTV首页;
2)当进入IPTV首页后,用户会操作遥控器,此时遥控按键模块完成遥控器按键事件的解析和处理;
当解析出来是方向键的时候,焦点导航分两种实现方式,一种是IPTV业务平台直接通过js语句完成,另一种是需要IPTV浏览器执行默认的导航处理流程,此时IPTV浏览器可通过焦点导航模块确定是否要执行默认焦点导航。
当用户通过遥控器操作的是媒体播放时,IPTV浏览器则会通过媒体播放模块实现相应的媒体播放控制功能。
3)当播放过程中出现播放到结尾了或者用户选择了无法播放的视频源时,IPTV浏览器通过媒体消息模块将播放消息通知IPTV业务平台,以便IPTV业务平台针对这些情况进行处理。
通过这六个模块实现跨Android系统framework层的webkit的接口,直接调用Chromium内核的接口的目的,实现本发明实施例的IPTV浏览器框架。
本发明不局限于上述实施方式,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也视为本发明的保护范围之内。本说明书中未作详细描述的内容属于本领域专业技术人员公知的现有技术。
- 上一篇:一种医用注射器针头装配设备
- 下一篇:一种页面显示方法、装置和存储介质