一种基于带宽占用率的多节目恒码率ts流复用算法的制作方法

文档序号:7757434阅读:210来源:国知局
专利名称:一种基于带宽占用率的多节目恒码率ts流复用算法的制作方法
技术领域
本发明属于数字电视节目传输技术领域,特别涉及数字电视节目的单节目流复用 为多节目流的算法。
背景技术
目前的TS流复用算法一般采用统计复用的方法。对统计复用算法,统计复用算法是根据编码器压缩所需要的码率与图像内容之间 的关系,固定复用器输出总码率的情况下,对多个视、音频流进行联合控制,达到多视、音频 流尽量合理的共享总码率。它必须是编码器与复用器联合工作,且编码器必须具有动态码 率控制的功能。在目前的统计复用技术中,因为复用需要编码器的配合,对于一些输入的单节目 已经是编码后数据的情况来讲,并不适合;在这种情况下,如果采用统计复用的方法,加入 解码器和编码器对输入节目进行二次编码,必然会降低节目的质量。

发明内容
在本发明中,提供了一种直接把多个编码后的单节目TS流复用为多节目TS流的 方法,避免使用编码器,保持了图像质量。一种基于带宽占用率的多节目恒码率TS流复用算法,其特征为,按照输出带宽计 算节目当前时间参考PCR,保证输出带宽的稳定性;根据所需要复用数据在总带宽中的比 率进行音、视频复用,保证了各路节目均勻插入;使多个编码后的单节目TS流复用为多节 目TS流的方法,并且在复用过程中避免使用编码器。进一步,所述算法包括下列步骤1)计算节目当前时间参考PCR ;2)从SPTS文件中读取数据,并判断该数据是否是文件的结尾;如果判断结果为 “否”则进入步骤3);如果判断结果为“是”则完成整个算法;3)对是否要复用PAT表进行判断,如果判断结果为“否”则进入步骤4);如判断结 果为“是”则复用PAT表并返回步骤1);4)对是否要复用PMT表进行判断;如果判断结果为“否”则进入步骤5);如判断结 果为“是”则复用PMT表并返回步骤1);5)判断在音频列表中是否有需要复用的PID的音频数据,如果判断结果为“否”则 进入步骤6);如判断结果为“是”则复用具有该PID的音频数据返回步骤1);6)判断在视频列表中是否有需要复用的PID的视频数据,如果判断结果为“否”则 复用空包;如判断结果为“是”则复用具有该PID的视频数据返回步骤1);直到步骤2)中的判断结果为“是”则完成整个算法。进一步,所述的PCR的计算方法为PCR⑴=PCR(0)+(total_bytes_sent+10)*8)/total_bit_rate
其中PCR(i)是要是插入的PCR的值;PCR(O)是开始复用时27M时钟的计数,一般设置为0 ;total_bytes_sent是从开始复用到当前MPTS中已经复用的TS的字节总数;10是PCR最后一位在调整字段中的位置;total_bit_rate是我们设置的MPTS输出的总码率;8是把字节转换成位。进一步,通过使用的PSI/SI表格插入模块来判断步骤3)和4),并得出是否需要复 用PAT或PMT表的结论。进一步,步骤5)和6)中所述的音频或视频的复用总的原则是根据该每帧音频或 视频本身的码率在MPTS的总码率中所占的比率进行复用某一 PID音频或视频的该帧码率占总码率的比率的计算公式为Ratio_rate (pid) = bit_rate(pid)/total_bit_rate其中bit_rate (pid)为指定PID当前参与复用帧的码率;该PID已经复用的数据占已MPTS已经复用的总数据的比率的计算公式为Ratio_sent (pid) = Bytes_send(pid)/total_bytes_sent其中所述Bytes_send(pid)为该PID已经复用的字节数,total_bytes_sent为 MPTS已经复用的总字节数;如果Ratio_Sent(pid)大于等于Rati0_rate(pid),就停止复用 该PID的数据。进一步,在将所述视频进行复用时,需判断各个PID音频之间的优先级关系,并首 先复用最渴望被复用的视频。进一步,如果所述视频中的一部分为变码率,即VBR,同时多个PID的视频满足Ratio_sent(pid) < Ratio_rate (pid)也就是多个PID的视频需要被复用,则需要找出最渴望被复用PID视频;需要被复 用的PID视频的渴望度算法如下Desiration (pid) = Ratio_sent(pid)/Ratio_rate(pid)Desiration (pid)值越小,表明越渴望被复用;每次取出该值最小的PID做为本次 复用的PID。进一步,需要对所述变码率视频的每帧或几帧数据重新计算一次瞬时的码率。进一步,所述一帧变码率视频数据瞬时码率的计算公式为Temp—bitrate(pid) =ts_bytes_current_frame(pid)氺8/duration_current_fra me (pid)其中ts_bytes_current_frame (pid)为该 PID 当前帧所有 TS 包的字节数;duration_current_frame (pid)为该帧数据在 MPTS 中的时间长度。进一步,在变码率的情况下,所述duration_current_frame (pid)的计算公式为duration_current_frame (pid) = DTS_next (pid)-current_pcr_Video_ Distance(DTS-PCR)其中
DTS_next (pid)为当前要发送帧的下一帧的DTS ;current_pcr 为复用时刻的 PCR ;Video_Distance (DTS-PCR)为最初设置的DTS和PCR之间的间隔。


图1为本发明所公开的复用算法的流程图。
具体实施例方式如图1所示,本发明中所公开的算法包括以下步骤计算节目当前时间参考PCR, 然后从SPTS文件中读取数据,读取数据后,首先判断该数据是否是文件的结尾,如果不是, 则需要对其是否要复用PAT表进行判断,如果判断结果为“是”,则复用PAT表并返回到计 算当前PCR步骤;如果判断结果为“否”,则继续判断其是否需要复用PMT表格,如果判断结 果为“是”,则复用PMT表并返回到计算当前PCR步骤;如果判断结果为“否”,则继续判断在 音频列表中是否有需要复用的PID,如果判断结果为“是”,则复用该PID的音频数据并返回 到计算当前PCR步骤,如果判断结果为“否”,则继续判断在视频列表中是否有需要复用的 PID,如果判断结果为“是”,则复用该PID的视频数据并返回到计算当前PCR步骤,如果判断 结果为“否”,则复用空包,并返回到程序初始的计算当前PCR步骤,在随后的判断是否“已 经读到文件结尾了吗”的步骤中,得到的结果为“是”,完成整个算法。在上述的算法中的相关参数的计算方法如下首先,通过下面的PCR计算模块,计算每一时间的PCR的值在多节目复用时,一般把输出的MPTS的带宽设置为固定带宽。这样每一时间的 PCR的值可以通过如下公式计算PCR(i) = PCR(0) + (total_bytes_sent+10)*8)/total_bit_rate其中PCR(i)是要是插入的PCR的值。PCR(O)是开始复用时27M时钟的计数,一般可以设置0。total_bytes_sent是从开始复用到当前MPTS中已经复用的TS的字节总数。10是PCR最后一位在调整字段中的位置。total_bit_rate是我们设置的MPTS输出的总码率。8是把字节转换成位(下同)下一步,使用下面的PSI/SI表格插入模块来判断是否需要复用PAT或PMT表在DVB标准中,不同的表格规定了不同的发送间隔。我们可以根据当前TS包的时 间进行发送间隔的控制。用当前包的时间减去上次发送表格时TS包的时间,如果这个时间 间隔大于我们指定的间隔(这个间隔一般取小于表格要求的发送间隔),就发送一次表格。 如DVB规定PAT表每500ms发送一次,我们可以设置发送间隔为400ms。然后,使用DTS/PTS计算模块作为时间判断的基准DTS/PTS描述了 ES流的解码时间和显示时间,对于视频而言,根据IBP帧类型不 同而不同,I帧的DTS(解码时间戳)和PTS(显示时间戳)一般和PTS相同或早于PTS,P 帧的DTS —般早于PTS,而B帧中一般只有PTS,它的DTS和PTS相同。对于音频而言,只有PTS,表示DTS和PTS相同。对DTS而言,如果它的值相对于PCR太早,就会造成缓冲区的上溢,如果太晚,等于 或小于了系统时钟,就会造成下溢,所以在DTS和PCR之间选择一个合适的差值是一个非常 关键的问题。对于视频而言,在每个ES的图像头中有一个vbv_delay,它用来设置解码器的 缓冲区,以避免解码器缓冲区上溢或下溢。一般我们取这个差值为0 < Video_Distance(DTS-PCR) <= vbv_delay每帧视频数据vbv_delay值一般为700ms左右,也可能是一个不断变化的值。对于音频,根据实验情况,一般取0 < Audio_Distance (DTS-PCR) <= 90ms注意,在上面的公式中,DTS需要除以90K转换成时间值。下面使用到DTS的地方 做相同的处理。最后,根据DTS/PTS计算模块中的描述,结合使用下面的视音频交织模块来判断 音频和视频列表中是否有需要复用的PID。对于各个节目流,需要先对音视频进行分离。节目流交织复用总的原则是根据该每帧音频或视频本身的码率在MPTS的总码率 中所占的比率进行复用,某一 PID音频或视频的该帧码率占总码率的比率的计算公式为Ratio_rate (pid) = bit_rate(pid)/total_bit_rate其中bit_rate (pid为指定PID当前参与复用帧的码率。该PID已经复用的数据占已MPTS已经复用的总数据的比率的计算公式为Ratio_sent (pid) = Bytes_send(pid)/total_bytes_sent其中Bytes_send(pid)为该 PID 已经复用的字节数,total_bytes_sent 为 MPTS 已 经复用的总字节数。如果Ratio_sent (pid)大于等于Rati0_rate (pid),就停止复用该PID 的数据。音频在复用过程中,要优先对所有SPTS的音频进行复用,这是因为音频是恒码率。它 的DTS值需要和PCR基本保持平行。音频的缓冲区较小,对数据波动要求较视频更严格。另外,因为相对于视频而言,音频占的比例太小,所以各SPTS的音频进行复用时 不用考虑之间的优先级。视频如果所有SPTS的视频都是恒码率,可以和音频一样不考虑相互之间的优先级问 题。如果有视频为变码率(VBR),并且,同时多个PID的视频满足Ratio_sent(pid) < Ratio_rate (pid)也是就多个PID的视频需要被复用,这时就需要对这些需要被复用的视频进行优 先级的排队,找出最渴望被复用的那个PID的视频来,最先复用。需要被复用的PID视频的 渴望度算法如下Desiration (pid) = Ratio_sent(pid)/Ratio_rate(pid)Desiration (pid)值越小,表明越渴望被复用。我们每次取出该值最小的PID做为 本次复用的PID。
对于变码率的视频而言,需要每帧或几帧(如一个G0P)数据重新计算一次瞬 时的码率,以一帧数据为例,瞬时码率的计算公式为Temp_bitrate(pid) = ts_bytes_ current—frame(pid)氺8/duration—current—frame(pid)其中ts_bytes_current_frame (pid)为该PID当前帧所有TS包的字节数, duration_current_frame (pid)为该帧数据在MPTS中的时间长度,考虑到变码率的情况 下,上一帧数据有可能占用下一帧数据的空间,duratiorucurrentframe (pid)不应该直接 取两帧数据的DTS之间的间隔,计算公式为duration_current_frame (pid) = DTS_next (pid)-current_pcr_Video_ Distance(DTS-PCR)DTS_next (pid)为当前要发送帧的下一帧的DTS,current_pcr为复用时刻的PCR。 Video_Distance (DTS-PCR)为我们最初设置的DTS和PCR之间的间隔。本发明基于对已经编码的视频音频数据进行复用,保证了原视频音频的质量没有 损失,同时也降低了系统的实现复杂度。和现有的复用算法相比,本发明在计算PCR时,不是根据复用设备的系统时钟,而 是严格按照输出带宽进行计算,保证了输出带宽的稳定性;在进行音视频复用时,根据每帧 或几帧数据在总带宽中的比率进行复用,保证了各路节目均勻插入,并且在复用过程中不 必使用编码器。对于PCR的使用,在复用时可以每个节目使用单独的PCR,也可以多个节目共用 PCR。通过下表可以明显的看出本发明与现有技术之间的区别
权利要求
一种基于带宽占用率的多节目恒码率TS流复用算法,其特征为按照输出带宽计算节目当前时间参考PCR,保证输出带宽的稳定性;根据所需要复用数据在总带宽中的比率进行音、视频复用,保证了各路节目均匀插入;使多个编码后的单节目TS流复用为多节目TS流的方法,并且在复用过程中避免使用编码器。
2.根据权利要求1中所述算法,其特征为包括下列步骤1)计算节目当前时间参考PCR;2)从SPTS文件中读取数据,并判断该数据是否是文件的结尾;如果判断结果为“否”则 进入步骤3);如果判断结果为“是”则完成整个算法;3)对是否要复用PAT表进行判断,如果判断结果为“否”则进入步骤4);如判断结果为 “是”则复用PAT表并返回步骤1);4)对是否要复用PMT表进行判断;如果判断结果为“否”则进入步骤5);如判断结果为 “是”则复用PMT表并返回步骤1);5)判断在音频列表中是否有需要复用的PID的音频数据,如果判断结果为“否”则进入 步骤6);如判断结果为“是”则复用具有该PID的音频数据返回步骤1);6)判断在视频列表中是否有需要复用的PID的视频数据,如果判断结果为“否”则复用 空包;如判断结果为“是”则复用具有该PID的视频数据返回步骤1);直到步骤2)中的判断结果为“是”则完成整个算法。
3.如权利要求1中所述算法,其特征为所述的PCR的计算方法为 PCR⑴=PCR(0)+(total_bytes_sent+10)*8)/total_bit_rate 其中PCR⑴是要插入的PCR的值;PCR(O)是开始复用时27M时钟的计数,一般可以设置0 ; total_bytes_sent是从开始复用到当前MPTS中已经复用的TS的字节总数; 10是PCR最后一位在调整字段中的位置; total_bit_rate是我们设置的MPTS输出的总码率; 8是把字节转换成位。
4.如权利要求2中所述算法,其特征为通过使用的PSI/SI表格插入模块来判断步骤 3)和4),并得出是否需要复用PAT或PMT表的结论。
5.如权利要求2中所述算法,其特征为步骤5)和6)中所述的音频或视频的复用总 的原则是根据该每帧音频或视频本身的码率在MPTS的总码率中所占的比率进行复用某一 PID音频或视频的该帧码率占总码率的比率的计算公式为 Ratio_rate(ρid) = bit_rate(pid)/total_bit_rate 其中bit_rate (pid为指定PID当前参与复用帧的码率; 该PID已经复用的数据占已MPTS已经复用的总数据的比率的计算公式为 Ratio_sent(pid) = Bytes_send(pid)/total_bytes_sent其中所述Bytes_send(pid)为该PID已经复用的字节数,total_bytes_sent为MPTS已 经复用的总字节数;如果Ratio_sent (pid)大于等于Rati0_rate (pid),就停止复用该PID 的数据。
6.根据权利要求1中所述算法,其特征为在将所述视频进行复用时,需判断各个PID音频之间的优先级关系,并首先复用最渴望被复用的视频。
7.根据权利要求6中所述算法,其特征为如果所述视频中的一部分为变码率,即VBR, 同时多个PID的视频满足Ratio_sent (pid) < Ratio—rate (pid)也就是多个PID的视频需要被复用,则需要找出最渴望被复用PID视频;需要被复用的 PID视频的渴望度算法如下Desiration(pid) = Ratio_sent(pid)/Ratio_rate(pid)Desiration(pid)值越小,表明越渴望被复用;每次取出该值最小的PID作为本次复用 的 PID。
8.根据权利要求7中所述算法,其特征为需要对所述变码率视频的每帧或几帧数据 重新计算一次瞬时的码率。
9.根据权利要求8中所述算法,其特征为所述一帧变码率视频数据瞬时码率的计算 公式为Temp_bitrate (pid) = ts_bytes_current_frame(pid)*8/duration_current_ frame (pid)其中ts_bytes_current_frame (pid)为该PID当前帧所有TS包的字节数; duration_current_frame (pid)为该帧数据在MPTS中的时间长度。
10.根据权利要求9中所述算法,其特征为在变码率的情况下,所述duratioru current_frame (pid)的计算公式为duration_current_frame (pid) = DTS_next(pid)-current_pcr-Video_ Distance(DTS-PCR) 其中DTS_next(pid)为当前要发送帧的下一帧的DTS ; current_pcr为复用时刻的PCR ;Video_Distance (DTS-PCR)为最初设置的DTS和PCR之间的间隔。
全文摘要
一种基于带宽占用率的多节目恒码率TS流复用算法,严格按照输出带宽计算节目当前时间参考PCR,保证输出带宽的稳定性;根据所需要复用数据在总带宽中的比率进行音、视频复用,保证了各路节目均匀插入;使多个编码后的单节目TS流复用为多节目TS流的方法,并且在复用过程中避免使用编码器。
文档编号H04N7/24GK101945265SQ20101025816
公开日2011年1月12日 申请日期2010年8月19日 优先权日2010年8月19日
发明者李国华, 武爱敏, 郭忠武 申请人:北京市博汇科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1