HEVC视频的播放方法、装置、终端及存储介质
技术领域
本申请涉及视频播放技术领域,特别涉及一种HEVC(High Efficiency VideoCoding,高效率视频编码)视频的播放方法、装置、终端及存储介质。
背景技术
HEVC是一种视频编码方式,通过HEVC编码后得到的HEVC视频具有画质更优、压缩率更高的特点,因此,通过HEVC进行视频的编码得到了广泛的应用。其中,HEVC视频是指对包括的视频帧以HEVC进行编码后得到的视频。
目前,在网页中播放HEVC视频时,需要先通过特定的硬件对HEVC视频进行解码,然后通过解码后得到的视频数据完成HEVC视频的播放。其中,特定的硬件可以为UVD(UnifiedVideo Decoder,通用视讯解码器)、GPU(Graphics Processing Unit,图形处理器)等。
然而,上述方式需要一定的硬件成本,而且如果未安装上述特定的硬件,则很难实现HEVC视频的播放,从而给用户带来了极大的困扰。
发明内容
本申请提供了一种HEVC视频的播放方法、装置、终端及存储介质,可以解决在未安装特定硬件的情况下,难以实现HEVC视频的播放的问题。所述技术方案如下:
第一方面,提供了一种HEVC视频的播放方法,所述方法包括:
当接收到服务器发送的HEVC视频数据时,对所述HEVC视频数据进行解复用,得到音频流和视频流,所述视频流是通过HEVC对视频帧进行编码得到的;
对所述音频流进行格式转换,得到多个音频帧和每个音频帧的时间戳;
调用HEVC解码器,通过所述HEVC解码器对所述视频流进行解码,得到多个视频帧图像和每个视频帧图像的时间戳,所述HEVC解码器是指用于网页中且能够进行HEVC视频解码的脚本;
根据每个音频帧的时间戳和每个视频帧图像的时间戳,播放所述多个音频帧和所述多个视频帧图像,以实现HEVC视频的播放。
可选地,所述调用HEVC解码器,通过所述HEVC解码器对所述视频流进行解码,得到多个视频帧图像之前,还包括:
向服务器发送网页配置信息,以指示所述服务器基于所述网页配置信息确定当前所打开的网页是否支持HEVC视频的播放;
当接收到所述服务器发送的播放通知消息时,对第一语言的解码脚本进行编译,得到第二语言的解码脚本,将所述第二语言的解码脚本作为所述HEVC解码器;
其中,所述播放通知消息用于指示当前所打开的网页支持HEVC视频的播放,所述第二语言是指能够用于网页中的语言。
可选地,所述通过所述HEVC解码器对所述视频流进行解码,得到多个视频帧图像,包括:
在通过所述HEVC解码器对所述视频流进行解码的过程中,确定当前已解码且未播放的视频帧图像的帧数;
当所述帧数大于或等于帧数阈值时,暂停对所述视频流中未解码的视频数据进行解码;
当所述帧数小于所述帧数阈值时,继续对所述视频流中未解码的视频数据进行解码。
可选地,所述根据每个音频帧的时间戳和每个视频帧图像的时间戳,播放所述多个音频帧和所述多个视频帧图像,包括:
如果当前视频帧的时间戳等于当前正在播放的音频帧的时间戳,则播放所述当前视频帧;
如果当前视频帧的时间戳小于当前正在播放的音频帧的时间戳,则丢弃所述当前视频帧,或者以第一速度播放所述当前视频帧,所述第一速度大于第二速度,所述第二速度为音频帧的播放速度;
如果当前视频帧的时间戳大于当前正在播放的音频帧的时间戳,则以第三速度播放所述当前视频帧,所述第三速度小于所述第二速度。
可选地,所述以第一速度播放所述当前视频帧之前,还包括:
从未播放的音频帧中获取与当前正在播放的音频帧相邻的音频帧,从未播放的视频帧中获取与当前视频帧相邻的视频帧;
确定所述相邻的音频帧的时间戳与所述当前正在播放的音频帧的时间戳之间的第一时间差值;
确定所述相邻的视频帧的时间戳与所述当前视频帧的时间戳之间的第二时间差值;
确定所述第一时间差值与所述第二时间差值之间的第一比值,将所述第一比值与所述第二速度的乘积作为所述第一速度,所述第一比值大于1。
可选地,所述以第三速度播放所述当前视频帧之前,还包括:
从未播放的音频帧中获取与当前正在播放的音频帧相邻的音频帧,从未播放的视频帧中获取与当前视频帧相邻的视频帧;
确定所述相邻的音频帧的时间戳与所述当前正在播放的音频帧的时间戳之间的第一时间差值;
确定所述相邻的视频帧的时间戳与所述当前视频帧的时间戳之间的第二时间差值;
确定所述第一时间差值与所述第二时间差值之间的第二比值,将所述第二比值与所述第二速度的乘积作为所述第三速度,所述第二比值小于1。
可选地,所述方法还包括:
确定第一帧序号和第二帧序号,所述第一帧序号是指当前正在播放的音频帧的帧序号,所述第二帧序号是指未播放的音频帧中与所述当前正在播放的音频帧相邻的音频帧的帧序号;
如果所述第一帧序号和所述第二帧序号之间的差值为1,则在所述当前正在播放的音频帧播放完成后,对所述第二帧序号对应的音频帧进行播放;
如果所述第一帧序号和所述第二帧序号之间的差值大于1,则基于所述差值在所述当前正在播放的音频帧之后插入音频空帧,在所述当前正在播放的音频帧播放完成后,对所述音频空帧进行播放。
第二方面,提供了一种HEVC视频的播放装置,所述装置包括:
解复用模块,用于当接收到服务器发送的HEVC视频数据时,对所述HEVC视频数据进行解复用,得到音频流和视频流,所述视频流是通过HEVC对视频帧进行编码得到的;
转换模块,用于对所述音频流进行格式转换,得到多个音频帧和每个音频帧的时间戳;
调用模块,用于调用HEVC解码器,通过所述HEVC解码器对所述视频流进行解码,得到多个视频帧图像和每个视频帧图像的时间戳,所述HEVC解码器是指用于网页中且能够进行HEVC视频解码的脚本;
第一播放模块,用于根据每个音频帧的时间戳和每个视频帧图像的时间戳,播放所述多个音频帧和所述多个视频帧图像,以实现HEVC视频的播放。
可选地,所述装置还包括:
发送模块,用于向服务器发送网页配置信息,以指示所述服务器基于所述网页配置信息确定当前所打开的网页是否支持HEVC视频的播放;
编译模块,用于当接收到所述服务器发送的播放通知消息时,对第一语言的解码脚本进行编译,得到第二语言的解码脚本,将所述第二语言的解码脚本作为所述HEVC解码器;
其中,所述播放通知消息用于指示当前所打开的网页支持HEVC视频的播放,所述第二语言是指能够用于网页中的语言。
可选地,所述调用模块主要用于:
在通过所述HEVC解码器对所述视频流进行解码的过程中,确定当前已解码且未播放的视频帧图像的帧数;
当所述帧数大于或等于帧数阈值时,暂停对所述视频流中未解码的视频数据进行解码;
当所述帧数小于所述帧数阈值时,继续对所述视频流中未解码的视频数据进行解码。
可选地,所述第一播放模块主要用于:
如果当前视频帧的时间戳等于当前正在播放的音频帧的时间戳,则播放所述当前视频帧;
如果当前视频帧的时间戳小于当前正在播放的音频帧的时间戳,则丢弃所述当前视频帧,或者以第一速度播放所述当前视频帧,所述第一速度大于第二速度,所述第二速度为音频帧的播放速度;
如果当前视频帧的时间戳大于当前正在播放的音频帧的时间戳,则以第三速度播放所述当前视频帧,所述第三速度小于第二速度。
可选地,所述第一播放模块还用于:
从未播放的音频帧中获取与当前正在播放的音频帧相邻的音频帧,从未播放的视频帧中获取与当前视频帧相邻的视频帧;
确定所述相邻的音频帧的时间戳与所述当前正在播放的音频帧的时间戳之间的第一时间差值;
确定所述相邻的视频帧的时间戳与所述当前视频帧的时间戳之间的第二时间差值;
确定所述第一时间差值与所述第二时间差值之间的第一比值,将所述第一比值与所述第二速度的乘积作为所述第一速度,所述第一比值大于1。
可选地,所述第一播放模块还用于:
从未播放的音频帧中获取与当前正在播放的音频帧相邻的音频帧,从未播放的视频帧中获取与当前视频帧相邻的视频帧;
确定所述相邻的音频帧的时间戳与所述当前正在播放的音频帧的时间戳之间的第一时间差值;
确定所述相邻的视频帧的时间戳与所述当前视频帧的时间戳之间的第二时间差值;
确定所述第一时间差值与所述第二时间差值之间的第二比值,将所述第二比值与所述第二速度的乘积作为所述第三速度,所述第二比值小于1。
可选地,所述装置还包括:
确定模块,用于确定第一帧序号和第二帧序号,所述第一帧序号是指当前正在播放的音频帧的帧序号,所述第二帧序号是指未播放的音频帧中与所述当前正在播放的音频帧相邻的音频帧的帧序号;
第二播放模块,用于如果所述第一帧序号和所述第二帧序号之间的差值为1,则在所述当前正在播放的音频帧播放完成后,对所述第二帧序号对应的音频帧进行播放;
第三播放模块,用于如果所述第一帧序号和所述第二帧序号之间的差值大于1,则基于所述差值在所述当前正在播放的音频帧之后插入音频空帧,在所述当前正在播放的音频帧播放完成后,对所述音频空帧进行播放。
第三方面,提供了一种终端,所述终端包括:
处理器、外围设备接口、存储器和通信总线,其中,所述处理器、所述外围设备接口和所述存储器通过所述通信总线完成相互间的通信;
所述存储器用于存放计算机程序;所述处理器用于执行所述存储器上所存放的程序,以实现上述第一方面所述方法的步骤。
第四方面,提供了一种计算机可读存储介质,所述存储介质内存储有计算机程序,所述计算机程序被处理器执行时实现上述第一方面提供的任一所述的方法。
第五方面,提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述第一方面提供的所述方法的步骤。
本申请提供的技术方案带来的有益效果至少可以包括:
本申请中,在接收到服务器发送的HEVC视频数据后,通过解复用操作得到音频流和视频流。由于HEVC解码器是指能够在网页中进行HEVC视频解码的脚本,也即是,HEVC解码器并不是一个硬件,因此可以在未安装特定硬件的情况下,通过HEVC解码器对通过HEVC编码得到的视频流进行过解码,得到多个视频帧图像和每个视频帧图像的时间戳。之后可以基于多个视频帧图像和每个视频帧图像的时间戳,以及对音频流进行格式转换得到的多个音频帧和每个音频帧的时间戳,实现对HEVC视频的播放。
附图说明
为了更清楚地说明本申请实施例中的技术方案,下面将对实施例描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本申请的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1是本申请实施例提供的一种用于对HEVC视频进行播放的系统架构;
图2是本申请实施例提供的一种HEVC视频的播放方法的流程示意图;
图3是本申请实施例提供的另一种HEVC视频的播放方法的流程示意图;
图4是本申请实施例提供的一种HEVC视频的播放方法的流程框图;
图5是本申请实施例提供的一种HEVC视频的播放装置的结构示意图;
图6是本申请实施例提供的一种终端的框图。
具体实施方式
为使本申请的目的、技术方案和优点更加清楚,下面将结合附图对本申请实施方式作进一步地详细描述。
为了便于理解,在对本申请实施例进行详细地解释说明之前,先对本申请实施例涉及的系统架构进行介绍。
图1是本申请实施例提供的一种用于对HEVC视频进行播放的系统架构。如图1所示,该系统架构可以包括服务器01和终端02。终端02可以为智能手机、平板电脑、智能电视、电子书阅读器、多媒体播放器、膝上型便携计算机和台式计算机等等,服务器01与终端02之间可以通过无线网络或者有线网络进行通信。服务器01用于基于终端02当前所打开的网页的网页配置信息确定该网页能否用于播放HEVC视频,如果能则向该终端下发HEVC视频数据。终端02用于在打开网页时,向服务器发送该网页的网页配置信息,且接收到服务器01下发的HEVC视频数据后,在该网页中对HEVC视频数据进行播放,以实现HEVC视频的播放。
在介绍完本申请实施例涉及的系统架构之后,下面对本申请实施例进行详细的解释说明。
图2是本申请实施例提供的一种HEVC视频的播放方法的流程示意图。该方法可以应用于终端中,具体地,可以应用在HEVC视频的播放装置中,该装置可以集成于终端中,参见图2,该方法包括如下步骤。
步骤201:当接收到服务器发送的HEVC视频数据时,对该HEVC视频数据进行解复用,得到音频流和视频流,视频流是通过HEVC对视频帧进行编码得到的。
步骤202:对该音频流进行格式转换,得到多个音频帧和每个音频帧的时间戳。
步骤203:调用HEVC解码器,通过该HEVC解码器对该视频流进行解码,得到多个视频帧图像和每个视频帧图像的时间戳,该HEVC解码器是指用于网页中且能够进行HEVC视频解码的脚本。
步骤204:根据每个音频帧的时间戳和每个视频帧图像的时间戳,播放该多个音频帧和该多个视频帧图像,以实现HEVC视频的播放。
本申请实施例中,在接收到服务器发送的HEVC视频数据后,通过解复用操作得到音频流和视频流。由于HEVC解码器是指能够在网页中进行HEVC视频解码的脚本,也即是,HEVC解码器并不是一个硬件,因此可以在未安装特定硬件的情况下,通过HEVC解码器对通过HEVC编码得到的视频流进行过解码,得到多个视频帧图像和每个视频帧图像的时间戳。之后可以基于多个视频帧图像和每个视频帧图像的时间戳,以及对音频流进行格式转换得到的多个音频帧和每个音频帧的时间戳,实现对HEVC视频的播放。
可选地,调用HEVC解码器,通过该HEVC解码器对该视频流进行解码,得到多个视频帧图像之前,还包括:
向服务器发送网页配置信息,以指示服务器基于该网页配置信息确定当前所打开的网页是否支持HEVC视频的播放;
当接收到服务器发送的播放通知消息时,对第一语言的解码脚本进行编译,得到第二语言的解码脚本,将第二语言的解码脚本作为该HEVC解码器;
其中,播放通知消息用于指示当前所打开的网页支持HEVC视频的播放,第二语言是指能够用于网页中的语言。
可选地,通过该HEVC解码器对该视频流进行解码,得到多个视频帧图像,包括:
在通过该HEVC解码器对该视频流进行解码的过程中,确定当前已解码且未播放的视频帧图像的帧数;
当该帧数大于或等于帧数阈值时,暂停对该视频流中未解码的视频数据进行解码;
当该帧数小于帧数阈值时,继续对该视频流中未解码的视频数据进行解码。
可选地,根据每个音频帧的时间戳和每个视频帧图像的时间戳,播放该多个音频帧和该多个视频帧图像,包括:
如果当前视频帧的时间戳等于当前正在播放的音频帧的时间戳,则播放当前视频帧;
如果当前视频帧的时间戳小于当前正在播放的音频帧的时间戳,则丢弃当前视频帧,或者以第一速度播放当前视频帧,第一速度大于第二速度,第二速度为音频帧的播放速度;
如果当前视频帧的时间戳大于当前正在播放的音频帧的时间戳,则以第三速度播放当前视频帧,第三速度小于第二速度。
可选地,所述以第一速度播放所述当前视频帧之前,还包括:
从未播放的音频帧中获取与当前正在播放的音频帧相邻的音频帧,从未播放的视频帧中获取与当前视频帧相邻的视频帧;
确定所述相邻的音频帧的时间戳与所述当前正在播放的音频帧的时间戳之间的第一时间差值;
确定所述相邻的视频帧的时间戳与所述当前视频帧的时间戳之间的第二时间差值;
确定所述第一时间差值与所述第二时间差值之间的第一比值,将所述第一比值与所述第二速度的乘积作为所述第一速度,所述第一比值大于1。
可选地,所述以第三速度播放所述当前视频帧之前,还包括:
从未播放的音频帧中获取与当前正在播放的音频帧相邻的音频帧,从未播放的视频帧中获取与当前视频帧相邻的视频帧;
确定所述相邻的音频帧的时间戳与所述当前正在播放的音频帧的时间戳之间的第一时间差值;
确定所述相邻的视频帧的时间戳与所述当前视频帧的时间戳之间的第二时间差值;
确定所述第一时间差值与所述第二时间差值之间的第二比值,将所述第二比值与所述第二速度的乘积作为所述第三速度,所述第二比值小于1。
可选地,方法还包括:
确定第一帧序号和第二帧序号,第一帧序号是指当前正在播放的音频帧的帧序号,第二帧序号是指未播放的音频帧中与当前正在播放的音频帧相邻的音频帧的帧序号;
如果第一帧序号和第二帧序号之间的差值为1,则在当前正在播放的音频帧播放完成后,对第二帧序号对应的音频帧进行播放;
如果第一帧序号和第二帧序号之间的差值大于1,则基于该差值在当前正在播放的音频帧之后插入音频空帧,在当前正在播放的音频帧播放完成后,对该音频空帧进行播放。
上述所有可选技术方案,均可按照任意结合形成本申请的可选实施例,本申请实施例对此不再一一赘述。
图3是本申请实施例提供的一种HEVC视频的播放方法的流程结构示意图。该方法可以应用于终端中,具体地,可以应用于HEVC视频的播放装置中,该装置可以集成于终端中,参见图3,该方法包括如下步骤。
步骤301:向服务器发送网页配置信息,以指示服务器基于该网页配置信息确定当前所打开的网页是否支持HEVC视频的播放。
HEVC视频在播放过程中,具有耗费流量少、画质更优的特点,且用户也更倾向于观看HEVC视频。因此,为了提高用户粘度,在打开网页,可以将该网页的网页配置信息发送至服务器,以通过服务器确定该网页是否支持HEVC视频的播放。
其中,HEVC视频的播放装置可以是浏览器,当然也可以是一个客户端,该客户端可以通过网页对HEVC视频进行播放。网页配置信息可以是网页所处的环境信息,比如可以是网页的地址信息、运行网页的浏览器的版本信息等。
进一步地,服务器接收到该网页的网页配置信息后,可以基于预先存储的能够支持播放HEVC视频的数据,确定当前所打开的网页是否支持HEVC视频的播放。示例性地,服务器可以确定存储的数据中是否存在当前所打开网页的网页配置信息,如果存在,则表明当前所打开的网页支持HEVC视频的播放。此时,服务器可以发送播放通知消息,以及HEVC视频数据。如果不存在,则表明当前所打开的网页不支持HEVC视频的播放。此时,服务器可以不发送播放通知消息。但是为了不影响用户对该视频的观看,服务器可以发送以其他编码格式编码得到的视频流。比如,可以是以AVC(Advanced Video Coding,高级视频编码)格式进行编码后得到的AVC视频。AVC视频是指对包括的视频帧以AVC进行编码后得到的视频。
步骤302:当接收到服务器发送的播放通知消息时,对第一语言的解码脚本进行编译,得到第二语言的解码脚本,将第二语言的解码脚本作为HEVC解码器。
具体地,终端中存储有第一语言的解码脚本,当接收到播放通知消息时,表明当前所打开的网页支持对HEVC视频的播放,此时可以调用编译器对第一语言的解码脚本进行编译,得到第二语言的解码脚本。
其中,播放通知消息用于指示当前所打开的网页支持HEVC视频的播放,第二语言是指能够用于网页中的语言。第一语言可以是C语言或者C++语言,第二语言可以是JavaScript语言,以保证编译后得到的第二语言的解码脚本能够用于当前所打开的网页中。
需要说明的是,本申请实施例中,可以单独对C语言的解码脚本或者C++语言的解码脚本进行编译得到第二语言的解码脚本外,还可以对C语言的解码脚本和C++语言的解码脚本进行结合编译,得到第二语言的解码脚本。
步骤303:当接收到服务器发送的HEVC视频数据时,对该HEVC视频数据进行解复用,得到音频流和视频流。
其中,视频流是通过HEVC对视频帧进行编码得到的。对该HEVC视频数据进行解复用的具体操作可以参考现有技术,本申请实施例在此不再赘述。
需要说明的是,上述步骤301中服务器接收到该网页的网页配置信息后,还可以基于该网页配置信息确定当前所打开的网页所支持的音频流的格式,以便于服务器可以发送当前所打开的网页能够支持的音频流格式的HEVC视频数据,从而能够保证对接收到的HEVC视频数据通过解复用操作得到音频流后,可以在当前所打开的网页中播放该音频流。
比如,当服务器确定当前所打开的网页支持的音频格式为AAC(Advanced AudioCoding,高级音频编码)格式时,服务器可以发送以AAC格式进行音频流编码的HEVC视频数据。从而对接收到的HEVC视频数据通过解复用操作后,可以保证当前所打开的网页能够对该音频流进行正常的播放。
当然,服务器基于该网页配置信息确定当前所打开的网页所支持的音频流的格式后,也可以将该支持的音频流的格式发送给HEVC视频的播放装置。HEVC视频的播放装置可以在通过解复用操作得到该HEVC视频数据包括的音频流后,判断该音频流的格式是否与当前所打开的网页所支持的音频流的格式相同,如果不相同,则可以对该音频流的格式进行转换,以使转换后得到的音频流的格式为支持的音频流的格式。
还需要说明的是,上述步骤302和步骤303可以按照上述顺序执行,也可以先执行步骤303,再执行步骤302。当然,步骤302和步骤303也可以同步执行。
另外,当接收到服务器发送的其他格式的视频流时,可以通过现有技术对接收到的其他格式的视频流进行播放,本申请实施例在此不再赘述。
步骤304:对音频流进行格式转换,得到多个音频帧和每个音频帧的时间戳。
具体地,在通过上述步骤303得到HEVC视频流中的音频流后,在一种可能的实现方式中,可以对该音频流进行解封装,以得到该音频流包括的多个音频元素,以及每个音频元素的时间戳,之后再将该多个音频元素和每个音频元素的时间戳的格式进行转换,得到多个音频帧和每个音频帧的时间戳。
其中,对音频元素的格式进行转换后得到的每个音频帧和每个音频帧的时间戳的格式可以为FMP4格式。
步骤305:调用HEVC解码器,通过HEVC解码器对视频流进行解码,得到多个视频帧图像和每个视频帧图像的时间戳。
其中,HEVC解码器是指用于网页中且能够进行HEVC视频解码的脚本,通过HEVC解码器对视频流进行解码后得到的视频图像帧可以是YUV(Luminance Chrominance,亮度色度)格式,当然也可以是RGB(Red Green Blue,红绿蓝)格式。通过HEVC解码器对视频流进行解码的具体操作可以参考现有技术,本申请实施例在此不再赘述。
进一步地,在对视频流进行解码过程中,为了避免解码后得到数据占用内存较大,可以控制已解码且未播放的视频帧图像的个数。具体地,可以按照如下方式对视频流进行解码。
在通过HEVC解码器对视频流进行解码的过程中,确定当前已解码且未播放的视频帧图像的帧数,当帧数大于或等于帧数阈值时,暂停对视频流中未解码的视频数据进行解码,当帧数小于帧数阈值时,继续对视频流中未解码的视频数据进行解码。
当然,确定了当前已解码且未播放的视频帧图像的帧数后,也可以在帧数大于帧数阈值,且帧数与帧数阈值之间的差值为第一数值时,暂停对视频流中未解码的视频数据进行解码;在帧数小于帧数阈值,且帧数与帧数阈值之间的差值为第一数值时,对视频流中未解码的视频数据进行解码,从而能够避免HEVC解码器频繁启动。
其中,帧数阈值和第一数值可以基于当前运行环境进行设置,以保证当前所打开的网页运行的流畅性。
由于HEVC视频的播放过程中,已解码且未播放的视频帧图像的帧数可以小于帧数阈值,从而减小了解码后视频图像帧所占用的内存,也即是减小了HEVC视频播放过程中所占用的内存,提高了当前所打开的网页的运行速度。
步骤306:根据每个音频帧的时间戳和每个视频帧图像的时间戳,播放该多个音频帧和该多个视频帧图像,以实现HEVC视频的播放。
在一种可能的实现方式中,可以基于每个音频帧的时间戳和每个视频帧图像的时间戳,通过音视频同步器控制多个视频帧图像和多个音频帧同步播放。
其中,在同步播放过程中,可以以音频帧的播放为主,也即是在音频帧的播放过程中将视频帧图像逐步插入以实现同步播放,或者以视频帧图像的播放为主,也即是在视频帧图像的播放过程中将音频帧逐步插入以实现同步播放,当然,也可以以参考时间为基准,将音频帧和视频帧图像逐步插入以实现同步播放。
其中,以音频帧的播放为主,实现同步播放时,可以先调用MSE(Media SourceExtensions,媒体源扩展)接口对多个音频帧进行播放,之后通过音视频同步播放器将多个视频帧图像插入播放。
通过调用MSE接口对多个音频帧进行播放时,为了避免在HEVC视频流传输过程中音频流对应的数据包丢失的情况,可以按照如下方式对该多个音频帧进行插空帧处理。
确定第一帧序号和第二帧序号,第一帧序号是指当前正在播放的音频帧的帧序号,第二帧序号是指未播放的音频帧中与当前正在播放的音频帧相邻的音频帧的帧序号。如果第一帧序号和第二帧序号之间的差值为1,则在当前正在播放的音频帧播放完成后,对第二帧序号对应的音频帧进行播放。如果第一帧序号和第二帧序号之间的差值大于1,则基于差值在当前正在播放的音频帧之后插入音频空帧,在当前正在播放的音频帧播放完成后,对音频空帧进行播放。
其中,在当前正在播放的音频帧之后插入音频空帧时,可以先确定第一帧序号与第二帧序号之间的差值,在将该差值与数值1之间的差值作为待插入的音频空帧的帧数,之后按照确定的音频空帧的帧数,在当前正在播放的音频帧之后插入音频空帧。
比如,当前正在播放的音频帧的帧序号为3,也即是第一帧序号为3,假设未播放的音频帧中与当前正在播放的音频帧相邻的音频帧的帧序号为6,也即是第二帧序号为6,此时第一帧序号与第二帧序号之间的差值为3,将3与数值1之间的差值2作为待插入的音频空帧的帧数,进而在当前正在播放的音频帧之后插入2个音频空帧。
需要说明的是,对该多个音频帧进行插空帧处理时,可以在该多个音频帧的播放过程中进行插空帧处理,也即是上述所述的实现方式。当然,也可以在对音频流解码得到多个音频帧后,按照每个音频帧的帧序号进行插空帧处理。
通过音视频同步器控制多个视频帧图像同步播放时,如果当前视频帧的时间戳等于当前正在播放的音频帧的时间戳,则播放当前视频帧;如果当前视频帧的时间戳小于当前正在播放的音频帧的时间戳,则丢弃当前视频帧,或者以第一速度播放当前视频帧,第一速度大于第二速度,第二速度为音频帧的播放速度;如果当前视频帧的时间戳大于当前正在播放的音频帧的时间戳,则以第三速度播放当前视频帧,第三速度小于第二速度。
其中,当前视频帧是指即将进行播放的视频帧图像。第二播放速度是指音频帧的正常播放速度,第一速度和第三速度可以事先进行设定,当然,第一速度和第三速度也可以通过如下方式确定。
第一速度的确定方式:从未播放的音频帧中获取与当前正在播放的音频帧相邻的音频帧,从未播放的视频帧中获取与当前视频帧相邻的视频帧。确定相邻的音频帧的时间戳与当前正在播放的音频帧的时间戳之间的第一时间差值。确定相邻的视频帧的时间戳与当前视频帧的时间戳之间的第二时间差值。确定第一时间差值与第二时间差值之间的第一比值,将第一比值与第二速度的乘积作为第一速度,所述第一比值大于1。
第三速度的确定方式:从未播放的音频帧中获取与当前正在播放的音频帧相邻的音频帧,从未播放的视频帧中获取与当前视频帧相邻的视频帧。确定相邻的音频帧的时间戳与当前正在播放的音频帧的时间戳之间的第一时间差值。确定相邻的视频帧的时间戳与当前视频帧的时间戳之间的第二时间差值。确定第一时间差值与第二时间差值之间的第二比值,将第二比值与第二速度的乘积作为第三速度,第二比值小于1。
需要说明的是,播放当前视频帧之前,还可以调用WebGL(Web Graphics Library,web图形库)接口,对当前视频帧进行渲染,从而进一步提高当前视频帧的画面质量,通过渲染后输出的视频帧可以直接在当前所打开的网页中的显示界面中显示,以实现当前视频帧的播放。
还需要说明的是,在通过HEVC解码器对视频流进行解码时,可以在当前所打开的网页中的显示界面中创建矩形框画布,进而可以将对视频流进行解码得到的视频帧图像以画布的尺寸在画布中进行显示,从而提高了视频帧图像的显示速度。
本申请实施例按照上述所述的步骤301-步骤306实现HEVC视频的播放外,也可以按照如图4所示的流程框图实现对HEVC视频的播放。按照如图4所示的流程框图对HEVC视频播放的具体实现过程可以和上述所述的方法步骤相同或相似,本申请实施例在此不再赘述。
本申请实施例中,在终端打开网页时,可以将网页配置信息发送至服务器,以通过服务器确定当前所打开的网页是否支持HEVC视频的播放,如果支持,则HEVC视频的播放装置会接收到服务器发送的HEVC视频数据,从而保证了当前所打开的网页可以浪费较少的流量,播放画质更好的视频。对于接收到的HEVC视频数据,通过解复用操作得到音频流和通过HEVC编码得到的视频流。由于HEVC解码器是指能够在网页中进行HEVC视频解码的脚本,也即是,HEVC解码器并不是一个硬件,因此可以在未安装特定硬件的情况下,通过HEVC解码器对得到的视频流进行过解码,得到多个视频帧图像和每个视频帧图像的时间戳。之后可以基于多个视频帧图像和每个视频帧图像的时间戳,以及对音频流进行格式转换得到的多个音频帧和每个音频帧的时间戳,通过音视频同步器进行同步播放,且在播放过程中对多个音频帧进行插空帧处理,对每个视频帧图像进行渲染,从而提高了HEVC视频的播放效果。
图5是本申请实施例提供的一种HEVC视频的播放装置的结构示意图。参见图5,该装置包括:
解复用模块501,用于当接收到服务器发送的HEVC视频数据时,对该HEVC视频数据进行解复用,得到音频流和视频流,所述视频流是通过HEVC对视频帧进行编码得到的。
转换模块502,用于对该音频流进行格式转换,得到多个音频帧和每个音频帧的时间戳。
调用模块503,用于调用HEVC解码器,通过该HEVC解码器对视频流进行解码,得到多个视频帧图像和每个视频帧图像的时间戳,该HEVC解码器是指用于网页中且能够进行HEVC视频解码的脚本。
第一播放模块504,用于根据每个音频帧的时间戳和每个视频帧图像的时间戳,播放该多个音频帧和该多个视频帧图像,以实现HEVC视频的播放。
可选地,装置还包括:
发送模块,用于向服务器发送网页配置信息,以指示服务器基于该网页配置信息确定当前所打开的网页是否支持HEVC视频的播放;
编译模块,用于当接收到服务器发送的播放通知消息时,对第一语言的解码脚本进行编译,得到第二语言的解码脚本,将第二语言的解码脚本作为该HEVC解码器;
其中,播放通知消息用于指示当前所打开的网页支持HEVC视频的播放,第二语言是指能够用于网页中的语言。
可选地,调用模块503主要用于:
在通过该HEVC解码器对该视频流进行解码的过程中,确定当前已解码且未播放的视频帧图像的帧数;
当帧数大于或等于帧数阈值时,暂停对该视频流中未解码的视频数据进行解码;
当该帧数小于帧数阈值时,继续对该视频流中未解码的视频数据进行解码。
可选地,第一播放模块504主要用于:
如果当前视频帧的时间戳等于当前正在播放的音频帧的时间戳,则播放当前视频帧;
如果当前视频帧的时间戳小于当前正在播放的音频帧的时间戳,则丢弃当前视频帧,或者以第一速度播放当前视频帧,第一速度大于第二速度,第二速度为音频帧的播放速度;
如果当前视频帧的时间戳大于当前正在播放的音频帧的时间戳,则以第三速度播放当前视频帧,第三速度小于第二速度。
可选地,第一播放模块504还用于:
从未播放的音频帧中获取与当前正在播放的音频帧相邻的音频帧,从未播放的视频帧中获取与当前视频帧相邻的视频帧;
确定所述相邻的音频帧的时间戳与所述当前正在播放的音频帧的时间戳之间的第一时间差值;
确定所述相邻的视频帧的时间戳与所述当前视频帧的时间戳之间的第二时间差值;
确定所述第一时间差值与所述第二时间差值之间的第一比值,将所述第一比值与所述第二速度的乘积作为所述第一速度,所述第一比值大于1。
可选地,所述第一播放模块504还用于:
从未播放的音频帧中获取与当前正在播放的音频帧相邻的音频帧,从未播放的视频帧中获取与当前视频帧相邻的视频帧;
确定所述相邻的音频帧的时间戳与所述当前正在播放的音频帧的时间戳之间的第一时间差值;
确定所述相邻的视频帧的时间戳与所述当前视频帧的时间戳之间的第二时间差值;
确定所述第一时间差值与所述第二时间差值之间的第二比值,将所述第二比值与所述第二速度的乘积作为所述第三速度,所述第二比值小于1。
可选地,装置还包括:
确定模块,用于确定第一帧序号和第二帧序号,第一帧序号是指当前正在播放的音频帧的帧序号,第二帧序号是指未播放的音频帧中与当前正在播放的音频帧相邻的音频帧的帧序号;
第二播放模块,用于如果第一帧序号和第二帧序号之间的差值为1,则在当前正在播放的音频帧播放完成后,对第二帧序号对应的音频帧进行播放;
第三播放模块,用于如果第一帧序号和第二帧序号之间的差值大于1,则基于该差值在当前正在播放的音频帧之后插入音频空帧,在当前正在播放的音频帧播放完成后,对该音频空帧进行播放。
本申请实施例中,在接收到服务器发送的HEVC视频流后,通过解复用操作得到音频流和通过HEVC编码得到的视频流。由于HEVC解码器是指能够在网页中进行HEVC视频解码的脚本,也即是,HEVC解码器并不是一个硬件,因此可以在未安装特定硬件的情况下,通过HEVC解码器对通过HEVC编码得到的视频流进行过解码,得到多个视频帧图像和每个视频帧图像的时间戳。之后可以基于多个视频帧图像和每个视频帧图像的时间戳,以及对音频流进行格式转换得到的多个音频帧和每个音频帧的时间戳,实现对HEVC视频的播放。
需要说明的是:上述实施例提供的HEVC视频的播放装置在对HEVC视频进行播放时,仅以上述各功能模块的划分进行举例说明,实际应用中,可以根据需要而将上述功能分配由不同的功能模块完成,即将设备的内部结构划分成不同的功能模块,以完成以上描述的全部或者部分功能。另外,上述实施例提供的HEVC视频的播放装置与HEVC视频的播放方法实施例属于同一构思,其具体实现过程详见方法实施例,这里不再赘述。
图6示例了本申请一个示例性实施例提供的终端600的结构框图。参见图6,该终端600可以是:智能手机、平板电脑、笔记本电脑或台式电脑。终端600还可能被称为用户设备、便携式终端、膝上型终端、台式终端等其他名称。参见图6,终端600可以包括处理器601和存储器602。
处理器601可以包括一个或多个处理核心,比如4核心处理器、8核心处理器等。处理器601可以采用DSP(Digital Signal Processing,数字信号处理)、FPGA(Field-Programmable Gate Array,现场可编程门阵列)、PLA(Programmable Logic Array,可编程逻辑阵列)中的至少一种硬件形式来实现。处理器601也可以包括主处理器和协处理器,主处理器是用于对在唤醒状态下的数据进行处理的处理器,也称CPU(Central ProcessingUnit,中央处理器);协处理器是用于对在待机状态下的数据进行处理的低功耗处理器。在一些实施例中,处理器601可以在集成有GPU(Graphics Processing Unit,图像处理器),GPU用于负责显示屏所需要显示的内容的渲染和绘制。一些实施例中,处理器601还可以包括AI(Artificial Intelligence,人工智能)处理器,该AI处理器用于处理有关机器学习的计算操作。
存储器602可以包括一个或多个计算机可读存储介质,该计算机可读存储介质可以是非暂态的。存储器602还可包括高速随机存取存储器,以及非易失性存储器,比如一个或多个磁盘存储设备、闪存存储设备。在一些实施例中,存储器602中的非暂态的计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器601所执行以实现本申请中方法实施例提供的一种HEVC视频的播放方法。
在一些实施例中,终端600还可选包括有:外围设备接口603和至少一个外围设备。处理器601、存储器602和外围设备接口603之间可以通过通信总线或信号线相连。各个外围设备可以通过通信总线、信号线或电路板与外围设备接口603相连。具体地,外围设备包括:射频电路604、显示屏605、定位组件606和电源607中的至少一种。
外围设备接口603可被用于将I/O(Input/Output,输入/输出)相关的至少一个外围设备连接到处理器601和存储器602。在一些实施例中,处理器601、存储器602和外围设备接口603被集成在同一芯片或电路板上;在一些其他实施例中,处理器601、存储器602和外围设备接口603中的任意一个或两个可以在单独的芯片或电路板上实现,本实施例对此不加以限定。
射频电路604用于接收和发射RF(Radio Frequency,射频)信号,也称电磁信号。射频电路604通过电磁信号与通信网络以及其他通信设备进行通信。射频电路604将电信号转换为电磁信号进行发送,或者,将接收到的电磁信号转换为电信号。可选地,射频电路604包括:天线系统、RF收发器、一个或多个放大器、调谐器、振荡器、数字信号处理器、编解码芯片组、用户身份模块卡等等。射频电路604可以通过至少一种无线通信协议来与其它终端进行通信。该无线通信协议包括但不限于:万维网、城域网、内联网、各代移动通信网络(2G、3G、4G及5G)、无线局域网和/或WiFi(Wireless Fidelity,无线保真)网络。在一些实施例中,射频电路604还可以包括NFC(Near Field Communication,近距离无线通信)有关的电路,本申请对此不加以限定。
显示屏605用于显示UI(User Interface,用户界面)。该UI可以包括图形、文本、图标、视频及其它们的任意组合。当显示屏605是显示屏时,显示屏605还具有采集在显示屏605的表面或表面上方的触摸信号的能力。该触摸信号可以作为控制信号输入至处理器601进行处理。此时,显示屏606还可以用于提供虚拟按钮和/或虚拟键盘,也称软按钮和/或软键盘。在一些实施例中,显示屏605可以为一个,设置终端600的前面板;在另一些实施例中,显示屏605可以为至少两个,分别设置在终端600的不同表面或呈折叠设计;在再一些实施例中,显示屏605可以是柔性显示屏,设置在终端600的弯曲表面上或折叠面上。甚至,显示屏605还可以设置成非矩形的不规则图形,也即异形屏。显示屏605可以采用LCD(LiquidCrystal Display,液晶显示屏)、OLED(Organic Light-Emitting Diode,有机发光二极管)等材质制备。
定位组件606用于定位终端600的当前地理位置,以实现导航或LBS(LocationBased Service,基于位置的服务)。定位组件606可以是基于美国的GPS(GlobalPositioning System,全球定位系统)、中国的北斗系统或俄罗斯的伽利略系统的定位组件。
电源607用于为终端600中的各个组件进行供电。电源607可以是交流电、直流电、一次性电池或可充电电池。当电源607包括可充电电池时,该可充电电池可以是有线充电电池或无线充电电池。有线充电电池是通过有线线路充电的电池,无线充电电池是通过无线线圈充电的电池。该可充电电池还可以用于支持快充技术。
本领域技术人员可以理解,图6中示出的结构并不构成对终端600的限定,可以包括比图示更多或更少的组件,或者组合某些组件,或者采用不同的组件布置。
在上述实施例中,还提供了一种包括指令的非暂态的计算机可读存储介质,该计算机可读存储介质用于存储至少一个指令,该至少一个指令用于被处理器所执行以实现上述图2或图3所示实施例提供的方法。
本申请实施例还提供了一种包含指令的计算机程序产品,当其在计算机上运行时,使得计算机执行上述图2或图3所示实施例提供的方法。
本领域普通技术人员可以理解实现上述实施例的全部或部分步骤可以通过硬件来完成,也可以通过程序来指令相关的硬件完成,所述的程序可以存储于一种计算机可读存储介质中,上述提到的存储介质可以是只读存储器,磁盘或光盘等。
以上所述仅为本申请的较佳实施例,并不用以限制本申请,凡在本申请的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本申请的保护范围之内。