具体实施方式
本发明所述的转码包括文件格式转码和编码格式转码。所谓文件格式转码指的是一种文件格式向另一种文件格式的转换,而编码格式转码则是一种编码格式到另一种编码格式的转换。比如:flv转mp4,文件格式转码就是从flv格式文件中提取帧数据来填充到mp4格式的文件当中,数据编码格式不变。而编码格式的转换则转变的是视频文件的编码方式。
在分布式实时转码方法中,首先利用网格计算的方式对待转换文件进行逻辑分片,把整个待转换文件划分成一个个的转换任务存放于任务数据库中,其次,网格里面的转码服务器则根据自身的能力来实时获取转码任务,待转换完毕,首先通知任务服务器任务完成,然后把完成的数据块存放于目标文件服务器,目标文件服务器再根据待转换文件的完成情况对其进行整合,从而完成整个转码任务。
在该系统中,包括一源文件服务器,一转码服务器群,一任务数据库、以及一目标文件服务器。上述源文件服务器,转码服务器群,任务数据库、以及目标文件服务器都处于网格之中。上述源文件服务器对视频源文件进行逻辑分块,将源文件划分为固定大小的任务块。任务块划分完后,分块信息传输到任务数据库中。
上述任务数据库用于存储源文件服务器发送过来的分块和分块信息。
划分好子任务(即任务块)后将分块和分块信息存储于任务数据库服务器中。
转码服务器群由多个转码服务器组成,具有分布式结构,用于实时向任务数据库发出获取任务的请求,以从任务数据库中获取任务,任务数据库根据转码服务器群获取任务的请求,向转码服务器群发送具体的任务,转码服务器群根据该任务从源文件服务器中获取待转码的源文件,并执行转码处理。
当一个任务被成功完成时(即转码完成),转码服务器会向数据库服务器通知成功完成的消息,并把该任务上传到目标文件服务器。目标文件服务器用于实时接收转码服务器群发送来的转码后的数据,当文件的所有任务都执行完毕且成功完成,目标文件服务器将此文件合并成目标文件。
为了更为清楚地阐述本发明的技术内容,请进一步参见附图描述。如图1所示:
附图1为本发明提出的分布式实时转码系统,其包括一源文件服务器,一转码服务器群,一任务数据库、以及一目标文件服务器。上述源文件服务器,转码服务器群,任务数据库、以及目标文件服务器都处于网格之中。
源文件服务器用于存储视频源文件,即待转码的数据,视频源文件包括各种格式的影像文件,如flv、mpeg-2,mpeg-4,mp4,mov,以及符合H.26x标准的视频格式文件。
在网格计算模型中,通常把要计算的数据以任务的形式划分为一个个子任务,网格中的转码服务器实时的来获取任务并执行。
上述源文件服务器对视频源文件进行逻辑分块,将源文件划分为固定大小的任务块。如何把待转码文件划分成若干个待转码数据块是整个系统的关键性设计之一。在本发明的一个优选的实施方式中,按照待转码文件的数据单元来划分,使得每个数据单元的大小不超过阈值Th1,优选地,该阈值为2M,即2兆字节,根据不同硬件设备的处理能力,该阈值Th1可以是其它的值,例如1M,4M,8M,16M等等。一个示意性而非限定性的例子中,对于flv文件格式的文件,其由文件头和文件体组成,而文件体包含多个数据单元(tag),对其进行逻辑分块时,按照flv文件数据单元(tag)来划分,在划分的过程中当一个tag跨越了2M字节,则认为在此tag之前的数据为一个待转换任务块,此tag为下一个任务块的起点。任务块划分完后,分块和分块信息传输到任务数据库中。
上述任务数据库用于存储源文件服务器发送过来的分块和分块信息。划分好子任务(即任务块)后将分块和分块信息存储于任务数据库服务器中。
转码服务器群由多个转码服务器组成,具有分布式结构,用于实时向任务数据库发出获取任务的请求,以从任务数据库中获取任务,任务数据库根据转码服务器群获取任务的请求,向转码服务器群发送具体的任务,转码服务器群根据该任务从源文件服务器中获取待转码的源文件,并执行转码处理。网格中的转码服务器根据处理能力实时获取任务,该处理能力为转码服务器的运算能力,在可选的实施方式中,处理能力为转码服务器的处理器的运算频率,或者处理器的核数。优选地,转码服务器的CPU核数越多能力就越大,因为其反映了转码服务器处理并发任务的能力,即有多少个任务能同时在一个处理器上执行(task-per-cpu),对于一台4核的服务器而言,其同时可以并发的执行4个任务,以此类推。
进一步,上述数据库服务器为每个已分配出去的任务设定一个超时时间,用于防止某台转码服务器发送故障或异常退出时该任务会被其他的转码服务器获取到。
当一个任务被成功完成时(即转码完成),转码服务器会向数据库服务器通知成功完成的消息,并把该任务上传到目标文件服务器。目标文件服务器用于实时接收转码服务器群发送来的转码后的数据,当文件的所有任务都执行完毕且成功完成,目标文件服务器将此文件合并成目标文件。
任务的失败分为两种情况,第一,转码失败(可能是源文件的问题),第二,转码超时(可能是由于转码服务器故障)。
对于第一种情况,本发明采取的策略是将该任务转发至转码服务器群中的其它转码服务器进行转码,并记录该任务转码失败记录的信息,该失败记录至少包括转码失败的次数,每失败一次,失败的次数增加一次。如果转码失败记录中的转码失败次数超过一定的次数之后,例如超过3次,或5次,则会认为此文件无法被转码并发出转码失败异常。
对于第二种情况,本发明采取的策略是,直接由其他转码服务器来转换,而不记录任务转码失败记录的信息。这种情况下,目标文件服务器合并时,向数据库服务器查询每一块数据由哪台转码服务器转码,因为如果转码服务器和数据库服务器之间的通信链路异常,导致数据库服务器未能正确收到转码服务器的任务成功或失败信息,转码服务器就把任务上传到目标文件服务器,可能会发生数据不一致等异常。
一个可选地例子中,源文件将根据预先定义的策略来决定删除或者保留。
如图2所示,附图2为本发明提出的分布式实时转码方法,该方法包括以下步骤:
步骤1,源文件服务器对待转码的文件进行任务划分,得到分块和分块信息。在本发明的一个优选的实施方式中,按照待转码文件的数据单元来划分,使得每个数据单元的大小不超过阈值Th1,优选地,该阈值为2M,即2兆字节,根据不同硬件设备的处理能力,该阈值Th1可以是其它的值,例如1M,4M,8M,16M等等。一个示意性而非限定性的例子中,对于flv文件格式的文件,其由文件头和文件体组成,而文件体包含多个数据单元(tag),对其进行逻辑分块时,按照flv文件数据单元(tag)来划分,在划分的过程中当一个tag跨越了2M字节,则认为在此tag之前的数据为一个待转换任务块,此tag为下一个任务块的起点。任务块划分完后,分块和分块信息传输到任务数据库中。
步骤2,数据库服务器(即任务数据库)存储分块和分块信息。
步骤3,分布式转码服务器群实时向数据库服务器发出获取任务的请求;
步骤4,数据库服务器相分布式转码服务器群发送任务信息。
步骤5,分布式转码服务器群执行转码操作,并向数据库服务器反馈转码完成情况。
步骤6,分布式转码服务器群将以成功转码的数据块发送到目标文件服务器。
步骤7,数据库服务器向目标文件服务器提供分块信息,当文件的所有任务都执行完毕且成功完成,目标文件服务器根据分块信息将此文件合并成目标文件。
在上述步骤4中,任务数据库根据转码服务器群获取任务的请求,向转码服务器群发送具体的任务,转码服务器群根据该任务从源文件服务器中获取待转码的源文件,并执行转码处理。网格中的转码服务器根据处理能力实时获取任务,该处理能力为转码服务器的运算能力,在可选的实施方式中,处理能力为转码服务器的处理器的运算频率,或者处理器的核数。优选地,转码服务器的CPU核数越多能力就越大,因为其反映了转码服务器处理并发任务的能力,即有多少个任务能同时在一个处理器上执行(task-per-cpu),对于一台4核的服务器而言,其同时可以并发的执行4个任务,以此类推。
进一步,上述数据库服务器为每个已分配出去的任务设定一个超时时间,用于防止某台转码服务器发送故障或异常退出时该任务会被其他的转码服务器获取到。
在本发明的分布式实时转码系统和方法中,所述的任务可以由一定格式的数据形式来描述,该格式中,至少包括三大部分:1,header信息;2,data信息;3,url信息。在发明人所实施的一个优选的实施方式中,任务格式包括一下字段:Fileid,用于标识一个待转换文件,也就是文件的MD5值;Blockid,用于标识待转换文件的块id ,Header_range,用于标识文件头的范围,Data_range,用于标识具体块的数据范围,Source_server_endpoint,用于标识源服务器地址;Destination_server_endpoint,用于标识目标服务器地址。获取上述信息后转码服务器就可以利用源服务器地址、文件标识、文件头和数据区间获取转码前的数据,待转码完毕后可以利用fileid和blockid通知数据库服务器此文件的此块数据已转码完毕,同时利用目标服务器地址上传已完成的数据。
上述任务在数据库可以采用以下存储格式,该存储格式中包括:Fileid,作为文件标识;Blockid,作为块标识;Data_begin,作为块结束位置;Fileid 文件标识;Header_begin,用于标识文件头的起始位置;Header_end,用于标识文件头的结束位置;Source_server_endpoint,用于标识源服务器地址;Destination_server_endpoint用于标识目标服务器地址;State,作为任务状态;Fail_count用于记录转码失败次数。上述任务状态包括四种状态,分别是:1,未转码;2,转码中;3,转码超时;4,转码失败。
有了上述信息数据库服务器就可以在转码服务器请求任务时分配其任务、目标文件服务器查询之时返回其当前所有块的转码状态。
图3为本发明的一个示意性的实施例。其示意了flv转mp4格式的步骤。首先,对待转码的多个flv文件进行数据块划分;文件1被划分为tag(50-607)、tag(608-807)……等多个文件;文件2被划分为tag(36-307)、tag(308-307)……等多个文件;数据块划分完毕后,分布式转码服务器群对这些文件执行并行转码操作,将flv编码格式转换成mp4格式;转码完毕后,每一数据块根据其所属文件进行分类,例如Box<21-69>,Box<70-155>,Box<155-end>属于文件1,其被分到文件1一类中;Box<66-78>,Box<79-150>,Box<151-233>, Box<234-end>属于文件2,其被分到文件2一类中;且都被保存到目标服务器上;待某个文件的所有数据块都转码完毕后,将其进行合并,得到mp4文件。
本系统提供的分布式实时转码方法和系统取得了很好的技术效果。在很大程度上提升了系统的可扩展性、容错性和可维护性,并使文件编码格式的转码时间得到极大的提升。