视频播放的控制方法、装置、计算机设备和存储介质转让专利

申请号 : CN202010489106.8

文献号 : CN113766324B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 黄南燕

申请人 : 深圳市万普拉斯科技有限公司

摘要 :

本申请涉及一种视频播放的控制方法、装置、计算机设备和存储介质。所述方法包括:当应用程序播放视频时,对当前应用进程的状态进行监测;获取所述当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态;当检测到所述当前应用进程中不存在触发事件时,则动态调节所述应用程序的信号接收频率,按照所述信号接收频率接收硬件层分发的屏幕刷新同步信号;当检测到所述当前应用进程中存在触发事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号;根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。采用本方法能够在视频播放时保证操作界面流畅性同时又能有效降低功耗。

权利要求 :

1.一种视频播放的控制方法,所述方法包括:

当应用程序播放视频时,通过屏幕硬件驱动或按键驱动对当前应用进程的实时状态进行监测;

获取所述当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态;所述触发事件为屏幕输入事件;所述屏幕输入事件包括单击事件、触摸事件、触碰事件、或滑动事件中的至少一种;

当检测到所述当前应用进程中不存在屏幕输入事件时,则动态调节所述应用程序的信号接收频率,按照所述信号接收频率接收硬件层分发的屏幕刷新同步信号;

当检测到所述当前应用进程中存在屏幕输入事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号;

当检测到所述当前应用进程中存在弹幕消息时,获取当前应用进程接收屏幕刷新同步信号的时间间隔;根据所述屏幕刷新同步信号的时间间隔,计算得到所述当前应用进程对应的屏幕刷新率;根据所述屏幕刷新率,判断是否添加延迟时间对当前视频画面中的弹幕消息进行刷新;

根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。

2.根据权利要求1所述的方法,其特征在于,所述动态调节所述应用程序的信号接收频率包括:根据预设配置参数对所述屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号;

根据所述筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前视频画面进行渲染。

3.根据权利要求2所述的方法,其特征在于,所述方法还包括:

当通过抽象层接口接收到硬件层发送的屏幕刷新同步信号时,触发预设标志位的状态变化;

根据所述预设标志位变化后的状态,判断是否允许所述应用程序接收硬件层分发的屏幕刷新同步信号。

4.根据权利要求3所述的方法,其特征在于,所述根据所述预设标志位变化后的状态,判断是否允许所述应用程序接收硬件层分发的屏幕刷新同步信号包括:当所述预设标志位变化后的状态为零时,则接收当前硬件层分发的屏幕刷新同步信号;

当所述预设标志位变化后的状态不为零时,则跳过当前硬件层分发的屏幕刷新同步信号。

5.根据权利要求1所述的方法,其特征在于,所述当检测到所述当前应用进程中存在屏幕输入事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号之后,所述方法还包括:当检测到所述当前应用进程中存在弹幕消息时,调用函数程序计算所述弹幕消息对应的延迟时间;

在每次回调框架函数时,添加所述延迟时间触发主线程对当前视频画面中的弹幕消息进行刷新。

6.根据权利要求1所述的方法,其特征在于,所述当检测到所述当前应用进程中存在屏幕输入事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号之后,所述方法还包括:当检测到所述应用进程中存在弹幕消息时,根据预设配置参数对所述屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号;

根据所述筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前弹幕消息进行刷新。

7.一种视频播放的控制装置,其特征在于,所述装置包括:

监测模块,用于当应用程序播放视频时,通过屏幕硬件驱动或按键驱动对当前应用进程的实时状态进行监测;

获取模块,用于获取所述当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态;所述触发事件为屏幕输入事件;所述屏幕输入事件包括单击事件、触摸事件、触碰事件、或滑动事件中的至少一种;

检测模块,用于当检测到所述当前应用进程中不存在屏幕输入事件时,则动态调节所述应用程序的信号接收频率,按照所述信号接收频率接收硬件层分发的屏幕刷新同步信号;当检测到所述当前应用进程中存在屏幕输入事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号;当检测到所述当前应用进程中存在弹幕消息时,获取当前应用进程接收屏幕刷新同步信号的时间间隔;根据所述屏幕刷新同步信号的时间间隔,计算得到所述当前应用进程对应的屏幕刷新率;根据所述屏幕刷新率,判断是否添加延迟时间对当前视频画面中的弹幕消息进行刷新;

刷新模块,用于根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。

8.根据权利要求7所述的视频播放的控制装置,其特征在于,所述装置还包括:筛减模块,用于根据预设配置参数对所述屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号;

调用模块,用于根据所述筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前视频画面进行渲染。

9.一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至6中任一项所述方法的步骤。

10.一种计算机可读存储介质,其上存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现权利要求1至6中任一项所述的方法的步骤。

说明书 :

视频播放的控制方法、装置、计算机设备和存储介质

技术领域

[0001] 本申请涉及计算机技术领域,特别是涉及一种视频播放的控制方法、装置、计算机设备和存储介质。

背景技术

[0002] 随着计算机技术的发展,各种类型的视频播放应用程序越来越多,当用户利用不同应用程序进行高清视频播放时,还可以实时对当前正在播放的视频发送弹幕消息参与互动。传统的方式中,为了保证视频播放的画质和操作界面的流畅性通常采用的方式是维持屏幕硬件高刷新率进行视频播放。
[0003] 然而,在目前常用的视频播放方式中,如果一直维持屏幕硬件高刷新率则会相当耗电,导致功耗过大的问题,如果采用直接将屏幕硬件刷新率降低的方式,那么在播放视频时又会影响操作界面的流畅性。

发明内容

[0004] 基于此,有必要针对上述技术问题,提供一种能够保证操作界面流畅性同时又能够有效降低功耗的视频播放的控制方法、装置、计算机设备和存储介质。
[0005] 一种视频播放的控制方法,所述方法包括:
[0006] 当应用程序播放视频时,对当前应用进程的状态进行监测;
[0007] 获取所述当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态;
[0008] 当检测到所述当前应用进程中不存在触发事件时,则动态调节所述应用程序的信号接收频率,按照所述信号接收频率接收硬件层分发的屏幕刷新同步信号;
[0009] 当检测到所述当前应用进程中存在触发事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号;
[0010] 根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。
[0011] 在其中一个实施例中,所述动态调节所述应用程序的信号接收频率,按照所述信号接收频率接收硬件层分发的屏幕刷新同步信号包括:
[0012] 根据预设配置参数对所述屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号;
[0013] 根据所述筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前视频画面进行渲染。
[0014] 在其中一个实施例中,所述方法还包括:
[0015] 当通过抽象层接口接收到硬件层发送的屏幕刷新同步信号时,触发预设标志位的状态变化;
[0016] 根据所述预设标志位变化后的状态,判断是否允许所述应用程序接收硬件层分发的屏幕刷新同步信号。
[0017] 在其中一个实施例中,所述根据所述预设标志位变化后的状态,判断是否允许所述应用程序接收硬件层分发的屏幕刷新同步信号包括:
[0018] 当所述预设标志位变化后的状态为零时,则接收当前硬件层分发的屏幕刷新同步信号;
[0019] 当所述预设标志位变化后的状态不为零时,则跳过当前硬件层分发的屏幕刷新同步信号。
[0020] 在其中一个实施例中,所述当检测到所述当前应用进程中存在触发事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号之后,所述方法还包括:
[0021] 当检测到所述当前应用进程中存在弹幕消息时,调用函数程序计算所述弹幕消息对应的延迟时间;
[0022] 在每次回调框架函数时,添加所述延迟时间触发主线程对当前视频画面中的弹幕消息进行刷新。
[0023] 在其中一个实施例中,所述当检测到所述当前应用进程中存在弹幕消息时包括:
[0024] 获取当前应用进程接收屏幕刷新同步信号的时间间隔;
[0025] 根据所述屏幕刷新同步信号的时间间隔,计算得到所述当前应用进程对应的屏幕刷新率;
[0026] 根据所述屏幕刷新率,判断是否添加所述延迟时间对当前视频画面中的弹幕消息进行刷新。
[0027] 在其中一个实施例中,所述当检测到所述当前应用进程中存在触发事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号之后,所述方法还包括:
[0028] 当检测到所述应用进程中存在弹幕消息时,根据预设配置参数对所述屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号;
[0029] 根据所述筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前弹幕消息进行刷新。
[0030] 一种视频播放的控制装置,所述装置包括:
[0031] 监测模块,用于当应用程序播放视频时,对当前应用进程的状态进行监测;
[0032] 获取模块,用于获取所述当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态;
[0033] 检测模块,用于当检测到所述当前应用进程中不存在触发事件时,则动态调节所述应用程序的信号接收频率,按照所述信号接收频率接收硬件层分发的屏幕刷新同步信号;当检测到所述当前应用进程中存在触发事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号;
[0034] 刷新模块,用于根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。
[0035] 一种计算机设备,包括存储器和处理器,所述存储器存储有计算机程序,所述处理器执行所述计算机程序时实现以下步骤:
[0036] 当应用程序播放视频时,对当前应用进程的状态进行监测;
[0037] 获取所述当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态;
[0038] 当检测到所述当前应用进程中不存在触发事件时,则动态调节所述应用程序的信号接收频率,按照所述信号接收频率接收硬件层分发的屏幕刷新同步信号;
[0039] 当检测到所述当前应用进程中存在触发事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号;
[0040] 根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。
[0041] 一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现以下步骤:
[0042] 当应用程序播放视频时,对当前应用进程的状态进行监测;
[0043] 获取所述当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态;
[0044] 当检测到所述当前应用进程中不存在触发事件时,则动态调节所述应用程序的信号接收频率,按照所述信号接收频率接收硬件层分发的屏幕刷新同步信号;
[0045] 当检测到所述当前应用进程中存在触发事件时,则恢复所述应用程序以原始频率接收硬件层分发的屏幕刷新同步信号;
[0046] 根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。
[0047] 上述视频播放的控制方法、装置、计算机设备和存储介质,当应用程序播放视频时,对当前应用进程的状态进行监测。相对于传统的视频播放方式,通过获取当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态。当检测到当前应用进程中不存在触发事件时,则动态调节应用程序的信号接收频率,按照调节后的信号接收频率接收硬件层分发的屏幕刷新同步信号。根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。当检测到当前应用进程中存在触发事件时,则恢复应用程序以原始频率接收硬件层分发的屏幕刷新同步信号,根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。由此使得通过对当前应用进程的状态进行监测,当检测到当前应用进程中不存在触发事件时,则动态调节对应的信号接收频率;当检测到当前应用进程中存在触发事件时,则恢复应用程序以原始频率接收硬件层分发的屏幕刷新同步信号,即通过动态调节软件刷新率,有效的解决了传统方式中一直维持屏幕硬件高刷新率的耗电问题,能够保证操作界面的流畅性,同时又能够有效降低功耗。

附图说明

[0048] 图1为一个实施例中视频播放的控制方法的流程示意图;
[0049] 图2为一个实施例中动态调节应用程序的信号接收频率步骤的流程示意图;
[0050] 图3为一个实施例中触发预设标志位的状态变化步骤的流程示意图;
[0051] 图4为一个实施例中调用函数程序计算弹幕消息对应的延迟时间步骤的流程示意图;
[0052] 图5为一个实施例中视频播放的控制装置的结构框图;
[0053] 图6为一个实施例中计算机设备的内部结构图。

具体实施方式

[0054] 为了使本申请的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本申请进行进一步详细说明。应当理解,此处描述的具体实施例仅仅用以解释本申请,并不用于限定本申请。
[0055] 在一个实施例中,如图1所示,提供了一种视频播放的控制方法,本实施例以该方法应用于终端进行举例说明,终端可以但不限于是各种个人计算机、笔记本电脑、智能手机、平板电脑和便携式可穿戴设备。可以理解的是,该方法也可以应用于服务器,还可以应用于包括终端和服务器的系统,并通过终端和服务器的交互实现。本实施例中,该方法包括以下步骤:
[0056] 步骤102,当应用程序播放视频时,对当前应用进程的状态进行监测。
[0057] 移动终端是一类嵌入式计算机系统设备,软件结构可以分为系统软件和应用软件。在移动终端的软件结构中,系统软件主要是操作系统和中间件,常见的移动终端操作系统有苹果的IOS、谷歌的Android、惠普的WebOS、开源的MeeGo及微软Windows等。使用不同操作系统移动终端的用户均可以通过移动终端中的应用市场界面下载多种类型的视频播放应用程序,例如目前常见的视频播放应用程序包括但不限于哔哩哔哩动画、斗鱼直播、虎牙直播和爱奇艺等均支持弹幕消息的功能。具体的,以Android操作系统为例,用户可以通过点选移动终端设备主界面中的某个特定的视频播放应用程序,启动该应用程序进入与该视频播放应用程序对应的页面中。上述应用进程(App Process)在启动过程中通过套接字(socket)与系统服务程序(SurfaceFlinger)建立连接。套接字(socket)是一个抽象层,应用程序可以通过它发送或接收数据。用户通过该应用程序播放视频时,即在Android操作系统中该应用程序播放视频时,移动终端通过屏幕硬件驱动或按键驱动对当前应用进程的状态进行监测。即通过屏幕硬件驱动或按键驱动对当前应用进程的实时状态进行监测,并上报给对应的监听者(在Android系统中为InputReader)。
[0058] 步骤104,获取当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态。
[0059] 用户通过上述应用程序播放视频时,通过屏幕硬件驱动或按键驱动对当前应用进程的状态进行实时监测。移动终端获取当前应用程序播放视频时对应的状态,包括存在触发事件状态和不存在触发事件状态。具体的,用户通过点选移动终端设备主界面中的某个特定的视频播放应用程序,启动该应用程序进入与该应用程序对应的页面中。用户通过该应用程序播放视频时,用户可以对当前播放的视频进行一系列菜单操作,例如用户可以通过点击当前视频播放界面中的快进或者暂停按钮,控制当前视频播放画面的进度。用户也可以通过滑动当前视频播放界面中的亮度调节、声音调节图标,控制当前视频播放画面的亮度和音量。即当应用程序播放视频时,移动终端通过屏幕硬件驱动或按键驱动对当前应用进程的状态进行监测。当移动终端检测到用户触摸屏幕或者按压物理按键时,则识别当前应用进程的状态为存在触发事件状态,并将上述触发事件上报给对应的监听者,从而使得系统服务程序按照触发事件的不同需求分发给对应的进程。其中,移动终端中的触发事件即屏幕输入事件(Input事件)可以包括单击事件(click事件)、触摸事件(touch类事件)、触碰事件(tap类事件)、滑动事件(swipe类事件)等,也就是用户可以对应用程序当前播放的视频进行一系列的菜单操作,例如调节视频播放速度、发送实时弹幕消息等。
[0060] 步骤106,当检测到当前应用进程中不存在触发事件时,则动态调节应用程序的信号接收频率,按照该信号接收频率接收硬件层分发的屏幕刷新同步信号。
[0061] 用户通过上述应用程序播放视频时,通过屏幕硬件驱动或按键驱动对当前应用进程的状态进行实时监测。当移动终端通过屏幕硬件驱动或按键驱动检测到当前应用进程中不存在触发事件时,即通过Android系统中的DynamicVsyncHelper控件监听当前应用进程是否收到input事件,当不存在input事件时,也就是用户当前没有在该应用程序界面中进行操作,则终端动态调节当前应用程序的信号接收频率,按照调节后的信号接收频率接收硬件层分发的屏幕刷新同步信号,即终端有策略的限制当前应用程序接收硬件层分发的屏幕刷新同步信号的次数,从而限制该应用程序对应的软件画面刷新率。其中,GPU即图像处理芯片,又称显示核心、视觉处理器、显示芯片,GPU通常有一个机制叫做垂直同步(简写V‑Sync),当开启垂直同步后,GPU会等待显示器的Vsync信号发出后,才进行新的一帧渲染和缓冲区更新。屏幕的刷新过程是每一行从左到右(行刷新,水平刷新,Horizontal Scanning),从上到下(屏幕刷新,垂直刷新,Vertical Scanning)。当整个屏幕刷新完毕,即一个垂直刷新周期完成,会有短暂的空白期,此时发出Vsync信号。所以,Vsync信号中的V指的是垂直刷新中的垂直/Vertical,屏幕刷新同步信号即Vsync信号。具体的,当Android系统中的DynamicVsyncHelper控件检测到当前应用进程中没有触发事件时,则终端限制当前应用程序的信号接收频率,按照限制后的信号接收频率接收硬件层分发的屏幕刷新同步信号,使得终端可以通过调节每帧接收屏幕刷新同步信号(Vsync信号)的次数,从而改变当前软件画面的刷新率。在Android系统中,视频帧率是由软件屏幕刷新的同步信号(Vsync信号)间隔决定的,上述应用程序通过套接字接口(socket)接收来自系统服务(SurfaceFlinger)的软件Vsync信号,即屏幕刷新同步信号。其中,硬件屏端的时钟信号,由硬件屏幕产生经过HWComposer处理分给SurfaceFlinger,最终分发给应用。屏幕刷新率(FPS每秒传输帧数Frames Per Second)是画面每秒传输帧数,通俗来讲就是动画或视频的画面数。FPS是测量用于保存、显示动态视频的信息数量。每秒钟帧数越多,所显示的动作就会越流畅。本申请中可以指软件画面刷新率,即每秒内软件的绘制次数,即收到Vsync信号的次数。当终端检测到当前应用进程中不存在触发事件时,则终端可以动态调节应用程序接收硬件层分发的屏幕刷新同步信号,即终端可以通过调节应用程序的信号接收频率,即调节应用程序接收屏幕刷新同步信号的次数,例如终端可以预先在配置文件中设置拦截或者每隔一帧跳过一次屏幕刷新同步信号(Vsync信号),即可改变当前软件画面对应的刷新率,将当前软件画面刷新率限制在预设的数值范围内进行画面刷新。例如,终端获取到当前软件画面刷新率为120Hz,即每秒视频画面刷新120次,可以通过在配置文件中预先设置标志位的方式,每隔一帧丢掉一次Vsync信号,则终端调节上述应用程序的信号接收频率为60Hz,即终端按照上述信号接收频率接收屏幕刷新同步信号的次数为每秒视频画面刷新60次,也就是当前软件画面刷新率从120Hz调节为60Hz。具体的,在Android系统中,应用进程(App Process)在启动过程中通过抽象层Socket与系统服务程序(SurfaceFlinger)建立连接,系统服务程序将Vsync信号通过抽象层Socket分发给应用进程。应用进程收到该信号之后,通过DynamicVsyncHelper控件根据应用当前状态,即判断是否存在Input事件,从而决定是否忽略此次Vsync信号。当移动终端通过DynamicVsyncHelper控件检测到当前应用进程中不存在触发事件时,则终端忽略此次Vsync信号,等待接收下一次Vsync信号。移动终端可以根据接收到的下一次的Vsync信号,触发主线程对当前视频画面进行刷新。
[0062] 步骤108,当检测到当前应用进程中存在触发事件时,则恢复应用程序以原始频率接收硬件层分发的屏幕刷新同步信号。
[0063] 用户通过上述应用程序播放视频时,通过屏幕硬件驱动或按键驱动对当前应用进程的状态进行实时监测。当移动终端通过屏幕硬件驱动或按键驱动检测到当前应用进程中存在触发事件时,即通过Android系统中的DynamicVsyncHelper控件监听当前应用进程是否收到input事件,当存在input事件时,也就是用户当前在该应用程序界面中进行操作时,则终端恢复当前应用程序以原始频率接收硬件层分发的屏幕刷新同步信号,即终端停止限制该应用程序接收硬件层分发的屏幕刷新同步信号的次数,从而恢复原始的软件画面刷新率,允许当前应用程序以原始频率接收硬件层分发的全部屏幕刷新同步信号。
[0064] 步骤110,根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。
[0065] 用户通过上述应用程序播放视频时,通过屏幕硬件驱动或按键驱动对当前应用进程的状态进行实时监测。当移动终端通过屏幕硬件驱动或按键驱动检测到当前应用进程中不存在触发事件时,即通过Android系统中的DynamicVsyncHelper控件监听当前应用进程是否收到input事件,当不存在input事件时,也就是用户当前没有在该应用程序界面中进行操作,则终端动态调节当前应用程序的信号接收频率,按照调节后的信号接收频率接收硬件层分发的屏幕刷新同步信号,终端根据上述接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。当移动终端通过屏幕硬件驱动或按键驱动检测到当前应用进程中存在触发事件时,即通过Android系统中的DynamicVsyncHelper控件监听当前应用进程中存在input事件时,也就是用户当前在该应用程序界面中进行操作时,则终端恢复当前应用程序以原始频率接收硬件层分发的全部屏幕刷新同步信号,即终端停止限制该应用程序接收硬件层分发的屏幕刷新同步信号的次数,恢复原始的软件画面刷新率,允许当前应用程序以原始频率接收硬件层分发的全部屏幕刷新同步信号。终端根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。具体的,在Android系统中,应用进程(App Process)在启动过程中通过抽象层Socket与系统服务程序(SurfaceFlinger)建立连接,系统服务程序接收到从硬件层发送的Vsync信号,对上述Vsync信号进行封装后通过抽象层Socket分发给应用进程。应用进程收到信号之后,应用进程使用预先注册好的FrameDisplayEventReceiver接口回调触发下一帧的画面绘制。当满足条件时,应用主线程即开始执行measure、layout以及draw的绘制相关操作。
[0066] 本实施例中,当应用程序播放视频时,对当前应用进程的状态进行监测。相对于传统的视频播放方式,通过获取当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态。当检测到当前应用进程中不存在触发事件时,则动态调节应用程序的信号接收频率,按照调节后的信号接收频率接收硬件层分发的屏幕刷新同步信号,根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。当检测到当前应用进程中存在触发事件时,则恢复应用程序以原始频率接收硬件层分发的屏幕刷新同步信号,根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。由此使得通过对当前应用进程的状态进行监测,当检测到当前应用进程中不存在触发事件时,则动态调节对应的信号接收频率;当检测到当前应用进程中存在触发事件时,则恢复应用程序以原始频率接收硬件层分发的屏幕刷新同步信号,即通过动态调节软件刷新率,有效的解决了传统方式中一直维持屏幕硬件高刷新率的耗电问题,能够保证操作界面的流畅性,同时又能够有效降低功耗。
[0067] 在一个实施例中,如图2所示,动态调节应用程序的信号接收频率的步骤包括:
[0068] 步骤202,根据预设配置参数对屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号。
[0069] 步骤204,根据筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前视频画面进行渲染。
[0070] 用户通过上述应用程序播放视频时,通过屏幕硬件驱动或按键驱动对当前应用进程的状态进行实时监测。当移动终端通过屏幕硬件驱动或按键驱动检测到当前应用进程中不存在触发事件时,则终端动态调节当前应用程序的信号接收频率,按照调节后的信号接收频率接收硬件层分发的屏幕刷新同步信号。具体的,当移动终端通过屏幕硬件驱动或按键驱动检测到当前应用进程中不存在触发事件时,移动终端根据预设配置参数对屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号。移动终端根据筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前视频画面进行渲染。在Android系统中,应用进程收到Vsync信号之后,移动终端通过DynamicVsyncHelper控件监测当前应用进程的状态,同时获取当前接收到Vsync信号的时间间隔,即获取到当前软件画面的刷新率。当通过DynamicVsyncHelper控件检测到当前应用进程中不存在触发事件时,移动终端根据预设配置参数对屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号。例如,移动终端可以预先在配置参数中设置一个标志位,假设获取到当前软件画面的刷新率为120Hz,通过标志位状态的变化对屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号,即筛减后可以将当前软件画面的刷新率从120Hz调节为60Hz。进一步的,移动终端根据筛减后的屏幕刷新同步信号,调用预先注册好的FrameDisplayEventReceiver函数接口回调触发下一帧的画面绘制,触发主线程对当前视频画面进行绘制相关的操作。由此使得在应用程序播放视频时,在保证操作界面流畅性的同时又能够通过调节软件画面刷新率,尽可能的减少画面渲染和刷新次数,从而有效的降低了功耗,解决了功耗过大的问题。
[0071] 在一个实施例中,如图3所示,该方法还包括触发预设标志位的状态变化的步骤,具体包括:
[0072] 步骤302,当通过抽象层接口接收到硬件层发送的屏幕刷新同步信号时,触发预设标志位的状态变化。
[0073] 步骤304,根据预设标志位变化后的状态,判断是否允许应用程序接收硬件层分发的屏幕刷新同步信号。
[0074] 当应用程序通过抽象层(Socket)接收到系统服务程序(SurfaceFlinger)分发的屏幕刷新同步信号时,触发预设标志位的状态变化。移动终端根据预设标志位变化后的状态,判断是否允许应用程序接收下一次硬件层分发的屏幕刷新同步信号。具体的,当应用程序通过抽象层(Socket)接收到系统服务程序(SurfaceFlinger)分发的屏幕刷新同步信号时,触发预设标志位的状态变化。可以通过预先在配置文件中设置每隔一帧画面丢掉一次屏幕刷新同步信号(Vsync信号),即可以预先设置当应用程序每接收到一次屏幕刷新同步信号时(Vsync信号)改变对应的标志位状态。进一步的,终端根据预设标志位变化后的状态,判断是否允许应用程序接收下一次硬件层分发的屏幕刷新同步信号。
[0075] 在其中一个实施例中,根据预设标志位变化后的状态,判断是否允许应用程序接收硬件层分发的屏幕刷新同步信号的步骤包括:
[0076] 当预设标志位变化后的状态为零时,则接收当前硬件层分发的屏幕刷新同步信号。
[0077] 当预设标志位变化后的状态不为零时,则跳过当前硬件层分发的屏幕刷新同步信号。
[0078] 当应用程序通过抽象层(Socket)接收到系统服务程序(SurfaceFlinger)分发的屏幕刷新同步信号时,触发预设标志位的状态变化。可以通过预先在配置文件中设置每隔一帧画面丢掉一次屏幕刷新同步信号(Vsync信号),即设置当应用程序每接收到一次屏幕刷新同步信号时(Vsync信号)改变对应的标志位状态。当预设标志位变化后的状态为零时,则终端允许应用程序接收当前硬件层分发的屏幕刷新同步信号。当预设标志位变化后的状态不为零时,则跳过当前硬件层分发的屏幕刷新同步信号,即终端拦截应用程序接收当前硬件层分发的屏幕刷新同步信号。例如,当预设标志位变化后的状态为零时,则终端允许应用程序接收当前硬件层分发的屏幕刷新同步信号。当应用程序等待接收下一帧屏幕刷新同步信号时,终端检测到预设标志位变化后的状态不为零时,假设当终端检测到预设标志位变化后的状态为1时,则终端通过DynamicVsyncHelper控件拦截当前系统服务程序分发的屏幕刷新同步信号,即跳过此次屏幕刷新同步信号,只有当标志位的状态符合预设条件时,标志位才会变成true,允许应用程序接收当前硬件层分发的屏幕刷新同步信号。由此使得通过预设标志位的方式,实现动态调节应用程序接收屏幕刷新同步信号的次数,无需终端设备一直维持屏幕硬件的高刷新率,通过动态调节软件画面刷新率,减少画面渲染和刷新次数,从而有效的降低了终端设备的功耗。
[0079] 在一个实施例中,如图4所示,当检测到当前应用进程中存在触发事件时,则恢复应用程序以原始频率接收硬件层分发的屏幕刷新同步信号之后,该方法还包括调用函数程序计算弹幕消息对应的延迟时间的步骤,具体包括:
[0080] 步骤402,当检测到当前应用进程中存在弹幕消息时,调用函数程序计算弹幕消息对应的延迟时间。
[0081] 步骤404,在每次回调框架函数时,添加延迟时间触发主线程对当前视频画面中的弹幕消息进行刷新。
[0082] 用户通过上述应用程序播放视频时,通过屏幕硬件驱动或按键驱动对当前应用进程的状态进行实时监测。当移动终端通过屏幕硬件驱动或按键驱动检测到当前应用进程中存在触发事件时,则终端恢复应用程序以原始频率接收硬件层分发的屏幕刷新同步信号。在上述应用程序播放视频时,用户可以实时发送弹幕消息参与互动。当移动终端检测到当前应用进程中存在弹幕消息时,调用函数程序计算弹幕消息对应的延迟时间。当移动终端每次回调框架函数时,添加延迟时间触发主线程对当前视频画面中的弹幕消息进行刷新。
其中,弹幕消息的速度是每次刷新后弹幕消息相对上一次刷新时的位移距离决定的。每次刷新的位移距离是固定值,假设这个位移距离为单位距离,根据下述公式:弹幕速度=位移距离/时间,即弹幕速度是由软件刷新的时间间隔决定。在没有调节软件刷新率时,假设移动终端获取到当前软件刷新率为120Hz,也就是每秒弹幕消息移动距离为120个单位距离。
移动终端通过动态调节软件刷新率至60Hz后,弹幕每秒的移动距离就为60个单位距离,由此使得在动态调节软件刷新率时,会导致弹幕消息的速度不一致的问题。因此当移动终端检测到当前应用进程中存在弹幕消息时,调用函数程序计算弹幕消息对应的延迟时间。可以预先在函数程序中设置对应的计算公式,即周期T=1/频率f,终端根据不同的频率即可计算出对应的周期时间,两个不同频率之间的时间差值,即为延迟时间。例如,移动终端获取到上一帧画面的刷新率为120Hz,当移动终端检测到当前应用进程中存在触发事件时,则恢复应用程序以原始频率接收硬件层分发的全部屏幕刷新同步信号,即移动终端获取到当前画面的刷新率为60Hz。当刷新率限制为60Hz时,调用函数程序计算对应的弹幕周期为每帧16.6ms,当刷新率恢复为120Hz时,调用函数程序计算对应的弹幕周期为每帧8.3ms,两者之间周期时间差值为8.3ms,即计算得到弹幕消息对应的延迟时间为8.3ms。其中,在Android系统中,弹幕消息是通过每帧都向Choreographer注册FrameCallback的回调实现的。当移动终端每次执行回调FrameCallback时,添加上述延迟时间触发主线程对当前视频画面中的弹幕消息进行刷新。由此使得可以根据当前视频播放画面帧率动态选择是否限制弹幕回调,通过对每一次的回调添加合适的延迟时间,以解决弹幕速度不一致的问题,即使在动态调节软件刷新率的情况下,也能够保证弹幕消息的一致性和流畅性。
[0083] 在其中一个实施例中,当检测到当前应用进程中存在弹幕消息时的步骤包括:
[0084] 获取当前应用进程接收屏幕刷新同步信号的时间间隔。
[0085] 根据屏幕刷新同步信号的时间间隔,计算得到当前应用进程对应的屏幕刷新率。
[0086] 根据屏幕刷新率,判断是否添加延迟时间对当前视频画面中的弹幕消息进行刷新。
[0087] 当移动终端检测到当前应用进程中存在弹幕消息时,移动终端可以获取当前应用进程接收屏幕刷新同步信号的时间间隔,即获取当前弹幕消息对应周期。移动终端可以根据屏幕刷新同步信号的时间间隔,计算得到当前应用进程对应的屏幕刷新率。移动终端根据当前应用进程对应的屏幕刷新率,判断是否添加延迟时间对当前视频画面中的弹幕消息进行刷新。例如,移动终端可以获取当前应用进程接收屏幕刷新同步信号的时间间隔为8.3ms,即当前弹幕消息对应周期为8.3ms,终端根据预先在函数程序中设置对应的计算公式,即周期T=1/频率f,终端根据不同的周期即可计算出对应的频率,即频率f为120Hz。进一步的,移动终端根据当前应用进程对应的屏幕刷新率,判断是否添加延迟时间对当前视频画面中的弹幕消息进行刷新。例如,当移动终端获取到当前应用进程对应的屏幕刷新率也为120Hz,即与弹幕消息的频率f相同时,则移动终端判断当前无需添加延迟时间,即可直接对当前视频画面中的弹幕消息进行刷新。当移动终端获取到当前应用进程对应的屏幕刷新率与弹幕消息的频率f不相同时,则移动终端判断需要添加延迟时间对当前视频画面中的弹幕消息进行刷新。由此使得终端可以根据当前应用程序对应的屏幕刷新率,判断是否添加延迟时间对当前视频画面中的弹幕消息进行刷新,以解决弹幕速度不一致的问题,同时也可以动态调节弹幕消息对应的刷新率,从而能够保证弹幕消息与播放画面的一致性和流畅性。
[0088] 在一个实施例中,当检测到当前应用进程中存在触发事件时,则恢复应用程序以原始频率接收硬件层分发的屏幕刷新同步信号之后,该方法还包括对当前弹幕消息进行刷新的步骤,具体包括:
[0089] 当检测到应用进程中存在弹幕消息时,根据预设配置参数对屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号。
[0090] 根据筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前弹幕消息进行刷新。
[0091] 当检测到当前应用进程中存在弹幕消息时,除了可以通过对每次的回调添加对应的延迟时间的方式之外,移动终端也可以根据预设配置参数对屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号。移动终端根据筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前弹幕消息进行刷新。即通过动态调节弹幕消息对应的刷新率,以解决弹幕速度不一致的问题,即使在动态调节软件刷新率的情况下,也可以同时动态调节弹幕消息对应的刷新率,从而能够保证弹幕消息的一致性和流畅性。
[0092] 应该理解的是,虽然图1‑4的流程图中的各个步骤按照箭头的指示依次显示,但是这些步骤并不是必然按照箭头指示的顺序依次执行。除非本文中有明确的说明,这些步骤的执行并没有严格的顺序限制,这些步骤可以以其它的顺序执行。而且,图1‑4中的至少一部分步骤可以包括多个步骤或者多个阶段,这些步骤或者阶段并不必然是在同一时刻执行完成,而是可以在不同的时刻执行,这些步骤或者阶段的执行顺序也不必然是依次进行,而是可以与其它步骤或者其它步骤中的步骤或者阶段的至少一部分轮流或者交替地执行。
[0093] 在一个实施例中,如图5所示,提供了一种视频播放的控制装置,包括:监测模块502、获取模块504、检测模块506和刷新模块508,其中:
[0094] 监测模块502,用于当应用程序播放视频时,对当前应用进程的状态进行监测。
[0095] 获取模块504,用于获取当前应用进程的状态,包括存在触发事件状态和不存在触发事件状态。
[0096] 检测模块506,用于当检测到当前应用进程中不存在触发事件时,则动态调节应用程序的信号接收频率,按照该信号接收频率接收硬件层分发的屏幕刷新同步信号;当检测到当前应用进程中存在触发事件时,则恢复应用程序以原始频率接收硬件层分发的屏幕刷新同步信号。
[0097] 刷新模块508,用于根据接收到的屏幕刷新同步信号,触发主线程对当前视频画面进行刷新。
[0098] 在一个实施例中,该装置还包括:筛减模块和调用模块。
[0099] 筛减模块用于根据预设配置参数对屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号。调用模块用于根据筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前视频画面进行渲染。
[0100] 在一个实施例中,该装置还包括:触发模块和判断模块。
[0101] 触发模块用于当通过抽象层接口接收到硬件层发送的屏幕刷新同步信号时,触发预设标志位的状态变化。判断模块用于根据预设标志位变化后的状态,判断是否允许应用程序接收硬件层分发的屏幕刷新同步信号。
[0102] 在一个实施例中,判断模块还用于当预设标志位变化后的状态为零时,则接收当前硬件层分发的屏幕刷新同步信号;当预设标志位变化后的状态不为零时,则跳过当前硬件层分发的屏幕刷新同步信号。
[0103] 在一个实施例中,调用模块还用于当检测到当前应用进程中存在弹幕消息时,调用函数程序计算弹幕消息对应的延迟时间。刷新模块还用于在每次回调框架函数时,添加延迟时间触发主线程对当前视频画面中的弹幕消息进行刷新。
[0104] 在一个实施例中,获取模块还用于获取当前应用进程接收屏幕刷新同步信号的时间间隔。该装置还包括:计算模块,计算模块用于根据屏幕刷新同步信号的时间间隔,计算得到当前应用进程对应的屏幕刷新率。判断模块还用于根据屏幕刷新率,判断是否添加延迟时间对当前视频画面中的弹幕消息进行刷新。
[0105] 在一个实施例中,检测模块还用于当检测到应用进程中存在弹幕消息时,根据预设配置参数对屏幕刷新同步信号进行筛减,得到筛减后的屏幕刷新同步信号。调用模块还用于根据筛减后的屏幕刷新同步信号,调用框架函数发送消息到主线程,触发主线程对当前弹幕消息进行刷新。
[0106] 关于视频播放的控制装置的具体限定可以参见上文中对于视频播放的控制方法的限定,在此不再赘述。上述视频播放的控制装置中的各个模块可全部或部分通过软件、硬件及其组合来实现。上述各模块可以硬件形式内嵌于或独立于计算机设备中的处理器中,也可以以软件形式存储于计算机设备中的存储器中,以便于处理器调用执行以上各个模块对应的操作。
[0107] 在一个实施例中,提供了一种计算机设备,该计算机设备可以是终端,其内部结构图可以如图6所示。该计算机设备包括通过系统总线连接的处理器、存储器、通信接口、显示屏和输入装置。其中,该计算机设备的处理器用于提供计算和控制能力。该计算机设备的存储器包括非易失性存储介质、内存储器。该非易失性存储介质存储有操作系统和计算机程序。该内存储器为非易失性存储介质中的操作系统和计算机程序的运行提供环境。该计算机设备的通信接口用于与外部的终端进行有线或无线方式的通信,无线方式可通过WIFI、运营商网络、NFC(近场通信)或其他技术实现。该计算机程序被处理器执行时以实现一种视频播放的控制方法。该计算机设备的显示屏可以是液晶显示屏或者电子墨水显示屏,该计算机设备的输入装置可以是显示屏上覆盖的触摸层,也可以是计算机设备外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。
[0108] 本领域技术人员可以理解,图6中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的计算机设备的限定,具体的计算机设备可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
[0109] 在一个实施例中,提供了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行计算机程序时实现上述各个方法实施例的步骤。
[0110] 本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的计算机程序可存储于一非易失性计算机可读取存储介质中,该计算机程序在执行时,可包括如上述各方法的实施例的流程。其中,本申请所提供的各实施例中所使用的对存储器、存储、数据库或其它介质的任何引用,均可包括非易失性和易失性存储器中的至少一种。非易失性存储器可包括只读存储器(Read‑Only Memory,ROM)、磁带、软盘、闪存或光存储器等。易失性存储器可包括随机存取存储器(Random Access Memory,RAM)或外部高速缓冲存储器。作为说明而非局限,RAM可以是多种形式,比如静态随机存取存储器(Static Random Access Memory,SRAM)或动态随机存取存储器(Dynamic Random Access Memory,DRAM)等。
[0111] 以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
[0112] 以上所述实施例仅表达了本申请的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本申请构思的前提下,还可以做出若干变形和改进,这些都属于本申请的保护范围。因此,本申请专利的保护范围应以所附权利要求为准。