发明内容
本发明要解决的技术问题是提供一种多节目传送流分离的方法及装置,能够分离出多个节目,并且保持每个节目传送流的完整性。
为解决上述技术问题,本发明的实施例提供技术方案如下:
一方面,提供一种多节目传送流分离的方法,包括:
接收传送流TS,所述TS中包含有至少一个节目的信息;
从所述TS中获取每个节目对应的传输包标志码PID,并存储PID与每个节目之间的对应关系;
根据所述对应关系对所述TS中的数据包进行分离,获取每个节目对应的独立TS,所述独立TS存储在节目对应的缓冲区中,包括节目对应的音频数据包、视频数据包、节目时钟基准PCR、节目关联表PAT和节目映射表PMT。
其中,所述从所述TS中获取每个节目对应的PID包括:
对所述TS中的PAT进行分析,根据所述PAT中的PMT PID获取每个节目对应的PMT;
对每个节目对应的PMT进行分析,获取每个节目对应的PCR PID、视频数据包PID和音频数据包PID。
其中,所述根据所述对应关系对所述TS中的数据包进行分离之前包括:
重构每个节目对应的PAT;
在n个节目的PMT PID一致时,为所述n个节目重构PMT。
其中,所述根据所述对应关系对所述TS中的数据包进行分离,获取每个节目对应的独立TS包括:
将所述TS中的数据包的PID与所述对应关系中存储的PID进行逐一匹配;
根据匹配结果,将所述数据包或重构的PAT和PMT存储到数据包的PID对应的节目的缓冲区中。
其中,所述根据匹配结果,将所述数据包或重构的PAT和PMT存储到数据包的PID对应的节目的缓冲区中包括:
当所述数据包的PID为PAT PID时,将重构的PAT存储到数据包的PID对应的节目的缓冲区中;
当所述数据包的PID为n个节目对应的PMT PID时,将重构的PMT存储到所述n个节目的缓冲区中;
当所述数据包的PID仅为1个节目对应的PMT PID时,将所述数据包存储到所述节目的缓冲区中;
当所述PID为PCR PID时,将所述数据包存储到数据包的PID对应的节目的缓冲区中;
当所述PID为视频数据包PID或音频数据包PID时,将所述数据包存储到数据包的PID对应的节目的缓冲区中。
本发明实施例还提供了一种多节目传送流分离的装置,包括:
接收模块,用于接收传送流TS,所述TS中包含有至少一个节目的信息;
存储模块,用于从所述TS中获取每个节目对应的传输包标志码PID,并存储PID与每个节目之间的对应关系;
分离模块,用于根据所述对应关系对所述TS中的数据包进行分离,获取每个节目对应的独立TS,所述独立TS存储在节目对应的缓冲区中,包括节目对应的音频数据包、视频数据包、节目时钟基准PCR、节目关联表PAT和节目映射表PMT。
其中,所述存储模块具体用于对所述TS中的PAT进行分析,根据所述PAT中的PMT PID获取每个节目对应的PMT;对每个节目对应的PMT进行分析,获取每个节目对应的PCR PID、视频数据包PID和音频数据包PID。
其中,所述装置还包括:
重构模块,用于重构每个节目对应的PAT;在n个节目的PMT PID一致时,为所述n个节目重构PMT。
其中,所述分离模块包括:
匹配子模块,用于将所述TS中的数据包的PID与所述对应关系中存储的PID进行逐一匹配;
存储子模块,用于根据匹配结果,将所述数据包或重构的PAT和PMT存储到数据包的PID对应的节目的缓冲区中。
其中,所述存储子模块具体用于当所述数据包的PID为PAT PID时,将重构的PAT存储到数据包的PID对应的节目的缓冲区中;
当所述数据包的PID为n个节目对应的PMT PID时,将重构的PMT存储到所述n个节目的缓冲区中;
当所述数据包的PID仅为1个节目对应的PMT PID时,将所述数据包存储到所述节目的缓冲区中;
当所述PID为PCR PID时,将所述数据包存储到数据包的PID对应的节目的缓冲区中;
当所述PID为视频数据包PID或音频数据包PID时,将所述数据包存储到数据包的PID对应的节目的缓冲区中。
本发明的实施例具有以下有益效果:
上述方案中,从输入的TS中获取每个节目对应的PID,并存储PID与每个节目之间的对应关系;之后根据该对应关系对TS中的数据包进行分离,获取每个节目对应的独立TS,每个节目对应的独立TS中包括节目对应的音频数据包、视频数据包、节目时钟基准、节目关联表和节目映射表。本发明实施例不但能够高效的分离出各个需要的节目,而且分离出的每个节目是信息完备的TS流,适合于所有支持TS流播放的设备。
具体实施方式
为使本发明的实施例要解决的技术问题、技术方案和优点更加清楚,下面将结合附图及具体实施例进行详细描述。
本发明的实施例针对现有技术中STB和便携多媒体播放设备从多节目TS中分离出的节目不是信息完整的TS的问题,提供一种多节目传送流分离的方法及装置,能够分离出多个节目,并且保持每个节目传送流的完整性。
图1为本发明实施例的多节目传送流分离的方法的流程示意图,如图1所示,本实施例包括:
步骤101:接收传送流;
该TS中包含有至少一个节目的信息;
步骤102:从传送流中获取每个节目对应的传输包标志码,并存储传输包标志码与每个节目之间的对应关系;
步骤103:根据对应关系对传送流中的数据包进行分离,获取每个节目对应的独立传送流,独立传送流存储在节目对应的缓冲区中,包括节目对应的音频数据包、视频数据包、节目时钟基准、节目关联表和节目映射表。
进一步地,独立传送流中还包括节目其它类型的私有数据包。
上述方案中,从输入的TS中获取每个节目对应的传输包标志码,并存储传输包标志码与每个节目之间的对应关系;之后根据该对应关系对TS中的数据包进行分离,获取每个节目对应的独立TS,每个节目对应的独立TS中包括节目对应的音频数据包、视频数据包、节目时钟基准、节目关联表和节目映射表以及节目其它类型的私有数据包。本发明实施例不但能够高效的分离出各个需要的节目,而且分离出的每个节目是信息完备的TS流,适合于所有支持TS流播放的设备。
图2为本发明实施例的多节目传送流分离的装置的结构示意图,如图2所示,本实施例包括:
接收模块20,用于接收传送流TS,TS中包含有至少一个节目的信息;
存储模块22,用于从TS中获取每个节目对应的传输包标志码PID,并存储PID与每个节目之间的对应关系;
分离模块24,用于根据对应关系对TS中的数据包进行分离,获取每个节目对应的独立TS,独立TS存储在节目对应的缓冲区中,包括节目对应的音频数据包、视频数据包、节目时钟基准PCR、节目关联表PAT和节目映射表PMT,进一步地,分离模块24分离出的独立TS中还包括节目其它类型的私有数据包。
其中,存储模块22具体用于对TS中的PAT进行分析,根据PAT中的PMTPID获取每个节目对应的PMT;对每个节目对应的PMT进行分析,获取每个节目对应的PCR PID、视频数据包PID和音频数据包PID以及其它类型的私有数据包PID。
其中,该多节目传送流分离的装置还包括:
重构模块26,用于重构每个节目对应的PAT;在n个节目的PMT PID一致时,为n个节目重构PMT。
分离模块24包括:
匹配子模块25,用于将TS中的数据包的PID与对应关系中存储的PID进行逐一匹配;
存储子模块27,用于根据匹配结果,将数据包或重构的PAT和PMT存储到数据包的PID对应的节目的缓冲区中。
存储子模块27具体用于当数据包的PID为PAT PID时,将重构的PAT存储到数据包的PID对应的节目的缓冲区中;
当数据包的PID为n个节目对应的PMT PID时,将重构的PMT存储到n个节目的缓冲区中;
当数据包的PID仅为1个节目对应的PMT PID时,将数据包存储到该节目的缓冲区中;
当PID为PCR PID时,将数据包存储到数据包的PID对应的节目的缓冲区中;
当PID为视频数据包PID或音频数据包PID或其它类型的私有数据包PID时,将数据包存储到数据包的PID对应的节目的缓冲区中。
上述方案中,从输入的TS中获取每个节目对应的PID,并存储PID与每个节目之间的对应关系;之后根据该对应关系对TS中的数据包进行分离,获取每个节目对应的独立TS,每个节目对应的独立TS中包括节目对应的音频数据包、视频数据包、节目时钟基准、节目关联表和节目映射表以及节目其它类型的私有数据包。本发明实施例不但能够高效的分离出各个需要的节目,而且分离出的每个节目是信息完备的TS流,适合于所有支持TS流播放的设备。
下面结合附图对本发明的多节目传送流分离的方法进行进一步介绍:
如图3所示为本发明的多节目传送流分离的方法的流程框图,首先获取各频点下的各个节目的PID(Packet ID dentifier,传输包标志码)信息,并将各个节目对应的PID存入节目信息文件中;并配置各个所需的SECTION(部分)的PID,供搜台、事件监控等使用,之后根据各个节目对应的PID和SECTIONPID对TS进行分离,经分离出的数据包存在对应节目的缓冲区中,之后就可以对分离出的节目对应的TS进行播放、录制或者分发。
本发明中,所要分离的TS来源可以是:DVB(Digital Video Broadcasting,数字视频广播)-C,DVB-T,DVB-S以及其它数字电视解调输出的并行或串行TS数据;IP网络传输的数字电视节目;TS文件;其它媒介中符合MPEG(MovingPictures Experts Group/Motin Pictures Experts Group,动态图像专家组)-2***层标准的多节目TS流。
本发明的多节目传送流分离的方法主要包括以下步骤:
A、获取各频点下的各个节目的所有信息,并存入节目信息文件中;
依照频率表依次锁定各个频点,通过调谐-解调-TS获取等过程,得到TS。再从TS中滤出PAT(Program Association Table,节目关联表),对PAT进行分析,得到该频点下的各个节目的PMT(Program Map Table,节目映射表)PID,并根据PMT PID查找PMT获得每个节目的视频数据包PID、音频数据包PID、PCR(program clock reference,节目时钟基准)PID,以及其它类型的私有数据包PID,存入节目信息文件,获取节目信息的过程如图4所示。
节目信息文件存有所有频点下的各个节目的所有必要信息,每个节目的信息由以下几个部分组成:
PAT_PID;-----节目关联表PID;
PMT_PID;----节目映射表PID;
PCR_PID;---节目时钟参考PID;
PMT_PID_REPEAT_FLAG;---重复标示;1,重复;0,无重复
STREAM_NUMBER;---PMT中流数目;
STREAM_TYPE1;---PMT中流1类型;
SRTEAM_PID1;---PMT中流1的PID;
STREAM_TYPE2;---PMT中流2类型;
SRTEAM_PID2;---PMT中流2的PID;
......
STREAM_TYPE15;---PMT中流n的类型;
SRTEAM_PID15;---PMT中流n的PID;
其中PMT_PID_REPEAT_FLAG是为了解决特殊TS问题,有时一些TS中多个节目的PMT PID是一样的,在对TS进行分离时,如果不解析PMT则无法正确识别该PMT属于那套节目,设置该PMT_PID_REPEAT_FLAG对具有重复PID的PMT进行标示,以便在设置节目参数时对具有重复PID的PMT进行重构;
B、配置各个节目和所需SECTION的PID;
具体配置过程如图5所示,其中SECTION PID设置,直接通过DEMUX(数据分配器)设备设置即可,主要用于从TS中过滤出有用的SECTION。
为了减少在TS分离过程的***开销,需要预先重构PAT和必要的PMT。多节目的TS中的PAT包含有该频点中的所有节目的PMT PID数据,而对TS进行分离后每个节目独立的TS中的PAT只含有该节目的PMT PID数据,所以输入TS中的PAT不能直接使用,需要依据MPEG标准重新构造每个节目独立的TS中的PAT。
对于一些特别的PMT,如有些TS多个节目的PMT PID都用一个值,在一个表中对多套节目信息进行表述,多节目公用一个表。为了在分离过程中不再对该表进行解析以节省***开销,可以根据步骤A中获取的节目信息依照MPEG标准重新构造每个节目独立的TS中的PMT;
C、根据配置的PID对TS进行分离,获得各个节目对应的独立TS。
根据所设置的各个节目的PID和所需SECTION的PID,将输入的TS流分解成各个节目的独立TS和所需的SECTION,具体流程图参见图6,包括以下步骤:
1)由设置的节目PID可知分离的节目个数是N,由设置的SECTION PID可知所需SECTION个数是M;
2)根据取得的总的节目个数N和SECTION个数M,以及对应的PID,配置好过滤器,准备对输入的TS进行过滤。
3)取TS的一个数据包,该数据包为188字节或204字节;
4)取出该TS数据包的PID,根据该PID对SECTION的各个PID进行匹配,如果匹配则写入相应的缓冲区,直到所有的SECTION PID都匹配一次;若不匹配,转向5);
5)首先对该数据包进行PAT匹配,如果该数据包是PAT,则将重构的PAT输出到对应节目的缓冲区中;如果该数据包不是PAT,转向6);
6)根据该PID对各个PMT PID进行逐一匹配,若该数据包为PMT,还需要根据PMT_PID_REPEAT_FLAG的值判断该PMT PID和其它节目的PMTPID是否重复,如果没有重复,则匹配成功后直接将该PMT输出到与该PID对应的节目的缓冲区中;如果重复,则匹配成功后依次用该PID匹配其它的节目的PMT PID,直到每一套节目都匹配一次,并将重构的PMT输入到对应具有重复PMT PID的节目的缓冲区中;如果该数据包不是PMT,转向7);
7)根据该PID对PCR PID进行匹配,也是每一套节目都匹配一次;如果该数据包是PCR,则将该数据包输出到与该PID对应的节目的缓冲区中;如果该数据包不是PCR,转向8);
8)根据该PID对每套节目的所有STREAM PID逐一匹配;如果匹配成功则输出该数据包到与该PID对应的节目的缓冲区中;如果匹配不成功则丢弃该数据包;
其中,STREAM PID包括视频数据包PID、音频数据包PID和其它类型的私有数据包PID。
9)取得下一个TS包,重复3)-9)。
如图7所示,一个含有两套节目的TS,经本发明的多节目传送流分离的方法分离后生成两套独立的节目,存入各自的缓冲区,其中,AUDIO为音频数据包,VIDEO为视频数据包。在分离的过程中,保持PAT在每个节目的TS中出现的位置和频率不变,分别***各个节目的TS中;为了减少传输带宽和存储数据量,原来TS中的空包和其它一些无用SECTION包被丢弃,只保留了TS识别必须的所有内容。
本发明的技术方案对输入的TS进行分离后得到的节目的独立TS经过网络传输或保存成文件后,都可以被支持TS的播放器所识别播放。
此说明书中所描述的许多功能部件都被称为模块,以便更加特别地强调其实现方式的独立性。
本发明实施例中,模块可以用软件实现,以便由各种类型的处理器执行。举例来说,一个标识的可执行代码模块可以包括计算机指令的一个或多个物理或者逻辑块,举例来说,其可以被构建为对象、过程或函数。尽管如此,所标识模块的可执行代码无需物理地位于一起,而是可以包括存储在不同位里上的不同的指令,当这些指令逻辑上结合在一起时,其构成模块并且实现该模块的规定目的。
实际上,可执行代码模块可以是单条指令或者是许多条指令,并且甚至可以分布在多个不同的代码段上,分布在不同程序当中,以及跨越多个存储器设备分布。同样地,操作数据可以在模块内被识别,并且可以依照任何适当的形式实现并且被组织在任何适当类型的数据结构内。所述操作数据可以作为单个数据集被收集,或者可以分布在不同位置上(包括在不同存储设备上),并且至少部分地可以仅作为电子信号存在于***或网络上。
在模块可以利用软件实现时,考虑到现有硬件工艺的水平,所以可以以软件实现的模块,在不考虑成本的情况下,本领域技术人员都可以搭建对应的硬件电路来实现对应的功能,所述硬件电路包括常规的超大规模集成(VLSI)电路或者门阵列以及诸如逻辑芯片、晶体管之类的现有半导体或者是其它分立的元件。模块还可以用可编程硬件设备,诸如现场可编程门阵列、可编程阵列逻辑、可编程逻辑设备等实现。
在本发明各方法实施例中,所述各步骤的序号并不能用于限定各步骤的先后顺序,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,对各步骤的先后变化也在本发明的保护范围之内。
以上所述是本发明的优选实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明所述原理的前提下,还可以作出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。