一种资源播放方法及显示设备转让专利

申请号 : CN202110680729.8

文献号 : CN113453064B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 吴小红李杰

申请人 : VIDAA(荷兰)国际控股有限公司

摘要 :

本发明公开一种资源播放方法及显示设备,在播放DTV数据时,若接收到对Ginga应用中目标资源的起播操作,控制DTV模块从DTV信号中过滤出Ginga数据,并将所述Ginga数据发送到Ginga模块;控制DTV模块关闭与播放控制模块间的第一DTV通信链路;控制Ginga模块开启与播放控制模块的Ginga通信链路;控制播放控制模块通过Ginga通信链路获取所述Ginga数据,对所述Ginga数据进行解码并播放。本申请能解决DTV和Ginga之间的音视频播放冲突问题,保证地面数字电视播放的准确性,提升用户观看体验。

权利要求 :

1.一种显示设备,其特征在于,包括:

显示器,与控制器连接,用于显示视频数据;

声音播放器,与控制器连接,用于播放音频数据;

用户接口,与控制器连接,用于接收用户输入的操作;

控制器,包括DTV模块、Ginga模块和播放控制模块,其中,所述DTV模块和所述播放控制模块运行于DTV对应的第一进程中,所述DTV模块与所述播放控制模块通过第一DTV通信链路链接;所述Ginga模块运行于Ginga应用对应的第二进程中,所述第二进程具有共享内存,所述共享内存与所述DTV模块通过第二DTV通信链路链接,所述Ginga模块与所述共享内存通过Ginga通信链路链接;所述播放控制模块与所述显示器和所述声音播放器连接;

所述控制器,用于执行:

在播放DTV数据时,若接收到对Ginga应用中目标资源的起播操作,控制DTV模块从DTV信号中过滤出Ginga数据并开启所述第二DTV通信链路,将所述Ginga数据通过所述第二DTV通信链路和所述共享内存传输至所述Ginga模块;

控制所述DTV模块关闭所述第一DTV通信链路;

控制所述Ginga模块开启所述Ginga通信链路;

控制播放控制模块通过所述共享内存和所述Ginga通信链路,从所述Ginga模块获取所述Ginga数据,对所述Ginga数据进行解码并播放。

2.根据权利要求1所述的显示设备,其特征在于,所述控制器还用于执行:在检测到所述Ginga数据播放结束时,控制所述Ginga模块关闭所述Ginga通信链路;

控制所述DTV模块开启所述第一DTV通信链路;

控制所述播放控制模块通过所述第一DTV通信链路获取所述DTV数据,对所述DTV数据进行解码并播放。

3.根据权利要求1所述的显示设备,其特征在于,所述控制器还用于执行:在所述DTV模块从DTV信号中过滤出Ginga数据后,控制第二DTV通信链路开启,控制DTV模块通过第二DTV通信链路将Ginga数据推送到共享内存,以使所述Ginga模块从所述共享内存中获取所述Ginga数据;

和/或,在所述Ginga模块开启Ginga通信链路之后,控制Ginga模块将所述Ginga数据推送到共享内存,以使所述播放控制模块从所述共享内存中读取所述Ginga数据。

4.根据权利要求3所述的显示设备,其特征在于,所述控制器还用于执行:在所述播放控制模块从所述共享内存中读取所述Ginga数据之前,控制Ginga模块检测所述Ginga数据的类型;

若所述Ginga数据的类型为音视频数据,则控制Ginga模块创建第一线程和第二线程;

若所述Ginga数据的类型为视频数据,则控制Ginga模块仅创建第一线程;

若所述Ginga数据的类型为音频数据,则控制Ginga模块仅创建第二线程;

其中,所述第一线程用于在Ginga数据解码之前,对Ginga数据中的视频数据进行注入控制;所述第二线程用于在Ginga数据解码之前,对Ginga数据中的音频数据进行注入控制。

5.根据权利要求3所述的显示设备,其特征在于,所述控制器还用于执行:在所述播放控制模块从所述共享内存中读取所述Ginga数据之前,控制Ginga模块创建第一线程和第二线程;

所述第一线程被配置为:在Ginga数据解码之前,检测Ginga数据的类型,若Ginga数据的类型为音视频数据或视频数据,则对Ginga数据中的视频数据进行注入控制;若Ginga数据的类型为音频数据,则所述第一线程不执行注入控制;

所述第二线程被配置为:在Ginga数据解码之前,检测Ginga数据的类型,若Ginga数据的类型为音视频数据或音频数据,则对Ginga数据中的音频数据进行注入控制;若Ginga数据的类型为视频数据,则所述第二线程不执行注入控制。

6.根据权利要求4或5所述的显示设备,其特征在于,所述播放控制模块包括注入器和视频解码器,所述第一线程具体被配置为按照如下方式对Ginga数据中的视频数据进行注入控制:从所述共享内存中读取Ginga数据中的一帧视频帧数据;

在接收到注入器发送的第一数据注入请求时,开启所述第一线程,标记并保存所述视频帧数据的ID;

将所述视频帧数据发送给注入器,所述注入器用于将所述视频帧数据注入到视频解码器中进行解码。

7.根据权利要求4或5所述的显示设备,其特征在于,所述播放控制模块包括注入器和音频解码器,所述第二线程具体被配置为按照如下方式对Ginga数据中的音频数据进行注入控制:从所述共享内存中读取Ginga数据中的一帧音频帧数据;

在接收到注入器发送的第二数据注入请求时,开启所述第二线程,标记并保存所述音频帧数据的ID;

将所述音频帧数据发送给注入器,所述注入器用于将所述音频帧数据注入到音频解码器中进行解码。

8.根据权利要求6所述的显示设备,其特征在于,所述注入器具体被配置为执行:所述注入器查询所述视频解码器的第一缓存余量;

若所述第一缓存余量大于第一阈值,则暂停向所述第一线程发送所述第一数据注入请求,直至所述第一缓存余量下降至[第二阈值,第一阈值]的区间范围内时,恢复向所述第一线程发送所述第一数据注入请求;

若所述第一缓存余量处于[第二阈值,第一阈值]的区间范围内,则保持向所述第一线程发送所述第一数据注入请求;

若所述第一缓存余量小于第二阈值,则保持向所述第一线程发送所述第一数据注入请求,向显示器发送第一指示信息,直至第一缓存余量上升至第一阈值时,向显示器发送第二指示信息;所述第一指示信息用于指示显示器暂停播放Ginga数据中的视频数据,所述第二指示信息用于指示显示器在当前暂停帧处继续播放Ginga数据中后续的视频帧数据;

其中,所述第一阈值=第一预设时间*当前播放倍速,所述第二阈值=第二预设时间*当前播放倍速,第一预设时间大于第二预设时间。

9.根据权利要求7所述的显示设备,其特征在于,所述注入器具体被配置为执行:所述注入器查询所述音频解码器的第二缓存余量;

若所述第二缓存余量大于第一阈值,则暂停向所述第二线程发送所述第二数据注入请求,直至所述第二缓存余量下降至[第二阈值,第一阈值]的区间范围内时,恢复向所述第二线程发送所述第二数据注入请求;

若所述第二缓存余量处于[第二阈值,第一阈值]的区间范围内,则保持向所述第二线程发送所述第二数据注入请求;

若所述第二缓存余量小于第二阈值,则保持向所述第二线程发送所述第二数据注入请求,向声音播放器发送第三指示信息,直至第二缓存余量上升至第一阈值时,向声音播放器发送第四指示信息;所述第三指示信息用于指示声音播放器暂停播放Ginga数据中的音频数据,所述第四指示信息用于指示声音播放器在当前暂停帧处继续播放Ginga数据中后续的音频帧数据;

其中,所述第一阈值=第一预设时间*当前播放倍速,所述第二阈值=第二预设时间*当前播放倍速,第一预设时间大于第二预设时间。

10.一种资源播放方法,由如权利要求1‑9任一项所述的显示设备执行,其特征在于,包括:在播放DTV数据时,若接收到对Ginga应用中目标资源的起播操作,控制DTV模块从DTV信号中过滤出Ginga数据并开启第二DTV通信链路,将所述Ginga数据通过所述第二DTV通信链路和共享内存传输至Ginga模块;

控制DTV模块关闭第一DTV通信链路;

控制Ginga模块开启Ginga通信链路;

控制播放控制模块通过所述共享内存和所述Ginga通信链路,从所述Ginga模块获取所述Ginga数据,对所述Ginga数据进行解码并播放。

说明书 :

一种资源播放方法及显示设备

技术领域

[0001] 本发明涉及显示设备领域,尤其涉及一种资源播放方法及显示设备。

背景技术

[0002] 在某些国家或地区,如南美洲的巴西,部分数字电视支持Ginga,Ginga是基于ISDB‑T制式的数字地面电视中间件标准,增强了数字电视的交互性,支持用户在观看数字电视(Digital Television,DTV)时,同时免费享受各种在线服务。例如,用户在观看电视剧时,通过调出Ginga来查看剧情介绍和角色介绍等信息;又例如,用户在观看选举直播时,可以通过Ginga查看候选人信息并进行投票操作。
[0003] 不同的DTV信号对应的Ginga资源不同,比如Ginga资源可以是音视频形式,或者音频形式,又或者视频形式,因此需要解决DTV和Ginga之间的音视频播放冲突问题,确保显示设备播放的准确性。

发明内容

[0004] 本发明提供一种资源播放方法及显示设备,以解决DTV和Ginga之间的音视频播放冲突问题。
[0005] 本申请第一方面提供一种显示设备,包括:
[0006] 显示器,与控制器连接,用于显示视频数据;
[0007] 声音播放器,与控制器连接,用于播放音频数据;
[0008] 用户接口,与控制器连接,用于接收用户输入的操作;
[0009] 控制器,包括DTV模块、Ginga模块和播放控制模块,用于执行:
[0010] 在播放DTV数据时,若接收到对Ginga应用中目标资源的起播操作,控制DTV模块从DTV信号中过滤出Ginga数据,并将所述Ginga数据发送到Ginga模块;
[0011] 控制DTV模块关闭与所述播放控制模块间的第一DTV通信链路;
[0012] 控制Ginga模块开启与播放控制模块的Ginga通信链路;
[0013] 控制播放控制模块通过Ginga通信链路获取所述Ginga数据,对所述Ginga数据进行解码并播放。
[0014] 在第一方面提供的技术方案中,地面数字电视接收到的DTV信号是以DTV码流形式进行传输,Ginga数据一般嵌入在DTV码流中,因此在起播Ginga应用中的资源时,需要切换源,即从DTV切换为Ginga,并从DTV信号中解析过滤出Ginga数据。本申请中控制器中可以细分为DTV模块、Ginga模块和播放控制模块,DTV模块用于处理DTV信号以及从DTV信号中过滤出Ginga数据,Ginga模块用于处理与Ginga相关的逻辑程序,播放控制模块用于控制Ginga数据或DTV音视频数据的解码和播放,Ginga模块与播放控制模块比如可通过RPC(Remote Procedure Call,远程过程调用)等形式进行通信。
[0015] 第一DTV通信链路为链接于DTV模块和播放控制模块的链路,即DTV模块可直接将DTV数据传输到播放控制模块,无需经过Ginga模块,因此直接由DTV模块控制第一DTV通信链路的启闭状态,此情况下第二DTV通信链路仅传输Ginga数据,不传输DTV数据。
[0016] 在用户起播Ginga应用中的资源时,需要关闭第一DTV通信链路,使DTV数据的传输路径被阻断,从而停止解码和播放DTV信号;Ginga模块获取到Ginga数据后,开启原处于关闭状态的Ginga通信链路,使得播放控制模块能够获取到Ginga数据,此时显示设备的解码资源被Ginga独占,即仅令Ginga数据能被解码后播放,DTV信号停止解码和播放,进而避免DTV和Ginga之间的音视频播放冲突,保证地面数字电视播放的准确性,提升用户观看体验。
[0017] 第一种示例性的实现方式中,所述控制器还用于执行:
[0018] 在检测到所述Ginga数据播放结束时,控制Ginga模块关闭所述Ginga通信链路;
[0019] 控制所述DTV模块开启所述第一DTV通信链路;
[0020] 控制所述播放控制模块通过所述第一DTV通信链路获取所述DTV数据,对所述DTV数据进行解码并播放。
[0021] 对于第一种示例性的实现方式,当Ginga数据自然播放完成,或者用户人为退出Ginga应用等情况,都属于Ginga数据播放结束的场景,这时需要再次切换源,即从Ginga切换为DTV,控制Ginga模块关闭Ginga通信链路,从而阻断Ginga数据的通信传输,同时控制开启第一DTV通信链路,使得DTV数据能够被传输、解码并播放,从而自动恢复DTV信号的播放。
[0022] 第二种示例性的实现方式中,所述控制器还用于执行:
[0023] 在所述DTV模块从DTV信号中过滤出Ginga数据后,控制第二DTV通信链路开启,控制DTV模块通过第二DTV通信链路将Ginga数据推送到共享内存,以使所述Ginga模块从所述共享内存中获取所述Ginga数据;
[0024] 和/或,在所述Ginga模块开启Ginga通信链路之后,控制Ginga模块将所述Ginga数据推送到共享内存,以使所述播放控制模块从所述共享内存中读取所述Ginga数据。
[0025] 对于第二种示例性的实现方式,提供一种基于共享内存实现Ginga模块与播放控制模块之间数据共享和传输的模式,Ginga通信链路与共享内存链接,通过控制Ginga通信链路启闭状态的转换,来控制是否向共享内存写入Ginga数据。此外,第二DTV通信链路链接于DTV模块和Ginga模块,DTV模块可通过已开启的第二DTV通信链路将其过滤的Ginga数据传输至共享内存,从而方便Ginga模块获取Ginga数据。Ginga模块对应于一个Ginga进程,播放控制模块和DTV模块对应一个TVmain进程,因此通过共享内存,实现了两个进程之间的跨进程通信交互。
[0026] 第四种示例性的实现方式中,所述Ginga模块还用于:
[0027] 所述控制器还用于执行:
[0028] 在所述播放控制模块从所述共享内存中读取所述Ginga数据之前,控制Ginga模块检测所述Ginga数据的类型;
[0029] 若所述Ginga数据的类型为音视频数据,控制Ginga模块创建第一线程和第二线程;
[0030] 若所述Ginga数据的类型为视频数据,则控制Ginga模块仅创建第一线程;
[0031] 若所述Ginga数据的类型为音频数据,则控制Ginga模块仅创建第二线程;
[0032] 其中,所述第一线程用于在Ginga数据解码之前,对Ginga数据中的视频数据进行注入控制;所述第二线程用于在Ginga数据解码之前,对Ginga数据中的音频数据进行注入控制。
[0033] 对于第四种示例性的实现方式,将Ginga数据的音频和视频分别由两个线程独立进行解码前的注入控制,对此在播放控制模块从共享内存读取Ginga数据前,Ginga模块先检测Ginga数据的类型,该类型包括音视频数据、视频数据和音频数据。若Ginga数据为音视频类型,则同时创建第一线程和第二线程这两个线程;若Ginga数据为单音频或单视频,则仅需创建一个线程。
[0034] 第五种示例性的实现方式中,所述控制器还用于执行:
[0035] 在所述播放控制模块从所述共享内存中读取所述Ginga数据之前,控制Ginga模块创建第一线程和第二线程;
[0036] 所述第一线程被配置为:在Ginga数据解码之前,检测Ginga数据的类型,若Ginga数据的类型为音视频数据或视频数据,则对Ginga数据中的视频数据进行注入控制;若Ginga数据的类型为音频数据,则所述第一线程不执行注入控制;
[0037] 所述第二线程被配置为:在Ginga数据解码之前,检测Ginga数据的类型,若Ginga数据的类型为音视频数据或音频数据,则对Ginga数据中的音频数据进行注入控制;若Ginga数据的类型为视频数据,则所述第二线程不执行注入控制。
[0038] 第四种示例性的实现方式中是先检测Ginga数据的类型,并根据该类型创建相应的线程。而第五种示例性的实现方式中,Ginga模块则是默认创建两个线程,每个线程可以自发检测Ginga数据的类型,并根据该类型去控制自身线程的工作状态。例如第一线程若检测到Ginga数据为音视频或单视频,则可以控制Ginga中的视频数据的注入,若Ginga数据为单音频,则第一线程不工作,相当于处于失效状态。当Ginga数据播放结束后,第一线程和/或第二线程工作结束并释放资源。
[0039] 第六种示例性的实现方式中,所述播放控制模块包括注入器和视频解码器,所述第一线程具体被配置为按照如下方式对Ginga数据中的视频数据进行注入控制:
[0040] 从所述共享内存中读取Ginga数据中的一帧视频帧数据;
[0041] 在接收到注入器发送的第一数据注入请求时,开启所述第一线程,标记并保存所述视频帧数据的ID;
[0042] 将所述视频帧数据发送给注入器,所述注入器用于将所述视频帧数据注入到视频解码器中进行解码。
[0043] 第七种示例性的实现方式中,所述播放控制模块还包括音频解码器,所述第二线程具体被配置为按照如下方式对Ginga数据中的音频数据进行注入控制:
[0044] 从所述共享内存中读取Ginga数据中的一帧音频帧数据;
[0045] 在接收到注入器发送的第二数据注入请求时,开启所述第二线程,标记并保存所述音频帧数据的ID;
[0046] 将所述音频帧数据发送给注入器,所述注入器用于将所述音频帧数据注入到音频解码器中进行解码。
[0047] 对于第六种和第七种示例性的实现方式,分别定义了第一线程和第二线程对Ginga数据注入控制方案。以第一线程为例,第一线程按帧读取Ginga数据中的视频帧数据,读取视频帧数据后,第一线程暂处于堵塞状态,不会传输视频帧数据,并等待注入器的第一数据注入请求。播放控制模块中可包括注入器和解码器,解码器又可分为视频解码器和音频解码器,第一线程接收到注入器发送的第一数据注入请求时,唤醒自身线程,并标记视频帧数据的ID,该ID比如为视频帧数据的帧序号,用于标记该视频帧数据是Ginga视频数据中的第几帧,之后将视频帧数据发送给注入器,注入器再将视频帧数据注入到视频解码器的buffer(缓存器)中,这样视频解码器即可从buffer中按帧读取视频数据并解码播放。通过为每帧视频帧数据设置ID,可以保证视频帧播放的连续性和准确性。
[0048] 第八种示例性的实现方式中,所述注入器具体被配置为执行:
[0049] 所述注入器查询所述视频解码器的第一缓存余量;
[0050] 若所述第一缓存余量大于第一阈值,则暂停向所述第一线程发送所述第一数据注入请求,直至所述第一缓存余量下降至[第二阈值,第一阈值]的区间范围内时,恢复向所述第一线程发送所述第一数据注入请求;
[0051] 若所述第一缓存余量处于[第二阈值,第一阈值]的区间范围内,则保持向所述第一线程发送所述第一数据注入请求;
[0052] 若所述第一缓存余量小于第二阈值,则保持向第一线程发送所述第一数据注入请求,向显示器发送第一指示信息,直至第一缓存余量上升至第一阈值时,向显示器发送第二指示信息;所述第一指示信息用于指示显示器暂停播放Ginga数据中的视频数据,所述第二指示信息用于指示显示器在当前暂停帧处继续播放Ginga数据中后续的视频帧数据。
[0053] 第九种示例性的实现方式中,所述注入器具体被配置为执行:
[0054] 所述注入器查询所述音频解码器的第二缓存余量;
[0055] 若所述第二缓存余量大于第一阈值,则暂停向所述第二线程发送所述第二数据注入请求,直至所述第二缓存余量下降至[第二阈值,第一阈值]的区间范围内时,恢复向所述第二线程发送所述第二数据注入请求;
[0056] 若所述第二缓存余量处于[第二阈值,第一阈值]的区间范围内,则保持向所述第二线程发送所述第二数据注入请求;
[0057] 若所述第二缓存余量小于第二阈值,则保持向所述第二线程发送所述第二数据注入请求,向声音播放器发送第三指示信息,直至第二缓存余量上升至第一阈值时,向声音播放器发送第四指示信息;所述第三指示信息用于指示声音播放器暂停播放Ginga数据中的音频数据,所述第四指示信息用于指示声音播放器在当前暂停帧处继续播放Ginga数据中后续的音频帧数据。
[0058] 对于第八种和第九种示例性的实现方式,则提供注入器根据解码器中buffer的缓存水位来控制数据注入的方案。在具体实现方式中,设置第一阈值和第二阈值,解码器buffer中的缓存余量大于第一阈值,则处于高等(High)水位;解码器buffer中的缓存余量处于[第二阈值,第一阈值]的区间范围内,则处于中等(Mid)水位;解码器buffer中的缓存余量小于第二阈值,则处于低等(Low)水位。当解码器buffer处于高等水位时,说明缓存速度大于解码速度,为避免因解码器buffer中缓存过度堆积而导致部分数据被冲刷掉,可以暂停注入,即注入器暂停向线程发送数据注入请求,直到解码器buffer的“水位”下降至中等水位,再恢复向线程发送数据注入请求。当解码器buffer处于中等水位时,说明缓存速度与解码速度相对较为平衡,则注入器保持向线程发送数据注入请求。当解码器buffer处于低等水位时,说明缓存速度小于解码速度,即存在“入不敷出”,导致Ginga应用的视频和/或音频存在卡顿问题,对此仍需保持向线程发送数据注入请求,并控制Ginga应用暂停资源播放,这样即可在停止解码状态下,逐渐积累缓存,直至解码器buffer上升至高等水位时,即可使Ginga应用恢复资源播放。通过解码器buffer中水位的状态协调控制注入器的数据注入,提升了Ginga数据的播放效果。
[0059] 第十种示例性的实现方式中,所述第一阈值=第一预设时间*当前播放倍速,所述第二阈值=第二预设时间*当前播放倍速,第一预设时间大于第二预设时间。该实现方式中,第一预设阈值和第二预设阈值是预设的时间值,一般以秒(s)为单位,用户可以在UI中调整Ginga资源的播放速度,正常默认是一倍速,还可设置0.5倍速、2倍速等,由于当前播放倍速会约束解码速度,因此根据当前的播放倍速,结合预设时间值,即可快速确定衡量解码器buffer水位状态的第一阈值和第二阈值,从而适应性调节数据注入,使解码器的缓存与解码能够相对平衡。
[0060] 本申请第二方面提供一种显示设备中的资源播放方法,包括:
[0061] 在播放DTV数据时,若接收到对Ginga应用中目标资源的起播操作,控制DTV模块从DTV信号中过滤出Ginga数据,并将所述Ginga数据发送到Ginga模块;
[0062] 控制DTV模块关闭与所述播放控制模块间的第一DTV通信链路;
[0063] 控制Ginga模块开启与播放控制模块的Ginga通信链路;
[0064] 控制播放控制模块通过Ginga通信链路获取所述Ginga数据,对所述Ginga数据进行解码并播放。
[0065] 第二方面包括的其他示例性实现方式以及具备的有益效果,可以适应性参照前述第一方面的相关说明,这里不再赘述。

附图说明

[0066] 为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例中所需要访问的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
[0067] 图1示例性示出了根据一些实施例的显示设备的使用场景;
[0068] 图2示例性示出了根据一些实施例的控制装置100的硬件配置框图;
[0069] 图3示例性示出了根据一些实施例的显示设备200的硬件配置框图;
[0070] 图4示例性示出了根据一些实施例的显示设备200中软件配置图;
[0071] 图5示例性示出了一种显示设备中Ginga标准的实现架构图;
[0072] 图6示例性示出了一种显示设备控制器的模块化控制结构图;
[0073] 图7示例性示出了一种资源播放方法的流程图;
[0074] 图8示例性示出了第一种资源播放方法的交互流程图;
[0075] 图9示例性示出了第二种资源播放方法的交互流程图。

具体实施方式

[0076] 为使本申请的目的和实施方式更加清楚,下面将结合本申请示例性实施例中的附图,对本申请示例性实施方式进行清楚、完整地描述,显然,描述的示例性实施例仅是本申请一部分实施例,而不是全部的实施例。
[0077] 需要说明的是,本申请中对于术语的简要说明,仅是为了方便理解接下来描述的实施方式,而不是意图限定本申请的实施方式。除非另有说明,这些术语应当按照其普通和通常的含义理解。
[0078] 本申请中说明书和权利要求书及上述附图中的术语“第一”、“第二”、“第三”等是用于区别类似或同类的对象或实体,而不必然意味着限定特定的顺序或先后次序,除非另外注明。应该理解这样使用的用语在适当情况下可以互换。
[0079] 术语“包括”和“具有”以及他们的任何变形,意图在于覆盖但不排他的包含,例如,包含了一系列组件的产品或设备不必限于清楚地列出的所有组件,而是可包括没有清楚地列出的或对于这些产品或设备固有的其它组件。
[0080] 术语“模块”是指任何已知或后来开发的硬件、软件、固件、人工智能、模糊逻辑或硬件或/和软件代码的组合,能够执行与该元件相关的功能。
[0081] 图1为根据实施例中显示设备的使用场景的示意图。如图1所示,显示设备200还与服务器400进行数据通信,用户可通过智能设备300或控制装置100操作显示设备200。
[0082] 在一些实施例中,控制装置100可以是遥控器,遥控器和显示设备的通信包括红外协议通信或蓝牙协议通信,及其他短距离通信方式中的至少一种,通过无线或有线方式来控制显示设备200。用户可以通过遥控器上按键、语音输入、控制面板输入等至少一种输入用户指令,来控制显示设备200。
[0083] 在一些实施例中,智能设备300可以包括移动终端、平板电脑、计算机、笔记本电脑,AR/VR设备等中的任意一种。
[0084] 在一些实施例中,也可以使用智能设备300以控制显示设备200。例如,使用在智能设备上运行的应用程序控制显示设备200。
[0085] 在一些实施例中,也可以使用智能设备300和显示设备进行数据的通信。
[0086] 在一些实施例中,显示设备200还可以采用除了控制装置100和智能设备300之外的方式进行控制,例如,可以通过显示设备200设备内部配置的获取语音指令的模块直接接收用户的语音指令控制,也可以通过显示设备200设备外部设置的语音控制装置来接收用户的语音指令控制。
[0087] 在一些实施例中,显示设备200还与服务器400进行数据通信。可允许显示设备200通过局域网(LAN)、无线局域网(WLAN)和其他网络进行通信连接。服务器400可以向显示设备200提供各种内容和互动。服务器400可以是一个集群,也可以是多个集群,可以包括一类或多类服务器。
[0088] 在一些实施例中,一个步骤执行主体执行的软件步骤可以随需求迁移到与之进行数据通信的另一步骤执行主体上进行执行。示例性的,服务器执行的软件步骤可以随需求迁移到与之数据通信的显示设备上执行,反之亦然。
[0089] 图2示例性示出了根据示例性实施例中控制装置100的配置框图。如图2所示,控制装置100包括控制器110、通信接口130、用户输入/输出接口140、存储器、供电电源。控制装置100可接收用户的输入操作指令,且将操作指令转换为显示设备200可识别和响应的指令,起用用户与显示设备200之间交互中介作用。
[0090] 在一些实施例中,通信接口130用于和外部通信,包含WIFI芯片,蓝牙模块,NFC或可替代模块中的至少一种。
[0091] 在一些实施例中,用户输入/输出接口140包含麦克风,触摸板,传感器,按键或可替代模块中的至少一种。
[0092] 图3示出了根据示例性实施例中显示设备200的硬件配置框图。
[0093] 在一些实施例中,显示设备200包括调谐解调器210、通信器220、检测器230、外部装置接口240、控制器250、显示器260、音频输出接口270、存储器、供电电源、用户接口中的至少一种。
[0094] 在一些实施例中控制器包括中央处理器,视频处理器,音频处理器,图形处理器,RAM,ROM,用于输入/输出的第一接口至第n接口。
[0095] 在一些实施例中,显示器260包括用于呈现画面的显示屏组件,以及驱动图像显示的驱动组件,用于接收源自控制器输出的图像信号,进行显示视频内容、图像内容以及菜单操控界面的组件以及用户操控UI界面等。
[0096] 在一些实施例中,显示器260可为液晶显示器、OLED显示器、以及投影显示器中的至少一种,还可以为一种投影装置和投影屏幕。
[0097] 在一些实施例中,调谐解调器210通过有线或无线接收方式接收广播电视信号,以及从多个无线或有线广播电视信号中解调出音视频信号,如以及EPG数据信号。
[0098] 在一些实施例中,通信器220是用于根据各种通信协议类型与外部设备或服务器进行通信的组件。例如:通信器可以包括Wifi模块,蓝牙模块,有线以太网模块等其他网络通信协议芯片或近场通信协议芯片,以及红外接收器中的至少一种。显示设备200可以通过通信器220与控制装置100或服务器400创建控制信号和数据信号的发送和接收。
[0099] 在一些实施例中,检测器230用于采集外部环境或与外部交互的信号。例如,检测器230包括光接收器,用于采集环境光线强度的传感器;或者,检测器230包括图像采集器,如摄像头,可以用于采集外部环境场景、用户的属性或用户交互手势,再或者,检测器230包括声音采集器,如麦克风等,用于接收外部声音。
[0100] 在一些实施例中,外部装置接口240可以包括但不限于如下:高清多媒体接口接口(HDMI)、模拟或数据高清分量输入接口(分量)、复合视频输入接口(CVBS)、USB输入接口(USB)、RGB端口等任一个或多个接口。也可以是上述多个接口形成的复合性的输入/输出接口。
[0101] 在一些实施例中,控制器250和调谐解调器210可以位于不同的分体设备中,即调谐解调器210也可在控制器250所在的主体设备的外置设备中,如外置机顶盒等。
[0102] 在一些实施例中,控制器250,通过存储在存储器上中各种软件控制程序,来控制显示设备的工作和响应用户的操作。控制器250控制显示设备200的整体操作。例如:响应于接收到用于选择在显示器260上显示UI对象的用户命令,控制器250便可以执行与由用户命令选择的对象有关的操作。
[0103] 在一些实施例中,所述对象可以是可选对象中的任何一个,例如超链接、图标或其他可操作的控件。与所选择的对象有关操作有:显示连接到超链接页面、文档、图像等操作,或者执行与所述图标相对应程序的操作。
[0104] 在一些实施例中控制器包括中央处理器(Central Processing Unit,CPU),视频处理器,音频处理器,图形处理器(Graphics Processing Unit,GPU),RAM Random Access Memory,RAM),ROM(Read‑Only Memory,ROM),用于输入/输出的第一接口至第n接口,通信总线(Bus)等中的至少一种。
[0105] CPU处理器。用于执行存储在存储器中操作系统和应用程序指令,以及根据接收外部输入的各种交互指令,来执行各种应用程序、数据和内容,以便最终显示和播放各种音视频内容。CPU处理器,可以包括多个处理器。如,包括一个主处理器以及一个或多个子处理器。
[0106] 在一些实施例中,图形处理器,用于产生各种图形对象,如:图标、操作菜单、以及用户输入指令显示图形等中的至少一种。图形处理器包括运算器,通过接收用户输入各种交互指令进行运算,根据显示属性显示各种对象;还包括渲染器,对基于运算器得到的各种对象,进行渲染,上述渲染后的对象用于显示在显示器上。
[0107] 在一些实施例中,视频处理器,用于将接收外部视频信号,根据输入信号的标准编解码协议,进行解压缩、解码、缩放、降噪、帧率转换、分辨率转换、图像合成等视频处理中的至少一种,可得到直接可显示设备200上显示或播放的信号。
[0108] 在一些实施例中,视频处理器,包括解复用模块、视频解码模块、图像合成模块、帧率转换模块、显示格式化模块等中的至少一种。其中,解复用模块,用于对输入音视频数据流进行解复用处理。视频解码模块,用于对解复用后的视频信号进行处理,包括解码和缩放处理等。图像合成模块,如图像合成器,其用于将图形生成器根据用户输入或自身生成的GUI信号,与缩放处理后视频图像进行叠加混合处理,以生成可供显示的图像信号。帧率转换模块,用于对转换输入视频帧率。显示格式化模块,用于将接收帧率转换后视频输出信号,改变信号以符合显示格式的信号,如输出RGB数据信号。
[0109] 在一些实施例中,音频处理器,用于接收外部的音频信号,根据输入信号的标准编解码协议,进行解压缩和解码,以及降噪、数模转换、和放大处理等处理中的至少一种,得到可以在扬声器中播放的声音信号。
[0110] 在一些实施例中,用户可在显示器260上显示的图形用户界面(GUI)输入用户命令,则用户输入接口通过图形用户界面(GUI)接收用户输入命令。或者,用户可通过输入特定的声音或手势进行输入用户命令,则用户输入接口通过传感器识别出声音或手势,来接收用户输入命令。
[0111] 在一些实施例中,“用户界面”,是应用程序或操作系统与用户之间进行交互和信息交换的介质接口,它实现信息的内部形式与用户可以接受形式之间的转换。用户界面常用的表现形式是图形用户界面(Graphic User Interface,GUI),是指采用图形方式显示的与计算机操作相关的用户界面。它可以是在电子设备的显示屏中显示的一个图标、窗口、控件等界面元素,其中控件可以包括图标、按钮、菜单、选项卡、文本框、对话框、状态栏、导航栏、Widget等可视的界面元素中的至少一种。
[0112] 在一些实施例中,用户接口280,为可用于接收控制输入的接口(如:显示设备本体上的实体按键,或其他等)。
[0113] 在一些实施例中,显示设备的系统可以包括内核(Kernel)、命令解析器(shell)、文件系统和应用程序。内核、shell和文件系统一起组成了基本的操作系统结构,它们让用户可以管理文件、运行程序并使用系统。上电后,内核启动,激活内核空间,抽象硬件、初始化硬件参数等,运行并维护虚拟内存、调度器、信号及进程间通信(IPC)。内核启动后,再加载Shell和用户应用程序。应用程序在启动后被编译成机器码,形成一个进程。
[0114] 如图4所示,将显示设备的系统分为三层,从上至下分别为应用层、中间件层和硬件层。
[0115] 应用层主要包含电视上的常用应用,以及应用框架(Application Framework),其中,常用应用主要是基于浏览器Browser开发的应用,例如:HTML5 APPs;以及原生应用(Native APPs);
[0116] 应用框架(Application Framework)是一个完整的程序模型,具备标准应用软件所需的一切基本功能,例如:文件存取、资料交换...,以及这些功能的使用接口(工具栏、状态列、菜单、对话框)。
[0117] 原生应用(Native APPs)可以支持在线或离线,消息推送或本地资源访问。
[0118] 中间件层包括各种电视协议、多媒体协议以及系统组件等中间件。中间件可以使用系统软件所提供的基础服务(功能),衔接网络上应用系统的各个部分或不同的应用,能够达到资源共享、功能共享的目的。
[0119] 硬件层主要包括HAL接口、硬件以及驱动,其中,HAL接口为所有电视芯片对接的统一接口,具体逻辑由各个芯片来实现。驱动主要包含:音频驱动、显示驱动、蓝牙驱动、摄像头驱动、WIFI驱动、USB驱动、HDMI驱动、传感器驱动(如指纹传感器,温度传感器,压力传感器等)、以及电源驱动等。
[0120] 以上实施例示例了一种显示设备的硬件/软件架构以及功能实现等内容。在一些应用场景中,巴西地区的部分显示设备支持具备Ginga功能的数字电视。对于支持Ginga中间件标准的显示设备,可以通过机顶盒/接收机等设备接收发射站发射的DTV信号,DTV信号以码流形式传输,DTV码流中携带有Ginga数据,Ginga数据设置有标记信息,以便显示设备从DTV码流中识别并准确过滤出Ginga数据,并通过UI和/或声音播放器播放Ginga数据。其中,所述声音播放器可以是显示设备内置的扬声器,也可以是通过HDMI等接口外接的功放,比如音响设备等。
[0121] 在一种示例性的实现方式中,显示设备在播放数字电视节目时,用户可通过点击遥控器上的指定按键或者UI界面上的指定控件等预设操作,来调出Ginga应用。Ginga应用与当前播放的DTV信号相关联,例如用户在观看电视剧时,通过调出Ginga应用来查看剧情介绍和角色介绍等信息;又例如,用户在观看选举直播时,可以通过Ginga应用查看候选人信息并进行投票操作。Ginga中信息资源的类型可以是纯视频/图像、纯音频和音视频,支持的音频格式和视频格式不限定。Ginga应用被调出后,用户可以在Ginga应用中选择将要播放的目标资源,以及享受Ginga应用中的相关服务和交互功能。
[0122] 由于大部分显示设备一般支持单路视频播放和单路音频播放,因此需要解决DTV与Ginga之间音视频播放冲突问题。一种示例性的实现方式中,针对内置有VIDAA系统平台的显示设备,结合Ginga标准架构,提供一种ES(Elementary Stream,基本码流)流媒体资源的播放方法。下面首先介绍VIDAA平台Ginga标准架构。
[0123] 在一种实施例中,图5示出一种具有VIDAA平台的显示设备中Ginga标准的架构图,包括最上层的Ginga APP、以及Ginga  SDK、接口层(porting layer)和VIDAA平台(platform)四部分。其中,Ginga APP(应用)是一种采用XML应用技术的陈述性应用,Ginga SDK包括Ginga‑J、Ginga‑NCL和common core,Ginga‑J用于执行活动的基于JAVA的对象内容,Ginga‑NCL作为Ginga应用的载体,Ginga‑NCL用于实时解析NCL文件进行UI显示、解释执行LUA脚本、交互式响应、媒体播放控制等,common core是Ginga的共同核心。
[0124] 在一种实施例中,接口层是VIDAA平台的中间件与common core交互的桥梁层,VIDAA平台通过该接口层为Ginga提供支持。接口层至少包括mediabackend(媒体后台)、Video(视频)、Audio(音频)、Graphic(图像)、Ginga control(Ginga控制)、Network(网络)等,接口层可实现对Ginga应用中ES流媒体资源的播放支持。
[0125] 在一种实施例中,VIDAA平台至少包括中间件层和硬件及驱动层,所述中间件层包括Injector(注入器)、DTV、Mpctrl、A/V等;硬件包括解码器(HUI)、显示器(Display)、声音播放器(Speaker)等。需要说明的是,本申请仅对VIDAA平台及Ginga进行了简要说明,相关细节内容可以参照现有技术,本申请实施例不作限定也不再赘述。
[0126] 在一些实施例中,如图6所示,为实现Ginga应用内资源播放,可以划分为两个进程,分别为Ginga进程和TVmain进程,Ginga进程和TVmain进程之间比如可通过RPC形式进行通信交互,可选地,通过共享内存实现数据在进程间的传输。对于图5所示的架构,Ginga应用、Ginga SDK和接口层均运行于Ginga进程中,DTV信号处理、音视频数据的注入控制(Injector)以及解码播放(HUI)等VIDAA平台的处理逻辑则运行于TVmain进程中。本申请中为便于描述,将Ginga进程落实为由Ginga模块执行的程序进程,将TVmain进程落实为由DTV模块和播放控制模块共同执行的程序进程。
[0127] 在一些实施例中,Ginga数据的音视频流来源于DTV码流,DTV模块运行于TVmain进程中,在用户观看或切换数字电视节目时,DTV模块可以对DTV信号进行处理,得到DTV数据。此外,在用户启动播放Ginga应用中的目标资源时,DTV模块能根据DTV码流中Ginga的PID及TID(相当于前述标记信息)创建段过滤器,利用该过滤器从DTV码流中过滤出Ginga数据。
[0128] 在一些实施例中,参照图6,在用户启动播放Ginga应用中的目标资源时,开启第二DTV通信链路,所述第二DTV通信链路为DTV模块向Ginga进程传输数据的链路。在图6的示例中,DTV模块通过已开启的第二DTV通信链路,将过滤出的Ginga数据发送给Ginga进程。
[0129] 在一些实施例中,参照图6的示例,在启动播放Ginga音视频资源时,Ginga进程中会创建并维护一共享内存,该共享内存与DTV模块通过第二DTV通信链路链接。当启动播放Ginga应用内的目标资源时,开启第二DTV通信链路,DTV模块通过第二DTV通信链路将Ginga数据先转入共享内存中,之后Ginga模块通过读取共享内存来获取Ginga数据,实现Ginga模块跨进程获取DTV模块过滤的Ginga数据,Ginga模块中的Ginga SDK可从Ginga数据中解析出音视频数据流。共享内存与Ginga模块通过Ginga通信链路链接,当Ginga通信链路开启时,允许播放控制模块跨进程获取到Ginga数据,具体是由注入器通过数据注入请求,来请求获取共享内容中的Ginga数据。可选地,建立第一线程和第二线程,注入器通过向第一线程发送第一数据注入请求来获取Ginga数据中的视频数据,注入器通过向第二线程发送第二数据注入请求来获取Ginga数据中的音频数据。图6的示例中,第二DTV通信链路仅传输DTV过滤的Ginga数据,而不传输DTV数据,当Ginga数据播放结束时,关闭第二DTV通信链路和关闭Ginga通信链路,开启第一DTV通信链路,从而恢复播放DTV。
[0130] 在一些实施例中,参照图6的示例,DTV模块与播放控制模块(具体是其中的解码器)通过第一DTV通信链路链接,第一DTV通信链路被开启时,允许DTV模块直接将DTV数据发送给播放控制模块进行解码及播放;反之,当第一DTV通信链路被关闭时,DTV数据的传输通路被阻断,则无法推送DTV数据,播放控制模块也就无法对DTV信号进行解码和播放。Ginga通信链路被开启时,允许Ginga模块将Ginga数据写入共享内存;反之,当Ginga通信链路被关闭时,Ginga数据的传输通路被阻断,则无法推送Ginga数据,播放控制模块无法从共享内存中获取到Ginga数据,也就无法对Ginga数据进行解码和播放。由此可见,通过控制第一DTV通信链路和Ginga通信链路的启闭状态,即可播放控制模块获取的数据类别(DTV数据或Ginga数据),保证两类通信链路一启一闭,实现对音视频解码播放资源的独占,避免多个source之间资源的冲突和抢占问题。可选地,共享内存中可以对Ginga的视频数据和音频数据独立缓存。第一DTV通信链路链接于DTV模块和解码器之间,即DTV数据和Ginga数据共用解码器、显示器和声音播放器,图6中所示的注入器仅是针对Ginga数据的注入控制(即Ginga注入器)。
[0131] 可选地,DTV模块可以设置自身对应的注入器(即DTV注入器),DTV注入器的输入端通过第一DTV通信链路与DTV模块连接,DTV注入器的输出端与解码器连接,用以控制DTV数据的注入。当第一DTV通信链路处于关闭状态时,DTV注入器不执行对DTV数据的注入控制;当第一DTV通信链路被开启时,可启动DTV数据的注入控制流程。DTV数据的注入控制可以适应性参照Ginga数据的注入控制机制,此处不再赘述。
[0132] 图6示出了一种通信链路规划方式,实际应用中,在保证Ginga数据和DTV数据的解码播放资源不冲突的情况下,可以根据实际Ginga架构和显示设备系统架构,适应性规划出其他的通信链路模式,不限于本实施例所述。
[0133] 在一些实施例中,在关闭第一DTV通信链路,并开启Ginga通信链路后,共享内存中都仅缓存一种类别的待播数据,即Ginga数据通过共享内存可实现数据在不同进程和模块点的传输。所述播放控制模块可包括注入器(Injector)和解码器(HUI),其中注入器可以从共享内存中读取待播数据,并将待播数据注入至解码器的buffer(缓存)中,之后由解码器对待播数据进行解码并播放。
[0134] 在一些实施例中,所述解码器包括视频解码器和音频解码器,以Ginga数据为音视频数据为例,注入器将Ginga数据中的视频数据注入到视频解码器,由视频解码器对Ginga视频流进行解码,并将解码后的数据发送给显示器进行UI显示;同时,注入器将Ginga数据中的音频数据注入到音频解码器,由音频解码器对Ginga音频流进行解码,将解码后的数据发送给声音播放器进行播放。若Ginga数据为单视频或单音频类型,则视频解码器和音频解码器中仅有一个处于工作状态。
[0135] 在一些实施例中,采用两个独立线程分别执行Ginga视频数据和Ginga音频数据的注入控制,本申请中命名为第一线程和第二线程,第一线程和第二线程运行于Ginga进程中。所述第一线程用于在Ginga数据解码之前,对Ginga数据中的视频数据进行注入控制;所述第二线程用于在Ginga数据解码之前,对Ginga数据中的音频数据进行注入控制。即相当于第一线程/第二线程链接于共享内存与播放控制模块(具体为该模块中的注入器)。
[0136] Ginga数据的类型可以是音视频、单视频和单音频。在一种实施方式中,在播放控制模块在从共享内存中读取Ginga数据之前,Ginga模块可以先检测Ginga数据的类型,并根据Ginga数据的类型去确定线程的创建种类和数量。若Ginga数据的类型为音视频数据,则同时创建第一线程和第二线程;若Ginga数据的类型为视频数据,则仅创建第一线程,无需创建第二线程;若Ginga数据的类型为音频数据,则仅创建第二线程,无需第一线程,即Ginga数据为单视频或单音频类型时,创建的线程数量仅为一个,从而降低双线程对资源的占用和消耗。
[0137] 在另一种实施方式中,在播放控制模块在从共享内存中读取Ginga数据之前,Ginga模块也可默认直接创建第一线程和第二线程,然后由线程检测Ginga数据的类型,并根据Ginga数据的类型去控制自身的工作状态。例如,第一线程若检测到Ginga数据为音视频或单视频类型,即Ginga数据中存在视频流,则第一线程会执行对Ginga数据中的视频数据的注入控制;第一线程若检测到Ginga数据为单音频类型,而第一线程自身仅能处理视频数据,则第一线程不执行注入控制的程序,即相当于第一线程处于阻塞状态。同理,第二线程若检测到Ginga数据为音视频或单音频类型,即Ginga数据中存在音频流,则第二线程会执行对Ginga数据中的音频数据的注入控制;第二线程若检测到Ginga数据为单视频类型,而第二线程自身仅能处理音频数据,则第二线程不执行注入控制的程序,即相当于第二线程处于阻塞状态。该实现方式默认直接创建双线程,可以在切换DTV节目频道时,更好地适应不同频道对应的Ginga应用中的资源类型。
[0138] 在一些实施例中,在播放Ginga应用中的流媒体资源时,解码器的buffer处于有进有出的动态变化,一方面注入器会向解码器的buffer中按帧注入数据,另一方面解码器从其buffer中按帧读取数据并进行解码,解码完成的数据会从buffer中清除。在实际应用中,例如恶劣天气影响显示设备对DTV信号的接收,又例如用户可以调整Ginga应用中流媒体资源的播放倍速(比如调至2倍速、0.5倍速)等场景,会导致解码器的缓存和解码无法达到相对平衡。当缓存速度大于解码速度时,解码器的buffer水位快速升高,可能出现因buffer中缓存过度堆积而导致部分数据被冲刷掉,影响音视频播放效果;当缓存速度小于解码速度时,则出现“入不敷出”的情况,导致流媒体出现视频和/或音频卡顿问题。为解决缓存与解码不平衡对流媒体播放的影响,本申请示例性提供一种基于解码器buffer水位进行数据自适应注入控制的方案,该方案通过第一线程/第二线程以及注入器实现。
[0139] 在一些实施例中,设置第一阈值和第二阈值,来衡量解码器buffer中的水位等级。解码器buffer中的缓存余量大于第一阈值,则处于高等(High)水位;解码器buffer中的缓存余量处于[第二阈值,第一阈值]的区间范围内,则处于中等(Mid)水位;解码器buffer中的缓存余量小于第二阈值,则处于低等(Low)水位。
[0140] 在一些实施例中,所述第一阈值=第一预设时间*当前播放倍速,所述第二阈值=第二预设时间*当前播放倍速,第一预设时间大于第二预设时间,可选地,第一预设时间设置为2秒,第二预设时间设置为0.5秒,第一预设时间和第二预设时间不做限定。显示设备播放流媒体时正常默认为一倍速,一倍速表征单位时间内解码播放的数据量,比如为KB/s或MB/s等,假设一倍速为512KB/s,则二倍速即为1MB/s,0.5倍速为256KB/s。第一阈值和第二阈值分别与当前播放倍速成正比,根据当前播放倍速,结合第一预设时间和第二预设时间,即可快速确定第一阈值和第二阈值,从而为数据注入控制提供水位参数依据。
[0141] 在一些实施例中,第一线程访问共享内存,并检测共享内存中是否具有待处理的视频数据,若共享内存中不具有待处理的视频数据,说明视频已播放完成,则第一线程工作结束并释放资源;若共享内存中具有待处理的视频数据,以共享内存中当前缓存Ginga数据为例,第一线程从共享内存中读取Ginga数据中的一帧视频帧数据,然后等待注入器反馈第一数据注入请求,此时第一线程处于阻塞状态,第一线程读取的视频帧数据无法传输到注入器中。
[0142] 在一些实施例中,第一线程读取到一帧视频帧数据时,可以向注入器发送指示信息A;注入器响应于接收到的指示信息A,查询视频解码器的buffer中的缓存余量(即buffer当前缓存中尚未被解码的数据量),为便于区分,本申请中将视频解码器的缓存余量命名为第一缓存余量。
[0143] 在一些实施例中,若第一缓存余量大于第一阈值,说明视频解码器buffer当前处于高等水位,意味着缓存速度大于解码速度,为避免视频解码器buffer中缓存过度堆积,注入器可暂停向第一线程发送第一数据注入请求;第一线程接收不到第一数据注入请求,则保持等待中的阻塞状态。由于第一线程不向注入器传输数据,使得视频解码器的buffer呈现“只出不进”的工作状态,水位会逐渐下降,直至水位下降至中等水位,即第一缓存余量下降至[第二阈值,第一阈值]的区间范围内时,buffer中已解码消耗了一定缓存,则注入器可恢复向第一线程发送第一数据注入请求。
[0144] 在一些实施例中,若第一缓存余量处于[第二阈值,第一阈值]的区间范围内,说明视频解码器buffer当前处于中等水位,意味着视频数据的缓存与解码相对较为平衡,则注入器保持向第一线程发送第一数据注入请求。
[0145] 在一些实施例中,若第一缓存余量小于第二阈值,说明视频解码器buffer当前处于低等水位,意味着缓存速度小于解码速度,若继续解码播放视频数据,会因缓存不足而导致视频卡顿。对于这种情况,注入器保持向第一线程发送第一数据注入请求,并且向显示器发送第一指示信息;显示器响应于接收到的第一指示信息,会暂停播放当前Ginga应用中目标资源的视频数据,使视频解码器暂停解码工作,这样视频解码器的buffer呈现“只进不出”的工作状态,水位会逐渐上升,直至水位上升至高等水位,即第一缓存余量上升至第一阈值时,buffer中已积累了一定的缓存,则可恢复视频解码器的解码工作,注入器可向显示器发送第二指示信息;显示器响应于接收到的第二指示信息,在当前暂停帧处继续启动播放后续视频帧数据。
[0146] 在一些实施例中,第一线程读取视频帧数据后,在接收到注入器发送的第一数据注入请求时,开启第一线程,即将第一线程从原阻塞状态下唤醒,然后标记读取到的视频帧数据的ID。可选地,所述视频帧数据的ID可以是帧序号,用于标记该视频帧数据是Ginga视频数据中所属第几帧,通过为每帧视频帧数据设置ID,可以保证视频流播放的连续性和准确性。第一线程被唤醒后,即可将视频帧数据发送给注入器,然后由注入器将视频帧数据注入到视频解码器的buffer中等待解码显示。视频帧数据在经过第一线程、注入器和视频解码器的传输中始终携带有其ID,使得视频解码器的buffer可以根据各项ID,对当前缓存的视频帧数据进行排序,形成第一缓存队列,所述第一缓存队列中序位越靠前的视频帧数据则越优先被解码,比如先解码第1视频帧,然后第2视频帧,以此类推。
[0147] 在一些实施例中,第一线程等待注入器反馈第一数据注入请求时,可能存在等待超时的情况。可选地,第一线程向注入器发送指示信息A后,开始计时,若计时时间达到预设时长时,第一线程仍未接收到注入器发送的第一数据注入请求,判定为等待超时,则第一线程虽然仍保持阻塞状态,但不再继续等待,而是再次检测共享内存中是否具有待处理的视频数据,若共享内存中具有待处理的视频数据,则读取下一帧视频帧数据,然后再次发送指示信息A并等待注入器反馈。
[0148] 在一些实施例中,第二线程访问共享内存,并检测共享内存中是否具有待处理的音频数据,若共享内存中不具有待处理的音频数据,说明音频已播放完成,则第二线程工作结束并释放资源;若共享内存中具有待处理的音频数据,以共享内存中当前缓存Ginga数据为例,第二线程从共享内存中读取Ginga数据中的一帧音频帧数据,然后等待注入器反馈第二数据注入请求,此时第二线程处于阻塞状态,第二线程读取的音频帧数据无法传输到注入器中。
[0149] 在一些实施例中,第二线程读取到一帧音频帧数据时,可以向注入器发送指示信息B;注入器响应于接收到的指示信息B,查询音频解码器的buffer中的缓存余量(即buffer当前缓存中尚未被解码的数据量),为便于区分,本申请中将音频解码器的缓存余量命名为第二缓存余量。
[0150] 在一些实施例中,若第二缓存余量大于第一阈值,说明音频解码器buffer当前处于高等水位,缓存速度大于解码速度,为避免音频解码器buffer中缓存过度堆积,注入器可暂停向第二线程发送第二数据注入请求;第二线程接收不到第二数据注入请求,则保持等待中的阻塞状态。由于第二线程不向注入器传输数据,使得音频解码器的buffer呈现“只出不进”的工作状态,水位会逐渐下降,直至水位下降至中等水位,即第二缓存余量下降至[第二阈值,第一阈值]的区间范围内时,buffer中已解码消耗了一定缓存,则注入器可恢复向第二线程发送第二数据注入请求。
[0151] 在一些实施例中,若第二缓存余量处于[第二阈值,第一阈值]的区间范围内,说明音频解码器buffer当前处于中等水位,意味着音频数据的缓存与解码相对较为平衡,则注入器保持向第二线程发送第二数据注入请求。
[0152] 在一些实施例中,若第二缓存余量小于第二阈值,说明音频解码器buffer当前处于低等水位,缓存速度小于解码速度,若继续解码播放音频数据,会因缓存不足而导致音频播放出现卡顿问题。对于这种情况,注入器保持向第二线程发送第二数据注入请求,并且向声音播放器发送第三指示信息;声音播放器响应于接收到的第三指示信息,会暂停播放当前Ginga应用中目标资源的音频数据,使音频解码器暂停解码工作,这样音频解码器的buffer呈现“只进不出”的工作状态,水位会逐渐上升,直至水位上升至高等水位,即第二缓存余量上升至第一阈值时,buffer中已积累了一定的缓存,则可恢复音频解码器的解码工作,注入器可向声音播放器发送第四指示信息;声音播放器响应于接收到的第四指示信息,在当前暂停帧处继续启动播放后续音频帧数据。
[0153] 在一些实施例中,第二线程读取音频帧数据后,在接收到注入器发送的第二数据注入请求时,开启第二线程,即将第二线程从原阻塞状态下唤醒,然后标记读取到的音频帧数据的ID。可选地,所述音频帧数据的ID可以是帧序号,用于标记该音频帧数据是Ginga音频数据中所属第几帧,通过为每帧音频帧数据设置ID,可以保证音频流播放的连续性和准确性。第二线程被唤醒后,即可将音频帧数据发送给注入器,然后由注入器将音频帧数据注入到音频解码器的buffer中等待解码显示。音频帧数据在经过第二线程、注入器和音频解码器的传输中始终携带有其ID,使得音频解码器的buffer可以根据各项ID,对当前缓存的音频帧数据进行排序,形成第二缓存队列,所述第二缓存队列中序位越靠前的音频帧数据则越优先被解码,比如先解码第1音频帧,然后第2音频帧,以此类推。
[0154] 在一些实施例中,第二线程等待注入器反馈第二数据注入请求时,可能存在等待超时的情况。可选地,第二线程向注入器发送指示信息B后,开始计时,若计时时间达到预设时长时,第二线程仍未接收到注入器发送的第二数据注入请求,判定为等待超时,则第二线程虽然仍保持阻塞状态,但不再继续等待,而是再次检测共享内存中是否具有待处理的音频数据,若共享内存中具有待处理的音频数据,则读取下一帧音频帧数据,然后再次发送指示信息B并等待注入器反馈。
[0155] 通过对解码器buffer水位高低的自适应控制,可适当改善音视频的起播时间以及播放过程中因缓存不足导致的卡顿问题。如果期望音视频数据能快速起播,则可将第二阈值设置相对偏小,当解码器buffer中水位高于第二阈值时,即启动播放音视频数据。如果期望减少播放过程中因缓存不足导致播放暂停/卡顿的几率,则可将第一阈值设置相对偏大,保证有足够量的缓存数据。根据不同的应用场景,可适应性调整第一阈值和/或第二阈值的大小,优化用户的观影体验。
[0156] 需要说明的是,DTV视频/音频数据的注入控制机制与Ginga的示例基本一致,具体可适应性参照前述各实施例的描述,这里不再赘述。
[0157] 在一些实施例中,对于图6的示例,显示设备在播放DTV信号时,若控制器通过用户接口接收到对Ginga应用中目标资源的起播操作,即需要将Source由DTV切换为Ginga,则可向DTV模块发送指示信息C;DTV模块响应于接收到的指示信息C,关闭第一DTV通信链路,以及从DTV信号中过滤出Ginga数据,并将Ginga数据通过第二DTV通信链路发送给Ginga模块,后续再由Ginga模块开启Ginga通信链路。
[0158] 在一些实施例中,用户调出Ginga应用并起播目标资源后,例如用户关闭Ginga应用,或者点击返回键,又或者用户点击目标资源的播放界面上设置的结束播放控件时,即可实现根据自身意愿,随时主动结束并退出目标资源的播放。显示设备在播放所述目标资源的Ginga数据时,若控制器通过用户接口接收到对Ginga数据的结束播放操作,即需要将Source由Ginga切换为DTV,对于图6的示例,则可向Ginga模块发送指示信息D,以及,向DTV模块发送指示信息E;Ginga模块响应于接收到的指示信息D,关闭Ginga通信链路,以阻断Ginga数据的传输、注入、解码和播放流程;DTV模块响应于接收到的指示信息E,重新开启第一DTV通信链路,使得DTV数据能够被传输、注入、解码和播放,这样即可在退出Ginga应用内的资源播放时,同步恢复原DTV信号的播放。
[0159] 在一些实施例中,Ginga应用内的流媒体资源播放也存在某些限定,比如具有指定的播放时长或数据量要求,可通过检测目标资源的播放进程,获知在非人为干预播放的场景下,目标资源是否自然播放完成。作为一种示例,例如DTV码流还可一并携带Ginga数据对应的资源信息,资源信息可包括资源总播放时长、资源数据量大小、数据类型(音视频、单视频或单音频)等信息。控制器在目标资源起播后检测其播放进程,若根据获取到的资源信息,检测到Ginga数据已播放完成,以图6的示例为例,即可向Ginga模块发送指示信息D,以及,向DTV模块发送指示信息E;Ginga模块响应于接收到的指示信息D,关闭Ginga通信链路,以阻断Ginga数据的传输、注入、解码和播放流程;DTV模块响应于接收到的指示信息E,重新开启第一DTV通信链路,使得DTV数据能够被传输、注入、解码和播放,这样即可在退出Ginga应用内的资源播放时,同步恢复原DTV信号的播放。
[0160] 在一些实施例中,共享内存链接于Ginga模块和播放控制模块间,以实现数据跨进程传输和共享,并且共享内存的缓存状态也指示着数据的播放进程。当Ginga通信链路处于开启状态,并且第一DTV通信链路处于关闭状态时,若共享内存为空,即说明Ginga数据已播放完成;反之,若共享内存中有非空的缓存余量,则说明尚有未被解码播放的待播数据,即说明Ginga数据未播放完毕。对于图6的示例,在目标资源的Ginga数据播放过程中,Ginga模块和DTV模块可以访问共享内存,若Ginga模块和DTV模块均检测到共享内存变化为空,则Ginga模块自动关闭Ginga通信链路,DTV模块自动开启第一DTV通信链路,从而将Source由Ginga切换为DTV,在Ginga数据播放完毕后自动恢复播放DTV信号,实现了Source播放在Ginga和DTV间的协调控制。图6的逻辑架构相当于构建了一个适用于Ginga应用的ES流媒体资源播放器,在启动Ginga应用中目标资源的播放时,即可直接调用该播放器进行播放控制。
[0161] 在一些实施例中,DTV信号的音视频数据和Ginga应用内的资源数据,两者共享解码器和显示器/声音播放器,因此需要保证数据源对解码播放资源的独占性,以避免播放冲突。DTV信号的音视频数据经过DTV协议栈,进行协议解析、解复用后,成为纯的音视频ES流,然后经过第一DTV通信链路依次进入DTV注入器、解码器后,等待被解码和播放。Ginga应用内的音视频数据经过过滤后,形成纯的音/视频ES流,经过Ginga通信链路被写入共享内存,后续经过第一线程和/或第二线程进入Ginga注入器、解码器后,等待被解码和播放。本申请相当于在解码器上链接了两条播放链路,分别为DTV播放链路和Ginga播放链路,DTV播放链路遍及DTV模块、第一DTV通信链路、DTV注入器、解码器、显示器/声音播放器;Ginga播放链路遍及Ginga模块、Ginga通信链路、共享内存、第一线程和/或第二线程、Ginga注入器、解码器、显示器/声音播放器。通过协调控制两条播放链路的启闭状态,保证每一时刻仅有一条播放链路被开启,另一条被关闭,避免切换Source时音视频解码播放资源间的冲突。例如,当用户启动播放Ginga应用中的目标资源时,则开启Ginga播放链路,关闭DTV播放链路,在目标资源播放结束时,再扭转播放链路的相对状态,即关闭Ginga播放链路,并开启DTV播放链路,从而自动恢复播放数字电视节目。
[0162] 在一些实施例中,如图7所示,提供一种资源播放方法,所述方法的执行主体为控制器,所述方法包括如下程序步骤:
[0163] 步骤S01,在播放DTV数据时,若接收到对Ginga应用中目标资源的起播操作,控制DTV模块从DTV信号中过滤出Ginga数据,并将Ginga数据发送到Ginga模块。
[0164] 可选地,DTV模块通过开启的第二DTV通信链路,将Ginga数据推送到共享内存,Ginga模块再从共享内存中获取Ginga数据,实现跨进程的数据传输。需要说明的是,Ginga模块、DTV模块和播放控制模块之间的通信方式不限于本申请实施例所述。
[0165] 步骤S02,控制DTV模块关闭与播放控制模块之间的第一DTV通信链路;所述第一DTV通信链路为DTV数据从DTV模块传输至播放控制模块的链路。
[0166] 其中,步骤S01和步骤S02可以同时执行。对于图6的示例,控制DTV模块调节与播放控制模块间的第一DTV通信链路的启闭状态。当然,本申请不限于其他可能的通信链路规划模式。
[0167] 步骤S03,控制Ginga模块开启与播放控制模块的Ginga通信链路。
[0168] 步骤S04,控制播放控制模块通过Ginga通信链路获取所述Ginga数据,对所述Ginga数据进行解码并播放。
[0169] 步骤S05,检测Ginga数据是否播放结束。如果播放未结束,则继续执行步骤S04;如果Ginga数据播放结束,则执行步骤S06~步骤S08。
[0170] 步骤S06,控制所述Ginga模块关闭所述Ginga通信链路。
[0171] 步骤S07,控制DTV模块开启所述第一DTV通信链路。
[0172] 步骤S08,控制所述播放控制模块通过所述第一DTV通信链路获取所述DTV数据,对所述DTV数据进行解码并播放。
[0173] 当第一DTV通信链路和Ginga通信链路的启闭状态都改变后,即可退出Ginga资源播放,并恢复至DTV播放。其中,控制器可以通过控制相应模块执行被配置的程序,达到对Ginga数据或DTV数据的播放控制。
[0174] 参照前述各实施例的描述,在图8所示的示例性实现方式中,提供一种资源播放方法,所述方法的实现涉及前述Ginga进程和TVmain进程的跨进程通信交互,控制器包括DTV模块、Ginga模块和播放控制模块,播放控制模块与显示器和声音播放器连接,Ginga进程对应于Ginga模块,TVmain进程对应于DTV模块和播放控制模块,在显示设备播放DTV数据,即当前Source为DTV时,若控制器通过用户接口接收到对Ginga应用中目标资源的起播操作,则对应于图6的示例,所述方法可包括如下程序步骤:
[0175] 步骤S101,DTV模块关闭第一DTV通信链路。
[0176] 步骤S102,DTV模块从DTV信号中过滤出Ginga数据,并将Ginga数据发送到Ginga模块。
[0177] 步骤S103,Ginga模块开启Ginga通信链路。
[0178] 步骤S104,播放控制模块通过Ginga通信链路获取Ginga数据,对所述Ginga数据进行解码并播放。
[0179] 在一些实施例中,播放控制模块中的视频解码器对Ginga数据中的视频数据进行解码,解码后的Ginga视频数据被发送给显示器显示,和/或,播放控制模块中的音频解码器对Ginga数据中的音频数据进行解码,解码后的Ginga音频数据被发送给声音播放器进行播放。
[0180] 步骤S105,播放控制模块检测Ginga数据是否播放结束。若Ginga数据未播放结束,即用户未主动退出Ginga资源的播放,并且Ginga资源的播放进程也未达到终点,则重复执行步骤S104和步骤S105;反之,若检测到Ginga数据播放结束,即控制器接收到用户停止播放Ginga数据的操作,或者Ginga数据自然播放完毕,则执行步骤S106~步骤S108。作为一种示例,播放控制模块中可以创建监控线程,用于监控Ginga数据的播放进程,从而判断Ginga数据是否播放完毕。
[0181] 步骤S106,Ginga模块关闭Ginga通信链路。作为一种示例,播放控制模块检测到播放结束时,可以向Ginga模块发送指示信息M;Ginga模块响应于接收到的指示信息M,则关闭Ginga通信链路。
[0182] 步骤S107,DTV模块开启第一DTV通信链路。作为一种示例,播放控制模块检测到播放结束时,可以向DTV模块发送指示信息N;DTV模块响应于接收到的指示信息N,则开启第一DTV通信链路。
[0183] 步骤S108,播放控制模块通过第一DTV通信链路获取DTV数据,对DTV数据进行解码并播放。
[0184] 在图8所示的第一种交互流程的基础上,在一些实施例中,图9示例的第二种交互流程中具体提供了Ginga数据的注入控制逻辑,播放控制模块具体包括注入器和解码器,其中解码器又包括视频解码器和音频解码器。在显示设备播放DTV数据,即当前Source为DTV时,若控制器通过用户接口接收到对Ginga应用中目标资源的起播操作,以目标资源的Ginga数据为单视频类型为例,则对应于图6的示例,所述方法可包括如下程序步骤:
[0185] 步骤S201,DTV模块关闭第一DTV通信链路。
[0186] 步骤S202,DTV模块从DTV信号中过滤出Ginga数据,并将Ginga数据发送到Ginga模块。
[0187] 步骤S203,Ginga模块开启Ginga通信链路。
[0188] 步骤S204,Ginga模块将Ginga数据推送到共享内存。
[0189] 步骤S205,播放控制模块创建第一线程和第二线程,控制第一线程启动执行注入控制程序,第二线程始终不执行注入控制程序。在其他实现方式中,播放控制模块也可仅创建第一线程,而不创建第二线程,即单视频类型的数据采用单线程处理。
[0190] 步骤S206,第一线程从共享内存中读取Ginga数据中的一帧视频帧数据,并控制自身线程为阻塞状态,等待注入器的反馈。
[0191] 步骤S207,注入器查询到视频解码器当前的第一缓存余量小于第二阈值,即buffer处于低等水位,则向第一线程发送第一数据注入请求。由于用户刚输入对目标资源的点击操作,视频解码器buffer中尚未缓存任何与当前目标资源有关的Ginga视频数据,因此处于低水位,需要积累一定的缓存才能正式解码播放。
[0192] 步骤S208,第一线程接收注入器发送的第一数据注入请求,则开启第一线程,标记并保存当前的视频帧数据的ID,并将视频帧数据发送给注入器。
[0193] 步骤S209,注入器将视频帧数据注入到视频解码器的buffer中等待解码。然后重复步骤S206~步骤S209。
[0194] 步骤S210,视频解码器检测到buffer中的第一缓存余量上升至第二阈值时,按照视频帧缓存的先后顺序,启动解码及播放程序。
[0195] 步骤S211,在Ginga数据播放过程中,注入器实时查询视频解码器的第一缓存余量。
[0196] 步骤S212A,注入器判断第一缓存余量是否处于[第二阈值,第一阈值]的区间范围内。若第一缓存余量处于[第二阈值,第一阈值]的区间范围内,视频解码器的buffer处于中等水位,则执行步骤S213。若第二缓存余量不位于该区间范围内,则执行步骤S212B。
[0197] 步骤S212B,注入器判断第一缓存余量是否大于第一阈值。若第一缓存余量大于第一阈值,视频解码器的buffer处于高等水位,则执行步骤S214;若否,即第一缓存余量小于第二阈值,视频解码器的buffer处于低等水位,则执行步骤S215~步骤S218。在Ginga数据播放过程中,采取按帧注入的方式,第一线程从共享内存中每读取一帧视频帧数据,都暂时处于阻塞状态,并等待注入器发送第一数据注入请求,只有接收到第一数据注入请求才唤醒第一线程,将当前视频帧数据发送给注入器。
[0198] 步骤S213,注入器保持向所述第一线程发送所述第一数据注入请求。
[0199] 步骤S214,注入器暂停向第一线程发送第一数据注入请求,直至第一缓存余量下降至[第二阈值,第一阈值]的区间范围内时,恢复向第一线程发送第一数据注入请求。
[0200] 步骤S215,注入器保持向第一线程发送第一数据注入请求,向显示器发送第一指示信息。
[0201] 步骤S216,显示器接收第一指示信息,暂停播放Ginga数据中的视频数据。显示器处于暂停播放状态时,视频解码器会同步暂停解码。
[0202] 步骤S217,注入器检测到第一缓存余量上升至第一阈值时,向显示器发送第二指示信息。
[0203] 步骤S218,显示器接收第二指示信息,在当前暂停帧处继续播放Ginga数据中后续的视频帧数据。显示器在暂停处恢复播放时,视频解码器同步恢复解码。
[0204] 步骤S219,检测Ginga数据是否播放结束。若Ginga数据未播放结束,即用户未主动退出Ginga资源的播放,并且Ginga资源的播放进程也未达到终点,则重复执行步骤步骤S211~步骤S219,继续执行Ginga视频数据的注入控制、解码和播放流程;反之,若检测到Ginga数据播放结束,即控制器接收到用户停止播放Ginga数据的操作,或者Ginga数据自然播放完毕,则执行步骤S220~步骤S222。
[0205] 步骤S220,Ginga模块关闭Ginga通信链路。
[0206] 步骤S221,DTV模块开启第一DTV通信链路。
[0207] 步骤S222,播放控制模块通过第一DTV通信链路获取DTV数据,对DTV数据进行解码并播放。
[0208] 需要说明的是,DTV数据也可支持与Ginga数据相同的注入控制逻辑。当Ginga数据为音视频或单音频类型时,数据注入控制逻辑与前述单视频类型相似,当为音视频时,第一线程和第二线程同时运行,并分别对音频数据和视频数据进行注入控制;当为单音频时,仅第二线程运行,第一线程不执行数据注入控制。对于图6的示例,若当前Source为DTV,可选地,在DTV模块与DTV注入器之间(即在TVmain进程中)创建第三线程和第四线程,进行基于解码器buffer的水位,对DTV信号的视频数据和音频数据进行独立注入控制。若当前Source为Ginga,则由Ginga进程创建第一线程和/或第二线程,对Ginga的视频数据和/或音频数据进行独立注入控制。
[0209] 在一种示例性的实现方式中,用户在Ginga应用中启动播放目标资源时,Ginga SDK会创建MediaBackend,BackendServer是MediaBackend的成员,在创建MediaBackend的构造体时,会一并创建BackendServer,Ginga SDK通过调用MediaBackend中配置的相关程序逻辑来实现目标资源的播放控制。
[0210] 在一种示例性的实现方式中,在启动播放Ginga应用中的目标资源时,创建MediaBackend的示例对象MediaBackend_,再调用setHasAudioSource和setHasVideoSource接口设置ES流的类型(单音频、单视频和音视频),再调用create接口去创建用于与注入器通信的RPC通信链路和共享内存,然后调用setUrl接口去创建播放路径(即访问和连接Source的URL路径),将Source由原DTV切换为Ginga,之后调用createAudioStream和createVideoStream分别创建音频流和视频流的播放链路,调用startAudioInject和startVideoInject启动音视频资源的播放流程,最后创建第一线程和第二线程分别处理视频和音频的数据注入,则解码播放前的所有基础配置工作已准备就绪,即可按照前述各项实施例的方案,正式执行音视频数据的传输、注入控制和解码播放等流程。本申请实施例中的Ginga架构不构成对本发明的限制,以本申请资源播放的流程和控制逻辑为基础,可以对显示设备系统和Ginga模块的底层配置、通信标准等内容进行适应性设置,以实现DTV和Ginga资源之间的无冲突播放。
[0211] 本领域的技术人员可以清楚地了解到本发明实施例中的技术可借助软件加必需的通用硬件平台的方式来实现。具体实现中,本发明还提供一种计算机存储介质,该计算机存储介质可存储有程序。当计算机存储介质位于显示设备中时,该程序执行时可包括前述各项实施例中涉及的资源播放方法的部分或全部程序步骤。其中,计算机存储介质可为磁碟、光盘、只读存储记忆体(英文:Read‑Only Memory,简称ROM)或随机存储记忆体(英文:Random Access Memory,简称RAM)等。
[0212] 最后应说明的是:以上各实施例仅用以说明本申请的技术方案,而非对其限制;尽管参照前述各实施例对本申请进行了详细的说明,本领域的普通技术人员应当理解:其依然可以对前述各实施例所记载的技术方案进行修改,或者对其中部分或者全部技术特征进行等同替换;而这些修改或者替换,并不使相应技术方案的本质脱离本申请各实施例技术方案的范围。
[0213] 为了方便解释,已经结合具体的实施方式进行了上述说明。但是,上述示例性的讨论不是意图穷尽或者将实施方式限定到上述公开的具体形式。根据上述的教导,可以得到多种修改和变形。上述实施方式的选择和描述是为了更好的解释原理以及实际的应用,从而使得本领域技术人员更好的使用所述实施方式以及适于具体使用考虑的各种不同的变形的实施方式。