本发明是有关于一种串流数据的编码排程方法与装置。
背景技术:
随着网络软硬件技术的提升,透过网络的线上视音频串流成为一个普遍的网络应用。在影音服务应用中,例如可以将商标、个人化图案、浮水印、赞助商广告等讯息编码或加入视音频串流;或是将直播画面转成不同解析度供不同装置播放。是以,串流数据常需要先被重新编码,再传送到例如使用者装置或后端服务器。换句话说,串流数据的编码在视音频广播的网络应用里扮演重要角色。而串流数据的编码需要耗费庞大的计算量。
现今,硬件编码器已经广泛被使用以提供快速编码。例如,现场影视直播常采用图形处理器(Graphics Processing Unit,GPU)来做编码。而利用硬件资源分享技术可让硬件编码器处理更多编码工作,使发挥最大效能。一个好的排程机制使有效使用硬件编码器是目前业界所致力的课题之一。
技术实现要素:
本发明有关于一种串流数据编码排程方法及装置,透过一排程机制,有效使用硬件编码器以提供串流数据的编码。
根据本发明的一实施例,提出一种串流数据编码排程方法,执行于串流数据编码装置,其步骤包括:判断是否有至少一闲置硬件编码器;判断至少一串流队列中是否有至少一满群框串流队列(full GOF(group of frames)streaming buffer);如果有至少一闲置硬件编码器,且该至少一串流队列中没有满群框串流队列,但有至少一未满群框串流队列(non-full GOF streaming buffer),则计算该至少一未满群框串流队列各自的接收比例,以及使用该至少一闲置硬件编码器其中之一对具有最高接收比例的未满群框串流队列(non-full GOF streaming buffer)的已经接收的数据框开始进行编码;以及 如果有至少一闲置硬件编码器,且该至少一串流队列中有至少一满群框串流队列,使用该至少一闲置硬件编码器其中之一对该至少一满群框串流队列的一满群框串流队列进行编码。
根据本发明的一实施例,提出一种串流数据编码装置,包括储存单元、至少一硬件编码器以及排程单元。储存单元储存至少一串流队列;排程单元,设置用以:判断是否有至少一闲置硬件编码器;判断该至少一串流队列中是否有至少一满群框串流队列;如果有至少一闲置硬件编码器,且该至少一串流队列中没有满群框串流队列,但有至少一未满群框串流队列,则计算该至少一未满群框串流队列各自的接收比例,以及使用该至少一闲置硬件编码器其中之一对具有最高接收比例的未满群框串流队列的已经接收的数据框开始进行编码;以及如果有至少一闲置硬件编码器,且该至少一串流队列中有至少一满群框串流队列,使用该至少一闲置硬件编码器其中之一对该至少一满群框串流队列的一满群框串流队列进行编码。
根据本发明的一实施例,提出一种内储程序的电脑可读取纪录媒体,当电脑载入该程序并执行后,可完成如上所述的方法。
以上的关于本发明内容的说明及以下的实施方式的说明用以示范与解释本发明的精神与原理,并且提供本发明的专利权利要求保护范围更进一步的解释。
附图说明
图1绘示不同排程机制的不同编码延迟示意图
图2绘示依据本发明的一实施例的串流数据编码排程装置的示意图。
图3A绘示依据本发明的一实施例的串流数据编码排程方法的流程图。
图3B绘示依据本发明的另一实施例的串流数据编码排程方法的流程图。
其中,附图标记:
200:串流数据编码排程装置
210:储存单元
210-1、210-2、210-3、…、210-M:串流队列
220:排程单元
230-1、230-2、…、230-N:硬件编码器
300:串流数据编码排程方法
301、302、302、304、305、306:步骤
具体实施方式
以下参照附图详细叙述本发明的其中几组实施态样。需注意的是,实施例所提出的多组实施态样的结构和内容仅为举例说明的用,本发明欲保护的范围并非仅限于所述的该些态样。需注意的是,本发明并非显示出所有可能的实施例,本领域的技术人员可在不脱离本发明的精神和范围内对实施例的结构加以变化与修改,以符合实际应用所需。因此,未于本发明提出的其他实施态样也可能可以应用。再者,实施例中相同或类似的标号用以标示相同或类似的部分。
首先定义群框(Group of Frames:GOF)以及满群框串流队列(full GOF streaming buffer)。群框,意即,数据框群;满群框串流队列,意即,当串流队列(streaming buffer)中承载的数据框数量大于或等于该串流队列的满群框总数(frame number of GOF),我们称该串流队列为满群框串流队列(full GOF streaming buffer),否则称该串流队列为未满群框串流队列(non-full GOF streaming buffer)。进一步说明:当该至少一串流队列中有至少一满群框串流队列,也就是说,包括有至少一个群框(Group of Frames:GOF)在该至少一串流队列中的任一串流队列里;当至少一串流队列中没有满群框串流队列,也就是说,没有包括群框(GOF)在该至少一串流队列中的任一串流队列里;当有至少一未满群框串流队列,也就是说,包括有至少一个未满群框(non-full GOF)在该至少一串流队列中的任一串流队列里。
图1绘示不同编码排程所造成的不同编码延迟。在图1以一个串流队列及满群框总数为8来举例来说明,该串流队列承载来自一串流源(如,录影机)的数据框。方案A揭示编码器在串流队列的数据框数量达到满群框总数8时,才开始进行编码,而编码器可能在数据框数量尚未达到满群框总数8时,即已经闲置(例如,达到6数据框时)。如图1中所示,在时间Tx,串流队列有8个数据框,编码器在时间Tx开始进行编码原则上会在时间Tz完成编码。方案B揭示编码器在串流队列的数据框数量未达到满群框总数8时,即开始进行编码。如图中所示,在时间Ts,串流队列有6个数据框,编码器在时间Ts开始闲置但随即进行编码,原则上会在时间Ty完成8个数据框的编码。由图1可 以看出,编码延迟A较编码延迟B长,方案B的完成时间将早于方案A,且方案A的有较长的编码器闲置时间(Tx-Ts)。由此可推论,方案B效率较佳。
基于以上的分析,本发明提出串流数据编码排程的方法及装置的实施范例,所述的串流数据(streaming data)包括多个数据框(frames)。
图2绘示依据本发明一实施例的串流数据编码排程装置200的方块图。图2绘示依据本发明的一实施例进一步描述如下,串流数据编码排程装置200包括储存单元210储存至少一串流队列210-1、210-2、210-3、…、210-M,排程单元220以及至少一硬件编码器230-1、230-2、…、230-N,其中,M、N是正整数。
如图3A所示的一实施例,排程单元220,设置用以判断是否有至少一闲置硬件编码器(步骤302),判断该至少一串流队列中是否有至少一满群框串流队列(full GOF)(步骤303),如果有至少一闲置硬件编码器且该至少一串流队列中没有满群框串流队列,但有至少一未满群框串流队列(non-full GOF),则计算该至少一未满群框串流队列各自的接收比例(步骤305),以及使用该至少一闲置硬件编码器其中之一对一具有最高接收比例的未满群框串流队列(non-full GOF)的已经接收的数据框开始进行编码(步骤306),如果有至少一闲置硬件编码器且该至少一串流队列中有至少一满群框串流队列,使用该至少一闲置硬件编码器其中之一对该至少一满群框串流队列的一满群框串流队列进行编码(步骤304)。在一实施例,当有多个满群框队列时,会针对依照群框队列满群框的时间点先后顺序,以先到先服务(first-in-first-out)方式,依序编码该些满群框队列的数据框。当判断是否有至少一闲置硬件编码器(步骤302),如果无至少一闲置硬件编码器则可持续判断是否有一闲置编码器,或被动等待硬件编码器转为闲置时发出通知等等各种实作判断方式,不限定于图3A中回圈方式。
在一实施例,所谓闲置硬件编码器是指在当下这个硬件编码器没有进行编码动作。
在一实施例中,串流队列210-1、210-2、210-3、..210-M承载来自至少一串流源的数据框。在一些实施例中,所述串流源可以是录影机、录音机等,但不限于此。在一些实施例中,所述硬件编码器可以是图形处理器(GPU)、声音处理器或其他编码器。在一些实施例中,储存单元210可以是一个或多个记忆 体装置,但不限于此。
在一实施例中,各个串流队列可以有各自对应的满群框总数(GOF number),各串流队列的满群框总数原则上是预先设定,但不限于此。在一实施例,各个串流队列的满群框总数是相同的,在一些实施例,部份串流队列的满群框总数是不同的。
为方便解释,这里以3个串流队列为例说明,并分别以参数GOFFrameNumber1,GOFFrameNumber2,GOFFrameNumber3来代表串流队列210-1,210-2,210-3的满群框总数。
例如:GOFFrameNumber1=8,GOFFrameNumber2=8,以及GOFFrameNumber3=10.
在步骤304,如果有至少一闲置硬件编码器且该至少一串流队列中有至少一满群框串流队列,该排程单元220使用该至少一闲置硬件编码器其中之一对该至少一满群框串流队列的一满群框串流队列进行编码,进一步说明如下。
例如,如果有至少一闲置硬件编码器且该至少一串流队列中有至少一满群框串流队列X,排程单元220自该满群框串流队列X读取GOFFrameNumberx个数据框,并使用闲置硬件编码器Y来对这些数据框进行编码,其中X、Y是正整数。
进一步举例说明,当串流队列210-1承载9个数据框,其数量大于等于GOFFrameNumber1(=8),当串流队列210-2承载6个数据框,其数量小于GOFFrameNumber2(=8),当串流队列210-3承载9个数据框,其数量小于GOFFrameNumber3(=10),则串流队列210-1为满群框串流队列,而串流队列210-2、210-3是未满群框串流队列。
延续前述举例的3个串流队列的承载数据框状况,则排程单元220自流队列210-1读取其满群框总数(GOFFrameNumber1)的8个数据框进行编码。
当如果有一个以上的闲置硬件编码器的情况,后面会针对如何选取闲置硬件编码器Y进行编码来另做说明,在此暂不着墨。
在步骤305,当有至少一闲置硬件编码器且该至少一串流队列中没有满群框串流队列,但有至少一未满群框串流队列(non-full GOF)的情况下,排程单元220计算该至少一未满群框串流队列各自的接收比例;在步骤306,排程单元220使用该至少一闲置硬件编码器其中之一对一具有最高接收比例的未满 群框串流队列(non-full GOF)的已经接收的数据框开始进行编码。
例如,串流队列210-1已经接收6个数据框(少于GOFFrameNumber1:8),串流队列210-2已经接收4个数据框(少于GOFFrameNumber2:8),串流队列210-3已经接收5个数据框(少于GOFFrameNumber3:10),则串流队列210-1、210-2、210-3都属于未满群框串流队列,所以,在所有串流队列中没有满群框串流队列情况下,则排程单元220计算串流队列210-1、210-2、210-3各自的接收比例1、接收比例2、接收比例3。
例如,当接收比例1是所有接收比例中具最高值的,则排程单元220开始自串流队列210-1中一一读取已经接收的数据框(6个数据框,承前段举例),并使用闲置硬件编码器Y来对这些数据框进行编码。串流队列210-1只需等待2个数据框就到达满眶,而串流队列201-2与210-3分别需等待4个与5个数据框才到达满框。因此优先选择串流210-1的编码等待时间缩短,所以编码延迟将会最小或降低。
如图3B所示的一实施例,排程单元220在使用该至少一闲置硬件编码器其中之一对具有最高接收比例的未满群框串流队列(non-full GOF)的已经接收的数据框开始进行编码步骤(图3A步骤306)之后,使用该至少一闲置硬件编码器其中之一闲置硬件编码器Y对该具有最高接收比例的未满群框串流队列(non-full GOF)的数据框继续编码,直到该具有最高接收比例的未满群框串流队列的剩余数据框都已经接收并编码,其中,该具有最高接收比例的未满群框串流队列的该已经接收的数据框与该剩余数据框组成该具有最高接收比例的未满群框串流队列的满群框(即,达到GOFFrameNumber数量)。(图3A步骤307)
以GOFFrameNumber1=8为例说明,当排程单元220自串流队列210-1读取其承载的已经接收到的6个数据框并交由闲置硬件编码器Y进行编码,排程单元220继续自串流队列210-1读取其后续接收的数据框并编码,直到剩余的2个剩余数据框都已经接收以及编码。
在一实施例中,硬件编码器在开始编码时,进入忙碌状态,在另一实施例中,硬件编码器完成一串流队列的满群框总数的数据框读取及编码时,进入闲置状态。
在一实施例中,至少一闲置硬件编码器其中之一,在具有最高接收比例的 未满群框串流队列的剩余数据框都已经接收并编码前,不会对其他满群框串流队列或未满群框串流队列进行编码,其中,该具有最高接收比例的未满群框串流队列的该已经接收的数据框与该剩余数据框组成该具有最高接收比例的该未满群框串流队列的满群框(即,达到GOFFrameNumber数量)。
延续前面的举例,闲置硬件编码器Y在完成串流队列210-1的满群框总数(GOFFrameNumber1)8个数据框的编码后,闲置硬件编码器Y将可以进行其他串流队列的编码。
在一实施例中,该至少一未满群框串流队列各自的该接收比例,与该至少一未满群框串流队列各自的一解析度级数成正比。
解析度级数是依据串流队列的解析度而定的,可以是在初始步骤(图3A,步骤301)或是在计算接收比例的步骤(图3A,步骤305)时决定的。
这里列举几个决定解析度级数的实施例,但不在此限。例如,面积比例法(Area Ratio method)、穷举法(Exhaustive method)、分类法(Classification method)、内插法(Interpolation method)等,在此以影像来举例说明。
串流队列的解析度(W x H)例如是:(1920x1080)、(1024x768)、(800x600)等。
在面积比例法(Area Ratio method)的一实施例,例如以1920x1080为基本解析度,这个串流队列的解析度级数的计算可以下式表示:
解析度级数=(Wx H)/(1920x1080)
在穷举法(Exhaustive method)的一实施例,预先估算各种不同解析度(如,1920x1080、1024x768、800x600,等)所需的编码时间,然后计算这个串流队列编码时间与基本解析度所需编码时间的比例。例如以1920x1080为基本解析度,这个串流队列的解析度级数的计算可以下式表示:
解析度级数=((Wx H)所需编码时间)/((1920x1080)所需编码时间)
在分类法(Classification method)的一实施例,预先估算各种已知的不同解析度(如,1920x1080、1024x768、800x600等)所需的编码时间,将各串流队列归类到与其解析度相近的解析度群组,然后计算这个串流队列编码时间与基本解析度所需编码时间的比例。例如以1920x1080为基本解析度,假设这个串流队列解析度(W x H)与解析度群组1(Wgroup1 x Hgroup1)相近,则这个串流队列被归类到解析度群组1,这个串流队列的解析度级数的计算可以下式表示:
解析度级数=((Wgroup1 x Hgroup1)所需编码时间)/((1920x1080)所需编码时间)
在内插法(Interpolation method)的一实施例,预先估算各种已知的不同解析度(如,1920x1080、1024x768、800x600,等)所需的编码时间,针对这个串流队列解析度(W x H)以面积内插方式推算这个串流队列编码时间,然后计算这个串流队列编码时间与基本解析度所需编码时间的比例。例如以1920x1080为基本解析度,这个串流队列的解析度级数的计算可以下式表示:
解析度级数=(内插计算(Wx H)所需编码时间)/((1920x1080)所需编码时间)
在一实施例中,该至少一未满群框串流队列各自的接收比例,与该至少一未满群框串流队列各自的一满群框总数(GOFFrameNumber)成正比。
在一实施例中,该至少一未满群框串流队列各自的该接收比例,与该至少一未满群框串流队列各自的一复杂度成正比,其中,该复杂度是依据运动向量变异数(motion vector variance)、DCT系数变异数(DCT Coefficient variance)或解析度的至少一,但不限于此,并预先计算而得。在一实施例中,串流队列的复杂度是在初始步骤(图3A,步骤301)计算的,或在初始步骤的前计算的。
在一实施例中,该至少一未满群框串流队列各自的该接收比例,与该至少一未满群框串流队列各自接收剩余数据框所需时间成反比,其中,该至少一未满群框串流队列各自的该已经接收的数据框与该剩余数据框组成该未满群框串流队列各自的满群框(即,达到GOFFrameNumber数量)。进一步说明如下:
延续前述的举例,串流队列201-1的满群框总数GOFFrameNumber1是8,已经接收的数据框有6个,所以有2个剩余数据框尚未收到。接收2个剩余数据框所需时间,例如是(2/数据框速率)。接收比例与所需时间成反比。在一实施例中,数据框速率是指串流队列每秒内所包含的数据框数量。
在一实施例中,串流队列index的接收比例的计算可以下式表示:
在另一实施例中,串流队列index的接收比例的计算可以下式表示:
参数说明如下:
GOFFrameNumberindex:串流队列index的满群框总数。
ResolutionRateindex:串流队列index的解析度级数。
AlreadyReceivedFramesindex:串流队列index的已经接收数据框数量。
FrameRateindex:串流队列index的数据框速率。
RCidnex:串流队列index的复杂度。
在一实施例中,串流数据编码排程装置有一个硬件编码器,在另一实施例中,串流数据编码排程装置有一个以上的硬件编码器。
在图3A步骤304及306,在一实施例中,该至少一闲置硬件编码器其中之一是依据编码效率而选定。
在一实施例中,该至少一闲置硬件编码器的编码效率排序是预先设定或在初始步骤设定的(图3A,步骤304)。
在图3A步骤306中,当该至少一未满群框串流队列包括多个未满群框串流队列,该至少一闲置硬件编码器包括多个闲置硬件编码器,排程单元220设置以使用该至少一闲置硬件编码器其中之一对该具有最高接收比例的未满群框串流队列的已经接收的数据框开始进行编码的步骤,在一实施例中,更包括:使用该至少一闲置硬件编码器的一具最高编码效率的闲置硬件编码器对该具有最高接收比例的未满群框串流队列的已经接收的数据框开始进行编码,以及使用该至少一闲置硬件编码器的一具第二高编码效率的闲置硬件编码器对该具有第二高接收比例的未满群框串流队列(non-full GOF)的已经接收的数据框开始进行编码。
上述的编码效率,例如是编码速度、硬件架构、数据存取速度、硬件内部运算单元数目等,但不限于此。
在一实施例中,串流数据编码排程装置另包括至少一数据列(Queue),排程单元220自串流队列读取数据框并储存在这至少一数据列(Queue)里,硬件编码器自至少一数据列(Queue)读取数据框进行编码。在另一实施例中,排程单元220传送读取的数据框到硬件编码器230-1、230-2、…、230-N。
在一实施例中,排程单元220以一处理单元自至少一记忆体装置读取至少一可读取程序码来实现排程单元220的功能。
在一实施例中,上述范例实施例中提及的上述排程单元220例如是以集成 电路或电路板等组成的硬件装置,而可分别执行上述的功能。
本发明更提出一种内储程序的电脑可读取纪录媒体,当电脑载入该程序并执行后,可完成如上述实施例所载的串流数据编码排程方法。
综上所述,虽然本发明已以若干实施例公开如上,但其并非用以限定本发明。本发明所属技术领域的技术人员,在不脱离本发明的精神和范围内,当可作各种的更动与修改。因此,本发明的保护范围当视后附的权利要求书保护范围所界定者为准。