CN108574806B - 视频播放方法和装置 - Google Patents
视频播放方法和装置 Download PDFInfo
- Publication number
- CN108574806B CN108574806B CN201710139264.9A CN201710139264A CN108574806B CN 108574806 B CN108574806 B CN 108574806B CN 201710139264 A CN201710139264 A CN 201710139264A CN 108574806 B CN108574806 B CN 108574806B
- Authority
- CN
- China
- Prior art keywords
- video
- decoder
- image
- rotation angle
- canvas
- 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.)
- Active
Links
Images
Classifications
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/76—Television signal recording
-
- 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/47—End-user applications
- H04N21/485—End-user interface for client configuration
- H04N21/4858—End-user interface for client configuration for modifying screen layout parameters, e.g. fonts, size of the windows
-
- H—ELECTRICITY
- H04—ELECTRIC COMMUNICATION TECHNIQUE
- H04N—PICTORIAL COMMUNICATION, e.g. TELEVISION
- H04N5/00—Details of television systems
- H04N5/222—Studio circuitry; Studio devices; Studio equipment
- H04N5/262—Studio circuits, e.g. for mixing, switching-over, change of character of image, other special effects ; Cameras specially adapted for the electronic generation of special effects
- H04N5/2628—Alteration of picture size, shape, position or orientation, e.g. zooming, rotation, rolling, perspective, translation
Landscapes
- Engineering & Computer Science (AREA)
- Multimedia (AREA)
- Signal Processing (AREA)
- Human Computer Interaction (AREA)
- Controls And Circuits For Display Device (AREA)
- Editing Of Facsimile Originals (AREA)
Abstract
本发明涉及一种视频播放方法,包括:解析视频,得到视频原始尺寸和所述视频录制时的视频旋转角度;根据所述视频原始尺寸,获取所述视频以所述视频旋转角度旋转后的视频图像尺寸;根据所述视频图像尺寸确定所述视频以所述视频旋转角度旋转后的播放方式;所述播放方式为横屏播放方式和竖屏播放方式中的一种;按照所述播放方式将画布旋转至与当前屏幕姿态匹配;所述画布的尺寸符合所述视频原始尺寸;将从所述视频中解码出的图像数据,按照所述视频旋转角度旋转;将旋转后的所述图像数据,跟随所述画布的旋转绘制到所述画布中。本发明提供的视频播放方法,可以尽量避免视频播放时影像朝向混乱。
Description
技术领域
本发明涉及计算机技术领域,特别涉及视频播放技术领域,尤其涉及一种视频播放方法和装置。
背景技术
视频是一种存储动态影像的媒体数据,从视频中解码出视频帧后,按照一定时间间隔依次展示各个视频帧,若时间间隔足够小,比如小于或等于1/24秒,依次展示的视频帧将形成动态的画面,可以向用户传达动态影像信息。
目前,视频在录制时会形成标准尺寸的视频,如形成宽度为1280像素高度为720像素的视频,而由于录制视频的设备姿态的差异,会导致视频中影像朝向混乱,视频在播放时按照视频的标准尺寸播放,导致播放时影像朝向混乱。
发明内容
基于此,有必要针对目前视频在播放时会产生影像倒置的问题,提供一种视频播放方法和装置。
一种视频播放方法,包括:
解析视频,得到视频原始尺寸和所述视频录制时的视频旋转角度;
根据所述视频原始尺寸,获取所述视频以所述视频旋转角度旋转后的视频图像尺寸;
根据所述视频图像尺寸确定所述视频以所述视频旋转角度旋转后的播放方式;所述播放方式为横屏播放方式和竖屏播放方式中的一种;
按照所述播放方式将画布旋转至与当前屏幕姿态匹配;所述画布的尺寸符合所述视频原始尺寸;
将从所述视频中解码出的图像数据,按照所述视频旋转角度旋转;
将旋转后的所述图像数据,跟随所述画布的旋转绘制到所述画布中。
一种视频播放装置,包括:
解析模块,用于解析视频,得到视频原始尺寸和所述视频录制时的视频旋转角度;
视频图像尺寸获取模块,用于根据所述视频原始尺寸,获取所述视频以所述视频旋转角度旋转后的视频图像尺寸;
播放方式确定模块,用于根据所述视频图像尺寸确定所述视频以所述视频旋转角度旋转后的播放方式;所述播放方式为横屏播放方式和竖屏播放方式中的一种;
画布旋转模块,用于按照所述播放方式将画布旋转至与当前屏幕姿态匹配;所述画布的尺寸符合所述视频原始尺寸;
图像旋转模块,用于将从所述视频中解码出的图像数据,按照所述视频旋转角度旋转;
图像渲染器,用于将旋转后的所述图像数据,跟随所述画布的旋转绘制到所述画布中。
上述视频播放方法和装置,在视频中记录视频录制时的视频旋转角度,在播放视频时,解析视频就能够得到视频中记录的视频旋转角度,该视频旋转角度反映了视频录制设备在录制该视频时的姿态,因此以该视频旋转角度旋转后的视频图像尺寸就是视频在矫正影像方向后的尺寸,于是根据视频图像尺寸就可以确定视频采用横屏播放方式还是竖屏播放方式。按照确定的播放方式,将画布旋转至匹配当前屏幕姿态的位置,实现自适应地旋转画布。在从视频中解码出图像数据后,按照视频旋转角度旋转图像数据,并将旋转后的图像数据跟随画布旋转绘制到画布中,最终呈现的图像数据符合播放方式和当前屏幕姿态,实现了播放视频时画面朝向的自适应调整,尽量避免视频播放时影像朝向混乱。
附图说明
图1为一个实施例中用于实现视频播放方法的移动终端的内部结构示意图;
图2为一个实施例中视频播放方法的流程示意图;
图3为一个实施例中视频旋转角度的示意图;
图4为一个实施例中屏幕旋转角度的示意图;
图5为一个具体应用场景中视频播放方法的流程示意图;
图6为一个实施例中未采用和采用本发明实施例的视频播放方法的播放效果对比图;
图7为一个实施例中视频播放装置的结构框图;
图8为另一个实施例中视频播放装置的结构框图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
图1为一个实施例中用于实施下述各个实施例的视频播放方法的移动终端的内部结构示意图。参照图1,该移动终端包括中央处理器、硬解码器、非易失性存储介质、内存储器、网络接口、屏幕和输入装置。其中,终端的非易失性存储介质存储有操作系统和视频播放装置,该视频播放装置用于实现一种视频播放方法。移动终端的中央处理器用于提供计算和控制能力,支撑整个移动终端的运行。硬解码器是具有物理实体的解码器,可以是图形处理器(GPU)或者解码芯片,用于解析和解码视频。移动终端中的内存储器为非易失性存储介质中的视频播放装置的运行提供环境。该内存储器中可存储有计算机可读指令,该计算机可读指令被中央处理器执行时,可使得中央处理器执行一种视频播放方法。移动终端的网络接口用于与服务器进行网络通信,如下载硬解码终端信息集合。移动终端的屏幕可以是液晶屏幕或者电子墨水屏幕,移动终端的输入装置可以是屏幕上覆盖的触摸层,也可以是移动终端外壳上设置的按键、轨迹球或触控板,还可以是外接的键盘、触控板或鼠标等。该移动终端可以是手机、平板电脑、个人数字助理或可穿戴设备等。本领域技术人员可以理解,图1中示出的结构,仅仅是与本申请方案相关的部分结构的框图,并不构成对本申请方案所应用于其上的终端的限定,具体的终端可以包括比图中所示更多或更少的部件,或者组合某些部件,或者具有不同的部件布置。
图2为一个实施例中视频播放方法的流程示意图。本实施例主要以该方法应用于上述图1中的移动终端来举例说明。参照图2,该方法具体包括如下步骤:
S202,解析视频,得到视频原始尺寸和视频录制时的视频旋转角度。
其中,视频是指记录有可连续播放的画面的数据,可以是文件形式或者数据流形式。视频原始尺寸是指视频本身的尺寸,包括视频原始宽度和视频原始高度,一般视频原始宽度大于或等于视频原始高度。
视频录制时的视频旋转角度,表示录制该视频的视频录制设备相对于视频录制设备的标准姿态沿预设方向的旋转角度。视频原始尺寸和视频旋转角度可在录制视频时获取并记录在视频中。
举例说明,参照图3,将301所示的横屏姿态定义为视频旋转角度为0度的标准姿态。将该标准姿态的视频录制设备顺时针旋转90度,变化为302所示的视频旋转角度为90度的竖屏姿态。再将视频旋转角度为90度的竖屏姿态的视频录制设备顺时针旋转90度,变化为303所示的视频旋转角度为180度的横屏姿态。再将视频旋转角度为180度的横屏姿态的视频录制设备顺时针旋转90度,变化为视频旋转角度为270度的竖屏姿态。若再将303所示的竖屏姿态的视频录制设备顺时针旋转90度,则又变化为标准姿态。
进一步地,若分别采用301、302、303和304所示姿态的视频录制设备录制视频,将分别得到视频旋转角度为0度、90度、180度和270度的视频,且得到的视频原始尺寸均一致,即得到视频原始宽度和视频原始高度分别为W和H的视频。
在一个实施例中,移动终端可获取针对视频的播放指令,根据该播放指令创建播放器的播放界面,并注册移动终端的屏幕旋转事件的监听,选择视频的解码器,调用该解码器解码该视频,得到视频原始尺寸和视频录制时的视频旋转角度。
S204,根据视频原始尺寸,获取视频以视频旋转角度旋转后的视频图像尺寸。
其中,视频图像尺寸,是指假设将视频以解析得到的视频旋转角度旋转后的尺寸。视频图像尺寸包括视频图像宽度和视频图像高度。该视频旋转角度反映了视频录制设备在录制该视频时的姿态,因此以该视频旋转角度旋转后的视频图像尺寸就是视频在矫正影像方向后的尺寸。
在一个实施例中,当视频旋转角度为0度时,将视频原始宽度作为视频图像宽度,将视频原始高度作为视频图像高度。当视频旋转角度为90度时,将视频原始宽度作为视频图像高度,将视频原始高度作为视频图像宽度。当视频旋转角度为180度时,将视频原始宽度作为视频图像宽度,将视频原始高度作为视频图像高度。当视频旋转角度为270度时,将视频原始宽度作为视频图像高度,将视频原始高度作为视频图像宽度。
S206,根据视频图像尺寸确定视频以视频旋转角度旋转后的播放方式;播放方式为横屏播放方式和竖屏播放方式中的一种。
其中,播放方式为横屏播放方式和竖屏播放方式中的一种,表示视频播放时所呈现的姿态。其中横屏是指屏幕长边横置时的姿态,竖屏是指屏幕长边竖置时的姿态。
在一个实施例中,移动终端可比较视频图像宽度和视频图像高度的大小关系。当视频图像宽度大于或等于视频图像高度时,确定视频以视频旋转角度旋转后的播放方式为横屏播放方式。当视频图像宽度小于视频图像高度时,确定视频以视频旋转角度旋转后的播放方式为竖屏播放方式。
S208,按照播放方式将画布旋转至与当前屏幕姿态匹配;画布的尺寸符合视频原始尺寸。
其中,画布是用于承载绘制的图像数据的容器。在安卓操作系统中,画布可以是SurfaceView。当前屏幕姿态表示屏幕当前所呈现的姿态,可以用屏幕旋转角度来表示。画布可在解析得到视频原始尺寸后创建,创建的画布的宽度为视频原始宽度,高度为视频原始高度。画布始终符合播放方式,画布或不旋转,或旋转180度。画布可以按比例缩放至全屏尺寸。
在一个实施例中,当播放方式为横屏播放方式时,若当前屏幕旋转角度在相应的横屏旋转角度范围内,则按照当前屏幕旋转角度所在横屏旋转角度范围所对应的标准旋转角度旋转画布。其中,横屏旋转角度范围,是指需要进行画布旋转的屏幕旋转角度的范围。横屏旋转角度范围可以为两个,相应的两个标准旋转角度相差180度。
在一个实施例中,当播放方式为竖屏播放方式时,若当前屏幕旋转角度在相应的竖屏旋转角度范围内,则按照当前屏幕旋转角度所在竖屏旋转角度范围所对应的标准旋转角度旋转画布。其中,竖屏旋转角度范围,是指需要进行画布旋转的屏幕旋转角度的范围。竖屏旋转角度范围可以为两个,相应的两个标准旋转角度相差180度。
举例说明,参照图4,将401所示的竖屏姿态定义为屏幕旋转角度为0度的标准姿态。将该标准姿态的视频录制设备顺时针旋转90度,变化为402所示的屏幕旋转角度为90度的横屏姿态。再将屏幕旋转角度为90度的横屏姿态的视频录制设备顺时针旋转90度,变化为403所示的屏幕旋转角度为180度的竖屏姿态。再将屏幕旋转角度为180度的竖屏姿态的视频录制设备顺时针旋转90度,变化为屏幕旋转角度为270度的横屏姿态。若再将403所示的横屏姿态的视频录制设备顺时针旋转90度,则又变化为标准姿态。
进一步地,假设一个横屏旋转角度范围为[80度,100度],相应的标准旋转角度为90度;另一个横屏旋转角度范围为[260度,280度],相应的标准旋转角度为270度。假设一个竖屏旋转角度范围为大于350度或者小于10度,相应的标准旋转角度为0度;另一个竖屏旋转角度范围为[170度,190度],相应的标准旋转角度为180度。
更进一步地,当播放方式为横屏播放方式时,若当前屏幕旋转角度在横屏旋转角度范围[80度,100度]内,则将画布顺时针旋转至90度;若当前屏幕旋转角度在横屏旋转角度范围[260度,280度]内,则将画布顺时针旋转至270度;若当前屏幕旋转角度不在这两个横屏旋转角度范围内,则画布不做旋转处理。
当播放方式为竖屏播放方式时,若当前屏幕旋转角度在竖屏旋转角度范围即大于350度或者小于10度的范围内,则将画布顺时针旋转至0度;若当前屏幕旋转角度在竖屏旋转角度范围[170度,190度]内,则将画布顺时针旋转至270度;若当前屏幕旋转角度不在这两个竖屏旋转角度范围内,则画布不做旋转处理。
S210,将从视频中解码出的图像数据,按照视频旋转角度旋转。
其中,图像数据是从视频中解码得到的呈现视频内容的数据,包括若干图像像素,这些图像像素的数量为视频原始宽度和视频原始高度的乘积。
具体地,移动终端调用解码器,从视频中解码得到图像数据。移动终端在得到图像数据后,将图像数据按照视频旋转角度旋转,得到旋转后的图像数据,并写入移动终端的内存储器。
在一个实施例中,将解码出的图像数据按照视频旋转角度旋转,可以按照该视频旋转角度对应的图像像素位置变化关系,逐个拷贝图像数据中的图像像素至内存储器中的目标位置,形成旋转后的图像数据。
S212,将旋转后的图像数据,跟随画布的旋转绘制到画布中。
其中,画布具有方向,画布旋转后画布的方向也会发生变化,旋转后的图像数据绘制到画布中后,所呈现画面的方向也会发生变化,使得旋转后的图像数据跟随画布的旋转而旋转。
上述视频播放方法,在视频中记录视频录制时的视频旋转角度,在播放视频时,解析视频就能够得到视频中记录的视频旋转角度,该视频旋转角度反映了视频录制设备在录制该视频时的姿态,因此以该视频旋转角度旋转后的视频图像尺寸就是视频在矫正影像方向后的尺寸,于是根据视频图像尺寸就可以确定视频采用横屏播放方式还是竖屏播放方式。按照确定的播放方式,将画布旋转至匹配当前屏幕姿态的位置,实现自适应地旋转画布。在从视频中解码出图像数据后,按照视频旋转角度旋转图像数据,并将旋转后的图像数据跟随画布旋转绘制到画布中,最终呈现的图像数据符合播放方式和当前屏幕姿态,实现了播放视频时画面朝向的自适应调整,尽量避免视频播放时影像朝向混乱。
在一个实施例中,步骤S202之前,该视频播放方法还包括:确定视频的解码器;步骤S202包括:调用视频的解码器解析视频,得到视频原始尺寸和视频录制时的视频旋转角度。
在一个实施例中,确定视频的解码器的步骤具体包括:判断本地是否能够启用硬解码器;若是,则将硬解码器作为视频的解码器;如否,则将软解码器作为视频的解码器。
其中,判断本地是否能够启用硬解码器,是指判断本地是否具有启用硬解码器以解码视频的能力。本地是指执行视频播放方法的主体,本实施例中具体是执行视频播放方法的移动终端。
硬解码器是指具有解码视频的能力的硬件实体,比如GPU或者视频解码芯片。软解码器是指能够解码视频的计算机程序。硬解码器解码视频与软解码器解码视频相比,解码效率高,耗电量小,发热量低。
本实施例中,优先选择硬解码器作为视频的解码器,在本地不支持硬解码器时,再采用软解码器。通过解码器就可以解析视频得到自适应调整视频播放画面所需的数据,通过解码器解码视频得到图像数据后,就可以进而基于解析得到的数据自适应调整解码得到的图像数据的显示方式,高效便捷。
在一个实施例中,判断本地是否能够启用硬解码器包括:调用硬解码器,若返回错误则判定本地不能够启用硬解码器,若调用成功,则判定本地能够启用硬解码器。
在一个实施例中,判断本地是否能够启用硬解码器的步骤包括:判断本地的终端信息是否存在于硬解码终端信息集合中,若存在则本地能够启用硬解码器,若不存在则本地不能够启用硬解码器。
其中,本地的终端信息用于标识本地的终端,具体可以是终端型号和/或操作系统标识。其中终端型号标识了本地的硬件环境,而操作系统标识则标识了本地的操作系统环境。
硬解码终端信息集合,是指能够启用硬解码器的终端的终端信息构成的集合。硬解码终端信息集合可以是判断时即时从服务器下载的,也可以是历史下载并存储于本地的。
在一个实施例中,判断本地是否能够启用硬解码器的步骤包括:下载硬解码终端信息集合;获取本地的终端信息;判断本地的终端信息是否存在于硬解码终端信息集合中;当本地能够启用硬解码器时,将硬解码器作为视频的解码器的步骤包括:当本地的终端信息存在于硬解码终端信息集合中时,将硬解码器作为视频的解码器;当本地不能够启用硬解码器时,将软解码器作为视频的解码器的步骤包括:当本地的终端信息未存在于硬解码终端信息集合中时,将软解码器作为视频的解码器。
本实施例中,预先准备硬解码终端信息集合,从而在需要判断本地是否能够启用硬解码器时,利用硬解码终端信息集合快速判断,从而提高了处理效率。
在一个实施例中,步骤S210包括:当视频的解码器为硬解码器时,则将视频旋转角度传递至硬解码器,使得硬解码器将视频解码后,调用与硬解码器匹配的用于旋转图像的系统接口,将从视频中解码出的图像数据按照视频旋转角度旋转。
具体地,终端通过播放器,将视频旋转角度传递至视频的解码器。终端通过视频的解码器解码视频得到图像数据后,调用硬解码器能够调用的用于旋转图像的系统接口,将该图像数据以视频旋转角度进行旋转,且旋转方向与录制视频时记录的视频旋转角度的旋转方向相同。系统接口是操作系统提供的接口,当本地操作系统为安卓操作系统时,用于旋转图像的系统接口可以是native_window_set_buffers_transform。
本实施例中,当视频的解码器为硬解码器时,可以利用系统接口直接实现图像数据的旋转,可提高旋转图像数据的效率。
在一个实施例中,步骤S210包括:当视频的解码器为软解码器时,则调用系统指令集中的向量指令,按向量将软解码器从视频中解码出的图像数据装载至寄存器,在寄存器中将图像数据按向量调整为按视频旋转角度旋转后的图像数据。
具体地,移动终端通过软解码器解码视频得到图像数据,并将解码得到的图像数据存储在内存储器中。移动终端可调用中央处理器的系统指令集中的向量指令,按向量从内存储器中读取图像数据,并装载至寄存器中,从而在寄存器中按向量将图像数据旋转后按向量输出至内存储器。按向量输出至内存储器的图像数据构成按视频旋转角度旋转后的图像数据。
其中,向量指令可以包括向量数据装载指令、向量数据交错指令、向量数据交换指令和向量数据存储指令。其中,向量装载指令用于将向量数据加载至寄存器,向量数据交错指令用于向量数据的交错,向量数据交换指令用于交换寄存器中的向量数据,向量数据存储指令用于将向量数据存储至内存储器。当中央处理器为ARM处理器时,向量数据装载指令为VLD指令,向量数据交错指令为VZIP指令,向量数据交换指令为VSWP指令,向量数据存储指令为VST指令。
本实施例中,当视频的解码器为软解码器时,可以通过调用系统指令集中的向量指令,在寄存器中直接实现图像数据的旋转,而寄存器的读写效率远超内存储器的读写效率,可大大降低在采用软解码器时旋转图像数据的时间成本,提高处理效率。
在一个实施例中,步骤S212包括:当本地能够启用硬解码器时,通过硬解码器,将旋转后的图像数据传递至与硬解码器相匹配的第一图像渲染器,由第一图像渲染器直接将旋转后的图像数据跟随画布的旋转绘制到画布中。
其中,图像渲染器是一种用于渲染图像数据的逻辑实体。图像渲染器用于将旋转后的图像数据绘制到播放界面中的画布中。当操作系统为安卓操作系统时,图像渲染器可以是Surface。Surface用于存储图像数据,并将图像数据绘制到Activity(维护播放界面的交互组件)中的SurfaceView中。
第一图像渲染器特指与硬解码器相匹配的图像渲染器。移动终端可在将硬解码器作为视频的解码器后,配置与硬解码器相匹配的第一图像渲染器。第一图像渲染器与硬解码器相匹配,具体第一图像渲染器的像素格式采用硬解码器支持的格式,如PixelFormat.Opaque;第一图像渲染器不需要自身维护缓冲区。
硬解码器可以维护缓冲区,从而将旋转后的图像数据存储在该缓冲区中,从而将缓冲区中存储的旋转后的图像数据传递至第一图像渲染器,再由第一图像渲染器将旋转后的图像数据跟随画布的旋转绘制到画布中。
在一个实施例中,步骤S212包括:当本地不能够启用硬解码器时,将旋转后的图像数据缓存至与软解码器相匹配的第二图像渲染器所管理的缓冲区,由第二图像渲染器将缓冲区中的旋转后的图像数据,跟随画布的旋转绘制到画布中。
第二图像渲染器特指与软解码器相匹配的图像渲染器。移动终端可在将软解码器作为视频的解码器后,配置与软解码器相匹配的第二图像渲染器。第二图像渲染器与软解码器相匹配,具体第二图像渲染器的像素格式采用软解码器支持的格式,如PixelFormat.RGBX_8888;第二图像渲染器自身维护缓冲区。
本实施例中,当视频的解码器分别为硬解码器和软解码器时,分别采用不同的图像渲染器来实现绘制,无论采用硬解码器和软解码器都可以高效、准确地实现图像数据的绘制。
下面用一个具体应用场景来说明上述视频播放方法的原理。本应用场景中,该视频方法的各个步骤由运行于安卓操作系统上的播放器来执行。参照图5,该视频播放方法的流程如下:
S501,选择需播放的视频。
具体地,用户可通过播放器选择需要播放的视频。
S502,创建播放器的播放界面。具体地,播放器可创建播放界面。
S503,注册屏幕旋转事件的监听。具体地,播放器可在操作系统中注册屏幕旋转事件的监听。
S504,实时监听屏幕旋转事件。
S505,实时识别监听到的屏幕旋转事件对应的屏幕旋转角度α。
S506,判断本地的终端信息是否在硬解码终端信息集合中;若是,则执行步骤S507至S509;若否,则执行步骤S510至S512。
具体地,播放器可从网络下载最新的硬解码终端信息集合,继而判断本地的终端信息是否在硬解码终端信息集合。
S507,选择硬解码器。
S508,设置对应于硬解码器的Surface属性为与硬解码器匹配。
Surface为应用于视频播放过程中进行渲染图像数据的逻辑实体。通常Surface对应有缓冲区,该缓冲区用来存储图像数据。Surface还用于将图像数据绘制到播放器的播放界面中。
此处设置对应于硬解码器的Surface属性包括:Surface类型和像素格式。此处设置的Surface类型与硬解码器匹配,如SURFACE_TYPE_PUSH_BUFFERS,这样Surface就不需要维护本身的缓冲区,而是等待硬解码器直接将需要渲染的图像数据推送到播放界面。此处设置的像素格式与硬解码器匹配,如Pixel Format.Opaque,该像素格式通常为硬解码器默认的像素格式。
S509,初始化硬解码器。
S510,选择软解码器。
S511,设置对应于软解码器的Surface属性为与软解码器匹配。
此处设置对应于软解码器的Surface属性包括:Surface类型和像素格式。此处设置的Surface类型与软解码器匹配,如SURFACE_TYPE_NORMAL,为普通的Surface,需要Surface维护其本身的缓冲区来存储图像数据。此处设置的像素格式与软解码器匹配,如Pixel Format.RGBX_8888。
S512,初始化软解码器。
S513,解析视频,得到视频原始尺寸和视频录制时的视频旋转角度β。
S514,根据视频原始尺寸,获取视频以β旋转后的视频图像尺寸。
其中,当β为0度时,视频图像尺寸与视频原始尺寸相同。
当β为90度时,将视频原始尺寸宽高互换后作为视频图像尺寸。
当β为180度时,视频图像尺寸与视频原始尺寸相同。
当β为270度时,将视频原始尺寸宽高互换后作为视频图像尺寸。
S515,判断视频图像尺寸的宽大于或等于高是否成立;若是,则执行步骤S516和S517;若否,则执行步骤S518和S519。
S516,采用横屏播放方式。
S517,若80度<α<100度,将播放界面旋转90度;若260度<α<280度,将播放界面旋转270度;α为其它值时不处理。
S518,采用竖屏播放方式。
S519,若350度<α,或者α<100度,将播放界面旋转0度;若170度<α<190度,将播放界面旋转180度;α为其它值时不处理。
S520,通过选择的解码器正常解码视频。
S521,当采用硬解码器时,将β传递至硬解码器,由硬解码器将视频解码后,调用系统接口,将从视频中解码出的图像数据按照β旋转。
S522,通过硬解码器,将旋转后的图像数据传递至Surface,由Surface直接将旋转后的图像数据绘制到播放界面中的SurfaceView。
S523,当采用软解码器时,调用系统指令集中的向量指令,在寄存器中按向量将软解码器解码得到的图像数据调整为按β旋转后的图像数据。
S524,将旋转后的图像数据缓存至Surface所管理的缓冲区,由该Surface将缓冲区中的旋转后的图像数据绘制到播放界面中的SurfaceView。
S525,播放结束。
参照图6,本应用场景中,在视频中记录视频录制时的视频旋转角度,在播放视频时,解析视频就能够得到视频中记录的视频旋转角度,该视频旋转角度反映了视频录制设备在录制该视频时的姿态,因此以该视频旋转角度旋转后的视频图像尺寸就是视频在矫正影像方向后的尺寸,于是根据视频图像尺寸就可以确定视频采用横屏播放方式还是竖屏播放方式。按照确定的播放方式,将画布旋转至匹配当前屏幕姿态的位置,实现自适应地旋转画布。在从视频中解码出图像数据后,按照视频旋转角度旋转图像数据,并将旋转后的图像数据跟随画布旋转绘制到画布中,最终呈现的图像数据符合播放方式和当前屏幕姿态,实现了播放视频时画面朝向的自适应调整,尽量避免视频播放时影像朝向混乱
如图7所示,在一个实施例中,提供了一种视频播放装置700,包括:解析模块701、视频图像尺寸获取模块702、播放方式确定模块703、画布旋转模块704、图像旋转模块705和图像渲染器706。
解析模块701,用于解析视频,得到视频原始尺寸和视频录制时的视频旋转角度。
视频图像尺寸获取模块702,用于根据视频原始尺寸,获取视频以视频旋转角度旋转后的视频图像尺寸。
播放方式确定模块703,用于根据视频图像尺寸确定视频以视频旋转角度旋转后的播放方式;播放方式为横屏播放方式和竖屏播放方式中的一种。
画布旋转模块704,用于按照播放方式将画布旋转至与当前屏幕姿态匹配;画布的尺寸符合视频原始尺寸。
图像旋转模块705,用于将从视频中解码出的图像数据,按照视频旋转角度旋转。
图像渲染器706,用于将旋转后的图像数据,跟随画布的旋转绘制到画布中。
如图8所示,在一个实施例中,视频播放装置700还包括:解码器选择模块707,用于判断本地是否能够启用硬解码器;当本地能够启用硬解码器时,将硬解码器作为视频的解码器;当本地不能够启用硬解码器时,将软解码器作为视频的解码器。解析模块701为视频的解码器。
在一个实施例中,解码器选择模块707还用于下载硬解码终端信息集合;获取本地的终端信息;判断本地的终端信息是否存在于硬解码终端信息集合中;当本地的终端信息存在于硬解码终端信息集合中时,将硬解码器作为视频的解码器;当本地的终端信息未存在于硬解码终端信息集合中时,将软解码器作为视频的解码器。
在一个实施例中,图像旋转模块705还用于当视频的解码器为硬解码器时,将视频旋转角度传递至硬解码器。
硬解码器用于将视频解码后,调用与硬解码器匹配的用于旋转图像的系统接口,将从视频中解码出的图像数据按照视频旋转角度旋转。
在一个实施例中,图像旋转模块705还用于当视频的解码器为软解码器时,则调用系统指令集中的向量指令,按向量将软解码器从视频中解码出的图像数据装载至寄存器,在寄存器中将图像数据按向量调整为按视频旋转角度旋转后的图像数据。
在一个实施例中,图像渲染器706包括与硬解码器相匹配的第一图像渲染器706a和与软解码器相匹配的第二图像渲染器706b。
硬解码器还用于将旋转后的图像数据传递至第一图像渲染器706a。
第一图像渲染器706a用于直接将旋转后的图像数据跟随画布的旋转绘制到画布中。
第二图像渲染器706b用于维护缓冲区,在缓冲区中缓存旋转后的图像数据,并将缓冲区中的旋转后的图像数据,跟随画布的旋转绘制到画布中。
在一个实施例中,视频原始尺寸包括视频原始宽度和视频原始高度;视频图像尺寸包括视频图像宽度和视频图像高度。
播放方式确定模块703还用于当视频图像宽度大于或等于视频图像高度时,确定视频以视频旋转角度旋转后的播放方式为横屏播放方式;当视频图像宽度小于视频图像高度时,确定视频以视频旋转角度旋转后的播放方式为竖屏播放方式。
画布旋转模块704还用于当播放方式为横屏播放方式时:若当前屏幕旋转角度在相应的横屏旋转角度范围内,则按照当前屏幕旋转角度所在横屏旋转角度范围所对应的标准旋转角度旋转画布;当播放方式为竖屏播放方式时,若当前屏幕旋转角度在相应的竖屏旋转角度范围内,则按照当前屏幕旋转角度所在竖屏旋转角度范围所对应的标准旋转角度旋转画布。
上述视频播放装置700,在视频中记录视频录制时的视频旋转角度,在播放视频时,解析视频就能够得到视频中记录的视频旋转角度,该视频旋转角度反映了视频录制设备在录制该视频时的姿态,因此以该视频旋转角度旋转后的视频图像尺寸就是视频在矫正影像方向后的尺寸,于是根据视频图像尺寸就可以确定视频采用横屏播放方式还是竖屏播放方式。按照确定的播放方式,将画布旋转至匹配当前屏幕姿态的位置,实现自适应地旋转画布。在从视频中解码出图像数据后,按照视频旋转角度旋转图像数据,并将旋转后的图像数据跟随画布旋转绘制到画布中,最终呈现的图像数据符合播放方式和当前屏幕姿态,实现了播放视频时画面朝向的自适应调整,尽量避免视频播放时影像朝向混乱。
本领域普通技术人员可以理解实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,该计算机程序可存储于一计算机可读取存储介质中,该程序在执行时,可包括如上述各方法的实施例的流程。其中,前述的存储介质可为磁碟、光盘、只读存储记忆体(Read-Only Memory,ROM)等非易失性存储介质,或随机存储记忆体(Random Access Memory,RAM)等。
以上实施例的各技术特征可以进行任意的组合,为使描述简洁,未对上述实施例中的各个技术特征所有可能的组合都进行描述,然而,只要这些技术特征的组合不存在矛盾,都应当认为是本说明书记载的范围。
以上实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。
Claims (16)
1.一种视频播放方法,包括:
解析视频,得到视频原始尺寸和所述视频录制时的视频旋转角度;
根据所述视频原始尺寸,获取所述视频以所述视频旋转角度旋转后的视频图像宽度和视频图像高度;
当所述视频图像宽度大于或等于所述视频图像高度时,确定所述视频以所述视频旋转角度旋转后的播放方式为横屏播放方式;当所述视频图像宽度小于所述视频图像高度时,确定所述视频以所述视频旋转角度旋转后的播放方式为竖屏播放方式;
实时监听屏幕旋转事件,并识别监听到的屏幕旋转事件所对应的屏幕旋转角度;
当所述播放方式为横屏播放方式时,若当前屏幕旋转角度在相应的横屏旋转角度范围内,则按照当前屏幕旋转角度所在横屏旋转角度范围所对应的标准旋转角度旋转画布;当所述播放方式为竖屏播放方式时,若当前屏幕旋转角度在相应的竖屏旋转角度范围内,则按照当前屏幕旋转角度所在竖屏旋转角度范围所对应的标准旋转角度旋转画布;所述画布的尺寸符合所述视频原始尺寸;
将从所述视频中解码出的图像数据,按照所述视频旋转角度旋转;
将旋转后的所述图像数据,跟随所述画布的旋转绘制到所述画布中。
2.根据权利要求1所述的方法,其特征在于,所述解析视频,得到视频原始尺寸和所述视频录制时的视频旋转角度之前,所述方法还包括:
判断本地是否能够启用硬解码器;
当本地能够启用硬解码器时,将硬解码器作为所述视频的解码器;
当本地不能够启用所述硬解码器时,将软解码器作为所述视频的解码器;
所述解析视频,得到视频原始尺寸和所述视频录制时的视频旋转角度,包括:
调用所述视频的解码器解析所述视频,得到视频原始尺寸和所述视频录制时的视频旋转角度。
3.根据权利要求2所述的方法,其特征在于,所述判断本地是否能够启用硬解码器,包括:
下载硬解码终端信息集合;
获取本地的终端信息;
判断本地的终端信息是否存在于所述硬解码终端信息集合中;
所述当本地能够启用硬解码器时,将硬解码器作为所述视频的解码器包括:
当本地的终端信息存在于所述硬解码终端信息集合中时,将硬解码器作为所述视频的解码器;
所述当本地不能够启用所述硬解码器时,将软解码器作为所述视频的解码器,包括:
当本地的终端信息未存在于所述硬解码终端信息集合中时,将软解码器作为所述视频的解码器。
4.根据权利要求2所述的方法,其特征在于,所述将从所述视频中解码出的图像数据,按照所述视频旋转角度旋转,包括:
当所述视频的解码器为硬解码器时,则将所述视频旋转角度传递至所述硬解码器,使得所述硬解码器将所述视频解码后,调用与所述硬解码器匹配的用于旋转图像的系统接口,将从所述视频中解码出的图像数据按照所述视频旋转角度旋转。
5.根据权利要求2所述的方法,其特征在于,所述将从所述视频中解码出的图像数据,按照所述视频旋转角度旋转,包括:
当所述视频的解码器为软解码器时,则调用系统指令集中的向量指令,按向量将所述软解码器从所述视频中解码出的图像数据装载至寄存器,在所述寄存器中将所述图像数据按向量调整为按所述视频旋转角度旋转后的图像数据。
6.根据权利要求2所述的方法,其特征在于,所述将旋转后的所述图像数据,跟随所述画布的旋转绘制到所述画布中,包括:
当本地能够启用硬解码器时,通过所述硬解码器,将旋转后的所述图像数据传递至与所述硬解码器相匹配的第一图像渲染器,由所述第一图像渲染器直接将旋转后的所述图像数据跟随所述画布的旋转绘制到所述画布中,
当本地不能够启用硬解码器时,将旋转后的所述图像数据缓存至与所述软解码器相匹配的第二图像渲染器所管理的缓冲区,由所述第二图像渲染器将所述缓冲区中的旋转后的所述图像数据,跟随所述画布的旋转绘制到所述画布中。
7.根据权利要求1至6中任一项所述的方法,其特征在于,所述视频原始尺寸包括视频原始宽度和视频原始高度。
8.一种视频播放装置,其特征在于,包括:
解析模块,用于解析视频,得到视频原始尺寸和所述视频录制时的视频旋转角度;
视频图像尺寸获取模块,用于根据所述视频原始尺寸,获取所述视频以所述视频旋转角度旋转后的视频图像宽度和视频图像高度;
播放方式确定模块,用于当所述视频图像宽度大于或等于所述视频图像高度时,确定所述视频以所述视频旋转角度旋转后的播放方式为横屏播放方式;当所述视频图像宽度小于所述视频图像高度时,确定所述视频以所述视频旋转角度旋转后的播放方式为竖屏播放方式;实时监听屏幕旋转事件,并识别监听到的屏幕旋转事件所对应的屏幕旋转角度;
画布旋转模块,用于当所述播放方式为横屏播放方式时,若当前屏幕旋转角度在相应的横屏旋转角度范围内,则按照当前屏幕旋转角度所在横屏旋转角度范围所对应的标准旋转角度旋转画布;当所述播放方式为竖屏播放方式时,若当前屏幕旋转角度在相应的竖屏旋转角度范围内,则按照当前屏幕旋转角度所在竖屏旋转角度范围所对应的标准旋转角度旋转画布;所述画布的尺寸符合所述视频原始尺寸;
图像旋转模块,用于将从所述视频中解码出的图像数据,按照所述视频旋转角度旋转;
图像渲染器,用于将旋转后的所述图像数据,跟随所述画布的旋转绘制到所述画布中。
9.根据权利要求8所述的装置,其特征在于,所述装置还包括:
解码器选择模块,用于判断本地是否能够启用硬解码器;当本地能够启用硬解码器时,将硬解码器作为所述视频的解码器;当本地不能够启用所述硬解码器时,将软解码器作为所述视频的解码器;
所述解析模块为所述视频的解码器。
10.根据权利要求9所述的装置,其特征在于,所述解码器选择模块还用于下载硬解码终端信息集合;获取本地的终端信息;判断本地的终端信息是否存在于所述硬解码终端信息集合中;当本地的终端信息存在于所述硬解码终端信息集合中时,将硬解码器作为所述视频的解码器;当本地的终端信息未存在于所述硬解码终端信息集合中时,将软解码器作为所述视频的解码器。
11.根据权利要求9所述的装置,其特征在于,所述图像旋转模块还用于当所述视频的解码器为硬解码器时,将所述视频旋转角度传递至所述硬解码器;
所述硬解码器用于将所述视频解码后,调用与所述硬解码器匹配的用于旋转图像的系统接口,将从所述视频中解码出的图像数据按照所述视频旋转角度旋转。
12.根据权利要求9所述的装置,其特征在于,所述图像旋转模块还用于当所述视频的解码器为软解码器时,则调用系统指令集中的向量指令,按向量将所述软解码器从所述视频中解码出的图像数据装载至寄存器,在所述寄存器中将所述图像数据按向量调整为按所述视频旋转角度旋转后的图像数据。
13.根据权利要求9所述的装置,其特征在于,所述图像渲染器包括与所述硬解码器相匹配的第一图像渲染器和与所述软解码器相匹配的第二图像渲染器;
所述硬解码器还用于将旋转后的所述图像数据传递至所述第一图像渲染器;
所述第一图像渲染器用于直接将旋转后的所述图像数据跟随所述画布的旋转绘制到所述画布中;
所述第二图像渲染器用于维护缓冲区,在所述缓冲区中缓存旋转后的所述图像数据,并将所述缓冲区中的旋转后的所述图像数据,跟随所述画布的旋转绘制到所述画布中。
14.根据权利要求8至13中任一项所述的装置,其特征在于,所述视频原始尺寸包括视频原始宽度和视频原始高度。
15.一种计算机可读存储介质,存储有计算机程序,所述计算机程序被处理器执行时,使得所述处理器执行如权利要求1至7中任一项所述方法的步骤。
16.一种移动终端,包括存储器和处理器,所述存储器存储有计算机程序,其特征在于,所述处理器执行所述计算机程序时实现权利要求1至7中任一项所述的方法的步骤。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710139264.9A CN108574806B (zh) | 2017-03-09 | 2017-03-09 | 视频播放方法和装置 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201710139264.9A CN108574806B (zh) | 2017-03-09 | 2017-03-09 | 视频播放方法和装置 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN108574806A CN108574806A (zh) | 2018-09-25 |
CN108574806B true CN108574806B (zh) | 2022-05-17 |
Family
ID=63576939
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201710139264.9A Active CN108574806B (zh) | 2017-03-09 | 2017-03-09 | 视频播放方法和装置 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN108574806B (zh) |
Families Citing this family (13)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109348139A (zh) * | 2018-10-19 | 2019-02-15 | 北京凯视达科技有限公司 | 视频旋转方法、装置、计算机可读存储介质及电子设备 |
CN110581960B (zh) * | 2019-09-12 | 2021-12-03 | 广州视源电子科技股份有限公司 | 视频处理方法、装置、系统、存储介质和处理器 |
CN112672087B (zh) * | 2019-10-15 | 2023-06-13 | 鼎桥通信技术有限公司 | 图像处理方法及装置 |
CN110611843A (zh) * | 2019-10-18 | 2019-12-24 | 成都中航信虹科技股份有限公司 | 视频处理方法和装置、视频接入网关及存储介质 |
CN110753265B (zh) * | 2019-10-28 | 2022-04-19 | 北京奇艺世纪科技有限公司 | 数据处理方法、装置和电子设备 |
CN110896495A (zh) | 2019-11-19 | 2020-03-20 | 北京字节跳动网络技术有限公司 | 用于目标设备的视图调整方法、装置、电子设备和介质 |
CN113364967A (zh) * | 2020-03-05 | 2021-09-07 | 成都鼎桥通信技术有限公司 | 一种终端回传视频的播放方法和装置 |
WO2021184369A1 (zh) * | 2020-03-20 | 2021-09-23 | 西安诺瓦星云科技股份有限公司 | 屏幕显示的控制方法、装置和系统 |
CN111757164B (zh) * | 2020-07-29 | 2022-08-26 | 北京百度网讯科技有限公司 | 一种视频播放切换方法、装置、电子设备及存储介质 |
CN111984214A (zh) * | 2020-08-06 | 2020-11-24 | 深圳拔越软件有限公司 | 一种竖屏多画面智能配置方法及多画面显示系统 |
CN112565839B (zh) * | 2020-11-23 | 2022-11-29 | 青岛海信传媒网络技术有限公司 | 投屏图像的显示方法及显示设备 |
CN112199006B (zh) * | 2020-12-08 | 2021-02-19 | 江苏北弓智能科技有限公司 | 一种终端设备画面显示自适应方法 |
CN112711390B (zh) * | 2020-12-31 | 2022-07-26 | 联想(北京)有限公司 | 一种连续多帧图像显示输出控制方法及电子设备 |
Family Cites Families (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US8327272B2 (en) * | 2008-01-06 | 2012-12-04 | Apple Inc. | Portable multifunction device, method, and graphical user interface for viewing and managing electronic calendars |
CN103366705B (zh) * | 2013-07-16 | 2015-07-08 | 苏州佳世达电通有限公司 | 一种液晶显示屏的画面调整方法及系统 |
JP2015167010A (ja) * | 2014-02-17 | 2015-09-24 | パナソニックIpマネジメント株式会社 | 表示端末およびこれを備えた表示端末システム |
CN104111779A (zh) * | 2014-06-27 | 2014-10-22 | 中兴通讯股份有限公司 | 一种旋转虚拟视窗的方法及终端 |
CN105933792A (zh) * | 2016-06-03 | 2016-09-07 | 青岛海信移动通信技术股份有限公司 | 一种视频播放方法及移动终端 |
-
2017
- 2017-03-09 CN CN201710139264.9A patent/CN108574806B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN108574806A (zh) | 2018-09-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN108574806B (zh) | 视频播放方法和装置 | |
US20240005591A1 (en) | Method and system for rendering panoramic video | |
CN110377264B (zh) | 图层合成方法、装置、电子设备及存储介质 | |
US20170243384A1 (en) | Image data processing system and associated methods for processing panorama images and image blending using the same | |
CN106030652B (zh) | 提供输出面的方法、系统和合成显示控制器及计算机介质 | |
US20100097398A1 (en) | Image processing apparatus, moving-image playing apparatus, and processing method and program therefor | |
CN110363831B (zh) | 图层合成方法、装置、电子设备及存储介质 | |
US20140086309A1 (en) | Method and device for encoding and decoding an image | |
CN112235626A (zh) | 视频渲染方法、装置、电子设备及存储介质 | |
CN109151966B (zh) | 终端控制方法、装置、终端设备及存储介质 | |
CN112055254B (zh) | 视频播放的方法、装置、终端及存储介质 | |
WO2017202175A1 (zh) | 一种视频压缩方法、装置及电子设备 | |
CN113709554A (zh) | 动画视频生成、直播间动画视频播放方法及装置 | |
CN110708609A (zh) | 一种视频播放方法及装置 | |
CN105791952A (zh) | 流媒体视频数据的截图方法和装置以及电子设备 | |
US8718406B2 (en) | Method and apparatus for video frame rotation | |
US20110069065A1 (en) | Image processing apparatus, computer readable medium and method thereof | |
KR20190011212A (ko) | 출력면을 제공하는 방법 및 데이터 처리 시스템 | |
CN114598937B (zh) | 动画视频生成、播放方法及装置 | |
CN110019866B (zh) | 动态图片播放方法、装置及存储介质 | |
JP2010026219A (ja) | 情報処理装置および方法、並びにプログラム | |
US20180220120A1 (en) | Method and system for constructing view from multiple video streams | |
CN111918098A (zh) | 视频处理方法、装置、电子设备、服务器及存储介质 | |
US8264555B2 (en) | Reducing video shaking | |
CN109587555B (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 |