一种用于MPEGTS文件回放的节目选择方法转让专利

申请号 : CN201210052978.3

文献号 : CN103297843B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 陈亮李春林

申请人 : 三星电子(中国)研发中心三星电子株式会社

摘要 :

本发明提供了一种用于MPEG TS文件回放的节目选择方法,首先,解析MPEG TS文件中的PAT表和PMT表,获取文件中的所有节目信息和节目中的流信息,并将这些流按照节目归类;然后,根据每个节目的流信息分别对每个节目进行检查,该检查至少包括:检查每个节目的基本流的完整度;再根据检查的结果对每个节目进行评分;最后,根据评分的结果确定每个节目可被选择的先后排序。应用本发明能够提高MPEG TS文件的解复用效率,并节省CPU和内存等硬件资源。

权利要求 :

1.一种用于多节目动态图像专家组MPEG传输流TS文件回放的节目选择方法,其特征在于:解析所述文件中的节目关联表PAT和节目映射表PMT,获取文件中的所有节目信息和节目中的流信息;

根据每个节目的流信息分别对每个节目进行检查,所述检查至少包括:检查每个节目的基本流的完整度;

根据所述检查的结果对每个节目进行评分;

根据评分的结果确定每个节目可被选择的先后排序。

2.根据权利要求1所述的方法,其特征在于:

预先为每个节目设置相同的初始得分S;

每个节目的基本流包括:视频流、音频流和字幕流;按照如下方式检查每个节目的基本流的完整度:如果该节目没有视频流,扣S*M1分,其中:M1为没有视频流对应的扣分权重因子;

如果该节目没有音频流,扣S*M2分,其中:M2为没有音频流对应的扣分权重因子;

如果该节目没有字幕流,扣S*M3分,其中:M3为没有字幕流对应的扣分权重因子。

3.根据权利要求2所述的方法,其特征在于,所述检查还包括:检查节目中是否存在加密流;

和/或检查节目中是否存在拼接流;

和/或检查节目中音频流、视频流以及字幕流的语言是否与播放器所在的设备本地的语言一致。

4.根据权利要求3所述的方法,其特征在于:

检查节目中是否存在加密流包括:找出所述节目的基本流对应的包标识PID,在相应PID的TS包头中找到传输加密控制transport_scrambling_control位,如果取值为非0,表示相应的基本流为加密流;

如果视频流为加密流,扣S*M4分,其中:M4为视频加密流对应的扣分权重因子;

如果音频流为加密流,扣S*M5分,其中:M5为音频加密流对应的扣分权重因子。

5.根据权利要求3所述的方法,其特征在于:

检查节目中是否存在拼接流包括:

A1、找出节目中每个流的最小时间戳和最大时间戳,在所有流的最小时间戳中选择最小的一个时间戳,记做DTS_min,在所有流的最大时间戳中选择最大的一个时间戳,记做DTS_max,计算节目的播放时间Duration_1:其中:时间戳DTS的单位是九万分之一秒,Duration_1的单位是微秒;

A2、通过节目的PMT表,找出节目中节目时钟参考PCR所在的PID,在文件开头通过该PID读取两个该节目的PCR,分别记做PCR_1和PCR_2,并将两个PCR在文件中的偏移量记做Pos_1和Pos_2,计算该文件的总比特率Bitrate_sum:其中:PCR的单位是一个系统时钟,27兆赫兹,偏移量的单位是字节,总比特率的单位是比特/秒;

A3、获取文件总长度File_size,根据总比特率和文件总长度计算出节目的总播放时间Duration_2:其中:Duration_2的单位是微秒;

A4、比较Duration_1和Duration_2,如果两者差值的绝对值大于0.5*Duration_1,判定该节目中存在拼接流;

如果节目中存在拼接流,扣S*M6分,其中M6为拼接流对应的扣分权重因子。

6.根据权利要求3所述的方法,其特征在于:

检查节目中音频流、视频流以及字幕流的语言是否与播放器所在的设备本地的语言一致包括:逐一比较节目中每路音频流、视频流和字幕流中的语言是否与播放器所在的设备本地的语言一致,如果存在一致的音频流、视频流或者字幕流,则加S*M7分,其中:M7为加分权重因子。

7.根据权利要求1至6任一项所述的方法,其特征在于,该方法进一步包括:将排序结果和每个节目的完整度信息提供给用户,将用户所选择的节目作为待播放的节目,如果用户未选择节目,则根据排序结果将得分最高的节目作为待播放的节目,对文件中待播放的节目进行播放。

8.根据权利要求7所述的方法,其特征在于,对文件中待播放的节目进行播放包括:在对文件解复用的过程中,跳过除待播放的节目之外的其它节目中的数据流,仅对待播放的节目的数据流进行解复用。

9.根据权利要求8所述的方法,其特征在于,跳过除待播放的节目之外的其它节目中的数据流包括:找出所有节目中所有数据流所对应的PID;

将待播放的节目的所有数据流的PID标记为使用状态,将处于忽略状态的节目的所有数据流对应的PID标记为未使用状态;

在对本地MPEG TS包进行解析的过程中,判断TS包头中的PID是否为使用状态,如果是使用状态,则继续执行解析操作,否则,跳过该TS包,继续读取并解析下一个TS包。

说明书 :

一种用于MPEG TS文件回放的节目选择方法

技术领域

[0001] 本发明涉及多媒体技术,特别涉及一种用于MPEG TS文件回放的节目选择方法。

背景技术

[0002] MPEG(Moving Pictures Experts Group,动态图像专家组)协议规定MPEG TS(Transport Stream,传输流)文件由TS包组成,每个TS包为固定长度188字节,分成包头和包负荷两部分。包头主要包括同步字节和PID(Packet Identifier,包标识)以及其它的信息,同步字节用来指示一个TS包开始(取值为0x47),PID表示TS包的类型。例如:一个节目里的视频流,由一些具备同样的PID的TS包组成,接收端只需要接收具有此PID的TS包,就可以组合得到该节目的视频。包负荷是包的实际内容,根据具体情况,可以放置打过包的基本流(PES,Packetized Elementary Stream)包或节目特定信息(PSI,Program Specific Information)包。TS文件由一个或者多个节目构成,而每一个节目由视频流、音频流、私有信息流以及其它的数据流构成。
[0003] 节目特定信息(PSI)包在TS文件解复用中占据重要地位,用来定义码流的结构,其中最为重要的是节目关联表(PAT,Program Association Table)和节目映射表(PMT,Program MAP Table)。PAT表是PSI信息的索引表,PID值固定为0。在PAT表中列出了该TS文件中所有节目的PMT表的PID值。如果播放器希望播放其中的一个节目,即可根据该节目的PID值解析出对应于该节目的PMT表,从中可以查询到与该节目相关的所有音频流、视频流、私有信息流以及其它数据流的PID。
[0004] 图1是媒体播放器对MPEG TS文件的解复用流程示意图。本地经过PSI解析,将得到MPEG TS文件中的所有节目信息和节目中的流信息。图3是一个本地多节目TS文件中的节目信息示例。
[0005] 根据图3所示示例,由于PAT表的PID值为0,根据PAT表可以得到各个节目的PMT表所对应的PID值,例如:
[0006] 节目1,PMT的PID=336;
[0007] 节目2,PMT的PID=352;
[0008] 节目3,PMT的PID=432;
[0009] 节目4,PMT的PID=544。
[0010] 如果希望观看节目2,就可以根据352这个PID得到节目2对应的PMT表,再进一步查到节目2的视频、音频及私有信息包所对应的PID值,分别为353、354和359。解析带有这些PID值的TS包就可以得到音频和视频的PES包,再经过去包化处理就可以得到音频流和视频流,送到播放器的缓冲区中即可进行解码、播放。
[0011] 现有媒体播放器大多数都支持MPEG TS文件播放。MPEG协议支持在一个TS文件中存放多个不同的节目,由于MPEG TS文件制作的随意性,这些节目可以是多种多样的,例如:只有音频流、只有视频流、有音视频流也有字幕流、有加密过的音视频流等等。现有媒体播放器在播放上述特殊文件时会出现异常错误,如媒体播放器可能无法启动播放,播放过程中出现播放不连续或者无法继续播放而自动退出的现象等。
[0012] 现有媒体播放器在回放(playback)多节目MPEG TS文件时会选择一个默认节目进行播放。现有媒体播放器选择节目的方法主要包括以下几种:
[0013] 1、选择第一个视频流所在的节目作为默认节目进行播放。
[0014] 2、从第一个节目开始播放,如果失败则自动选择下一个节目,直至找到合适的可以播放的节目或者遍历完所有的节目。
[0015] 3、由用户指定节目进行播放。
[0016] 上述现有技术问题存在以下问题:
[0017] 1、方法1中,媒体播放器所选取的节目可能只有一个视频流或者所选取的视频流被加密过,这将导致播放不正常,给用户带来不好的体验。
[0018] 2、方法2由于采用逐个遍历所有节目的方法,会导致文件打开时间的增加。
[0019] 3、方法3将选择用户指定的节目进行播放,但是,由于播放之前用户无法获知文件中所有节目的相关信息,盲目选择会给用户选择带来困难,并且存在与方法1同样的问题。
[0020] 4、当前多媒体播放器对于多节目文件解复用的效率不够高,特别是对于视频分辨率比较高、比特率比较大的文件,存在解复用性能较低的问题。

发明内容

[0021] 本发明提供了一种用于MPEG TS文件回放的节目选择方法,以提高MPEG TS文件的解复用效率,并节省CPU和内存等硬件资源。
[0022] 本发明提供的一种用于多节目动态图像专家组(MPEG)传输流(TS)文件回放的节目选择方法,包括:
[0023] 解析所述文件中的节目关联表(PAT)和节目映射表(PMT),获取文件中的所有节目信息和节目中的流信息;
[0024] 根据每个节目的流信息分别对每个节目进行检查,所述检查至少包括:检查每个节目的基本流的完整度;
[0025] 根据所述检查的结果对每个节目进行评分;
[0026] 根据评分的结果确定每个节目可被选择的先后排序。
[0027] 较佳地,预先为每个节目设置相同的初始得分S;
[0028] 每个节目的基本流包括:视频流、音频流和字幕流;按照如下方式检查每个节目的基本流的完整度:
[0029] 如果该节目没有视频流,扣S*M1分,其中:M1为没有视频流对应的扣分权重因子;
[0030] 如果该节目没有音频流,扣S*M2分,其中:M2为没有音频流对应的扣分权重因子;
[0031] 如果该节目没有字幕流,扣S*M3分,其中:M3为没有字幕流对应的扣分权重因子。
[0032] 较佳地,所述检查还包括:
[0033] 检查节目中是否存在加密流;
[0034] 和/或检查节目中是否存在拼接流;
[0035] 和/或检查节目中音频流、视频流以及字幕流的语言是否与播放器所在的设备本地的语言一致。
[0036] 较佳地,检查节目中是否存在加密流包括:找出所述节目的基本流对应的包标识(PID),在相应PID的TS包头中找到传输加密控制(transport_scrambling_control)位,如果取值为非0,表示相应的基本流为加密流;
[0037] 如果视频流为加密流,扣S*M4分,其中:M4为视频加密流对应的扣分权重因子;
[0038] 如果音频流为加密流,扣S*M5分,其中:M5为音频加密流对应的扣分权重因子。
[0039] 较佳地,检查节目中是否存在拼接流包括:
[0040] A1、找出节目中每个流的最小时间戳和最大时间戳,在所有流的最小时间戳中选择最小的一个时间戳,记做DTS_min,在所有流的最大时间戳中选择最大的一个时间戳,记做DTS_max,计算节目的播放时间Duration_1:
[0041]
[0042] 其中:时间戳(DTS)的单位是九万分之一秒,Duration_1的单位是微秒;
[0043] A2、通过节目的PMT表,找出节目中节目时钟参考(PCR)所在的PID,在文件开头通过该PID读取两个该节目的PCR,分别记做PCR_1和PCR_2,并将两个PCR在文件中的偏移量记做Pos_1和Pos_2,计算该文件的总比特率Bitrate_sum:
[0044]
[0045] 其中:PCR的单位是一个系统时钟,27兆赫兹,偏移量的单位是字节,总比特率的单位是比特/秒;
[0046] A3、获取文件总长度File_size,根据总比特率和文件总长度计算出节目的总播放时间Duration_2:
[0047]
[0048] 其中:Duration_2的单位是微秒;
[0049] A4、比较Duration_1和Duration_2,如果两者差值的绝对值大于0.5*Duration_1,判定该节目中存在拼接流;
[0050] 如果节目中存在拼接流,扣S*M6分,其中M6为拼接流对应的扣分权重因子。
[0051] 较佳地,检查节目中音频流、视频流以及字幕流的语言是否与播放器所在的设备本地的语言一致包括:
[0052] 逐一比较节目中每路音频流、视频流和字幕流中的语言是否与播放器所在的设备本地的语言一致,如果存在一致的音频流、视频流或者字幕流,则加S*M7分,其中:M7为加分权重因子。
[0053] 较佳地,该方法可以进一步包括:
[0054] 将排序结果和每个节目的完整度信息提供给用户,将用户所选择的节目作为待播放的节目,如果用户未选择节目,则根据排序结果将得分最高的节目作为待播放的节目,对文件中待播放的节目进行播放。
[0055] 较佳地,对文件中待播放的节目进行播放包括:
[0056] 在对文件解复用的过程中,跳过除待播放的节目之外的其它节目中的数据流,仅对待播放的节目的数据流进行解复用。
[0057] 较佳地,跳过除待播放的节目之外的其它节目中的数据流包括:
[0058] 找出所有节目中所有数据流所对应的PID;
[0059] 将待播放的节目的所有数据流的PID标记为使用状态,将处于忽略状态的节目的所有数据流对应的PID标记为未使用状态;
[0060] 在对本地MPEG TS包进行解析的过程中,判断TS包头中的PID是否为使用状态,如果是使用状态,则继续执行解析操作,否则,跳过该TS包,继续读取并解析下一个TS包。
[0061] 由上述技术方案可见,本发明提供的用于MPEG TS文件回放的节目选择方法,通过媒体播放器解析PAT表和PMT表,搜集MPEG TS文件中所有节目的音视频流以及其它数据流的信息,综合给每路节目打分,并根据不同的扣分原因进行相应的扣分,最后按照分数将所有节目排序,供用户选择。在用户没有选择的情况下,或者媒体播放器没有提供与用户进行交互的选项的情况下,媒体播放器默认选择分数最高的节目进行播放。媒体播放器在对文件解复用的过程中,跳过没有被选择的其它节目中的数据流,这样,可以明显提高文件的解复用效率,并节省了大量CPU以及内存等硬件资源。
[0062] 并且,本发明以一种方便的量化的方式对TS文件中每个节目进行综合评估,用以判断节目本身信息的完整度,方便用户选择合适的节目进行播放,避免出现无法播放或者播放不正常的情况。
[0063] 此外,采用本发明能够增强媒体播放器处理异常的本地多节目TS文件的能力,并减少媒体播放器出错的可能性。

附图说明

[0064] 图1为媒体播放器对MPEG TS文件的解复用流程示意图;
[0065] 图2为本发明一较佳节目选择方法的流程示意图;
[0066] 图3是一个本地多节目TS文件中的节目信息示例示意图。

具体实施方式

[0067] 为使本发明的目的、技术方案及优点更加清楚明白,以下参照附图并举实施例,对本发明作进一步详细说明。
[0068] 本发明的主要思想是:首先,解析MPEG TS文件中的PAT表和PMT表,获取文件中的所有节目信息和节目中的流信息;然后,根据每个节目的流信息分别对每个节目进行检查,该检查至少包括:检查每个节目的基本流的完整度;再根据检查的结果对每个节目进行评分;最后,根据评分的结果确定每个节目可被选择的先后排序。
[0069] 在得到节目排序之后,可以将排序结果和每个节目的完整度信息提供给用户,供用户参考进行选择,并将用户所选择的节目作为待播放的节目;如果用户未选择节目,或者媒体播放器没有提供与用户进行交互的选项,则根据排序结果将得分最高的节目作为待播放的节目,对文件中待播放的节目进行播放,跳过没有被选择的其它节目中的数据流,从而明显提高文件的解复用效率,并节省大量CPU以及内存等硬件资源。
[0070] 除检查每个节目的基本流的完整度之外,还可以执行以下检查中的一项或多项的组合:检查节目中是否存在加密流、检查节目中是否存在拼接流、检查节目中音频流和视频流的语言是否与播放器所在的设备本地的语言一致等。
[0071] 以下通过一个较佳实施例对本发明进行详细说明:
[0072] 媒体播放器在播放本地MPEG TS文件时,需要一个解复用器按照MPEG协议规定对PSI进行解析,得到文件中的所有节目信息和节目中的流信息。依据这些流信息,将各个音视频流以及其它数据流从TS文件中解复用出来,送入媒体播放器对应的缓冲区中解码、显示。
[0073] 基于正确解析本地MPEG TS文件中的所有节目和节目中流信息的基础上,本发明提出一种如图2所示的较佳的节目选择方法的流程图。参见图2,该方法包括:
[0074] 步骤一:解析文件中的PAT表和PMT表,获取文件中的所有节目信息和节目中的流信息。
[0075] 步骤二:将节目的初始得分设置为S,例如:S=100。
[0076] 步骤三:检查每个节目中的基本流的完整度,每个节目的基本流包括:视频流、音频流和字幕流。具体而言:
[0077] 如果该节目没有视频流,扣100*M1分,其中M1为没有视频流对应的扣分权重因子,M1可由用户设置,最大值为1,默认值为0.5;
[0078] 如果该节目没有音频流,扣100*M2分,其中M2为没有音频流对应的扣分权重因子,M2可由用户设置,最大值为1,默认值为0.2;
[0079] 如果该节目没有字幕流,扣100*M3分,其中M3为没有字幕流对应的扣分权重因子,M3可由用户设置,最大值为1,默认值为0.05;
[0080] 步骤四:检查节目中是否存在加密流,方法如下:
[0081] 1、找出该节目的基本流对应的PID;
[0082] 2、在相应PID的TS包头中找到传输加密控制(transport_scrambling_control)位,如果取值为非0,表示相应的基本流是加密流;
[0083] 3、如果视频流为加密流,扣100*M4分,其中M4为视频加密流对应的扣分权重因子,M4可由用户设置,最大值为1,默认值为0.35;
[0084] 4、如果音频流为加密流,扣100*M5分,其中M5为音频加密流对应的扣分权重因子,M5可由用户设置,最大值为1,默认值为0.15。
[0085] 步骤五:检查节目中是否存在拼接流,方法如下:
[0086] 1、找出节目中每个流的最小时间戳和最大时间戳,在所有流的最小时间戳中选择最小的一个时间戳,记做DTS_min,作为该节目的起始时间戳,在节目中所有流的最大时间戳中选择最大的一个时间戳,记做DTS_max,作为该节目的结束时间戳,计算得到节目的播放时间Duration_1:
[0087]
[0088] 其中:时间戳(DTS)的单位是九万分之一秒,Duration_1的单位是微秒;
[0089] 2、通过节目的PMT表,找出节目中节目时钟参考(PCR)所在的PID,在文件开头通过该PID读取两个该节目的PCR,分别记做PCR_1和PCR_2,以及两个PCR在文件中的偏移量,记做Pos_1和Pos_2,计算得到该文件的总比特率Bitrate_sum:
[0090]
[0091] 其中:PCR的单位是一个系统时钟(27兆赫兹),偏移量的单位是字节,总比特率的单位是比特/秒;
[0092] 3、获取文件总长度File_size,根据总比特率和文件总长度计算出节目的总播放时间Duration_2:
[0093]
[0094] 其中:Duration_2的单位是微秒;
[0095] 4、比较Duration_1和Duration_2,如果两者差值的绝对值大于0.5*Duration_1,则判定该节目为拼接流,且时间戳是不连续的;
[0096] 5、对于拼接过的且时间戳是不连续的节目,扣100*M6分,其中M6为拼接流对应的扣分权重因子,M6可由用户设置,最大值为1,默认值为0.25。
[0097] 步骤六:检查节目中音频流、视频流和字幕流的语言是否与播放器所在的设备本地的语言一致,具体而言:
[0098] 逐一比较节目中每路音频流、视频流和字幕流中的语言是否与播放器所在的设备本地的语言一致,如果存在一致的音频流、视频流或者字幕流,则加S*M7分,其中:M7为加分权重因子,M7可由用户设置,最大值为1,默认值为0.1。
[0099] 步骤七:限制每个节目的最高分为100分,最低分为0分,扣完为止;
[0100] 步骤八:判断是否完成对每个节目的检查和评分,如果没有完成,返回步骤二对下一个节目进行检查和评分,如果完成,继续步骤九。
[0101] 步骤九:将文件中所有节目的综合评分,按从高到低的顺序进行排序,并显示排序结果,供用户选择播放。
[0102] 步骤十:在对文件解复用的过程中,跳过除待播放的节目之外的其它节目中的数据流,仅对待播放的节目的数据流进行解复用。例如:可以将未被用户选择的节目设置为忽略状态,即在TS文件解复用的时候不去解析、拼接属于忽略状态节目的所有音视频流、以及其它数据流,以提高解复用性能,减少资源使用。具体方法如下:
[0103] 找出所有节目中所有数据流所对应的PID;
[0104] 将待播放的节目的所有数据流的PID标记为使用状态,将处于忽略状态的节目的所有数据流对应的PID标记为未使用状态;
[0105] 在对本地MPEG TS包进行解析的过程中,判断TS包头中的PID是否为使用状态,如果是使用状态,则继续执行解析操作,否则,跳过该TS包,继续读取并解析下一个TS包。
[0106] 至此,结束图2所示方法流程。
[0107] 由上述实施例可见,本发明提供的用于MPEG TS文件回放的节目选择方法,通过媒体播放器解析PAT表和PMT表,搜集MPEG TS文件中所有节目的音视频流以及其它数据流的信息,综合给每路节目打分,并根据不同的扣分原因进行相应的扣分,最后按照分数将所有节目排序,供用户选择。在用户没有选择的情况下,或者媒体播放器没有提供与用户进行交互的选项的情况下,媒体播放器默认选择分数最高的节目进行播放。媒体播放器在对文件解复用的过程中,跳过没有被选择的其它节目中的数据流,这样,可以明显提高文件的解复用效率,并节省了大量CPU以及内存等硬件资源。
[0108] 并且,本发明以一种方便的量化的方式对TS文件中每个节目进行综合评估,用以判断节目本身信息的完整度,方便用户选择合适的节目进行播放,避免出现无法播放或者播放不正常的情况。
[0109] 此外,采用本发明能够增强媒体播放器处理异常的本地多节目TS文件的能力,并减少媒体播放器出错的可能性。
[0110] 以上所述仅为本发明的较佳实施例而已,并不用以限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明保护的范围之内。