CN113411683A - 一种视频播放方法及装置 - Google Patents
一种视频播放方法及装置 Download PDFInfo
- Publication number
- CN113411683A CN113411683A CN202110700053.4A CN202110700053A CN113411683A CN 113411683 A CN113411683 A CN 113411683A CN 202110700053 A CN202110700053 A CN 202110700053A CN 113411683 A CN113411683 A CN 113411683A
- Authority
- CN
- China
- Prior art keywords
- player
- video
- main thread
- thread
- playing
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/80—Generation or processing of content or additional data by content creator independently of the distribution process; Content per se
- H04N21/81—Monomedia components thereof
- H04N21/8166—Monomedia components thereof involving executable data, e.g. software
- H04N21/8173—End-user applications, e.g. Web browser, game
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/43—Processing of content or additional data, e.g. demultiplexing additional data from a digital video stream; Elementary client operations, e.g. monitoring of home network or synchronising decoder's clock; Client middleware
- H04N21/443—OS processes, e.g. booting an STB, implementing a Java virtual machine in an STB or power management in an STB
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N21/00—Selective content distribution, e.g. interactive television or video on demand [VOD]
- H04N21/40—Client devices specifically adapted for the reception of or interaction with content, e.g. set-top-box [STB]; Operations thereof
- H04N21/45—Management operations performed by the client for facilitating the reception of or the interaction with the content or administrating data related to the end-user or to the client device itself, e.g. learning user preferences for recommending movies, resolving scheduling conflicts
- H04N21/462—Content or additional data management, e.g. creating a master electronic program guide from data received from the Internet and a Head-end, controlling the complexity of a video stream by scaling the resolution or bit-rate based on the client capabilities
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Software Systems (AREA)
- Databases & Information Systems (AREA)
- General Engineering & Computer Science (AREA)
- Signal Processing For Digital Recording And Reproducing (AREA)
Abstract
本发明实施例提供了一种视频播放方法及装置,方法包括:通过目标应用程序的第一子线程,在第一播放器的第一表面Surface中播放第一视频;当检测到用于播放第二视频的视频跳转播放指令时,通过目标应用程序的主线程创建第二播放器,并在第二播放器中创建第二Surface,以及通过目标应用程序的第二子线程释放第一播放器;通过目标应用程序的第三子线程,在第二Surface中播放第二视频;当第一播放器释放完成后,通过主线程释放第一Surface。基于上述处理,能够降低跳转播放的时延,提高用户的体验。
Description
技术领域
本发明涉及计算机技术领域,特别是涉及一种视频播放方法及装置。
背景技术
随着计算机技术的快速发展,用户可以通过电子设备浏览各种网络资源(例如,视频网络资源)。在浏览视频的过程中,用户可以在电子设备中执行视频跳转播放操作,相应的,电子设备可以从当前播放的视频,跳转至播放其他视频。
相关技术中,基于安卓***的电子设备需要通过播放器在***提供的Surface(表面)中渲染图像,以播放视频。当用户选择视频跳转播放时,电子设备需要释放用于播放当前视频的播放器和Surface,当该播放器和Surface释放完成后,可以创建一个新的播放器和新的Surface,以通过新的播放器在新的Surface中播放新的视频。
然而,释放用于播放当前视频的播放器和Surface需要消耗较大的时长,也就导致跳转播放存在较高的时延,降低用户的体验。
发明内容
本发明实施例的目的在于提供一种视频播放方法及装置,以降低跳转播放的时延,提高用户的体验。具体技术方案如下:
在本发明实施的第一方面,首先提供了一种视频播放方法,所述方法包括:
通过目标应用程序的第一子线程,在第一播放器的第一表面Surface中播放第一视频;
当检测到用于播放第二视频的视频跳转播放指令时,通过所述目标应用程序的主线程创建第二播放器,并在所述第二播放器中创建第二Surface,以及通过所述目标应用程序的第二子线程释放所述第一播放器;
通过所述目标应用程序的第三子线程,在所述第二Surface中播放第二视频;
当所述第一播放器释放完成后,通过所述主线程释放所述第一Surface。
可选的,所述方法还包括:
当所述第一播放器释放完成后,通过所述主线程,将所述第一Surface所属的表面视图SurfaceView在对应的活动Activity中取消注册。
可选的,所述通过所述主线程,将所述第一Surface在对应的活动Activity中取消注册,包括:
通过所述主线程,基于反射机制,获取用于取消注册所述第一Surface所属的SurfaceView的反注册函数;
根据所述反注册函数,将所述第一Surface所属的SurfaceView在对应的活动Activity中取消注册。
可选的,在所述通过所述目标应用程序的主线程创建第二播放器之前,所述方法还包括:
通过所述主线程,检测所述第一Surface的延时释放标识是否为有效状态;
若所述第一Surface的延时释放标识为有效状态,则通过所述主线程,拦截所述视频跳转播放指令触发的第一Surface的释放事件;
所述通过所述目标应用程序的主线程创建第二播放器,包括:
在所述第一Surface的延时释放标识为有效状态的情况下,通过所述目标应用程序的主线程创建第二播放器。
可选的,在所述通过所述主线程释放所述第一Surface之前,所述方法还包括:
当所述第一播放器释放完成时,通过所述第二子线程,触发播放器释放完成事件,其中,所述播放器释放完成事件用于将所述第一Surface的延时释放标识修改为无效状态;
当通过所述主线程监听到所述播放器释放完成事件时,检测所述第一Surface的延时释放标识是否为无效状态;
所述通过所述主线程释放所述第一Surface,包括:
当检测到所述第一Surface的延时释放标识为无效状态时,通过所述主线程释放所述第一Surface。
可选的,所述方法还包括:
在所述第二Surface创建完成后,通过所述主线程,为所述第二Surface设置有效状态的延时释放标识。
在本发明实施的第二方面,还提供了一种视频播放装置,所述装置包括:
第一播放模块,用于通过目标应用程序的第一子线程,在第一播放器的第一表面Surface中播放第一视频;
处理模块,用于当检测到用于播放第二视频的视频跳转播放指令时,通过所述目标应用程序的主线程创建第二播放器,并在所述第二播放器中创建第二Surface,以及通过所述目标应用程序的第二子线程释放所述第一播放器;
第二播放模块,用于通过所述目标应用程序的第三子线程,在所述第二Surface中播放第二视频;
释放模块,用于当所述第一播放器释放完成后,通过所述主线程释放所述第一Surface。
可选的,所述装置还包括:
取消注册模块,用于当所述第一播放器释放完成后,通过所述主线程,将所述第一Surface所属的表面视图SurfaceView在对应的活动Activity中取消注册。
可选的,所述取消注册模块,包括:
反注册函数获取子模块,用于通过所述主线程,基于反射机制,获取用于取消注册所述第一Surface所属的SurfaceView的反注册函数;
取消注册子模块,用于根据所述反注册函数,将所述第一Surface所属的SurfaceView在对应的活动Activity中取消注册。
可选的,所述装置还包括:
第一检测模块,用于在所述通过所述目标应用程序的主线程创建第二播放器之前,通过所述主线程,检测所述第一Surface的延时释放标识是否为有效状态;
拦截模块,用于若所述第一Surface的延时释放标识为有效状态,则通过所述主线程,拦截所述视频跳转播放指令触发的第一Surface的释放事件;
所述处理模块,具体用于在所述第一Surface的延时释放标识为有效状态的情况下,通过所述目标应用程序的主线程创建第二播放器。
可选的,所述装置还包括:
事件触发模块,用于在所述通过所述主线程释放所述第一Surface之前,当所述第一播放器释放完成时,通过所述第二子线程,触发播放器释放完成事件,其中,所述播放器释放完成事件用于将所述第一Surface的延时释放标识修改为无效状态;
第二检测模块,用于当通过所述主线程监听到所述播放器释放完成事件时,检测所述第一Surface的延时释放标识是否为无效状态;
所述释放模块,具体用于当检测到所述第一Surface的延时释放标识为无效状态时,通过所述主线程释放所述第一Surface。
可选的,所述装置还包括:
设置模块,用于在所述第二Surface创建完成后,通过所述主线程,为所述第二Surface设置有效状态的延时释放标识。
在本发明实施的又一方面,还提供了一种电子设备,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现上述第一方面任一所述的视频播放方法。
在本发明实施的又一方面,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述任一所述的视频播放方法。
在本发明实施的又一方面,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述任一所述的视频播放方法。
本发明实施例提供的视频播放方法,可以在目标应用程序的第一播放器的第一Surface中播放第一视频;当检测到用于播放第二视频的视频跳转播放指令时,通过目标应用程序的主线程创建第二播放器,并在第二播放器中创建第二Surface,以及通过目标应用程序的第二子线程释放第一播放器;通过目标应用程序的第三子线程,在第二Surface中播放第二视频;当第一播放器释放完成后,通过主线程释放第一Surface。
基于上述处理,当检测到视频跳转播放指令,可以通过主线程创建新的播放器(即第二播放器)和对应的Surface(即第二Surface),以播放新的视频。同时,通过子线程释放第一播放器,并在第一播放器释放完成后,通过主线程释放第一Surface。也就是说,在开始释放第一Surface时,第二Surface已创建完成,使得在第二Surface中播放第二视频,与释放第一Surface可以同时进行,即,不需要等待第一Surface释放完成,就可以播放第二视频,进而,能够降低跳转播放的时延,提高用户的体验。
附图说明
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍。
图1为本发明实施例中提供的一种视频播放方法的流程图;
图2为本发明实施例中提供的另一种视频播放方法的流程图;
图3为本发明实施例中提供的另一种视频播放方法的流程图;
图4为本发明实施例中提供的另一种视频播放方法的流程图;
图5为本发明实施例中提供的另一种视频播放方法的流程图;
图6为本发明实施例中提供的一种类之间的关系图;
图7为本发明实施例中提供的一种视频播放的时序图;
图8为本发明实施例中提供的一种视频播放装置的结构图;
图9为本发明实施例中提供的一种电子设备的结构图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行描述。
相关技术中,当用户选择视频跳转播放时,电子设备需要释放用于播放当前视频的播放器和Surface,当该播放器和Surface释放完成后,可以创建一个新的播放器和新的Surface,以通过新的播放器在新的Surface中播放新的视频。
然而,释放用于播放当前视频的播放器和Surface需要消耗较大的时长,也就导致跳转播放存在较高的时延,降低用户的体验。
为了解决上述问题,本发明实施例提供了一种视频播放方法,该方法可以应用于电子设备,该电子设备可以为基于安卓***的智能终端,该电子设备中可以安装有用于播放视频的应用程序。
参见图1,图1为本发明实施例中提供的一种视频播放方法的流程图,该方法可以包括以下步骤:
S101:通过目标应用程序的第一子线程,在第一播放器的第一表面Surface中播放第一视频。
S102:当检测到用于播放第二视频的视频跳转播放指令时,通过目标应用程序的主线程创建第二播放器,并在第二播放器中创建第二Surface,以及通过目标应用程序的第二子线程释放第一播放器。
S103:通过目标应用程序的第三子线程,在第二Surface中播放第二视频。
S104:当第一播放器释放完成后,通过主线程释放第一Surface。
本发明实施例提供的视频播放方法,当检测到视频跳转播放指令,可以通过主线程创建新的播放器(即第二播放器)和对应的Surface(即第二Surface),以播放新的视频。同时,通过子线程释放第一播放器,并在第一播放器释放完成后,通过主线程释放第一Surface。也就是说,在开始释放第一Surface时,第二Surface已创建完成,使得在第二Surface中播放第二视频,与释放第一Surface可以同时进行,即,不需要等待第一Surface释放完成,就可以播放第二视频,进而,能够降低跳转播放的时延,提高用户的体验。
在基于安卓***的电子设备中,需要创建播放器,并在播放器中创建Surface,进而,则可以在该Surface中渲染视频的图像。另外,在播放视频的过程中,该电子设备只能开启一个播放器实例,也就是说,当需要进行跳转播放时,需要先释放当前已开启的播放器,然后,才可以开启新的播放器。
在一个实施例中,当检测到视频跳转播放指令时,可以通过目标应用程序的主线程停止运行第一播放器。一种实现方式中,主线程可以通过第一停止运行函数(例如,uniplayer.stop()),调用播放器对应的子线程(即本发明实施例中第二子线程),通过第二停止运行函数(例如,mediaplayer.stop())停止运行第一播放器。
进而,在停止运行第一播放器后,则可以开始释放第一播放器。释放第一播放器,也就是,释放第一播放器所占的内存资源。
一种实现方式中,主线程可以通过第一播放器释放函数(例如,uniplayer.release())取消第一播放器与第一Surface之间的关联关系。然后,主线程可以调用第二播放器释放函数(例如,mediaplayer.release()),以通知第二子线程,当前主线程已取消该第一播放器与第一Surface之间的关联关系,进而,第二子线程则可以开始释放第一播放器。
相应的,针对上述步骤S102,主线程创建第二播放器以及第二Surface,与第二子线程开始释放第一播放器可以是异步进行的。
针对步骤S104,释放第一Surface,也就是,释放第一Surface所占的内存资源。
在一个实施例中,参见图2,在图1的基础上,该方法还可以包括以下步骤:
S105:当第一播放器释放完成后,通过主线程,将第一Surface所属的SurfaceView在对应的活动Activity中取消注册。
在安卓***中,SurfaceView派生自View。一个SurfaceView可以内嵌一个Surface。SurfaceView用于展示Surface中的数据,且SurfaceView是用于控制Surface中View的位置和尺寸。
在本发明实施例中,在第一播放器释放完成后,则主线程可以释放第一Surface。而在基于第一Surface播放第一视频时,第一Surface所属的SurfaceView(可以称为第一SurfaceView)是注册在对应的Activity中的,即,是与Activity相关联的。因为,为了在释放第一Surface后,避免其对应的Activity仍被引用,则需要断开第一SurfaceView与对应的Activity的关联关系,即,在Activity中取消注册第一SurfaceView。进而,可以避免对应的Activity存在无效的引用,而导致内存泄露的情况。
在一个实施例中,参见图3,在图2的基础上,上述步骤S105可以包括以下步骤:
S1051:通过主线程,基于反射机制,获取用于取消注册第一Surface所属的SurfaceView的反注册函数。
S1052:根据反注册函数,将第一Surface所属的SurfaceView在对应的Activity中取消注册。
在本发明实施例中,由于针对SurfaceView的反注册函数并不是公开的,因此,可以基于Java的反射机制,根据Surface的源码来调用对应的反注册函数。
在一个实施例中,上述反注册函数可以包括:proc Detached Window StoppedCallback(进程分离窗口已停止回调)、proc Detached On Scroll Changed(滚动时进程分离更改),以及proc Detached On PreDraw(进程在预绘制时分离)函数。
在一个实施例中,参见图4,在图1的基础上,在上述步骤S102之前,该方法还可以包括以下步骤:
S106:通过主线程,检测第一Surface的延时释放标识是否为有效状态。
S107:若第一Surface的延时释放标识为有效状态,则通过主线程,拦截视频跳转播放指令触发的第一Surface的释放事件。
相应的,上述步骤S102可以包括:
S1021:当检测到用于播放第二视频的视频跳转播放指令时,在第一Surface的延时释放标识为有效状态的情况下,通过目标应用程序的主线程创建第二播放器,并在第二播放器中创建第二Surface,以及通过目标应用程序的第二子线程释放第一播放器。
在本发明实施例中,可以为每一Surface设置延迟释放标识的状态(包括有效状态或无效状态)。
例如,将该Surface设置延迟释放标识的状态设置为False(假),可以表示为无效状态;将该Surface设置延迟释放标识的状态设置为True(真),可以表示为有效状态。
若第一Surface的延迟释放标识的状态设置为True,表示当检测到视频跳转播放指令触发的该第一Surface的释放事件时,需要延迟释放该第一Surface,即,如上述步骤S101-S104中描述的过程,先创建新的Surface(即第二Surface),然后再释放该第一Surface,而不是在检测到该第一Surface的释放事件时,直接释放该第一Surface。
也就是说,为了能够降低跳转播放视频的时延,在每生成一个新的Surface时,可以为新生成的Surface设置有效状态的延迟释放标识。
相应的,当检测到第一Surface的延时释放标识的状态为有效状态时,则可以确定当前需要延迟释放该第一Surface,因此,可以通过主线程,拦截视频跳转播放指令触发的第一Surface的释放事件,以阻止底层对第一Surface进行释放。进而,则可以直接创建第二播放器,以及第二Surface,以播放新的视频,降低视频跳转播放的时延。
相反,若第一Surface的延迟释放标识的状态设置为False,表示当检测到视频跳转播放指令触发的该第一Surface的释放事件时,不需要延迟释放第一Surface,可以直接释放该第一Surface。
在一个实施例中,参见图5,在图4的基础上,在上述步骤S104之前,该方法还可以包括以下步骤:
S108:当第一播放器释放完成时,通过第二子线程,触发播放器释放完成事件。
其中,播放器释放完成事件用于将第一Surface的延时释放标识修改为无效状态。
S109:当通过主线程监听到播放器释放完成事件时,检测第一Surface的延时释放标识是否为无效状态。
相应的,上述步骤S104可以包括以下步骤:
S1041:在第一播放器释放完成后,当检测到第一Surface的延时释放标识为无效状态时,通过主线程释放第一Surface。
一种实现方式中,上述播放器释放完成事件可以用uniplayer.OnRelease表示。
例如,参见该uniplayer.OnRelease事件的代码:
基于上述代码可见,该uniplayer.OnRelease事件可以将第一Surface的延时释放标识修改为Flase,即无效状态。
主线程可以通过***,对该uniplayer.OnRelease事件进行监听。当监听到该uniplayer.OnRelease事件,并检测到第一Surface的延时释放标识为无效状态时,表明第二子线程已完成第一播放器的释放,且主线程此时也完成了第二播放器,以及第二Surface的创建,此时,并不需要主线程在第二Surface中渲染第二视频的图像,只需要一个子线程(即第三子线程)在第二Surface中渲染第二视频的图像即可,因此,主线程可以释放第一Surface。
在一个实施例中,还可以通过播放器释放完成事件调用上述反注册函数。
一种实现方式中,参见上文中该uniplayer.OnRelease事件的代码,在该uniplayer.OnRelease事件中还可以调用viewGroup.removeView(surfaceView)函数,以触发SurfaceViewEx::onDetachedFromWindow事件。在该SurfaceViewEx::onDetachedFromWindow事件中,可以调用procDetachedFromWindow函数,并在该procDetachedFromWindow函数中,调用上述第一Surface所属的SurfaceView的反注册函数。
一种实现方式中,可以通过public class SurfaceViewEx extendsSurfaceView,设置SurfaceViewEx类继承自安卓自身的SurfaceView。
另外,通过:
public void setIgnoreWindowChange(boolean ignoreWindowChange){
mIgnoreWindowChange=ignoreWindowChange;
}
可以在SurfaceViewEx类中增加一个延迟释放标识(即mIgnoreWindowChange)。
进而,通过:
可以检测是否需要延迟释放Surface。如果需要延迟释放,则当前不释放该Surface;如果不需要延迟释放,则直接释放该Surface。
可以基于反射机制获取反注册函数procDetachedWindowStoppedCallback。
以及通过:
可以基于反射机制获取反注册函数procDetachedOnScrollChanged。
以及通过:
可以基于反射机制获取反注册函数procDetachedOnPreDraw。
在一个实施例中,该方法还可以包括以下步骤:
在第二Surface创建完成后,通过主线程,为第二Surface设置有效状态的延时释放标识。
在本发明实施例中,还可以为新生成的第二Surface设置有效状态的延时释放标识,相应的,当用户需要从第二视频跳转至播放其他视频时,基于本发明实施例的视频播放方法,也可以实现第二Surface的延迟释放,即,降低跳转播放其他视频的时延,提高用户体验。
参见图6,图6为本发明实施例提供的一种类之间的关系图。
图6中,SurfaceViewEx继承自SurfaceView。
具体的,SurfaceViewEx是对***的SurfaceView的扩展,在***的SurfaceView的基础上,增加了延迟释放标识,以控制Surface的释放和SurfaceView的反注册。
uniplayer代表IMediaPlayer的抽象类,把播放器的通用功能在这个类里面实现。基于这个类还可以派生出LivePlayer、CarouselPlayer等具体的业务Player,对应用提供调用接口,让外部设置Surface,将应用调用的播放方法传给底层播放器mediaplayer,并中转底层播放器的事件给应用。
OnStateReleaseListener表示事件***,是用来监听底层播放器mediaplayer的OnRelease事件。具体调用为:mediaplayer.setOnStateReleasedListener(OnStateReleasedListener listener)。
uniplayer持有SurfaceViewEx对象和mediaplayer对象。uniplayer创建一个OnStateReleaseListener实例传给mediaplayer,以监听mediaplayer的OnRelease事件。
参见图7,图7为本发明实施例提供的一种视频播放方法的时序图。
图7中,当检测到视频跳转播放指令时,主线程可以通过第一停止运行函数(例如,uniplayer.stop()),调用播放器对应的子线程,通过第二停止运行函数(例如,mediaplayer.stop())停止运行当前的第一播放器(即A播放器)。
然后,主线程可以通过第一播放器释放函数(例如,uniplayer.release())取消第一播放器与第一Surface之间的关联关系,并调用第二播放器释放函数(例如,mediaplayer.release()),通知子线程已取消该第一播放器与第一Surface之间的关联关系,进而,子线程则可以开始释放第一播放器。
进而,主线程可以通过第一播放器创建函数(例如,uniplayer.create())调用子线程,通过第二播放器创建函数(例如,mediaplayer.create())创建第二播放器(即B播放器)。
然后,主线程可以通过第一Surface创建函数(例如,uniplayer.setSurface(setSurface))调用子线程,通过第二Surface创建函数(例如,midiaplayer.setSurface(setSurface))创建第二Surface(即B播放器的Surface)。
当子线程释放第一播放器完成时,可以触发播放器释放完成事件(例如,uniplayer.OnRelease())。
另外,子线程可以通过视频播放函数(例如,midiaplayer.Start())在B播放器的Surface中播放新的视频。
主线程可以通过***,监听该uniplayer.OnRelease事件。当监听到该uniplayer.OnRelease事件,并检测到第一Surface的延时释放标识为无效状态时,主线程可以释放A播放器的Surface,并将A播放器的Surface所属的SurfaceView在对应的Activity中取消注册。
基于相同的发明构思,本发明实施例还提供了一种视频播放装置,参见图8,图8为本发明实施例提供的一种视频播放装置的结构图,该装置可以包括:
第一播放模块801,用于通过目标应用程序的第一子线程,在第一播放器的第一表面Surface中播放第一视频;
处理模块802,用于当检测到用于播放第二视频的视频跳转播放指令时,通过所述目标应用程序的主线程创建第二播放器,并在所述第二播放器中创建第二Surface,以及通过所述目标应用程序的第二子线程释放所述第一播放器;
第二播放模块803,用于通过所述目标应用程序的第三子线程,在所述第二Surface中播放第二视频;
释放模块804,用于当所述第一播放器释放完成后,通过所述主线程释放所述第一Surface。
可选的,所述装置还包括:
取消注册模块,用于当所述第一播放器释放完成后,通过所述主线程,将所述第一Surface所属的表面视图SurfaceView在对应的活动Activity中取消注册。
可选的,所述取消注册模块,包括:
反注册函数获取子模块,用于通过所述主线程,基于反射机制,获取用于取消注册所述第一Surface所属的SurfaceView的反注册函数;
取消注册子模块,用于根据所述反注册函数,将所述第一Surface所属的SurfaceView在对应的活动Activity中取消注册。
可选的,所述装置还包括:
第一检测模块,用于在所述通过所述目标应用程序的主线程创建第二播放器之前,通过所述主线程,检测所述第一Surface的延时释放标识是否为有效状态;
拦截模块,用于若所述第一Surface的延时释放标识为有效状态,则通过所述主线程,拦截所述视频跳转播放指令触发的第一Surface的释放事件;
所述处理模块802,具体用于在所述第一Surface的延时释放标识为有效状态的情况下,通过所述目标应用程序的主线程创建第二播放器。
可选的,所述装置还包括:
事件触发模块,用于在所述通过所述主线程释放所述第一Surface之前,当所述第一播放器释放完成时,通过所述第二子线程,触发播放器释放完成事件,其中,所述播放器释放完成事件用于将所述第一Surface的延时释放标识修改为无效状态;
第二检测模块,用于当通过所述主线程监听到所述播放器释放完成事件时,检测所述第一Surface的延时释放标识是否为无效状态;
所述释放模块804,具体用于当检测到所述第一Surface的延时释放标识为无效状态时,通过所述主线程释放所述第一Surface。
可选的,所述装置还包括:
设置模块,用于在所述第二Surface创建完成后,通过所述主线程,为所述第二Surface设置有效状态的延时释放标识。
本发明实施例还提供了一种电子设备,如图9所示,包括处理器901、通信接口902、存储器903和通信总线904,其中,处理器901,通信接口902,存储器903通过通信总线904完成相互间的通信,
存储器903,用于存放计算机程序;
处理器901,用于执行存储器903上所存放的程序时,实现如下步骤:
通过目标应用程序的第一子线程,在第一播放器的第一表面Surface中播放第一视频;
当检测到用于播放第二视频的视频跳转播放指令时,通过所述目标应用程序的主线程创建第二播放器,并在所述第二播放器中创建第二Surface,以及通过所述目标应用程序的第二子线程释放所述第一播放器;
通过所述目标应用程序的第三子线程,在所述第二Surface中播放第二视频;
当所述第一播放器释放完成后,通过所述主线程释放所述第一Surface。
上述电子设备提到的通信总线可以是外设部件互连标准(Peripheral ComponentInterconnect,简称PCI)总线或扩展工业标准结构(Extended Industry StandardArchitecture,简称EISA)总线等。该通信总线可以分为地址总线、数据总线、控制总线等。为便于表示,图中仅用一条粗线表示,但并不表示仅有一根总线或一种类型的总线。
通信接口用于上述电子设备与其他设备之间的通信。
存储器可以包括随机存取存储器(Random Access Memory,简称RAM),也可以包括非易失性存储器(non-volatile memory),例如至少一个磁盘存储器。可选的,存储器还可以是至少一个位于远离前述处理器的存储装置。
上述的处理器可以是通用处理器,包括中央处理器(Central Processing Unit,简称CPU)、网络处理器(Network Processor,简称NP)等;还可以是数字信号处理器(Digital Signal Processor,简称DSP)、专用集成电路(Application SpecificIntegrated Circuit,简称ASIC)、现场可编程门阵列(Field-Programmable Gate Array,简称FPGA)或者其他可编程逻辑器件、分立门或者晶体管逻辑器件、分立硬件组件。
在本发明提供的又一实施例中,还提供了一种计算机可读存储介质,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述实施例中任一所述的视频播放方法。
在本发明提供的又一实施例中,还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述实施例中任一所述的视频播放方法。
在上述实施例中,可以全部或部分地通过软件、硬件、固件或者其任意组合来实现。当使用软件实现时,可以全部或部分地以计算机程序产品的形式实现。所述计算机程序产品包括一个或多个计算机指令。在计算机上加载和执行所述计算机程序指令时,全部或部分地产生按照本发明实施例所述的流程或功能。所述计算机可以是通用计算机、专用计算机、计算机网络、或者其他可编程装置。所述计算机指令可以存储在计算机可读存储介质中,或者从一个计算机可读存储介质向另一个计算机可读存储介质传输,例如,所述计算机指令可以从一个网站站点、计算机、服务器或数据中心通过有线(例如同轴电缆、光纤、数字用户线(DSL))或无线(例如红外、无线、微波等)方式向另一个网站站点、计算机、服务器或数据中心进行传输。所述计算机可读存储介质可以是计算机能够存取的任何可用介质或者是包含一个或多个可用介质集成的服务器、数据中心等数据存储设备。所述可用介质可以是磁性介质,(例如,软盘、硬盘、磁带)、光介质(例如,DVD)、或者半导体介质(例如固态硬盘Solid State Disk(SSD))等。
需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。
本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置、电子设备、计算机可读存储介质以及计算机程序产品实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。
以上所述仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。凡在本发明的精神和原则之内所作的任何修改、等同替换、改进等,均包含在本发明的保护范围内。
Claims (10)
1.一种视频播放方法,其特征在于,所述方法包括:
通过目标应用程序的第一子线程,在第一播放器的第一表面Surface中播放第一视频;
当检测到用于播放第二视频的视频跳转播放指令时,通过所述目标应用程序的主线程创建第二播放器,并在所述第二播放器中创建第二Surface,以及通过所述目标应用程序的第二子线程释放所述第一播放器;
通过所述目标应用程序的第三子线程,在所述第二Surface中播放第二视频;
当所述第一播放器释放完成后,通过所述主线程释放所述第一Surface。
2.根据权利要求1所述的方法,其特征在于,所述方法还包括:
当所述第一播放器释放完成后,通过所述主线程,将所述第一Surface所属的表面视图SurfaceView在对应的活动Activity中取消注册。
3.根据权利要求2所述的方法,其特征在于,所述通过所述主线程,将所述第一Surface在对应的活动Activity中取消注册,包括:
通过所述主线程,基于反射机制,获取用于取消注册所述第一Surface所属的SurfaceView的反注册函数;
根据所述反注册函数,将所述第一Surface所属的SurfaceView在对应的活动Activity中取消注册。
4.根据权利要求1所述的方法,其特征在于,在所述通过所述目标应用程序的主线程创建第二播放器之前,所述方法还包括:
通过所述主线程,检测所述第一Surface的延时释放标识是否为有效状态;
若所述第一Surface的延时释放标识为有效状态,则通过所述主线程,拦截所述视频跳转播放指令触发的第一Surface的释放事件;
所述通过所述目标应用程序的主线程创建第二播放器,包括:
在所述第一Surface的延时释放标识为有效状态的情况下,通过所述目标应用程序的主线程创建第二播放器。
5.根据权利要求4所述的方法,其特征在于,在所述通过所述主线程释放所述第一Surface之前,所述方法还包括:
当所述第一播放器释放完成时,通过所述第二子线程,触发播放器释放完成事件,其中,所述播放器释放完成事件用于将所述第一Surface的延时释放标识修改为无效状态;
当通过所述主线程监听到所述播放器释放完成事件时,检测所述第一Surface的延时释放标识是否为无效状态;
所述通过所述主线程释放所述第一Surface,包括:
当检测到所述第一Surface的延时释放标识为无效状态时,通过所述主线程释放所述第一Surface。
6.根据权利要求4所述的方法,其特征在于,所述方法还包括:
在所述第二Surface创建完成后,通过所述主线程,为所述第二Surface设置有效状态的延时释放标识。
7.一种视频播放装置,其特征在于,所述装置包括:
第一播放模块,用于通过目标应用程序的第一子线程,在第一播放器的第一表面Surface中播放第一视频;
处理模块,用于当检测到用于播放第二视频的视频跳转播放指令时,通过所述目标应用程序的主线程创建第二播放器,并在所述第二播放器中创建第二Surface,以及通过所述目标应用程序的第二子线程释放所述第一播放器;
第二播放模块,用于通过所述目标应用程序的第三子线程,在所述第二Surface中播放第二视频;
释放模块,用于当所述第一播放器释放完成后,通过所述主线程释放所述第一Surface。
8.根据权利要求7所述的装置,其特征在于,所述装置还包括:
取消注册模块,用于当所述第一播放器释放完成后,通过所述主线程,将所述第一Surface所属的表面视图SurfaceView在对应的活动Activity中取消注册。
9.一种电子设备,其特征在于,包括处理器、通信接口、存储器和通信总线,其中,处理器,通信接口,存储器通过通信总线完成相互间的通信;
存储器,用于存放计算机程序;
处理器,用于执行存储器上所存放的程序时,实现权利要求1-6任一所述的方法步骤。
10.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现权利要求1-6任一所述的方法步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110700053.4A CN113411683B (zh) | 2021-06-23 | 2021-06-23 | 一种视频播放方法及装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110700053.4A CN113411683B (zh) | 2021-06-23 | 2021-06-23 | 一种视频播放方法及装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113411683A true CN113411683A (zh) | 2021-09-17 |
CN113411683B CN113411683B (zh) | 2022-07-22 |
Family
ID=77682746
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110700053.4A Active CN113411683B (zh) | 2021-06-23 | 2021-06-23 | 一种视频播放方法及装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113411683B (zh) |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114071229A (zh) * | 2021-12-08 | 2022-02-18 | 四川启睿克科技有限公司 | 一种解决SurfaceView渲染器重载视频解码时回收延迟的方法 |
Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103648037A (zh) * | 2013-11-15 | 2014-03-19 | 乐视致新电子科技(天津)有限公司 | 智能电视媒体播放器及其搜索响应方法、智能电视 |
WO2017113856A1 (zh) * | 2015-12-31 | 2017-07-06 | 乐视控股(北京)有限公司 | 弹幕显示方法和装置 |
WO2018001218A1 (zh) * | 2016-06-27 | 2018-01-04 | 北京奇虎科技有限公司 | 视频播放方法、装置、程序及介质 |
CN109194986A (zh) * | 2018-08-24 | 2019-01-11 | 深圳市酷开网络科技有限公司 | 一种资源控制方法、智能电视及存储介质 |
CN110147512A (zh) * | 2019-05-16 | 2019-08-20 | 腾讯科技(深圳)有限公司 | 播放器预加载、运行方法、装置、设备及介质 |
CN110300328A (zh) * | 2018-03-21 | 2019-10-01 | 腾讯科技(深圳)有限公司 | 一种视频播放控制方法、装置及可读存储介质 |
CN110708602A (zh) * | 2019-10-15 | 2020-01-17 | 北京字节跳动网络技术有限公司 | 视频启动方法、装置、电子设备及存储介质 |
CN111641864A (zh) * | 2019-03-01 | 2020-09-08 | 腾讯科技(深圳)有限公司 | 一种视频信息获取方法、装置及设备 |
US20210029410A1 (en) * | 2017-08-03 | 2021-01-28 | Live.Me Inc. | Method and apparatus for looping a video file |
CN112416461A (zh) * | 2020-11-25 | 2021-02-26 | 百度在线网络技术(北京)有限公司 | 视频资源处理方法、装置、电子设备和计算机可读介质 |
-
2021
- 2021-06-23 CN CN202110700053.4A patent/CN113411683B/zh active Active
Patent Citations (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN103648037A (zh) * | 2013-11-15 | 2014-03-19 | 乐视致新电子科技(天津)有限公司 | 智能电视媒体播放器及其搜索响应方法、智能电视 |
WO2017113856A1 (zh) * | 2015-12-31 | 2017-07-06 | 乐视控股(北京)有限公司 | 弹幕显示方法和装置 |
WO2018001218A1 (zh) * | 2016-06-27 | 2018-01-04 | 北京奇虎科技有限公司 | 视频播放方法、装置、程序及介质 |
US20210029410A1 (en) * | 2017-08-03 | 2021-01-28 | Live.Me Inc. | Method and apparatus for looping a video file |
CN110300328A (zh) * | 2018-03-21 | 2019-10-01 | 腾讯科技(深圳)有限公司 | 一种视频播放控制方法、装置及可读存储介质 |
CN109194986A (zh) * | 2018-08-24 | 2019-01-11 | 深圳市酷开网络科技有限公司 | 一种资源控制方法、智能电视及存储介质 |
CN111641864A (zh) * | 2019-03-01 | 2020-09-08 | 腾讯科技(深圳)有限公司 | 一种视频信息获取方法、装置及设备 |
CN110147512A (zh) * | 2019-05-16 | 2019-08-20 | 腾讯科技(深圳)有限公司 | 播放器预加载、运行方法、装置、设备及介质 |
CN110708602A (zh) * | 2019-10-15 | 2020-01-17 | 北京字节跳动网络技术有限公司 | 视频启动方法、装置、电子设备及存储介质 |
CN112416461A (zh) * | 2020-11-25 | 2021-02-26 | 百度在线网络技术(北京)有限公司 | 视频资源处理方法、装置、电子设备和计算机可读介质 |
Cited By (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN114071229A (zh) * | 2021-12-08 | 2022-02-18 | 四川启睿克科技有限公司 | 一种解决SurfaceView渲染器重载视频解码时回收延迟的方法 |
Also Published As
Publication number | Publication date |
---|---|
CN113411683B (zh) | 2022-07-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
EP2747373B1 (en) | Method and apparatus for managing audio playing | |
CN109840418B (zh) | 应用程序的跳转控制方法、装置、存储介质及终端 | |
KR20020022085A (ko) | 응용프로그램 라이프사이클에 따른 응용프로그램 관리방법 및 장치 | |
CN113411683B (zh) | 一种视频播放方法及装置 | |
CN111782416A (zh) | 数据上报方法、装置、***、终端及计算机可读存储介质 | |
CN113467981A (zh) | 异常处理的方法和装置 | |
CN112702647A (zh) | 一种播放控制方法、智能电视及计算机可读存储介质 | |
CN116244471A (zh) | 播放器实例管理方法、装置、电子设备及存储介质 | |
CN114238021A (zh) | 一种sdk接口定位方法、装置、设备及计算机存储介质 | |
CN112822322B (zh) | 一种移动终端的静音方法、装置、移动终端及存储介质 | |
CN110888822B (zh) | 内存处理方法、装置及存储介质 | |
CN108650544B (zh) | 一种媒体播放方法、装置以及媒体播放*** | |
CN111356006B (zh) | 视频播放方法、装置、服务器及存储介质 | |
CN114025170A (zh) | 视频播放方法、装置、计算机设备和计算机可读存储介质 | |
CN111580740A (zh) | 一种智能设备控制方法、装置及智能设备和存储介质 | |
CN113225495B (zh) | 消除视频播放杂音的方法以及装置 | |
CN110209461B (zh) | 一种界面显示方法和装置 | |
KR20080017420A (ko) | 데이터 언어에서 변수들의 자동 업데이팅 | |
CN111639007B (zh) | 一种数据处理方法、装置、终端及计算机可读存储介质 | |
CN113867822A (zh) | 一种设备控制方法、装置、电子设备及存储介质 | |
WO2017181537A1 (zh) | 一种处理通知消息的方法和装置 | |
CN113365112B (zh) | 远程协助方法、装置、电子设备及存储介质 | |
CN111294641B (zh) | 视频播放方法、***、装置、电子设备及可读存储介质 | |
CN111666136A (zh) | 线程处理方法、装置、电子设备及存储介质 | |
CN110209513B (zh) | 一种应用程序的广播注册方法、装置、设备及介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |