本申请涉及多媒体技术领域,特别涉及一种渲染方法及装置、电子设备和计算机可读存储介质。
背景技术:
在html5中,在首次播放流媒体视频时,需要从缓冲区下载数据完成首帧画面的渲染后进行播放。一般地,数据源读取模块(datasource)中的默认缓冲区大小根据流媒体视频的相关参数计算确定,然而默认缓冲区中还包含有播放文件的分析数据,而分析数据对于首帧画面的渲染是不必要的,因此实际用于渲染视频首帧所需的数据量要小于默认缓冲区的大小,导致首帧画面读取时的数据下载耗时较长,渲染首帧画面的过程耗时较长,首帧播放画面秒开的时间较长。
技术实现要素:
本申请实施方式提供一种渲染方法及装置、电子设备和计算机可读存储介质。
本申请实施方式提供一种流媒体视频首帧画面的渲染方法。所述方法包括调整缓冲区的容量;自调整后的缓冲区下载缓冲数据以进行所述流媒体视频首帧画面的渲染处理。
本申请实施方式还提供一种流媒体视频首帧画面的渲染装置。所述装置包括调整模块和处理模块。所述调整模块用于调整缓冲区的容量。所述处理模块用于自调整后的缓冲区下载缓冲数据以进行所述流媒体视频首帧画面的渲染处理。
本申请实施方式还提供一种电子设备。所述电子设备包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,实现调整缓冲区的容量,自调整后的缓冲区下载缓冲数据以进行所述流媒体视频首帧画面的渲染处理的渲染方法。
本申请实施方式还提供一种计算机程序的非易失性计算机可读存储介质。所述计算机可读存储介质上存储有计算机程序,当所述计算机程序被一个或多个处理器执行时,实现调整缓冲区的容量,自调整后的缓冲区下载缓冲数据以进行所述流媒体视频首帧画面的渲染处理的渲染方法。
本申请的流媒体视频首帧画面的渲染方法及装置、电子设备和计算机可读存储介质通过调整缓冲区的容量,自调整后的缓冲区下载缓冲数据以进行流媒体视频首帧画面的渲染处理,从而节约缓冲数据量的下载耗时,使得渲染首帧画面过程时间更短,首帧播放画面秒开的技术指标进一步提高。
本申请实施方式的附加方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本申请的实践了解到。
附图说明
本申请的上述和/或附加的方面和优点可以从结合下面附图对实施方式的描述中将变得明显和容易理解,其中:
图1是本申请某些实施方式的流媒体视频首帧画面的渲染方法的流程示意图;
图2是本申请某些实施方式的流媒体视频首帧画面的渲染装置的结构示意图;
图3是目前的流媒体视频首帧画面的渲染方法的流程示意图;
图4是本申请某些实施方式的流媒体视频首帧画面缓存数据量的场景示意图;
图5是本申请某些实施方式的流媒体视频首帧画面的渲染方法的流程示意图;
图6是本申请某些实施方式的流媒体视频首帧画面的渲染装置中的调整模块的结构示意图;
图7是本申请某些实施方式的流媒体视频首帧画面缓存数据量的场景示意图;
图8是本申请某些实施方式的电子设备的结构示意图;
图9是本申请某些实施方式的计算机可读存储介质的结构示意图。
具体实施方式
下面详细描述本申请的实施方式,所述实施方式的示例在附图中示出,其中,相同或类似的标号自始至终表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施方式是示例性的,仅用于解释本申请的实施方式,而不能理解为对本申请的实施方式的限制。
目前的数据源读取模块(datasource)中的默认缓冲区大小根据流媒体视频的相关参数计算确定,然而默认缓冲区中还包含有播放文件的分析数据,而分析数据对于首帧画面的渲染是不必要的,因此实际用于渲染视频首帧所需的数据量要小于默认缓冲区的大小,导致首帧画面读取时的数据下载耗时较长,渲染首帧画面的过程耗时较长,首帧播放画面秒开的时间较长。
为了解决上述问题,请参阅图1,本申请提供了一种流媒体视频首帧画面的渲染方法。方法包括:
s12:调整缓冲区的容量;
s14:自调整后的缓冲区下载缓冲数据以进行流媒体视频首帧画面的渲染处理。
请参阅图2,本申请还提供一种流媒体视频首帧画面的渲染装置10。装置10包括调整模块12和处理模块14。
在实际的应用过程中,调整模块和处理模块均可采用相应服务器或者计算设备的处理单元实现,如cpu、gpu、tpu或者npu等,对此不做赘述。
步骤s12可以由调整模块12实现,步骤s14可以由处理模块14实现。也就是说,调整模块12用于调整缓冲区的容量。处理模块14用于自调整后的缓冲区下载缓冲数据以进行流媒体视频首帧画面的渲染处理。
可以理解地,本申请的方法是基于chromehtml5video标签播放视频转换器(flv,flashvideo)封装格式加速首帧画面渲染的方法。chromehtml5video是谷歌浏览器(chrome)内核提供视频播放的一个视频播放器组件。需要指出的是,本申请的渲染方法适用于所有拥有谷歌浏览器(chrome)内核的浏览器,例如由于目前的360安全浏览器集成了ie内核和chrome内核,则本申请的渲染方法可以适用于360浏览器,。
流媒体是指采用流式传输的方式在internet播放的媒体格式。本申请中的流媒体格式是flv格式。flv是由adobe公司推出的一种封装格式,主要用于流媒体系统。flv封装的媒体文件具有体积轻巧、封装播放简单等特点,很适合网络应用。目前各浏览器普遍使用flashplayer作为网页播放器,使得安装有浏览器的计算机终端不需要另外安装播放器。
本申请中的缓冲区是指数据源读取器(datasource)的一部分。请参阅图3,首帧画面的渲染输出到设备的过程依次要经过数据源读取器(datasource)、分离器(demuexer)、解码器(decoder)和渲染器(renderer)。具体地,(1)数据源读取器(datasource)从服务器(mediaserver)中读取数据;(2)分离器(demuexer)从数据源读取器(datasource)中的数据分离出音频数据和视频数据;(3)音频及视频解码器(video/audiodecoder)解码分别解码音频数据和视频数据得到解码后的音频数据和视频数据;(4)音频及视频渲染器(video/audiorenderer)渲染后的音频数据和视频数据;(5)最后将渲染后的音频数据和视频数据通过设备分别输出视频图像(videodisplay)和声音(soundcard)。本申请从数据源读取器着手,用最少的缓冲数据量、最快的速度渲染出首帧画面。
具体地,数据源读取器的默认缓冲区的大小是固定的,即缓冲区容量(buffersize)是固定的。根据公式:
buffer_size=std::min((ktargetsecondsbufferedahead+ktargetsecondsbufferedbehind)*bytes_per_second+extra_buffer*3,preload_high+pin_backward+extra_buffer);
式中,bytes_per_second(默认码率)默认值为200kbps;
ktargetsecondsbufferedahead(当前播放进度节点往前、即将播放的缓存区时间)默认值为10s;
ktargetsecondsbufferedbehind(当前播放进度节点往后、已经播放完的视频的缓存区时间)默认值为2s;(可以参阅图4,以便于了解ktargetsecondsbufferedahead和ktargetsecondsbufferedbehind这两个参数的含义。具体地,图4中播放进度节点b时,b点往前,ktargetsecondsbufferedahead(当前播放进度节点往前、即将播放的缓存区时间)默认值为10s;b点往后ktargetsecondsbufferedbehind(当前播放进度节点往后、已经播放完的视频的缓存区时间)默认值为2s)
extra_buffer默认值为0;
(preloadhigh+pinbackward+extrabuffer)默认值为50mb,即为50000kpbs;
所以,缓冲区容量(buffersize)=std::min((10+2)*200kbps+0*3,50000kbps)=std::min(2400kbps,50000kbps)=2400kbps/1024=2.3m。
因此,计算出默认缓冲数据量约为2m。
然而,实际首帧画面渲染所需的缓冲数据量比2m更少,即目前的数据源读取器需要多下载部分分析数据,使得首帧画面渲染时的数据下载耗时时间较长。可以理解地,由于不同的分辨率、码率、时长的视频,文件头大小是不一样的,以720p分辨率,300kbps码率,2小时课程视频为例进行说明,根据flv视频格式特性的分析,首帧画面的实际数据组成包括文件头大小、首帧第1秒的视频数据和音频数据,这三个部分经过数据采集后数据量约为800kb~1000kb,也即是,约为1m左右。然而目前的首帧画面的默认数据量还会包括第1秒以外的音频数据和视频数据,例如包含了第2秒和第3秒的音频数据和视频数据,即总共需缓存约2m数据量,使得首帧画面渲染时的数据下载耗时时间较长。
在数据源读取器向服务器读取数据阶段,调整其缓冲区的容量,即优化数据源读取器(datasource)中缓冲区的默认参数,结合预计分析首帧画面的数据量,重新计算出数据源读取器(datasource)模块的缓冲区数据量。自调整后的缓冲区下载缓冲数据以进行流媒体视频首帧画面的渲染处理,即根据重新计算的数据源读取模块中的缓冲区数据量进行对读取的首帧画面数据进行下载缓冲。
本申请的流媒体视频首帧画面的渲染方法及装置通过调整缓冲区的容量,自调整后的缓冲区下载缓冲数据以进行流媒体视频首帧画面的渲染处理,从而节约缓冲数据量的下载耗时,使得流媒体视频的首帧画面渲染过程时间更短,首帧播放画面秒开的技术指标进一步提高。
请参阅图5,在某些实施例中,步骤s12包括:
s121:调整预设参数以调整缓冲区的容量,预设参数包括缓最小预加载缓冲区的预加载量及最小预加载缓冲区的预加载量。
请参阅图6,调整模块12包括调整单元121。步骤121可以由调整单元121实现,调整单元121用于调整预设参数以调整缓冲区的容量,预设参数包括当前播放进度节点往前、即将播放的缓存区的时间及最小预加载缓冲区的预加载量。
具体地,根据数据源读取器(datasource)的缓冲区的容量(buffersize)的值可以由以下公式决定:
a.preload=clamp(ktargetsecondsbufferedahead*bytes_per_second,kminbufferpreload,kmaxbufferpreload)。即,采用区间限定函数clamp来取预加载量(preload)的数值。
可以理解地,由于函数clamp(x,low,high),若x在[low,high]范围内,则clamp函数取值等于x;如果x小于low,则clamp函数取值为low;如果x大于high,则clamp函数取值为high。也即是,当(ktargetsecondsbufferedahead*bytes_per_second)的值在[kminbufferpreload,kmaxbufferpreload]范围内,则preload取值等于(ktargetsecondsbufferedahead*bytes_per_second)的值;当(ktargetsecondsbufferedahead*bytes_per_second)的值小于kminbufferpreload,则preload值等于kminbufferpreload。当(ktargetsecondsbufferedahead*bytes_per_second)的值大于kmaxbufferpreload,则preload值等于kmaxbufferpreload。
式中,preload指的是预加载量;ktargetsecondsbufferedahead指的是当前播放进度节点往前、即将播放的缓存区时间,其默认初始值为10s;bytes_per_second指的是每秒字节数,即默认码率为200kpbs,kminbufferpreload为最小预加载缓冲区的预加载量,kmaxbufferpreload为最大预加载缓冲区的预加载量,目前默认的最小预加载缓冲区的预加载量与最大预加载缓冲区的预加载量之间的范围为[2m,50m]。
b.preload_high=preload+kpreloadhighextra;
式中,preload_high指的是整个缓冲区的最大预加载量;preload指的是整个缓冲区的预加载量;kpreloadhighextra指的是额外增加的最高预加载量。
c.extra_buffer=std::min(preload,url_data->bytesreadfromcache*kslowpreloadpercentage/100);
式中,extra_buffer指的是额外的缓冲区;url_data指的是统一资源定位器的数据量;bytesreadfromcache指的是从高速缓冲存储器中读取的字节量;kslowpreloadpercentage指的是慢速缓冲预加载量的百分比。
d.pin_backward=clamp(ktargetsecondsbufferedbehind*bytes_per_second,kminbufferpreload,kmaxbufferpreload);
式中,pin_backward指的是当前播放进度节点往后的缓冲数据量;ktargetsecondsbufferedbehind指的是当前播放进度节点往后、已经播放完的视频的缓存区时间,默认值为2s;bytes_per_second指的是每秒字节数;kminbufferpreload指的是最小预加载缓冲区的数据量;kmaxbufferpreload为最大预加载缓冲数据量。
e.buffer_size=std::min((ktargetsecondsbufferedahead+ktargetsecondsbufferedbehind)*bytes_per_second+extra_buffer*3,preload_high+pin_backward+extra_buffer);
式中,buffersize指的是缓冲区的容量,ktargetsecondsbufferedahead指的是默认情况下当前播放进度节点往前、即将播放的缓存区的时间,其默认初始值为10s;ktargetsecondsbufferedbehind指的是默认情况下当前播放进度节点往后、已经播放完的视频的缓存区时间,默认值为2s;bytes_per_second指的是每秒字节数;extrabuffer指的是额外的缓冲区的数据量;preload_high指的是最大预加载量;pin_backward指的是当前播放进度节点往后、已经播放完的视频的缓冲数据量。
也即是,首先,缓冲区的容量(buffer_size)的计算公式(e)的计算结果依赖(a)(b)(c)(d)的四个公式的计算结果和公式中的参数。其次,由上面计算缓冲区的容量(buffer_size)的计算公式可知,可以调节的关键参数为a,ktargetsecondsbufferedahead(当前播放进度节点往前、即将播放的缓存区的时间)和b,kminbufferpreload(最小预加载缓冲区的数据量)。即,预设参数包括在默认情况下当前播放进度节点往前、即将播放的缓存区的时间和最小预加载缓冲区的预加载量。需要说明的是,上述公式中的其他参数也可以调节,但是经过测试,发现a、b参数是调节后总体影响范围最小的一组参数,因此,选定调节a和b以达到调节缓冲区容量的效果。
最后,结合预计分析首帧画面所需的数据量(后文中可知该数值为1m左右),根据调整上述的预设参数将datasource模块的缓冲区的缓冲数据量重新调整为1m。
在某些实施例中,调整预设参数以调整缓冲区的容量,预设参数包括缓冲区的当前播放进度节点往前、即将播放的缓存区的时间及最小预加载缓冲区的缓冲数据量包括:调节当前播放进度节点往前、即将播放的缓存区的时间由默认10s调整为3s,并调节最小预加载缓冲区的预加载量为由默认数据2m调整为1m。
请结合图6,调整模块12包括调整单元121。调整单元121用于:调节当前播放进度节点往前、即将播放的缓存区的时间由默认10s调整为3s,并调节最小预加载缓冲区的预加载量为由默认数据2m调整为1m。
具体地,在某些实施例中,本申请的渲染方法通过调节缓冲区的当前播放进度节点往前、即将播放的缓存区的时间(关键参数a)为由10s变化为3s与最小预加载缓冲区的预加载量(关键参数b)由2m变化为1m,通过上述式子a可以看出,进而调节缓冲区的预加载量(preload),继而能够快速调整的缓冲区的容量由2m变为1m。特别地,本申请的渲染装置设置两个调节按钮,该调节按钮可以分别同时控制调节缓冲区的当前播放进度节点往前、即将播放的缓存区的时间及最小预加载缓冲区的缓冲数据量,即,同时调节两个变量能够准确同时调节缓冲区的缓冲数据量,调节速度快,效率高。
在某些实施例中,渲染方法还包括:根据文件分析与数据回传统计分析播放首帧画面所需的默认缓冲数据量的均值,计算预设参数的调整量。
请结合图6,调整模块12包括调整单元121。调整单元121用于:根据文件分析与数据回传统计分析播放首帧画面所需的默认缓冲数据量的均值,计算预设参数的调整量。
具体地,经过文件分析与数据采集预估flv首帧需要的数据量为1m左右,该1m的数据是在客户端视频播放请求数据完成首帧渲染时,上报统计得出的平均数据,结合分析flv视频头部信息的工具,汇总得到的预估参考值。例如,在一个视频播放过程中,首次播放首帧画面时,播放器会抛出一个首帧画面完成的消息,这个时候看播放器最近一次播放首帧画面请求数据的位置,比如最近一次请求是从1024kb开始请求,可以认为该次播放约1024kb数据就可以解码、渲染出首帧画面。经过多次统计分析,例如,如图7所示,3次首帧播放请求开始至首帧播放请求之后的首帧缓冲数据量分别为:1024kb、1000kb和800kb,则3次首帧缓冲数据量平均值为:(1024kb+1000kb+800kb)/3=941.33kb,约为1m。
本申请的渲染方法可以根据该所需要的缓冲区的数据量(buffersize)1m反推得到影响数据获取模块中的参数可以为上述两个参数的调节值分别为将当前播放进度节点往前、即将播放的缓存区的时间由10s优化为3s,最小预加载缓冲区的预加载量为由2m对应优化为1m,则目前ktargetsecondsbufferedahead的值从10s调整到3s及最小预加载缓冲区的预加载量由对应的2m优化为1m后,得到优化后缓冲区数据量计算值如下所示:
buffer_size=std::min((3+2)*200kbps+0*3,50)=1000kbps/1024=1m,即,最小预加载缓冲区的缓冲数据量由2m优化为1m。
需要说明的是,还可以调节其他参数以实现缓冲区的数据量为1m,本申请中将当前播放进度节点往前、即将播放的缓存区的时间由10s优化为3s,最小预加载缓冲区的预加载量为由2m对应优化为1m,是一组经过测试后最优的调节数值。
可以理解地,在数据源读取器内部读取缓冲数据时,在数据源读取器中安装有识别首帧画面数据量的识别器,可以根据识别器识别出首帧画面播放所需的数据量(1m)的节点位置,并从该节点开始缓存首帧画面数据量至缓冲区中,所需的缓存或加载的时间也可以控制为3s内即缓存完毕。
经过验证,调整后的缓冲区数据量的优化版比默认情况下的缓冲区数据量的基本版在视频读取数据阶段可以减少200-300ms(毫秒),进而首帧画面播放环节也可以减少200-300ms,这为首帧画面秒开的技术指标又更进一步。
需要说明的是,本申请的渲染方法在播放flv或私有flv封装格式时,才可以根据以上调整参数策略调整数据源读取器的缓冲区大小进而调整。
请参阅图8,在某些实施例中,本申请还提供一种电子设备20。电子设备20包括存储器21和处理器22,存储器21中存储有计算机程序23,计算机程序23被处理器22执行时,实现调整缓冲区的容量,自调整后的缓冲区下载缓冲数据以进行流媒体视频首帧画面的渲染处理的渲染方法。
请参阅图9,在某些实施例中,本申请还提供一种计算机可读存储介质30,其上存储有计算机程序31。
程序被一个或多个处理器40执行的情况下,实现上述任意一种实施方式的渲染方法的步骤。
例如,程序被处理器40执行的情况下,实现以下渲染方法的步骤:
s12:调整缓冲区的容量;
s14:自调整后的缓冲区下载缓冲数据以进行流媒体视频首帧画面的渲染处理。
计算机可读存储介质30可设置在处理器40或者数据源读取器内,此时,处理器40或者数据源读取器能够与云端服务器进行通讯来获取到相应的计算机程序31。
可以理解,计算机程序31包括计算机程序代码。计算机程序代码可以为源代码形式、对象代码形式、可执行文件或某些中间形式等。计算机可读存储介质可以包括:能够携带计算机程序代码的任何实体或装置、记录介质、u盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(rom,read-onlymemory)、随机存取存储器(ram,randomaccessmemory)、以及软件分发介质等。
综上所述,本申请的流媒体视频首帧画面的渲染方法及装置、电子设备和计算机可读存储介质从数据源读取器着手,通过调整缓冲区的容量,自调整后的缓冲区下载缓冲数据以进行流媒体视频首帧画面的渲染处理,从而节约缓冲数据量的下载耗时,使得渲染首帧画面过程时间更短,首帧播放画面秒开的技术指标进一步提高。
1.一种流媒体视频首帧画面的渲染方法,其特征在于,所述方法包括:
调整缓冲区的容量;
自调整后的缓冲区下载缓冲数据以进行所述流媒体视频首帧画面的渲染处理。
2.根据权利要求1所述的渲染方法,其特征在于,所述调整缓冲区的容量包括:
调整预设参数以调整所述缓冲区的容量,所述预设参数包括默认情况下当前播放进度节点往前、即将播放的缓存区的时间及最小预加载缓冲区的预加载量。
3.根据权利要求2所述的渲染方法,其特征在于,所述方法包括:
调节所述当前播放进度节点往前、即将播放的缓存区的时间由默认10s调整为3s,并调节所述最小预加载缓冲区的预加载量为由默认数据2m调整为1m。
4.根据权利要求2所述的渲染方法,其特征在于,所述方法还包括:
根据文件分析与数据回传统计分析播放首帧画面所需的默认缓冲数据量的均值,计算所述预设参数的调整量。
5.一种流媒体视频首帧画面的渲染装置,其特征在于,所述装置包括:
调整模块,所述调整模块用于调整缓冲区的容量;
处理模块,所述处理模块用于自调整后的缓冲区下载缓冲数据以进行所述流媒体视频首帧画面的渲染处理。
6.根据权利要求5所述的渲染装置,其特征在于,所述处理模块包括:
调整单元,所述调整单元用于调整预设参数以调整所述缓冲区的容量,所述预设参数包括当前播放进度节点往前、即将播放的缓存区时间及最小预加载缓冲区的预加载量。
7.根据权利要求6所述的渲染装置,其特征在于,所述调整单元用于:
调节所述当前播放进度节点往前、即将播放的缓存区的时间由默认10s调整为3s,并调节所述最小预加载缓冲区的预加载量为由默认数据2m调整为1m。
8.根据权利要求6所述的渲染装置,其特征在于,所述调整单元用于:
根据文件分析与数据回传统计分析播放首帧画面所需的默认缓冲数据量的均值,计算所述预设参数的调整量。
9.一种电子设备,所述电子设备包括存储器和处理器,所述存储器中存储有计算机程序,所述计算机程序被所述处理器执行时,实现权利要求1-4任一项所述的渲染方法。
10.一种计算机程序的非易失性计算机可读存储介质,其特征在于,所述计算机可读存储介质上存储有计算机程序,当所述计算机程序被一个或多个处理器执行时,实现权利要求1-4中任一项所述的渲染方法。
技术总结