CN113271497A - 一种视频播放方法、智能终端、存储介质及程序产品 - Google Patents
一种视频播放方法、智能终端、存储介质及程序产品 Download PDFInfo
- Publication number
- CN113271497A CN113271497A CN202010097696.XA CN202010097696A CN113271497A CN 113271497 A CN113271497 A CN 113271497A CN 202010097696 A CN202010097696 A CN 202010097696A CN 113271497 A CN113271497 A CN 113271497A
- Authority
- CN
- China
- Prior art keywords
- video
- video file
- playing
- texture
- display interface
- 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
- 238000000034 method Methods 0.000 title claims abstract description 61
- 230000015654 memory Effects 0.000 claims description 31
- 230000006870 function Effects 0.000 claims description 27
- 238000004590 computer program Methods 0.000 claims description 12
- 230000003044 adaptive effect Effects 0.000 claims description 3
- 238000004806 packaging method and process Methods 0.000 claims description 3
- 238000009877 rendering Methods 0.000 description 15
- 238000010586 diagram Methods 0.000 description 5
- 230000001960 triggered effect Effects 0.000 description 4
- 230000000694 effects Effects 0.000 description 3
- 230000006978 adaptation Effects 0.000 description 1
- 239000003086 colorant Substances 0.000 description 1
- 238000005516 engineering process Methods 0.000 description 1
- 239000012634 fragment Substances 0.000 description 1
- 230000003993 interaction Effects 0.000 description 1
- 230000003287 optical effect Effects 0.000 description 1
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/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/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
- H04N21/4402—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving reformatting operations of video signals for household redistribution, storage or real-time display
-
- 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/431—Generation of visual interfaces for content selection or interaction; Content or additional data rendering
-
- 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/44—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs
- H04N21/44012—Processing of video elementary streams, e.g. splicing a video clip retrieved from local storage with an incoming video stream or rendering scenes according to encoded video stream scene graphs involving rendering scenes according to scene graphs, e.g. MPEG-4 scene graphs
-
- Y—GENERAL TAGGING OF NEW TECHNOLOGICAL DEVELOPMENTS; GENERAL TAGGING OF CROSS-SECTIONAL TECHNOLOGIES SPANNING OVER SEVERAL SECTIONS OF THE IPC; TECHNICAL SUBJECTS COVERED BY FORMER USPC CROSS-REFERENCE ART COLLECTIONS [XRACs] AND DIGESTS
- Y02—TECHNOLOGIES OR APPLICATIONS FOR MITIGATION OR ADAPTATION AGAINST CLIMATE CHANGE
- Y02D—CLIMATE CHANGE MITIGATION TECHNOLOGIES IN INFORMATION AND COMMUNICATION TECHNOLOGIES [ICT], I.E. INFORMATION AND COMMUNICATION TECHNOLOGIES AIMING AT THE REDUCTION OF THEIR OWN ENERGY USE
- Y02D10/00—Energy efficient computing, e.g. low power processors, power management or thermal management
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Two-Way Televisions, Distribution Of Moving Picture Or The Like (AREA)
Abstract
本申请实施例公开了一种视频播放方法,包括:获取待播放的视频文件,并获取由开放图形库创建的纹理标识;为所述视频文件确定视频解码器,并调用所述视频解码器得到所述视频文件的各播放时间点的视频图像帧;根据视频文件播放时间点的先后顺序,依次生成各播放时间点对应的视频图像帧在开放图形库中的纹理数据,将所述纹理标识与各播放时间点对应的纹理数据关联;调用所述开放图形库中的绘制函数依次将所述纹理标识关联的各个播放时间点对应的纹理数据绘制到图片显示界面上,以便于在所述图片显示界面上播放所述视频图像帧。采用本发明,可在图片显示界面上播放视频文件。
Description
技术领域
本发明涉及计算机技术领域,尤其涉及一种视频播放方法、智能终端、存储介质及程序产品。
背景技术
随着智能手机、平板电脑等移动终端的普及,越来越多的用户采用移动终端来观看视频。现有的移动终端需要使用单独的表面视图(SurfaceView)或者纹理视图(TextureView)播放视频,或将视频解码的数据流转换成位图,才能在普通视图(View)或图片显示界面(例如:ImageView)上显示由视频转换的位图从而实现播放视频。如何更便捷地播放视频文件成为研究的热点问题。
发明内容
本申请实施例所要解决的技术问题在于,提供一种视频播放方法、智能终端、存储介质及程序产品,可在图片显示界面上播放视频文件。
为了解决上述技术问题,本申请实施例提供了一种视频播放方法,包括:
获取待播放的视频文件,并获取由开放图形库创建的纹理标识;
为所述视频文件确定视频解码器,并调用所述视频解码器得到所述视频文件的各播放时间点的视频图像帧;
根据视频文件播放时间点的先后顺序,依次生成各播放时间点对应的视频图像帧在开放图形库中的纹理数据,将所述纹理标识与各播放时间点对应的纹理数据关联;
调用所述开放图形库中的绘制函数依次将所述纹理标识关联的各个播放时间点的纹理数据绘制到图片显示界面上,以便于在所述图片显示界面上播放所述视频图像帧。
相应地,本申请实施例还提供了一种视频播放装置,所述视频播放装置,包括:
获取模块,用于获取待播放的视频文件,并获取由开放图形库创建的纹理标识;
解码模块,用于为所述视频文件确定视频解码器,并调用所述视频解码器得到所述视频文件的各播放时间点的视频图像帧;
生成模块,用于根据视频文件播放时间点的先后顺序,依次生成各播放时间点对应的视频图像帧在开放图形库中的纹理数据,将所述纹理标识与各播放时间点对应的纹理数据关联;
绘制模块,用于调用所述开放图形库中的绘制函数依次将所述纹理标识关联的各个播放时间点的纹理数据绘制到图片显示界面上,以便于在所述图片显示界面上播放所述视频图像帧。
相应地,本申请实施例还提供了一种智能终端,所述智能终端包括:存储装置和处理器,所述存储装置中存储有程序指令,所述处理器在调用所述存储指令时,用于实现上述视频播放方法。
相应地,本申请实施例还提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序使得计算机执行上述视频播放方法。
相应地,本申请实施例还提供一种计算机程序产品,包括指令,当其在计算机上运行时,使得计算机执行上述视频播放方法。
本申请实施例可以将视频文件解码后得到的视频图像帧绘制到图片显示界面上以进行视频播放,实现在图片显示界面例如ImageView上播放视频的功能。
附图说明
为了更清楚地说明本申请实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1a为本申请实施例提供的一种应用环境的示意图;
图1b为本申请实施例提供的一种视频播放方法的流程示意图;
图2为本申请实施例提供的另一种视频播放方法的流程示意图;
图3为本申请实施例提供的另一种视频播放方法的流程示意图;
图4为本申请实施例提供的另一种视频播放方法的流程示意图;
图5为本申请实施例提供的另一种视频播放方法的流程示意图;
图6为本申请实施例提供的另一种视频播放方法的流程示意图;
图7是本申请实施例提供的一种视频播放装置的结构示意图;
图8是本申请实施例提供的一种智能终端的结构示意图。
具体实施方式
在本发明实施例中,对于要播放的视频文件,一方面可以通过视频解码器解码得到相应的视频图像帧数据,另一方面,基于开放图形库(Open Graphics Library,OpenGL),可以将视频图像帧数据对应的图像绘制到图片显示界面,比如专门用来显示图片的图片显示界面ImageView,实现了在图片显示界面上播放视频文件的功能,相当于将视频文件的视频帧绘制成图片,再一张一张的显示,实现类似于动画播放的目的,如此可以在更多的不包括视频播放器、flash播放器等应用中达到播放视频文件的目的。
具体的,请参阅图1a,图1a是本申请实施例提供的一种应用环境的示意图,如图1a所示,该应用环境中,服务器11向智能终端12发送待播放的视频文件;其中,智能终端12可以为平板电脑、智能手机、个人电脑(PC)、笔记本电脑、掌上电脑以及移动互联网设备(MID)等具备运行业务的终端设备。智能终端12中安装有安卓(Android)平台120;安卓平台120获取服务器11发送的视频文件,并将视频文件缓存到预设或特定的视频缓存区域1201。在需要对缓存的视频文件进行播放时,通过安卓平台120的本地框架(native)层1202构建的类中实现类的引用,调用安卓平台120的应用框架层(Framework)1203中实现类的绘制命令,通过绘制命令调用安卓平台120的开放图形库1204和视频缓存区域1201中缓存的视频文件,对视频文件进行解码并生成视频文件的各个播放时间点的对应的纹理数据;然后在安卓平台120的图片显示界面1205上依次绘制各个播放时间点的纹理数据,实现对视频文件的播放。其中,开放图形库是一种用于渲染2D、3D矢量图形的跨语言、跨平台的应用程序编程接口(API,Application Programming Interface)。
应当理解,图1a仅仅是一种示例,根据实际需要,还可以由其它设备,例如:其它智能终端,向智能终端12发送待播放的视频文件。
请参阅图1b,图1b是本申请实施例提供的一种视频播放方法的流程示意图,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的终端或者存储介质产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行。图1b中所示的视频播放方法由智能终端执行,具体地,可由用户触发智能终端执行。具体如图1b所示,所述方法包括如下步骤。
S101:获取待播放的视频文件。所述待播放的视频文件可以由服务器发送给智能终端的安卓平台,也可以由其它设备,例如:其它智能终端发送给所述智能终端的安卓平台。
本申请实施例中,所述安卓平台上安装有普通原生安卓应用程序(App),安卓App是指运行在安卓平台上的软件,所述原生安卓App是指利用原生接口做绘制,没有创建、维护OpenGL渲染环境的应用程序。所述待播放的视频文件可以是单独的视频文件,也可以既有视频文件又有其他格式的文件,比如图形文件。
S102:构建VideoDrawable。
其中,所述VideoDrawable是将视频文件基于原生的Drawable接口构建成的一个特殊的Drawable,所述VideoDrawable内部关联了视频文件以在原生安卓App使用Drawable的View(视图)直接播放视频。所述VideoDrawable可以存储所述视频文件的地址,并可用于触发和停止播放所述视频文件。所述Drawable是指可以被画在屏幕,例如:Canvas(画布)上的资源,即一种抽象类。所述View可以用作显示图片或颜色,相比于Drawable,View具有接收事件和与用户交互的能力。
S103:提取并显示视频首帧,即提取并显示视频文件中的第一帧视频帧,以方便用户对视频文件的内容进行预览。
其中,也可以提取视频文件中的其他视频帧,作为预览显示的视频帧。预览显示的视频帧可以由用户在智能终端进行人为设置,也可以由安卓平台进行初始化设置。用户可根据预览显示的视频帧对视频文件的内容加以了解以选择是否播放视频文件,或者选择视频文件的播放方式。
S104:创建OpenGL纹理ID。所述纹理ID为纹理标识,可由开放图形库中的函数glGenTextures()生成并返回纹理标识,以获取由开放图形库创建的纹理标识。
S105:创建视频解码器。所述视频解码器是安卓平台的硬件解码器,可由函数MediaCodec.createDecoderByType()来创建视频解码器。
S106:初始化视频解码器并等待。所述视频解码器可由函数MediaFormat.createVideoFormat()进行初始化,且需开启解码线程对视频解码器进行初始化。
S107:返回视频解码器的创建结果。若视频解码器创建成功,则可执行步骤S108。
S108:开始播放视频。其中,可由VideoDrawable(#start)触发播放所述视频文件。
S109:触发解码。其中,可调用视频解码器对所述视频文件进行解码,得到YUV格式的数据流,也就是一帧一帧的视频图像帧。
S110:循环解码,以将视频文件依次解码成视频文件的各播放时间点的的视频图像帧。
S111:通知解码情况,若视频图像帧解码成功,则通过VideoDrawable调用开放图形库中的相关函数对所述视频图像帧进行相应处理,将处理后生成各个播放时间点的的纹理数据依次绘制到图片显示界面上以实现图片显示界面上播放所述视频文件。
S112:停止播放视频。其中,可由VideoDrawable(#stop)停止播放所述视频文件。
S113:停止解码。其中,可由函数mCodec.stop()停止解码。
在本申请实施例中,通过直接使用安卓原生渲染框架创建OpenGL渲染环境,也就是利用安卓原生的绘制框架中的隐藏API实现自定义的OpenGL命令,从而在无需额外的渲染线程的情况下将视频文件解码后得到的视频图像帧绘制到图片显示界面上以进行视频播放,实现在图片显示界面例如ImageView上播放视频的功能。
图2是本申请实施例提供的另一种视频播放方法的流程示意图,本说明书提供了如实施例或流程图所述的方法操作步骤,但基于常规或者无创造性的劳动可以包括更多或者更少的操作步骤。实施例中列举的步骤顺序仅仅为众多步骤执行顺序中的一种方式,不代表唯一的执行顺序。在实际中的终端或者存储介质产品执行时,可以按照实施例或者附图所示的方法顺序执行或者并行执行。具体如图2所示,所述方法包括如下步骤。
S201:从服务器中下载多媒体数据,并检测所述多媒体数据的类型。
若所述多媒体数据的类型为图片类型,则调用终端中的图片显示界面显示所述多媒体数据;
若所述多媒体数据的类型为视频类型,则将所述多媒体数据作为待播放的适配文件,并触发执行步骤S202。
S202:获取待播放的视频文件。所述待播放的视频文件可以由服务器发送给智能终端的安卓平台,也可以由其它设备,例如:其它智能终端发送给所述智能终端的安卓平台,所述安卓平台获取所述待播放的视频文件,可以将待播放的视频文件缓存在在安卓平台上预设或特定的视频缓存区域。在需要播放视频文件时从视频缓存区域调用存储的待播放的视频文件。
本申请实施例中,所述安卓平台上安装有普通原生安卓应用程序,所述原生安卓App是指利用原生接口做绘制,没有创建、维护OpenGL渲染环境的应用程序。所述待播放的视频文件可以是单独的视频文件,也可以既有视频文件又有其他格式的文件,比如图形文件。
S203:获取由开放图形库创建的纹理标识。可由开放图形库中的函数glGenTextures()生成并返回纹理标识,以获取由开放图形库创建的纹理标识。
S204:为所述视频文件确定视频解码器。所述视频解码器是安卓平台的硬件解码器。所述视频解码器可以是已经创建并执行过解码任务的视频解码器,也可以是根据视频解码需求实时创建的视频解码器。可由用户人为确定视频解码器,也可由安卓平台预先指定视频解码器,还可由安卓平台根据当前各视频解码器的运行情况,选择任务量较少或者排队时间较短的视频解码器来对所述视频文件进行解码,在此不对如何确定视频解码器进行限定。
S205:调用所述视频解码器得到所述视频文件的各播放时间点的视频图像帧。
在一个实施例中,调用视频缓存区域中存储的视频文件,并利用所述视频解码器对该视频文件进行解码得到YUV格式的数据流,也就是一帧一帧的视频图像帧。
S206:根据视频文件播放时间点的先后顺序,依次生成各播放时间点对应的视频图像帧在开放图形库中的纹理数据。可由开放图形库中的函数glTexImage2D和glTexParameterf等函数来创建各播放时间点对应视频图像帧对应的纹理对象,即生成所述视频图像帧在开放图形库中的纹理数据。
S207:将所述纹理标识与各播放时间点对应的纹理数据关联。可通过开放图形库中的函数glBindTexture()将所述纹理标识与所述纹理数据绑定,从而将所述纹理标识与所述纹理数据关联。
S208:调用所述开放图形库中的绘制函数依次将所述纹理标识关联的各个播放时间点的纹理数据绘制到图片显示界面上,以便于在所述图片显示界面上播放所述视频图像帧。所述图片显示界面是指可直接绘制和显示图片的视图,例如:普通View,或专门用于显示图片的图片视图(ImageView)。在图片显示界面上不能直接绘制或播放由视频文件解码得到的视频图像帧。
本申请实施例中,可由开放图形库中的函数glTexCoordPointer,将所述纹理标识关联的所述纹理数据有序映射到图片显示界面上以进行视频播放,即将所述纹理标识关联的所述纹理数据绘制到图片显示界面上,实现在图片显示界面上播放视频图像帧。
在本申请实施例中,可以将视频文件解码后得到的视频图像帧绘制到图片显示界面上以进行视频播放,实现在图片显示界面例如ImageView上播放视频的功能。
如图3是本申请实施例提供的另一种视频播放方法的流程示意图,具体如图3所示,可以包括以下步骤:
S301:获取待播放的视频文件。
S302:获取所述视频文件的播放方式;其中,所述播放方式包括第一播放方式和第二播放方式,所述第一播放方式为在图片显示界面上播放所述视频文件,所述第二播放方式为在视频显示界面上播放所述视频文件。若所述视频文件的播放方式为第一播放方式,则执行步骤S303,若所述视频文件的播放方式为第二播放方式,则执行步骤S304。
在一个实施方式中,所述视频显示界面是指专门用于播放视频的视图,例如:SurfaceView或者TextureView。
在本申请实施例中,可以在安卓平台上设置获取所述视频文件的播放方式的选择界面,由用户人为在选择界面上进行视频文件的播放方式的选择;也可以在智能终端安装安卓平台时对视频文件的播放方式进行初始化设置;还可以由安卓平台根据当前安卓平台运行情况,自动选择所述视频文件的播放方式,例如:若安卓平台的运行内存的占用率超过预设阈值时,则选择第一播放方式;若安卓平台的运行内存的占用率未超过预设阈值,则选择第二播放方式等,在此不对所述视频文件的播放方式进行限定。待选择所述视频文件的播放方式后,原生安卓App获取所述视频文件的播放方式。
需要说明的是,所述步骤S301和S302的执行顺序可以根据实际情况进行互换,在此并不对其执行顺序进行限定。
S303:执行获取由开放图形库创建的纹理标识,也就是执行前述步骤S203至S208。
S304:将所述视频文件在所述视频显示界面上播放。
在本申请实施例中,可以额外运行SurfaceView来播放所述视频文件,也可以在TextureView播放所述视频文件,还可以采用其它视频显示控件或在其它视频显示界面播放视频。
如图4是本申请实施例提供的另一种视频播放方法的流程示意图,具体如图4所示,可以包括以下步骤:
S401:获取待播放的视频文件。
S402:在应用框架层构建用于封装绘制命令的实现类,所述绘制命令用于调用开放图形库。
其中,所述应用框架层可以是java层的应用框架层,java层由Java语言实现。所述步骤S401和S402的执行顺序可以互换,也就是可以在获取待播放视频文件之前,就在java层的应用框架层构建用于封装绘制命令的实现类,以方便后续调用封装在java层的应用框架层的绘制命令,从而调用开放图形库。在此不对步骤S401和S402的执行顺序进行限定。
在本申请实施例中,还可将所述视频文件的地址存储到所述实现类。通过所述实现类既可以触发调用开放图形库,又可以调用存储在视频缓存区域的视频文件。
S403:根据所述实现类中封装的所述绘制命令,调用所述开放图形库以获取所述开放图形库创建的纹理标识。
S404:为所述视频文件确定视频解码器。
S405:根据所述实现类中存储中的所述视频文件的地址,调用所述视频文件。
其中,可根据所述实现类中存储中的所述视频文件的地址,有序地调用所述视频文件,以便后续有序地将纹理数据绘制到图片显示界面上,实现视频的有序播放。
S406:调用所述视频解码器对所述视频文件进行解码得到所述视频文件的各播放时间点的视频图像帧。
在一个实施例中,调用视频缓存区域中存储的视频文件,并利用所述视频解码器对该视频文件进行解码得到YUV格式的数据流,也就是一帧一帧的视频图像帧。
S407:根据视频文件播放时间点的先后顺序,依次生成各播放时间点对应的视频图像帧在开放图形库中的纹理数据。
S408:将所述纹理标识与各播放时间点对应的纹理数据关联。
S409:调用所述开放图形库中的绘制函数依次将所述纹理标识关联的各个播放时间点的纹理数据绘制到图片显示界面上,以便于在所述图片显示界面上播放所述视频图像帧。
如图5是本申请实施例提供的另一种视频播放方法的流程示意图,具体如图5所示,可以包括以下步骤:
S501:在应用框架层构建用于封装绘制命令的实现类,所述绘制命令用于调用开放图形库。
S502:在本地框架(native)层构建类。
其中,所述本地框架层包括运行环境以及C语言库;native层是通过C和C++语言实现。
在本申请实施例中,在native层中构建类的目的是为了在native层调用的接口(callDrawGLFunction)要求传递一个指针函数。
S503:将所述实现类的引用存储到所述本地框架层构建的类中。
其中,可将java层的应用框架层的所述实现类的引用存储到native层,以简化撰写代码的难度。
S504:将所述本地框架层构建的类的内存指针地址回传至所述应用框架层的播放指令,所述播放指令用于指示所述视频文件的播放方式。
所述播放方式包括第一播放方式和第二播放方式,所述第一播放方式为在图片显示界面上播放所述视频文件,所述第二播放方式为在视频显示界面上播放所述视频文件。
S505:获取待播放的视频文件。
在本申请实施例中,还可将所述视频文件的地址存储到所述实现类。通过所述实现类既可以触发调用开放图形库,又可以调用存储在视频缓存区域的视频文件。
S506:根据播放指令,查找所述本地框架层构建的类的内存指针地址。
所述播放指令存储有所述本地框架层构建的类的内存指针地址,则在播放指令内可直接查找到所述本地框架层构建的类的内存指针地址。
S507:根据所述本地框架层构建的类的内存指针地址,查找所述本地框架层构建的类。
所述本地框架层构建的类的内存指针地址用于指示本地框架层构建的类的存储位置。
S508:根据本地框架层构建的类中存储的所述实现类的引用,查找所述实现类。
根据实现类的引用,可直接引用实现类,也就是查找到实现类,方便调用开放图形库。
S509:根据所述实现类中封装的所述绘制命令,调用所述开放图形库以获取所述开放图形库创建的纹理标识。
其中,可由开放图形库中的函数glGenTextures()生成并返回纹理标识,即获取所述开放图形库创建的纹理标识。在本申请实施例中,不同的安卓系统版本,所调用的绘制命令也不同。例如:若版本是API21,则可调用HardwareCanvas#callDrawGLFunction对待显示文件进行绘制;若版本是API22时,则可调用HardwareCanvas#callDrawGLFunction2,若版本是API 23时,则可调用DisplayListCanvas#callDrawGLFunction2等。
S510:为所述视频文件确定视频解码器。
S511:根据所述实现类中存储中的所述视频文件的地址,调用所述视频文件。
S512:调用所述视频解码器对所述视频文件进行解码得到所述视频文件的各播放时间点的视频图像帧。
S513:根据视频文件播放时间点的先后顺序,依次生成各播放时间点对应的视频图像帧在开放图形库中的纹理数据。
S514:将所述纹理标识与各播放时间点对应的纹理数据关联。
S515:调用所述开放图形库中的绘制函数依次将所述纹理标识关联的所述纹理数据绘制到图片显示界面上,以便于在所述图片显示界面上播放所述视频图像帧。
如图6是本申请实施例提供的另一种视频播放方法的流程示意图,具体如图6所示,可以包括以下步骤:
S601:获取待播放的视频文件。
S602:提取所述视频文件中的第N帧视频帧,所述N为预设的正整数。
其中,可以提取所述视频文件中的第1帧视频帧,作为预览显示的视频帧,也可以提取视频文件中的其他视频帧,作为预览显示的视频帧。N可以由用户在智能终端进行人为设置,也可以由安卓平台进行初始化设置,在此不对N的预设值进行限定。
S603:在图片显示界面上显示所述第N帧视频帧。
在图片显示界面上显示所述第N帧视频帧,作为预览显示的视频帧,方便用户根据预览显示的视频帧对视频文件的内容进行了解以选择是否播放视频文件,或者选择视频文件的播放方式。
S604:获取由开放图形库创建的纹理标识。
S605:为所述视频文件确定视频解码器。
S606:调用所述视频解码器得到所述视频文件的各播放时间点的视频图像帧。
S607:根据视频文件播放时间点的先后顺序,依次生成各播放时间点对应的视频图像帧在开放图形库中的纹理数据。
S608:将所述纹理标识与各播放时间点对应的纹理数据关联。
S609:调用所述开放图形库中的绘制函数依次将所述纹理标识关联的各个播放时间点的纹理数据绘制到图片显示界面上,以便于在所述图片显示界面上播放所述视频图像帧。
本申请实施例中,所述方法还包括:
调用编写的着色器(shader)对所述图片显示界面上显示的视频图像帧进行特效处理。
所述着色器可以包括顶点着色器、片断着色器和几何着色器类等,可以根据实际需要在开放图形库中调用对应特效处理的着色器对图片显示界面上显示的视频图像进行特效处理。当常用的着色器类型较多时,还可以为各着色器创建管理类,例如:创建纹理着色器类和颜色着色器类等,方便调用对应功能的着色器。
再请参见图7是本发明实施例的一种视频播放装置的结构示意图,该视频播放装置可设置于智能终端中,该视频播放装置可以是运行于智能终端中的一个计算机程序(包括程序代码),也可以是包含在智能终端中的一个实体装置。该视频播放装置可以执行图2所示的方法。具体请参见图7,所述视频播放装置包括如下模块。
获取模块701,用于获取待播放的视频文件,并获取由开放图形库创建的纹理标识;
解码模块702,用于为所述视频文件确定视频解码器,并调用所述视频解码器得到所述视频文件的各播放时间点的视频图像帧;
生成模块703,用于根据视频文件播放时间点的先后顺序,依次生成各播放时间点对应的视频图像帧在开放图形库中的纹理数据,将所述纹理标识与各播放时间点对应的纹理数据关联;
绘制模块704,用于调用所述开放图形库中的绘制函数依次将所述纹理标识关联的各个播放时间点的纹理数据绘制到图片显示界面上,以便于在所述图片显示界面上播放所述视频图像帧。
在一个实施例中,所述获取模块701,还用于获取所述视频文件的播放方式;其中,所述播放方式包括第一播放方式和第二播放方式,所述第一播放方式为在图片显示界面上播放所述视频文件,所述第二播放方式为在视频显示界面上播放所述视频文件;
所述获取模块701,具体用于若所述视频文件的播放方式为第一播放方式,则执行获取由开放图形库创建的纹理标识;
所述视频播放装置,还包括:
播放模块705,用于若所述视频文件的播放方式为第二播放方式,则将所述视频文件在所述视频显示界面上播放。
在一个实施例中,所述视频播放装置,还包括:
构建模块706,用于在应用框架层构建用于封装绘制命令的实现类,所述绘制命令用于调用开放图形库;
所述获取模块701,具体用于根据所述实现类中封装的所述绘制命令,调用所述开放图形库以获取所述开放图形库创建的纹理标识。
在一个实施例中,所述视频播放装置,还包括:
存储模块707,用于将所述视频文件的地址存储到所述实现类;
所述解码模块702,具体用于根据所述实现类中存储中的所述视频文件的地址,调用所述视频文件;调用所述视频解码器对所述视频文件进行解码得到所述视频文件的各播放时间点的视频图像帧。
在一个实施例中,所述构建模块706,还用于在本地框架层构建类;
所述存储模块707,还用于将所述实现类的引用存储到所述本地框架层构建的类中;将所述本地框架层构建的类的内存指针地址回传至所述应用框架层的播放指令中,所述播放指令用于指示所述视频文件的播放方式;
所述获取模块701,具体用于根据播放指令,查找所述本地框架层构建的类的内存指针地址;根据所述本地框架层构建的类的内存指针地址,查找所述本地框架层构建的类;根据本地框架层构建的类中存储的所述实现类的引用,查找所述实现类。
在一个实施例中,所述视频播放装置,还包括:
提取模块708,用于提取所述视频文件中的第N帧视频帧;
显示模块709,用于在图片显示界面上显示所述第N帧视频帧,所述N为预设的正整数。
在一个实施例中,所述获取模块701,还用于获取待播放的视频文件,并获取由开放图形库创建的纹理标识之前,从服务器中下载多媒体数据,并检测所述多媒体数据的类型;
若所述多媒体数据的类型为图片类型,则调用终端中的图片显示界面显示所述多媒体数据;
若所述多媒体数据的类型为视频类型,则将所述多媒体数据作为待播放的适配文件,并触发执行所述获取待播放的视频文件,并获取由开放图形库创建的纹理标识。
在本申请实施例中,智能终端通过直接使用安卓原生渲染框架创建OpenGL渲染环境,也就是利用安卓原生的绘制框架中的隐藏API实现自定义的OpenGL命令,从而在无需额外的渲染线程的情况下将视频文件解码后得到的视频图像帧绘制到图片显示界面上以进行视频播放,实现在图片显示界面例如ImageView上播放视频的功能。
再请参见图8,是本申请实施例提供的一种智能终端的结构示意图,该智能终端可以是智能手机、平板电脑、个人电脑PC等终端,所述智能终端包括:存储装置802和处理器801;并且,所述智能终端还可以包括数据接口803、用户接口804。各个硬件之间还可以通过各种类型的总线建立连接。
通过所述数据接口803,智能终端可以和其他终端、服务器等设备之间交互数据,所述用户接口804则可以提供触摸显示屏、物理按键等实现用户与智能终端之间的人机交互。
所述存储装置802可以包括易失性存储器(volatile memory),例如随机存取存储器(random-access memory,RAM);存储装置802也可以包括非易失性存储器(non-volatilememory),例如快闪存储器(flash memory),固态硬盘(solid-state drive,SSD)等;存储装置802还可以包括上述种类的存储器的组合。
所述处理器801可以是中央处理器(central processing unit,CPU)。所述处理器801还可以进一步包括硬件芯片。上述硬件芯片可以是专用集成电路(application-specific integrated circuit,ASIC),可编程逻辑器件(programmable logic device,PLD)等。上述PLD可以是现场可编程逻辑门阵列(field-programmable gate array,FPGA),通用阵列逻辑(generic array logic,GAL)等。
可选地,所述存储装置802存储程序指令。所述处理器801可以调用所述程序指令,实现如本申请前述实施例所示的方法中相关步骤。
所述处理器801,用于获取待播放的视频文件,并获取由开放图形库创建的纹理标识;
为所述视频文件确定视频解码器,并调用所述视频解码器得到所述视频文件的视频图像帧;
生成所述视频图像帧在开放图形库中的纹理数据,将所述纹理标识与所述纹理数据关联;
调用所述开放图形库中的绘制函数将所述纹理标识关联的所述纹理数据绘制到图片显示界面上,以便于在所述图片显示界面上显示所述视频图像帧。
在一个实施例中,所述处理器801,还用于获取所述视频文件的播放方式;其中,所述播放方式包括第一播放方式和第二播放方式,所述第一播放方式为在图片显示界面上播放所述视频文件,所述第二播放方式为在视频显示界面上播放所述视频文件;
若所述视频文件的播放方式为第一播放方式,则执行获取由开放图形库创建的纹理标识;
若所述视频文件的播放方式为第二播放方式,则将所述视频文件在所述视频显示界面上播放。
在一个实施例中,所述处理器801,还用于在应用框架层构建用于封装绘制命令的实现类,所述绘制命令用于调用开放图形库;
所述处理器801,具体用于根据所述实现类中封装的所述绘制命令,调用所述开放图形库以获取所述开放图形库创建的纹理标识。
在一个实施例中,所述处理器801,还用于将所述视频文件的地址存储到所述实现类;
所述处理器801,具体用于根据所述实现类中存储中的所述视频文件的地址,调用所述视频文件;
调用所述视频解码器对所述视频文件进行解码得到所述视频文件的视频图像帧。
在一个实施例中,所述处理器801,还用于在本地框架层构建类;
将所述实现类的引用存储到所述本地框架层构建的类中;
将所述本地框架层构建的类的内存指针地址回传至所述应用框架层的播放指令中,所述播放指令用于指示所述视频文件的播放方式;
所述处理器801,具体用于根据播放指令,查找所述本地框架层构建的类的内存指针地址;
根据所述本地框架层构建的类的内存指针地址,查找所述本地框架层构建的类;
根据本地框架层构建的类中存储的所述实现类的引用,查找所述实现类。
在一个实施例中,所述处理器801,还用于提取所述视频文件中的第N帧视频帧;
在图片显示界面上显示所述第N帧视频帧,所述N为预设的正整数。
在一个实施例中,所述处理器801,还用于在获取待播放的视频文件,并获取由开放图形库创建的纹理标识之前,从服务器中下载多媒体数据,并检测所述多媒体数据的类型;
若所述多媒体数据的类型为图片类型,则调用终端中的图片显示界面显示所述多媒体数据;
若所述多媒体数据的类型为视频类型,则将所述多媒体数据作为待播放的适配文件,并触发执行所述获取待播放的视频文件,并获取由开放图形库创建的纹理标识。
在本申请实施例中,智能终端通过直接使用安卓原生渲染框架创建OpenGL渲染环境,也就是利用安卓原生的绘制框架中的隐藏API实现自定义的OpenGL命令,从而在无需额外的渲染线程的情况下将视频文件解码后得到的视频图像帧绘制到图片显示界面上以进行视频播放,实现在图片显示界面例如ImageView上播放视频的功能。
相应地,本发明实施例还提供一种计算机可读存储介质,所述计算机可读存储介质用于存储计算机程序,所述计算机程序使得计算机执行本申请图1b至6中任意实施例所示的视频播放方法。可以理解的是,此处的计算机存储介质既可以包括智能终端中的内置存储介质,当然也可以包括智能终端所支持的扩展存储介质。计算机存储介质提供存储空间,该存储空间存储了智能终端的操作系统。并且,在该存储空间中还存放了适于被处理器加载并执行的一条或一条以上的指令,这些指令可以是一个或一个以上的计算机程序(包括程序代码)。需要说明的是,此处的计算机存储介质可以是高速RAM存储器,也可以是非不稳定的存储器(non-volatile memory),例如至少一个磁盘存储器;可选的还可以是至少一个位于远离前述处理器的计算机存储介质。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)或随机存储记忆体(Random AccessMemory,RAM)等。
相应地,本发明实施例还提供一种计算机程序产品,所述计算机程序产品包括指令,当其在计算机上运行时,使得计算机执行本申请图1b至6中任意实施例所示的视频播放方法。
以上所揭露的仅为本发明的部分实施例而已,当然不能以此来限定本发明之权利范围,本领域普通技术人员可以理解实现上述实施例的全部或部分流程,并依本发明权利要求所作的等同变化,仍属于发明所涵盖的范围。
Claims (10)
1.一种视频播放方法,其特征在于,包括:
获取待播放的视频文件,并获取由开放图形库创建的纹理标识;
为所述视频文件确定视频解码器,并调用所述视频解码器得到所述视频文件的各播放时间点的视频图像帧;
根据视频文件播放时间点的先后顺序,依次生成各播放时间点对应的视频图像帧在开放图形库中的纹理数据,将所述纹理标识与各播放时间点对应的纹理数据关联;
调用所述开放图形库中的绘制函数依次将所述纹理标识关联的各个播放时间点的纹理数据绘制到图片显示界面上,以便于在所述图片显示界面上播放所述视频图像帧。
2.如权利要求1所述的方法,其特征在于,在所述获取由开放图形库创建的纹理标识之前,所述方法还包括:
获取所述视频文件的播放方式;其中,所述播放方式包括第一播放方式和第二播放方式,所述第一播放方式为在图片显示界面上播放所述视频文件,所述第二播放方式为在视频显示界面上播放所述视频文件;
若所述视频文件的播放方式为第一播放方式,则执行获取由开放图形库创建的纹理标识;
若所述视频文件的播放方式为第二播放方式,则将所述视频文件在所述视频显示界面上播放。
3.如权利要求1或2所述的方法,其特征在于,在所述获取由开放图形库创建的纹理标识之前,所述方法还包括:
在应用框架层构建用于封装绘制命令的实现类,所述绘制命令用于调用开放图形库;
所述获取由开放图形库创建的纹理标识,包括:
根据所述实现类中封装的所述绘制命令,调用所述开放图形库以获取所述开放图形库创建的纹理标识。
4.如权利要求3所述的方法,其特征在于,在所述获取待播放的视频文件之后,所述方法还包括:
将所述视频文件的地址存储到所述实现类;
所述调用所述视频解码器得到所述视频文件的各播放时间点的视频图像帧,包括:
根据所述实现类中存储中的所述视频文件的地址,调用所述视频文件;
调用所述视频解码器对所述视频文件进行解码得到所述视频文件的各播放时间点的视频图像帧。
5.如权利要求3所述的方法,其特征在于,所述方法还包括:
在本地框架层构建类;
将所述实现类的引用存储到所述本地框架层构建的类中;
将所述本地框架层构建的类的内存指针地址回传至所述应用框架层的播放指令中,所述播放指令用于指示所述视频文件的播放方式;
所述根据所述实现类中储存的所述绘制命令,调用所述开放图形库之前,还包括:
根据播放指令,查找所述本地框架层构建的类的内存指针地址;
根据所述本地框架层构建的类的内存指针地址,查找所述本地框架层构建的类;
根据本地框架层构建的类中存储的所述实现类的引用,查找所述实现类。
6.如权利要求1所述的方法,其特征在于,所述获取待播放的视频文件之后,包括:
提取所述视频文件中的第N帧视频帧;
在图片显示界面上显示所述第N帧视频帧,所述N为预设的正整数。
7.如权利要求1所述的方法,其特征在于,所述获取待播放的视频文件,并获取由开放图形库创建的纹理标识之前,还包括:
从服务器中下载多媒体数据,并检测所述多媒体数据的类型;
若所述多媒体数据的类型为图片类型,则调用终端中的图片显示界面显示所述多媒体数据;
若所述多媒体数据的类型为视频类型,则将所述多媒体数据作为待播放的适配文件,并触发执行所述获取待播放的视频文件,并获取由开放图形库创建的纹理标识。
8.一种智能终端,其特征在于,所述智能终端包括:存储装置和处理器,所述存储装置中存储有程序指令,所述处理器在调用所述存储指令时,用于实现如权利要求1-7任一项所述的视频播放方法。
9.一种计算机可读存储介质,其特征在于,所述计算机可读存储介质用于存储计算机程序,所述计算机程序使得计算机执行如权利要求1-7任一项所述的视频播放方法。
10.一种计算机程序产品,其特征在于,包括指令,当其在计算机上运行时,使得计算机执行权利要求1-7任一项所述的视频播放方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010097696.XA CN113271497B (zh) | 2020-02-17 | 2020-02-17 | 一种视频播放方法、智能终端、存储介质及程序产品 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010097696.XA CN113271497B (zh) | 2020-02-17 | 2020-02-17 | 一种视频播放方法、智能终端、存储介质及程序产品 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN113271497A true CN113271497A (zh) | 2021-08-17 |
CN113271497B CN113271497B (zh) | 2024-03-15 |
Family
ID=77227516
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010097696.XA Active CN113271497B (zh) | 2020-02-17 | 2020-02-17 | 一种视频播放方法、智能终端、存储介质及程序产品 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN113271497B (zh) |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663796A (zh) * | 2012-04-16 | 2012-09-12 | 广东威创视讯科技股份有限公司 | 一种开放图形库的动画处理方法和装置 |
CN107948735A (zh) * | 2017-12-06 | 2018-04-20 | 北京金山安全软件有限公司 | 一种视频播放方法、装置及电子设备 |
CN108765534A (zh) * | 2018-05-24 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 一种图像渲染方法、装置、设备及存储介质 |
CN109168014A (zh) * | 2018-09-26 | 2019-01-08 | 广州虎牙信息科技有限公司 | 一种直播方法、装置、设备及存储介质 |
-
2020
- 2020-02-17 CN CN202010097696.XA patent/CN113271497B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102663796A (zh) * | 2012-04-16 | 2012-09-12 | 广东威创视讯科技股份有限公司 | 一种开放图形库的动画处理方法和装置 |
CN107948735A (zh) * | 2017-12-06 | 2018-04-20 | 北京金山安全软件有限公司 | 一种视频播放方法、装置及电子设备 |
CN108765534A (zh) * | 2018-05-24 | 2018-11-06 | 武汉斗鱼网络科技有限公司 | 一种图像渲染方法、装置、设备及存储介质 |
CN109168014A (zh) * | 2018-09-26 | 2019-01-08 | 广州虎牙信息科技有限公司 | 一种直播方法、装置、设备及存储介质 |
Also Published As
Publication number | Publication date |
---|---|
CN113271497B (zh) | 2024-03-15 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106598655B (zh) | 应用程序页面处理方法和装置 | |
EP3129871B1 (en) | Generating a screenshot | |
CN110166810B (zh) | 视频渲染引擎切换方法、装置、设备及可读存储介质 | |
KR101239029B1 (ko) | 그래픽스 처리 시스템의 오프-스크린 표면을 위한 멀티-버퍼 지원 | |
CN110599396B (zh) | 信息处理方法及装置 | |
US9342322B2 (en) | System and method for layering using tile-based renderers | |
TW201706834A (zh) | 應用程式與虛擬機器通訊連接的系統與方法 | |
CN110750664B (zh) | 图片的显示方法及装置 | |
CN109309842B (zh) | 直播数据处理方法和装置、计算机设备和存储介质 | |
KR20160120343A (ko) | 크로스 플랫폼 렌더링 엔진 | |
CN108496198B (zh) | 一种图像处理方法及设备 | |
US10204598B2 (en) | Predictive pre-decoding of encoded media item | |
CN113837939A (zh) | 一种图像处理方法及设备 | |
US9053526B2 (en) | Method and apparatus for encoding cloud display screen by using application programming interface information | |
CN111240769A (zh) | 页面启动方法、装置、设备及存储介质 | |
CN113778604A (zh) | 一种操作界面的展示方法、装置、电子设备和存储介质 | |
CN113411664A (zh) | 基于子应用的视频处理方法、装置和计算机设备 | |
US10679321B2 (en) | Efficient release of target memory | |
CN113271497B (zh) | 一种视频播放方法、智能终端、存储介质及程序产品 | |
US10109260B2 (en) | Display processor and method for display processing | |
CN114449305A (zh) | 直播间中的礼物动画播放方法及装置 | |
CN113888684A (zh) | 图形渲染方法、设备及计算机存储介质 | |
US9972064B1 (en) | Non-intrusive and low-power recording | |
CN116095250B (zh) | 用于视频裁剪的方法和装置 | |
CN117499791A (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 |