这是TS文件的 原理 定义
随着从HDTV录制的高清节目在网上的流传,烧友们现在对TS这个名词大概已经不陌生了,但随之而来就是如何播放、如何添加字幕等等的一系列问题,本文将重点介绍一下这方面的应用 *** 作。
先来简要介绍一下什么是MPEG2-TS吧。MPEG2格式大家都通过对DVD的接触而多多少少了解了一些,DVD节目中的MPEG2格式,确切地说是MPEG2-PS,全称是Program Stream,而TS的全称则是Transport Stream。MPEG2-PS主要应用于存储的具有固定时长的节目,如DVD,而MPEG-TS则主要应用于实时传送的节目,比如实时广播的电视节目。这两种格式的主要区别是什么呢?简单地打个比喻说,你将DVD上的VOB文件的前面一截cut掉(或者干脆就是数据损坏),那么就会导致整个文件无法解码了,而电视节目是你任何时候打开电视机都能解码(收看)的,所以,MPEG2-TS格式的特点就是要求从视频流的任一片段开始都是可以独立解码的。
MPEG2-TS流文件的简单回放
有一些播放器软件可以直接播放MPEG2-TS流,比如:
=> 1WinDVD 5x
=> 2VLC Media Player
=> 3Elecard Player
等等。
播放前,先将TS流文件的后缀名改为 mpg,以便播放器可以识别它是一个MPEG文件,否则一些"以貌取人"的播放器可能会拒绝提供服务。
修改了后缀名后,直接用播放器打开文件播放即可。
但是需要通过VOBSub外挂字幕的朋友,可能很快就会发现,在WinDVD里无法对MPEG文件加载字幕,这是因为WinDVD在对MPEG文件解码的时候,用了内部的解码流程,而没有按照微软的DirectShow标准去搭建解码框架,这样自然就无法触发VOBSub这些基于DirectShow标准的外挂控件了。这些问题将在"MPEG2-TS流文件的高级回放篇"里进一步解决。
MPEG2-TS流文件的高级回放
此篇主要介绍MPEG2-TS回放的DIY方法,此方法已经验证此前网上下载的若干韩国、HDTV片段以及HBO HD-Movie等TS文件。
你需要如下的一些软件:
1一个支持MPEG2-TS格式的分离器(Splitter Filter)。
分离器的功能就是识别文件真正的格式,将其中的视频流数据、音频流数据分离出来,并发送给相应的解码器。
微软的DirectX里已经提供了此类的分离器,但是兼容性不好,而且甚至在DirectX9以及XP里的DirectX8中就取消了对TS流的支持。
我向大家推荐的是Elecard Player中的分离器,可以通过安装Elecard Player获得。我已经从里面提取出来上载到这里了,大家下载后自行注册一下该分离器控件即可(不是软件注册)。
2一个MPEG2视频解码器和AC3音频解码器,可以通过安装WinDVD、CinePlayer等软件获得。
AC3解码器,我则推荐使用网上比较流行的由俄国人编写的一个开放源代码的免费控件,可以下载。
3一个基于DirectShow架构的播放器,比如微软自带的Media Player(媒体播放器)、ZoomPlayer等等。
4VOBSub字幕外挂控件。
这个大家也很熟悉了,就不多说了。不熟悉的朋友可以>TS后缀的是高清。
TS文件是MPEG2-TS流,可以直接修改文件后缀名播放。
是日本高清摄像机拍摄下进行的封装格式。支持TS的开源播放器有VLCmediaplayer。播放前,先将TS流文件的后缀名改为mpg。
以便播放器可以识别它是一个MPEG文件,否则一些"以貌取人"的播放器可能会拒绝提供服务。MPEG-TS主要应用于实时传送的节目,比如实时广播的电视节目。你是说在播放的界面晃动鼠标而不是拖动进度条,画面会有卡顿的现象。你的配置不应该出现这种情况,而且2太电脑都是这样,可以排除硬件问题了。多数是参数设置不正确。你可以把播放器都卸载了,下载个POTPLAYER的绿色版,开启硬件加速试试。现在我都是这样看1080P的。TS、TP的MV也没少看本发明提供一种TS文件快进快退的方法及装置,可以解决在TS文件时间长一致、格式不同,进行快进快退时所需的时间不一致的问题。为了解决上述问题,本发明采用以下的方法实现:一种TS文件快进快退的方法,包括:获取当前播放TS文件的第一时间;依据所述第一时间与进行快进或快退的倍速,获取当前倍速下的第二时间;在预设的辅助文件中,获取与所述第二时间距离最近的第三时间;获取与所述第三时间所对应的I帧数据,并播放所述I帧数据。优选的,所述预设的辅助文件的创建过程包括:步骤A:建立与TS文件名称一致的辅助文件;步骤B:读取所述TS文件中的TS包;步骤C:若所述TS包为视频数据且所述TS包中包含I帧头部,则获取所述I帧头部的时间与地址;
步骤D:将所述I帧头部的时间与地址存储至所述辅助文件;步骤E:判断所述辅助文件是否完整,若所述辅助文件不完整,进入步骤F,若所述辅助文件完整,则进入步骤G ;步骤F:跳转至下一个TS包,进入步骤B ;步骤G:将所述辅助文件作为预设的辅助文件。优选的,所述判断所述预设的辅助文件是否完整包括:判断预设的辅助文件中的标志位是否有效;若所述标志位无效,则判定所述辅助文件不完整,若所述标志位有效,则判定所述辅助文件完整。优选的,在步骤D之后还包括:依据所述辅助文件中除第一校验位之外的数据,计算所述辅助文件的第二校验位;判断所述第二校验位与所述第一校验位是否一致,若一致进入步骤E,若不一致,则进入步骤A。优选的,所述依据所述第一时间与进行快进或快退的倍速,获取当前倍速下的第二时间包括:依据所述快进的倍速,获取当前倍速下的第一时间差值,将所述第一时间与所述第一时间差值的和值作为所述第二时间;依据所述快退的倍速,获取当前倍速下的第二时间差值,将所述第一时间与所述第二时间差值的和值作为所述第二时间。优选的,所述获取与所述第三时间所对应的I帧数据,并播放所述I帧包括:获取与所述第三时间所对应的I帧头部的地址;依据所述I帧头部的地址获取所述I帧数据;将所述I帧数据发送至解码器进行解码,并播放所述I帧。优选的,所述TS包为视频数据且所述TS包中包含I帧头部的确定过程包括:若所述TS包中的包识别码PID等于0X20且TS包中含有标识0X000001B,则判定所述TS包为视频数据且所述TS包中包含I帧头部。一种TS文件快进快退的装置,包括:第一获取单元,用于获取当前播放TS文件的第一时间;第二获取单元,用于依据所述第一时间与进行快进或快退的倍速,获取当前倍速下的第二时间;第三获取单元,用于在预设的辅助文件中,获取与所述第二时间距离最近的第三时间;第四获取单元,用于获取与所述第三时间所对应的I帧数据,并播放所述I帧数据。优选的,所述装置还包括:创建单元,用于创建预设的辅助文件,具体的步骤包括:步骤A:建立与TS文件名称一致的预设的辅助文件;步骤B:读取所述TS文件中的TS包;
步骤C:若所述TS包为视频数据且所述TS包中包含I帧头部,则获取所述I帧头部的时间与地址;步骤D:将所述I帧头部的时间与地址存储至所述预设的辅助文件;步骤E:判断所述预设的辅助文件是否完整,若所述辅助文件不完整,进入步骤B,若所述辅助文件完整,则所述预设的辅助文件创建完成。优选的,所述第二获取单元包括:第一计算单元,用于依据所述快进的倍速,获取当前倍速下的第一时间差值,将所述第一时间与所述第一时间差值的和值作为所述第二时间;第二计算单元,用于依据所述快退的倍速,获取当前倍速下的第二时间差值,将所述第一时间与所述第二时间差值的和值作为所述第二时间。本发明提供了一种TS文件快进快退的方法,通过获取当前播放TS文件的第一时间,依据第一时间与进行快进或快退的倍速,获取当前倍速下的第二时间,并在预设的辅助文件中,获取与第二时间距离最近的第三时间,依据所述第三时间获取与所述第三时间所对应的I帧数据,并播放所述I帧数据。本发明进行快进快退时,通过在第一时间的基础上跳转固定时间方法来实现,避免采用跳转固定的字节,因此针对不同格式的TS文件,只要TS文件的时长相同,通过跳转固定时间的方式进行快进或快退时,跳转次数是一致的,因此在TS文件中进行快进或快退的时间是一致的。
为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。图1为本发明公开的TS文件快进快退方法第一实施例的流程示意图;图2为本发明公开的TS文件快进快退方法中部分播放I帧的流程示意图;图3为本发明公开的TS文件快进快退方法中预设的辅助文件的创建过程的流程示意图;图4为本发明公开的TS文件快进快退方法第二实施例的流程示意图;图5为本发明实施例公开的TS文件快进快退装置的结构示意图;图6为本发明实施例公开的又一 TS文件快进快退装置结构示意图;图7为本发明实施例公开的TS文件快进快退装置的中第二获取单元结构示意图;图8为本发明实施例公开的TS文件快进快退装置的中第四获取单元结构示意图。
具体实施例方式下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
本发明提供了一种TS文件快进快退的方法,如图1所示,为本发明的第一实施例,该方法包括:步骤SlOl:获取当前播放TS文件的第一时间;在播放TS文件时,分为前台线程和后台线程,在后台线程中遍历I帧创建辅助文件,在前台线程中,根据I帧数据播放I帧。I帧为帧内图(Intra Picture),是一种内部编码图,仅使用自身的信息进行编码,可以用来帮助对图像序列的随即访问,如快进播放或快退播放等。在前台线程中,根据当前播放TS文件时所播放的I帧,在预设的辅助文件中,提取当前播放I帧的时间,并将当前I帧的时间作为第一时间。步骤S102:获取当前倍速下的第二时间,即依据所述第一时间与进行快进或快退的倍速,获取当前倍速下的第二时间;在快进或快退时,不同的播放器在不同倍速中时间差值不同,因此需要根据快进或快退的倍速,得到当前倍速下快进或快退的时间差值,依据时间差值和第一时间,计算当前倍速下的第二时间,具体计算第二时间的步骤包括两种情况:第一种情况,在进行快进时:依据所述快进的倍速,获取当前倍速下的第一时间差值,将所述第一时间与所述第一时间差值的和值作为所述第二时间;即具体的在执行快进时,将第一时间和第一时间差值的和值作为第二时间。第二种情况,在进行快退时:依据所述快退的倍速,获取当前倍速下的第二时间差值,将所述第一时间与所述第二时间差值的差值作为所述第二时间,即具体的在执行快退时,将第一时间和第二时间差值的差值作为第二时间。步骤S103:获取与第二时间距离最近的第三时间,即在预设的辅助文件中,获取与所述第二时间距离最近的第三时间;在预设的辅助文件中,根据上述步骤所获取的第二时间,遍历预设的辅助文件,查询与第二时间最接近的第三时间,并获取所述第三时间。步骤S104:获取与所述第三时间所对应的I帧数据,并播放所述I帧数据。具体的,如图2所示,在执行该步骤时包括:步骤S201:获取与所述第三时间所对应的I帧头部的地址;在辅助文件中,每一个时间都有唯一对应的I帧头部,依据第三时间即可获取与第三时间所对应的I帧的地址。步骤S202:依据所述I帧头部的地址获取所述I帧数据;依据I帧头部的地址可以自动的获取I帧尾部的地址,根据I帧头部的地址及I帧尾部的地址,在TS文件中获取I帧数据。步骤S203:将所述I帧数据发送至解码器进行解码,并播放所述I帧。将上述步骤获取的I帧数据发送至解码器,由解码器对所述I帧数据进行解码,将解码后的数据进行播放。若在播放TS文件若需多次进行快进快退,则在一次快进快退执行完成之后,重新执行步骤SlOf S104,以便当前的快进快退的倍速改变,或者快进快退的状态发生改变(由快进改为快退或者由快退改为快进)时,可以及时的做出调整,因此在本发明中TS文件持续进行快退或快退时,循环执行本发明上述步骤。本发明中每次都是跳转固定的时间长度(即第一时间差值和第二时间差值),因此针对相同时长的TS文件,不论TS文件的格式是否一致,进行同样的快进或快退的 *** 作时,跳转的次数是一致的,因跳转的时间也是一致,因此整体进行快进或快退之后的时间是一致的。本发明提供了一种TS文件快进快退的方法,在TS文件进行快进快退时,通过在第一时间的基础上跳转固定时间方法来实现快进快退,避免采用跳转固定字节的方式,因此针对高清或标清等不同格式的TS文件,只要TS文件的时长相同,通过跳转固定时间的方式进行快进或快退时,跳转次数是一致的,因此在TS文件中进行快进或快退的时间是一致的。此外,现有技术中只在快进快退时再查找I帧,对CPU要求很高,一般低端的CPU无法满足高倍速快进快退。本发明通过此外本发明采用在后台遍历I帧的方式创建辅助文件,辅助文件仅需创建一次,在下次播放该文件时进行快进快退时直接使用已有的辅助文件即可,避免了 CPU在快进快退时,以便遍历I帧以便播放TS文件的方式,对CPU的要求较低,而且也可以实现高倍速的播放,并提高播放效率。如图3所示,为本发明预设的辅助文件的创建过程包括:步骤A:建立与TS文件名称一致的辅助文件;若TS文件中不存在辅助文件,则开启后台线程创建辅助文件。首先建立一个空白的辅助文件,该辅助文件的名称与TS文件的名称一致,后缀为elu,以该辅助文件存储TS文件中的所有的I帧头部的时间和地址。步骤B:读取所述TS文件中的TS包;TS(transition stream)文件为传输数据流,主要用于数据传输,每个TS文件由多个TS包组成,多个TS包组成一个I帧,I帧头部在一个TS包中。每个TS包的长度是固定的,均为188字节,分别由包头、自适应区和包数据3部分组成,其中包头占4字节,自适应区和包数据长度共占184字节。包头包括:由显示时间标签(Presentation Time Stamp,PTS)、有效起始指不器(payload_unit_start_indicator)、包识别码(Packet Identifier,PID)等8个部分组成。其中,PTS为显示时间标签,用来标示某一个I帧开始的时间,即I帧帧头的所在的TS文件中的时间;payload_unit_start_indicator 为有效起始指不位,payload_unit_start_indicator为I代表该TS包为包含数据的第一个包;PID为包识别码用来标识TS包的类型,如视频、音频、节目特定信息等。读取TS文件的TS包,首先判断包头中的payload_unit_start_indicator是否为
I,若该字段为I则表示该TS包是PSI或PES的第一个包,若该字段不为I,则直接跳转至下一个TS包,再次判断包头中的payload_unit_start_indicator是否为I,直到该字段为1,则不再判断进行该判断。步骤C:若所述TS包为视频数据且所述TS包中包含I帧头部,则获取所述I帧头部的时间与地址;所述TS包中的包识别码PID等于0X20且TS包中含有标识0X000001B,则判定所述TS包为视频数据且所述TS包中包含I帧头部。在具体执行时,在上述步骤中若payload_unit_start_indicator为I,则继续判断该TS包是否为视频数据,若该TS包的包头中的PID等于0X20,则表示该包为视频数据,则继续判断该TS包的包数据中是否包含I帧头部,若TS文件的包数据中含有标识0X000001B,则表明该包中包含I帧头部,由于在TS包中I帧的标识通常出现在I帧头部,因此通过对该标识的判断可以很快找到I帧头部,并提取该I帧PTS值及地址。因TS包可能为音频数据,可能为视频数据,本发明暂不涉及视频数据之外的数据,因此跳过不是视频数据的TS包,若为视频数据,则直接在该TS包中继续判断是否包括I帧头部,因多个TS包组成一个I帧,因此若TS包中包含I帧头部,则代表该TS包为I帧的开始,则提取I帧的PTS值及地址。步骤D:将所述I帧头部的时间与地址存储至所述辅助文件;将上述步骤中获取的I帧头部的时间和地址,按照对应关系存储至辅助文件中。步骤E:判断所述辅助文件是否完整,若所述辅助文件不完整,进入步骤F,若所述辅助文件完整,则进入步骤G ;步骤F:跳转至下一个TS包,进入步骤B ;步骤G:将所述辅助文件作为预设的辅助文件。判断辅助文件是否完整,本发明通过判断预设的辅助文件中的标志位是否有效;若所述标志位无效,则判定所述辅助文件不完整,若所述标志位有效,则判定所述辅助文件完整,将完整的辅助文件作为本发明中预设的辅助文件。如果遍历完所有的TS文件中的TS包,辅助文件中的标志位则有效,若辅助文件中的标志位无效,则表明辅助文件还不完整,没有遍历完所有的TS包,因此当辅助文件不完整时,继续跳转至下一个TS包,重新执行步骤B飞。本发明在创建辅助文件的时候在步骤D之后,还包括:步骤Dl:依据所述辅助文件中除第一校验位之外的数据,计算所述辅助文件的第二校验位;步骤D2:判断所述第二校验位与所述第一校验位是否一致,若一致进入步骤E,若不一致,则进入步骤A。每次向辅助文件中写入数据的时候,会在辅助文件的数据最后自动形成4个字节的校验值,为了防止在辅助文件在写入的情况下出现问题,每次写入数据之后,依据辅助文件中第一校验位的之外的数据,经过校验计算方法得出第二校验值,然后判断第二校验值是否和第一校验值一致,若一致,则表明数据没有出错,若不一致,则表明数据无效或出错,重新进入步骤A,重新创建辅助文件。如图4所示,为本发明一种TS文件快进快退的方法的第二实施例,该方法包括:步骤301:判断预设的辅助文件是否存在,若存在则进入步骤S309,若不存在则进入步骤302 ;在TS文件查询是否有与所述TS文件名称一致,后缀为elu的文件,若含有该文件,则表明含有预设的辅助文件,直接读取TS文件中的TS包,若不含该文件,则表明TS文件中不含预设的辅助文件,则创建预设的辅助文件。步骤302:建立辅助文件,即建立与TS文件名称一致的辅助文件;
在后台程序中,创建预设的辅助文件,首先建立一个空白的辅助文件,该辅助文件的名称与TS文件的名称一致,后缀为elu,以该辅助文件存储TS文件中的所有的I帧头部的时间和地址。步骤303:读取所述TS文件中的TS包;步骤304:判断有效起始指示位是否为1,即判断该TS包的包头中的有效起始指示位payload_unit_start_indicator是否为1,若为I进入步骤S306,若不为I,则进入步骤305 ;步骤305:跳转至下一个TS包,进入步骤S303 ;跳转至下一个188字节出,重新读取TS包。步骤306:判断该TS包是否是视频数据,若该TS包不是视频数据,则进入步骤S305,若该TS包为视频数据则进入步骤S307 ;判断PID是否等于0X20,若PID是否等于0X20则判定该TS包是视频数据,若PID不等于0X20,则判定该TS包不是视频数据。步骤307:判断该TS包中是否包括I帧头部,若包含I帧头部,则进入步骤S308,若不包含I帧头部,则进入步骤S305 ;判断该帧的包数据中是否包含标识0X000001B,若含有该标识,则表明该TS包中含有I帧头部,若不含则表明该TS包中不含I帧头部,直接跳转至下一个188字节处,重新读取下一个TS包。步骤S308:将所述I帧头部的时间与地址存储至辅助文件;将I帧头部的时间值PTS和地址存储至辅助文件中。步骤S308:判断辅助文件是否完整,若辅助文件完整,则进入步骤S309,若辅助文件不完整,则进入步骤S305 ;判断辅助文件中的标志位是否有效,若标志位有效则表示辅助文件完整,将该辅助文件作为预设的辅助文件,若标志位无效,则继续读取下一个TS包。步骤S309:判断TS文件是否进行快进快退,若进行快进快退,则进入步骤S310,若不进行快进快退,则结束。在前台程序中,判断TS文件在播放过程中是否进行快进或快退,若进行快进则在计算第二时间时进入步骤S310,若进行快退,在计算第二时间时,进入步骤S311。步骤S310:获取当前播放TS文件的第一时间;依据预设的辅助文件,根据当前播放的I帧,在预设的辅助文件中获取正在播放的I帧的PTS。步骤S311:判断TS文件是否进行进快,若进行快进,则进入步骤S311,否则进入步骤 S312 ;步骤S311:获取快进时的第二时间;依据所述快进的倍速,获取当前倍速下的第一时间差值,将所述第一时间与所述第一时间差值的和值作为所述第二时间,进入步骤S313 ;步骤S312:获取快退时的第二时间;依据所述快退的倍速,获取当前倍速下的第二时间差值,将所述第一时间与所述第二时间差值的和值作为所述第二时间,进入步骤S313 ;
步骤S313:获取与第二时间距离最近的第三时间,即在预设的辅助文件中,获取与所述第二时间距离最近的第三时间;若进行快进则在预设的辅助文件中,提取在第二时间之后时间,通过判断和对比的方法,获取与第二时间距离最近的第三时间。若进行快退则在预设的辅助文件中,提取在第二时间之前的时间,通过判断和对比的方法,获取与第二时间距离最近的第三时间。步骤S314:获取与所述第三时间所对应的I帧数据,并播放所述I帧数据。在预设的辅助文件中依据第三时间,获取与第三时间所对应的I帧数据,并将该I帧数据发送至解码器进行解码,并播放所述I帧数据。本发明提供的一种TS文件的快进快退方法,可以在播放一次TS文件后,后续再播放该TS文件时,便不用重新创建预设的辅助文件,直接使用当前已有的辅助文件,因此辅助文件仅需创造一次,后续可以重复使用,提高了播放效率。当进行快进快退时,首先会查找预设的辅助文件,里面记录了每个帧的位置和显示时间,在做倍速快进时,根据不同倍速和当前的时间差值,得到所需跳转的时间,然后依据所述时间直接去TS文件中读出I帧数据,并将I帧数据送给解码器,而不是通过跳转固定的字节进行快进或快退,节省了遍历I帧的时间;且在本发明中,由于采用后台线程遍历I帧的方法,前台快进快退播放时直接从文件里取I帧,提高了快进快退的效率。如图5所示,本发明提供了一种TS文件快进快退的装置,包括:第一获取单元100,用于获取当前播放TS文件的第一时间;第二获取单元200,用于依据所述第一时间与进行快进或快退的倍速,获取当前倍速下的第二时间;第三获取单元300,用于在预设的辅助文件中,获取与所述第二时间距离最近的第三时间;第四获取单元400,用于获取与所述第三时间所对应的I帧数据,并播放所述I帧数据。所述装置还包括:创建单元500,用于创建预设的辅助文件,具体的步骤包括:步骤A:建立与TS文件名称一致的预设的辅助文件;步骤B:读取所述TS文件中的TS包;步骤C:若所述TS包为视频数据且所述TS包中包含I帧头部,则获取所述I帧头部的时间与地址;步骤D:将所述I帧头部的时间与地址存储至所述预设的辅助文件;步骤E:判断所述预设的辅助文件是否完整,若所述辅助文件不完整,进入步骤B,若所述辅助文件完整,则所述预设的辅助文件创建完成。所述第二获取单元200包括:第一计算单元201,用于依据所述快进的倍速,获取当前倍速下的第一时间差值,将所述第一时间与所述第一时间差值的和值作为所述第二时间;第二计算单元202,用于依据所述快退的倍速,获取当前倍速下的第二时间差值,将所述第一时间与所述第二时间差值的和值作为所述第二时间。所述第四获取单元400包括:
第五获取单元401,用于获取与所述第三时间所对应的I帧头部的地址;第六获取单元402,用于依据所述I帧头部的地址获取所述I帧数据;解码单元403,用于将所述I帧数据发送至解码器进行解码,并播放所述I帧。本发明进行快进快退时,通过在第一时间的基础上跳转固定时间方法来实现,避免采用跳转固定的字节,因此针对不同格式的TS文件,只要TS文件的时长相同,通过跳转固定时间的方式进行快进或快退时,跳转次数是一致的,因此在TS文件中进行快进或快退的时间是一致的。此外,现有技术中只在快进快退时再查找I帧,对CPU要求很高,一般低端的CPU无法满足高倍速快进快退。本发明通过此外本发明采用在后台遍历I帧的方式创建辅助文件,辅助文件仅需创建一次,在下次播放该文件时进行快进快退时直接使用已有的辅助文件即可,避免了 CPU在快进快进时,以便遍历I帧以便播放TS文件的方式,对CPU的要求较低,而且也可以实现高倍速的播放,并提高播放效率。本实施例方法所述的功能如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算设备可读取存储介质中。基于这样的理解,本发明实施例对现有技术做出贡献的部分或者该技术方案的部分可以以软件产品的形式体现出来,该软件产品存储在一个存储介质中,包括若干指令用以使得一台计算设备(可以是个人计算机,服务器,移动计算设备或者网络设备等)执行本发明各个实施例所述方法的全部或部分步骤。而前述的存储介质包括:U盘、移动硬盘、只读存储器(ROM, Read-Only Memory)、随机存取存储器(RAM, Random Access Memory)、磁碟或者光盘等各种可以存储程序代码的介质。本说明书中各个实施例采用递进的方式描述,每个实施例重点说明的都是与其它实施例的不同之处,各个实施例之间相同或相似部分互相参见即可。对所公开的实施例的上述说明,使本领域专业技术人员能够实现或使用本发明。对这些实施例的多种修改对本领域的专业技术人员来说将是显而易见的,本文中所定义的一般原理可以在不脱离本发明的精神或范围的情况下,在其它实施例中实现。因此,本发明将不会被限制于本文所示的这些实施例,而是要符合与本文所公开的原理和新颖特点相一致的最宽的范围。
权利要求
1一种TS文件快进快退的方法,其特征在于,包括: 获取当前播放TS文件的第一时间; 依据所述第一时间与进行快进或快退的倍速,获取当前倍速下的第二时间; 在预设的辅助文件中,获取与所述第二时间距离最近的第三时间; 获取与所述第三时间所对应的I帧数据,并播放所述I帧数据。
2按权利要求1所述的方法,其特征在于,所述预设的辅助文件的创建过程包括: 步骤A:建立与TS文件名称一致的辅助文件; 步骤B:读取所述TS文件中的TS包; 步骤C:若所述TS包为视频数据且所述TS包中包含I帧头部,则获取所述I帧头部的时间与地址; 步骤D:将所述I帧头部的时间与地址存储至所述辅助文件; 步骤E:判断所述辅助文件是否完整,若所述辅助文件不完整,进入步骤F,若所述辅助文件完整,则进入步骤G ; 步骤F:跳转至下一个TS包,进入步骤B ; 步骤G:将所述辅助文件作为预设的辅助文件。
3按权利要求2所述的方法,其特征在于,所述判断所述预设的辅助文件是否完整包括: 判断预设的辅助文件中的标志位是否有效; 若所述标志位无效,则判定所述辅助文件不完整,若所述标志位有效,则判定所述辅助文件完整。
4按权利要求2所述的方法,其特征在于,在步骤D之后还包括: 依据所述辅助文件中除第一校验位之外的数据,计算所述辅助文件的第二校验位; 判断所述第二校验位与所述第一校验位是否一致,若一致进入步骤E,若不一致,则进入步骤A。
5按权利要求1所述的方法,其特征在于,所述依据所述第一时间与进行快进或快退的倍速,获取当前倍速下的第二时间包括: 依据所述快进的倍速,获取当前倍速下的第一时间差值,将所述第一时间与所述第一时间差值的和值作为所述第二时间; 依据所述快退的倍速,获取当前倍速下的第二时间差值,将所述第一时间与所述第二时间差值的和值作为所述第二时间。
6按权利要求1所述的方法,其特征在于,所述获取与所述第三时间所对应的I帧数据,并播放所述I帧包括: 获取与所述第三时间所对应的I帧头部的地址; 依据所述I帧头部的地址获取所述I帧数据; 将所述I帧数据发送至解码器进行解码,并播放所述I帧。
7按权利要求2所述的方法,其特征在于,所述TS包为视频数据且所述TS包中包含I帧头部的确定过程包括: 若所述TS包中的包识别码PID等于0X20且TS包中含有标识0X000001B, 则判定所述TS包为视频数据且所述TS包中包含I帧头部。
8一种TS文件快进快退的装置,其特征在于,包括: 第一获取单元,用于获取当前播放TS文件的第一时间; 第二获取单元,用于依据所述第一时间与进行快进或快退的倍速,获取当前倍速下的第二时间; 第三获取单元,用于在预设的辅助文件中,获取与所述第二时间距离最近的第三时间; 第四获取单元,用于获取与所述第三时间所对应的I帧数据,并播放所述I帧数据。
9按权利要求8所述的装置,其特征在于,还包括: 创建单元,用于创建预设的辅助文件,具体的步骤包括: 步骤A:建立与TS文件名称一致的预设的辅助文件; 步骤B:读取所述TS文件中的TS包; 步骤C:若所述TS包为视频数据且所述TS包中包含I帧头部,则获取所述I帧头部的时间与地址; 步骤D:将所述I帧头部的时间与地址存储至所述预设的辅助文件; 步骤E:判断所述预设的辅助文件是否完整,若所述辅助文件不完整,进入步骤B,若所述辅助文件完整,则所述预设的辅助文件创建完成。
10按权利要求8所述的装置,其特征在于,所述第二获取单元包括: 第一计算单元,用于依据所述快进的倍速,获取当前倍速下的第一时间差值,将所述第一时间与所述第一时间差值的和值作为所述第二时间; 第二计算单元,用于依据所述快退的倍速,获取当前倍速下的第二时间差值,将所述第一时间与所述第二时间差值的和值作为所述第二时间。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)