Mpeg-2单节目传输流多路复用方法

文档序号:7615149阅读:138来源:国知局
专利名称:Mpeg-2单节目传输流多路复用方法
技术领域
本发明属于数字电视数字压缩技术领域,具体涉及一种运动图像压缩编码MPEG-2传输流多路复用的方法。
背景技术
随着数字调制技术和数字压缩技术的发展,在数字电视的传输过程中,为了充分利用频谱资源,通常需要在一个指定带宽的模拟频道内传输多路数字电视节目,为了实现这一目的,在调制之前必须将多路单节目的传输流复用成一个多节目的传输流。
目前,通过硬件实现单节目传输流的多路复用的技术很多,但是用硬件实现传输流的多路复用有如下的两个缺陷一是技术的可移植性差,当脱离了相应的硬件后,多路复用的功能就无法完成;二是成本高,相对于软件来说,用硬件实现多路复用,其开发成本和工作成本都比较大。
我国专利03124004.6“具有高速的以太网入口的MPEG传输流再复用方法及装置”中公开了一种传输流再复用的技术方案。但该发明采用了软硬件相结合的方法,在复用的过程中要通过硬件对节目参考时钟PCR的值要进行修正,但是在软件实现的过程中,无论是通过CPU的主频还是通过计数器的方法来产生一个精确的27MHz的参考时钟是很困难的。

发明内容
本发明的目的是通过软件提供一种MPEG-2单节目传输流多路复用方法,在于克服现有技术所存在的移植性差、成本高的不足之处。
本发明解决问题的技术方案包括节目特殊信息PSI和传输速率收集单元、节目特殊信息PSI的重构和重新映射单元、多路复用单元。首先由节目特殊信息PSI信息和传输速率收集单元将存储设备中参加复用的各路传输流,按照节目关联表PAT-节目映射表PMT-基本流ES这种层次结构来提取出每路传输流的节目关联表PAT、节目映射表PMT和各节目的音、视频的公共包识别符PID信息,并通过对节目参考时钟信息PCR的计算来获得传输速率。其次,节目特殊信息PSI的重构和重新映射是根据复用后的各个节目的公共包识别符PID号互不冲突的原则,按照基本流ES-节目映射表PMT-节目关联表PAT的层次结构来重构PSI表信息,并将各路音、视频的公共包识别符PID和节目参考时钟的公共包识别符PCR_PID进行重新映射,使得解码端能够正确识别复用后传输流中的各个节目并获得正确的时钟信息。在完成上述两个单元操作的基础上,再由多路复用单元按照复用后多节目的传输速率要大于所有参加复用的单节目的传输速率之和的规则,计算出复用后的传输速率,通过插入空包以及将不同节目中的TS包进行重新排列的方法,将各个单节目传输流复用到一路传输流输出,并且不需要改变原始节目流中的节目参考时钟PCR的值。
由于本发明仅通过软件来进行单节目传输流的多路复用,与现有技术相比,只需要一台PC机和相应的软件开发环境就可以实现MPEG-2传输流TS的多路复用,其技术方案的实施更为简单,灵活,效果好。大大降低了开发成本,复用后产生的传输流最大传输速率可达67MB/S,软件的可移植性高,具有良好的推广应用前景。


图1是本发明的系统结构框2是本发明的节目特殊信息PSI和传输速率收集单元的流程3是本发明的节目特殊信息PSI的重构和重新映射单元的公共包识别符PID映射关系示例4是本发明的多路复用单元的总体实现框5是本发明实现多路复用对应步骤[2-3]的流程6是本发明实现多路复用对应步骤[4]的流程7是本发明实现多路复用对应的步骤[5]的流程8是本发明实现多路复用对应的步骤[6]的流程9是本发明实现多路复用对应的步骤[7-8]的流程10是本发明实现多路复用对应的步骤[9-12]的流程11是本发明实现多路复用对应的步骤[9-12]的流程图具体实施方式
下面将结合附图对本发明作进一步的详述参见图1,本发明包括节目特殊信息PSI和传输速率收集、节目特殊信息PSI的重构和重新映射、多路复用三大操作单元。首先将硬盘中或通过计算机的SPI/ASI接收存储到存储设备中的单节目TS流1、单节目TS流2,……单节目TS流n经过节目特殊信息PSI和传输速率收集单元,提取出每路节目的节目信息和传输速率;然后根据这些信息在节目特殊信息PSI的重构和重新映射单元生成多节目的节目信息,与参加复用的各单节目TS流数据再通过多路复用单元复用为一路多节目传输流TS输出。
图2-11示出了本发明的实施例。
如图2所示,本发明对复用的各单节目特殊信息PSI和传输速率进行收集的步骤如下[1]在传输流中寻找公共包识别符PID号为0的传输流TS包,转入PAT处理程序,提取各个节目映射表PMT对应的PID信息;[2]根据节目关联表PAT表中指定的公共包识别符PMT PID号找到与该节目相对应的节目映射表PMT,转入PMT处理程序,提取音、视频的公共包识别符PID,获取节目映射表PMT表的信息,并得到该路节目中的视频基本流、音频基本流和包含节目参考时钟PCR信息所对应的公共包识别符PID,即PCR_PID;[3]转入传输速率提取程序,根据指定的PCR PID找到各个包含节目参考时钟PCR的传输流TS包,提取出节目参考时钟PCR的值;[4]用相邻的两个PCR按照下述传输速率计算公式计算出参加复用的各路传输流TS的传输速率transport_rate(i)=((i′-i′′)×system_clock_frequency)PCR(i′)-PCR(i′′)]]>其中i传输流TS中正在被解码的字节的序号i′ 传输流TS中即将被解码的PCR_base的最后一个字节的序号i″ 传输流TS中最近被解码的PCR_base的最后一位的字节的序号PCR(i′)PCR(i″)编码在PCR_base和PCR_ext字段中的时间,以系统时钟为单位。
在本发明节目特殊信息PSI的重构和重新映射中,无论是单节目传输流还是多节目传输流,都只有一个节目关联表PAT。按照MPEG-2标准,节目关联表PAT必需用公共包识别符PID=0的TS包来传输。由于不同节目的来源不同,因此每个节目的节目映射表PMT所对应的公共包识别符PID号有可能是一样的,如果不作处理,直接将其公共包识别符PID号映射到新的PAT表中,就会造成公共包识别符PID的冲突;进而导致解码端无法正确识别各个节目对应的PMT信息,也就无法获得相应节目正确的音、视频公共包识别符PID号,从而无法正确解码。因此,在重构节目关联表PAT时,要进行节目映射表PMT的公共包识别符PID的重映射,防止不同节目的节目映射表PMT的公共包识别符PID号冲突。可以将参加复用的各个传输流TS的节目映射表PMT的公共包识别符PID号修改成事先定义好的不冲突的值,也可以修改发生冲突的公共包识别符PID号,而对没有发生冲突的公共包识别符PID号不进行修改。对于软件实现来说,将各个节目的公共包识别符PID号修改为自定义的值更加简单,也容易实现。
如图3所示,本发明进行节目特殊信息PSI的重构和重新映射操作步骤如下[1]对参加复用的各个节目的节目映射表PMT中的视频PID号、音频PID号和数据的PID号以及节目参考时钟的公共包识别符PCR PID按照互不冲突的原则,分别采用自定义的值进行重新映射;并将用32位循环冗余校验CRC算法生成的校验码,放置在节目关联表PMT尾部4字节的循环冗余校验CRC域,得到重构后的PMT表;如在图3中,将节目1,节目2,……节目n的视频VIDEO重新映射,节目1的VIDEO PID=b映射为PID=0X10+5*1+1,节目2的VIDEO PID=f映射为PID=0X10+5*2+1,……节目n的VIDEO PID=b映射为PID=0X10+5*n+1;将节目1,节目2,……节目n的音频AUDIO重新映射,节目1的AUDIO PID=c映射为PID=0X10+5*1+2,节目2的AUDIO PID=c映射为PID=0X10+5*2+2,……节目n的AUDIO PID=c映射为PID=0X10+5*n+2;将节目1的PCR_PID,节目2的PCR_PID,……节目n的PCR_PID重新映射,节目1的PCR对应的PID=d映射为PID=0X10+5*1+3,节目2的PCR对应的PID=f映射为PID=0X10+5*2+3,……节目n的PCR对应的PID=b映射为PID=0X10+5*n+3;将节目1的DATA,节目2的DATA,……节目n的DATA重新映射,节目1的DATA所对应的PID=e映射为PID=0X10+5*1+4,节目2的DATA所对应的PID=e映射为PID=0X10+5*2+4,……节目n的DATA所对应的PID=d映射为PID=0X10+5*n+4。
对参加多路复用的各个节目,按照节目映射表PMT所对应的公共包识别符PID值互不冲突的原则,采用自定义的值进行重新映射;并将用32位循环冗余校验CRC算法生成的校验码,放置在节目关联表PAT尾部4字节的循环冗余校验CRC域,得到重构后的PAT表。
节目1的节目映射表PMT PID=a映射为PID=0X10+5*1,节目2的节目映射表PMT PID=a映射为PID=0X10+5*2,……节目n的节目映射表PMT PID=e映射为PTD=0X10+5*n;在完成了前述两个单元的功能之后,需要设定复用后的传输速率。利用传输速率和节目参考时钟PCR之间的关系,在参加复用的传输流TS的节目参考时钟PCR值不改变的情况下,根据复用后所需的码率,利用增大两个相邻节目参考时钟PCR包之间间隔的方法来实现复用的功能;为了保证复用后的多节目传输流TS的信息完整,无数据丢失的现象,通常要求复用后的传输流TS的传输速率要比参加复用的各路单节目的传输流TS的传输速率之和大,也就是要满足下面的关系式transport_rate(mux)>transport_rate(1)+transport_rate(2)+…+transport_rate(n)其中transport_rate(mux)复用后的多节目传输流TS的传输速率transport_rate(i)i=1,2,...n复用前的单节目传输流TS的传输速率在进行多路单节目复用为一路多节目的时候,根据复用后的传输速率和复用前的各个传输流的传输速率的关系,改变两个连续包含节目参考时钟PCR信息的传输流TS包之间的包数,使得新速率和原始的节目参考时钟PCR值能够相互匹配。
结合图4及图5-图11各图所对应的步骤,本发明以两个单节目传输流TS的复用为例,对单节目的传输流进行多路复用的实施例详述如下[1]设置一个输出队列,用以存放或输出复用后的传输流数据,如果要将复用后的数据保存为传输流文件,输出队列就是文件;如果要将复用后的数据通过硬件实时发送出去,输出队列则是缓冲区;[2]读第一个传输流,每读入一个传输流TS包,就判断公共包识别符PID的值,并将该值修改为重新映射后的公共包识别符PID号,然后放置到输出队列中;若为包含节目关联表PAT或是节目映射表PMT的传输流TS包,除了要修改公共包识别符PID号,还要修改表中的内容,最后修改相应的循环冗余校验CRC的值,之后才将这个TS包放置到输出队列中; 当找到第一个传输流中的第一个包含节目参考时钟信息的TS包PCR1-1(这里第一个1表示节目1,第二个1表示第一个PCR),保存此时的PCR1-1的值以及该TS包1-1;[4]读第二个传输流,将不包含节目参考时钟PCR信息的TS包进行如步骤[2]的修改并放置到输出队列,直到找到第二个传输流中的第一个PCR2-1,保存PCR2-1及该TS包2-1;[5]将TS包1-1和TS包2-1放置到输出队列,读第一个传输流,对TS包进行如步骤[2]处理,并对包进行计数,直到找到该传输流中的第二个PCR1-2,将该TS包记为1-2,此时,PCR1-1和PCR1-2之间的包的个数为NUM1,根据设定的复用后的传输流的传输速率、PCR1-1和PCR1-2计算出在TS包1-1和TS包1-2之间应有的TS包的个数,记为NUM1_MUX;[6]读第二个传输流,对TS包进行如步骤[2]的处理,直到找到该传输流中的第二个PCR2-2,记该TS包为2-2,PCR2-2和PCR2-1之间包的个数为NUM2,根据设定的复用后的传输流的传输速率、PCR2-1和PCR2-2计算出在TS包2-1和TS包2-2之间应有的TS包的个数,记为NUM2_MUX;[7]分别计算NUM1_MUX和NUM2_MUX与MUN1+MUN2之间的差值,将这两个差值分别记为SURPLUS1和SURPLUS2,找出两者中较小的一个值,记为SURP,与之对应的节目号记为i,并向输出队列中输出SURP个空包,再将与这个较小值对应的PCRi-2放置到输出队列中;[8]将SURPLUS1、SURPLUS2,NUM1、NUM2和NUM1_MUX、NUM2_MUX分别重新赋值SURPLUS1=SURPLUS1-SURP,SURPLUS2=SURPLUS2-SURP,NUM1=0,NUM2=0,NUM1_MUX=0,NUM2_MUX=0;[9]在步骤[7]中,当与i对应的传输流是节目1时,读第一个传输流,并对NUM1进行计数,将所读到的不包含PCR信息的TS包按步骤[2]处理,放置到输出队列,当NUM1=SURP时,将第二个传输流的第二个包含PCR信息的TS包2_2放置到输出队列;并对SURPLUS1和SURPLUS2清零;[10]对NUM2进行计数;继续读入第一个TS流,将其中不包含PCR信息的TS包按步骤[2]处理,放置到输出队列,直到遇到该路TS流中的第3个PCR包1-3,将该TS包1-3保存下来;[11]由PCR1-3、PCR1-2和设定的复用后的传输码率计算出TS包1-3和TS包1-2中应有的包的个数NUM1_MUX;之后转而读第二个TS流,对其中不包含PCR信息的TS包按步骤[2]处理,当找到第二个TS流的第三个PCR包时,计数值NUM1大于等于NUM1_MUX,就将第一个TS流的TS包1-3放置到输出队列,并对NUM1清零,重新开始计数;如果此时计数值NUM1小于NUM1_MUX,则由PCR2-3、PCR2-2和设定的复用后的传输码率计算出TS包2-3和TS包2-2中应有的包的个数NUM2_MUX;比较NUM1_MUX-NUM1和NUM2_MUX-NUM2,找出其中的较小值赋给SURP,并向输出队列中输出SURP个空包;[12]再将与这个较小值对应的传输流(该节目号重新赋给i)的第3个包含PCR信息的TS包放置到输出队列中,然后令SUEPLUS1=NUM1_MUX-NUM1-SURP,SURPLUS2=NUM2_MUX-NUM2-SURP,NUM1=0,NUM2=0,NUM1_MUX=0,NUM2_MUX=0;[13]重复步骤[9]-[12],直到将两个TS传输流全部输出到输出队列中,这就完成了将两个单节目传输流复用成一个多节目的传输流。
在步骤[9]中,当与i对应的传输流是节目2时,数据的读出复用与上述各步骤相似。为简明扼要地描述单节目的多路复用,本发明仅举了两路节目传输流复用实施例,对于两路以上的多路单节目的复用也是按照上述方法进行。
权利要求
1.一种MPEG-2单节目传输流多路复用方法,通过节目特殊信息PSI和传输速率收集单元、特殊信息PSI的重构和重映射单元以及传输流TS的多路复用单元的操作,将多路单节目TS传输流复用成一个多节目的TS传输流输出;首先,由节目特殊信息PSI和传输速率收集单元对参加复用的各单节目信息进行收集,按照节目关联表PAT-节目映射表PMT-基本流ES的层次结构提取出每路传输流的节目关联表PAT、节目映射表PMT和音、视频的公共包识别符PID信息,并通过节目参考时钟信息PCR获得传输码率;其次,由节目特殊信息PSI的重构和重新映射单元,按照基本流ES-节目映射表PMT-节目关联表PAT的层次结构重构PSI信息,将各路音、视频的公共包识别符PID和节目参考时钟的公共包识别符PCR_PID以及数据的公共包识别符PID进行重映射;再由多路复用单元算出复用后的传输速率,通过插入空包以及将不同节目中的TS包进行重新排列而不改变原始单节目流中的节目参考时钟PCR值的方法,将各个单节目传输流复用为一路传输流输出。
2.根据权利要求1所述的单节目传输流多路复用方法,其特征在于对参加复用的各单节目的特殊信息PSI和传输速率进行收集的步骤如下[1]在传输流TS中寻找公共包识别符PID号为0的TS包,获取节目关联表PAT的信息;[2]根据节目关联表PAT表中指定的公共包识别符PMT_PID号找到与该节目相对应的节目映射表PMT表,提取音、视频的公共识别符PID,获取节目映射表PMT表的信息,并得到该路节目中的视频基本流、音频基本流和节目参考时钟信息PCR包所对应的PID号;[3]根据指定的节目参考时钟的公共包识别符PCR_PID找到各个包含PCR信息的TS包,提取出PCR的值;[4]用两相邻的PCR值计算参加复用的各路TS流的传输速率。
3.根据权利要求1所述的单节目传输流多路复用方法,其特征在于进行节目特殊信息PSI重构和重新映射的步骤如下[1]对参加复用的各个节目的节目映射表PMT中的视频PID号、音频PID号和数据的PID号和节目参考时钟的公共包识别符PCR_PID按照互不冲突的原则,分别采用自定义的值进行重新映射;并将用32位循环冗余校验CRC算法生成的校验码,放置在节目关联表PMT尾部4字节的循环冗余校验CRC域,得到重构后的PMT表;[2]对参加多路复用的各个节目,按照节目映射表PMT所对应的公共包识别符PID值互不冲突的原则,采用自定义的值进行重新映射;并将用32位循环冗余校验CRC算法生成的校验码,放置在节目关联表PAT尾部4字节的循环冗余校验CRC域,得到重构后的PAT表。
4.根据权利要求1所述的单节目传输流多路复用方法,其特征在于将多路单节目传输流复用成一路多节目传输流的步骤如下[1]根据复用后节目的TS传输流的传输速率大于复用前各单节目TS传输流的传输速率之和的规则,设定复用后的传输速率;[2]设置一个输出队列,用于存放传输复用后的TS传输流数据;[3]依次读第一、第二个传输流,每读入一个传输流TS包,就判断公共包识别符PID的值,并将该值修改为重新映射后的公共包识别符PID号,放置到输出队列中;若为包含节目关联表PAT或是节目映射表PMT的传输流TS包,除了要修改公共包识别符PID号,还要修改PAT或PMT表中的内容及修改相应的循环冗余校验CRC的值,之后将这个TS包放置到输出队列中;[4]寻找各TS传输流中包含PCR的TS包,将找到的各TS流中第一个包含PCR信息的TS包保存,将不包含PCR信息的TS包按步骤[3]处理后放到输出队列;[5]再依次读第一、第二个TS传输流,并分别用NUM1、NUM2对TS包计数,将不包含PCR信息的TS包放置到输出队列,当找到每个节目中的第二个包含PCR信息的TS包时,将该包含PCR信息的TS包保存,用设定的复用后的TS流的传输速率、各相邻的两个PCR计算出应有的TS包数,分别用NUM1_MUX、NUM2_MUX表示;[6]分别计算NUM1_MUX、NUM2_MUX与NUM1+NUM2之差值,将这两个差值分别记为SURPLUS1、SURPLUS2,将其中较小的一个值,记为SURP,与之对应的节目号记为i,并向输出队列输出SURP个空包,再将与这个较小值对应的PCRi-2放置到输出队列中;[7]将SURPLUS1、SURPLUS2,NUM1、NUM2和NUM1_MUX、NUM2_MUX分别重新赋值,SURPLUS1=SURPLUS1-SURP,SURPLUS2=SURPLUS2-SURP,NUM1=0,NUM2=0,NUM1_MUX=0,NUM2_MUX=0;[8]当i对应的TS流为第一个节目,读第一个节目,并对NUM1进行计数,将所读到的不包含PCR信息的TS包按步骤[3]处理,放置到输出队列,当NUM1=SURP时,将第二个节目的第二个包含PCR信息的TS包2_2放置到输出队列;并对SURPLUS1和SURPLUS2清零;[9]对NUM2进行计数,继续读入第一个TS流,将其中不包含PCR信息的TS包按步骤[3]处理,放置到输出队列,直到找到第一个TS流中的第3个PCR包1-3,将该TS包1-3保存下来;[10]由PCR1-3、PCR1-2和设定的复用后的传输码率计算出TS包1-3和TS包1-2中应有的包的个数NUM1_MUX;之后转读第二个TS流,对其中不包含PCR信息的TS包按步骤[3]处理,当找到第二个TS流的第三个PCR包之前,计数值NUM1已经等于NUM1_MUX,就将第一个TS流的TS包1-3放置到输出队列,并对NUM1清零,重新开始计数;当计数值NUM1小于NUM1_MUX时已找到第二个TS流中的第三个PCR包2-3,由PCR2-3、PCR2-2和设定的复用后的传输码率计算出TS包2-3和TS包2-2中应有的包的个数NUM2_MUX;比较NUM1_MUX-NUM1和NUM2_MUX-NUM2,找出其中的较小值赋给SURP,并向输出队列中输出SURP个空包;[11]再将与这个较小值对应的节目(该节目号重新赋给i)的第3个包含PCR信息的TS包放置到输出队列中,然后令SUEPLUS1=NUM1_MUX-NUM1-SURP,SURPLUS2=NUM2_MUX-NUM2-SURP,NUM1=0,NUM2=0,NUM1_MUX=0,NUM2_MUX=0;[12]重复步骤[8]-[11],直到将两个节目的TS传输流全部输出到输出队列中。
全文摘要
一种MPEG-2单节目传输流多路复用方法,用软件将多路单节目TS传输流复用成一个多节目的TS传输流输出,首先节目特殊信息PSI和传输速率收集单元对参加复用的各路信号预处理,按照节目关联表PAT-节目映射表PMT-基本流ES的层次提取每路TS流的PAT表、PMT表和ES的公共包识别符PID信息并获得传输码率;其次节目特殊信息PSI的重构和重新映射单元重构PSI信息,将各路音、视频PID和节目参考时钟的公共包识别符PCR_PID进行重映射,使解码端能正确识别复用后传输流中的各个节目并获得正确的时钟信息;再由多路复用单元算出复用后的传输速率,通过插入空包并将不同节目的TS包重新排列而不改变原始节目流PCR值的方法,将各个单节目传输流复用为一路传输流输出。
文档编号H04N7/26GK1684524SQ20051004180
公开日2005年10月19日 申请日期2005年3月16日 优先权日2005年3月16日
发明者李兵兵, 王莎莎, 杨秀莲, 蔚述明, 李乐乐, 黄新平 申请人:西安电子科技大学
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1