一种I帧检索方法及装置 【技术领域】
本发明涉及多媒体技术领域,尤其一种I帧检索方法及装置。
背景技术
IPTV(Internet Protocol Television,互联网协议电视)业务是指通过互联网协议IP承载网络向用户提供并且能够支持交互能力的电视节目直播、视频点播、时移播放以及其它各种应用型业务的业务总称。IPTV系统中至少包括服务器、网络、机顶盒、电视机等设备,在使用时,由服务器将多媒体数据通过网络发送给机顶盒,机顶盒对数据解码并输出到电视机上播放。
IPTV业务中的视频点播、时移播放等业务应用需要用到I帧检索技术,以方便用户进行定位播放、快进快退等操作。例如在定位播放时,需要跳到定位时间点最近的一个I帧进行播放,因为I帧前面的数据都不能被正确解码,若将这些数据发送给解码器,既浪费带宽和时间也不能使这些数据被解码,因而如何快速准确定位到该最近的I帧则非常关键。又例如在快进快退时,由于网络带宽的限制,为了快速响应用户的快进快退操作,服务器发送给机顶盒的数据都是I帧数据,所以在提供快进快退功能时,需要服务器预先准确知道I帧的具体位置。
综上,针对各种业务应用,无论服务器还是机顶盒都可能需要在某种应用场景下,需要快速检索I帧,准确及时的定位到I帧位置。目前IPTV业务中使用的视频压缩算法一般是H.264协议,打包时采用TS(TransportStream,传输流)的方式,当从TS流中检索I帧时,需要分析TS流的语法,分析码流中H.264的语法,以确定I帧的起始位置和结束位置。在分析H.264协议的比特流时至少要解析出SPS(Sequence Parameter Set,序列参数集)、PPS(Picture Parameter Set,图像参数集)、片头(Slice)的语义,因而需要耗费一定的内存空间和CPU资源,在时间上也会增加额外的消耗,会影响定位I帧时的速度。
【发明内容】
本发明所要解决的技术问题在于,提供一种I帧检索方法及装置,用于快速准确的找到I帧的起始位置和结束位置,实现I帧检索定位。
为了解决上述问题,本发明提出了一种I帧检索方法,包括如下步骤:
S1:获取传输流中的一个传输流包,判断该传输流包为视频包且包含打包的基本码流(PES)头时,进一步判断当前是寻找I帧的起始位置还是结束位置,若是寻找起始位置,则转步骤S2,若是寻找结束位置,则转步骤S3;
S2:若所述PES头之后的字节包含序列参数集(SPS)或图像参数集(PPS)的起始码,则确定当前的传输流包为I帧的起始位置,返回步骤S1继续获取下一个传输流包进行处理;
S3:若所述PES头之后的字节包含有片头(Slice)信息,则判断片头信息中的起始标识元素是否标识为本帧图像的起始数据,若是,则确定前一传输流包为I帧的结束位置,确定结束位置后,返回步骤S1继续获取下一个传输流包进行处理。
进一步地,步骤S1中,通过判断当前传输流包的包标识符是否为传输流中的视频包标识符,来判定所述传输流包是否为视频包。
进一步地,步骤S1中,若当前传输流包的包标识符为传输流中的视频包标识符,则判定所述传输流包是视频包,进一步,若当前传输流包的有效负载的前三字节是所述PES的起始码,则判定本传输流包中包含有所述PES头信息。
进一步地,步骤S3中,若在所述PES头之后的数据中,当前网络抽象层类型是即时刷新图像的片头、非即时刷新图像的片头、序列参数集、图像参数集之一,所述PES头之后的数据是包含有片头(Slice)信息。
本发明还提供一种用于I帧检索的检索装置,包括如下模块:
传输流包解析模块,用于获取传输流中的传输流包,对传输流包逐个分析,判断当前传输流包是否为视频包,若是则送至打包的基本码流(PES)包分析模块处理;PES包分析模块判断传输流包中包含PES头时,将传输流包交由检索控制模块处理;
检索控制模块,判断当前需要寻找I帧的起始位置,则交由起始位置查找模块处理;若是需要寻找I帧结束位置,则交由结束位置查找模块处理;
起始位置查找模块,用于判断所述PES头之后的字节是否包含序列参数集(SPS)或图像参数集(PPS)的起始码,若是,则确定当前的传输流包为I帧的起始位置,通知所述传输流包解析模块继续获取下一个传输流包进行处理;
结束位置查找模块,用于判断所述PES头之后的字节是否包含有片头(Slice)信息,若是交由片头解析模块判断片头信息中的起始标识元素是否标识为本帧图像的起始数据,若为起始数据,则确定前一传输流包为I帧的结束位置,确定结束位置后,通知所述传输流包解析模块继续获取下一个传输流包进行处理。
进一步地,所述传输流包解析模块,根据当前传输流包的包标识符是否为传输流中地视频包标识符,来判定所述传输流包是否为视频包。
进一步地,所述PES包分析模块,在所述传输流包为视频包时,根据当前传输流包的有效负载的前三字节是否为所述PES的起始码,来判定本传输流包中是否包含有所述PES头信息。
进一步地,所述结束位置查找模块,用于根据所述PES头之后的数据中,当前网络抽象层类型是即时刷新图像的片头、非即时刷新图像的片头、序列参数集、图像参数集之一,来判定所述PES头之后的数据是否包含有片头(Slice)信息。
所述检索装置进一步包括:
缓存模块,用于对接收到传输流进行缓存,将若干传输流包进行保存,供所述传输流包解析模块获取所述传输流包。
本发明的I帧检索方法与装置,在检索I帧时,不用解析H.264中的SPS、PPS、slice等语法元素,而通过对TS流中的各个TS包进行简单比较和判断就可以定位I帧位置,从而能够找到I帧的起始位置和结束位置,能够快速准确的实现I帧检索定位,为用户相关业务应用提供了快速响应。
【附图说明】
图1是本发明中实现I帧检索方法的流程图;
图2是本发明中实现I帧检索方法的一个具体实施例示意图;
图3是本发明中实现I帧检索的检索装置的结构框图。
【具体实施方式】
为使本发明的目的、技术方案和优点更加清楚,以下结合附图对本发明作进一步地详细说明。
本发明涉及IPTV(Internet Protocol Television,互联网协议电视)领域中H.264TS流(Transport Stream,传输流)的I帧检索技术。由于在IPTV系统中,每个I帧前面都会有序列参数集SPS和图像参数集PPS,然后会打上PES包头,封装在TS包中。本发明则通过提供一种高效快速的I帧检索方法及装置,只需要分析TS流语法,对TS包经过简单的比较,根据PES(PacketElementary Stream,打包的基本码流)包头后面的数据比对判断,就能准确定位出I帧的起始位置和结束位置,这样可以节约内存空间和CPU资源,更容易在嵌入式设备上实现。本发明无需解析H.264中的SPS、PPS、slice等语法元素,通过简单比较和判断就可以定位I帧位置,具有快速、简便、准确等优点。
基于上述思想,本发明的I帧检索方法,如图1所示,包括如下步骤:
S1:获取传输流中的一个传输流包,判断该传输流包为视频包且包含打包的基本码流(PES)头时,进一步判断当前是寻找I帧的起始位置还是结束位置,若是寻找起始位置,则转步骤S2,若是寻找结束位置,则转步骤S3;
S2:若所述PES头之后的字节包含序列参数集(SPS)或图像参数集(PPS)的起始码,则确定当前的传输流包为I帧的起始位置,返回步骤S1继续获取下一个传输流包进行处理;
S3:若所述PES头之后的字节包含有片头(Slice)信息,则判断片头信息中的起始标识元素是否标识为本帧图像的起始数据,若是,则确定前一传输流包为I帧的结束位置,确定后,返回步骤S1继续获取下一个传输流包进行处理。
步骤S1中,若传输流包不是视频包,则直接获取传输流中的下一个传输流包进行处理,判断时,若当前TS包的PID(Packet Identifier,包标识符)是TS流中的视频PID,则说明本TS包是视频包;若是视频包但不包含PES头时,直接获取传输流中的下一个传输流包进行处理,其中,若当前TS包的有效负载的前三字节是PES起始码0x000001,则可判定本TS包中包含PES头信息,否则,不包含。
步骤S2中,若传输流包中不包含SPS/PPS参数集的起始码,则说明该TS包里面没有I帧的起始数据,直接返回步骤S1继续分析下一个TS包;
步骤S3中,若PES头之后的数据中,若当前NAL(Network AbstractionLevel,网络抽象层)类型是IDR(Instantaneous Decoder Refresh,即时刷新)图像的片头slice、非IDR图像的slice、序列参数集、图像参数集之一,则说明该NAL后的数据是slice头信息;否则返回步骤S1继续分析下一个TS包;
其中,所述片头信息中的所述起始标识元素是当前slice头信息的first_mb_in_slice语法元素,判断first_mb_in_slice语法元素的值是否为0,若是则说明该slice的第一个宏块是本帧图像的第一个宏块,从而进一步说明该slice是本帧图像的起始数据,即找到了新的一个帧的起始位置,那么就可以判定上一个TS包就是I帧的结束位置;若此语法元素first_mb_in_slice的值不为0,则直接返回步骤S1继续分析下一个TS包。
如图2所示,显示了本发明对I帧检索的具体流程图,在接收到TS流后将其放在内存中,然后对TS包逐个进行分析,具体实现I帧检索的步骤如下:
第一步,逐个分析TS包,分析每一TS包时,先判断该TS包是否为视频包,若当前TS包的PID(Packet Identifier,包标识符)是TS流中的视频PID,则说明本TS包是视频包,转第二步;否则,说明本TS包不是视频包,转第一步分析下一个TS包;
第二步,判断TS包中是否包含PES(Packet Elementary Stream,打包的基本码流)头,若是,则转第三步,否则转至第一步;具体地,若当前TS包的有效负载的前三字节是PES起始码0x000001,则可判定本TS包中包含PES头信息,否则本TS包中不包含PES头信息。
第三步,判断当前是寻找I帧的起始位置还是结束位置,若是需要寻找I帧的起始位置则转第四步;若是需要寻找I帧结束位置则转第五步;
第四步,跳过PES头所包含的字节,判断后续字节是否包含SPS/PPS参数集的起始码,若是则说明当前的TS包是I帧的起始位置,然后转回第一步继续分析下一个TS包,寻找I帧的结束位置;若不包含SPS/PPS参数集的起始码,则说明该TS包里面没有I帧的起始数据,直接转第一步继续分析下一个TS包;
第五步,判断当前的TS包中PES头后续数据是否包含有Slice头信息,若当前NAL(Network Abstraction Level,网络抽象层)类型是IDR(Instantaneous Decoder Refresh,即时刷新)图像的片头slice、非IDR图像的slice、序列参数集、图像参数集之一,则说明该NAL后的数据是slice头信息,则转第六步;否则转第一步;
第六步,判断当前slice头信息的first_mb_in_slice语法元素的值是否为0,若first_mb_in_slice语法元素的值为0,则说明该slice的第一个宏块是本帧图像的第一个宏块,从而进一步说明该slice是本帧图像的起始数据,即找到了新的一个帧的起始位置,那么就可以判定上一个TS包就是I帧的结束位置,判定结束位置后,则转至第一步继续分析下一个TS包,寻找下一个I帧的起始位置。若此语法元素first_mb_in_slice的值不为0,则直接转至第一步。
本发明的用于I帧检索的检索装置,如图3所示,包括如下模块:
缓存模块301,用于对接收到TS流进行缓存,将若干TS包进行保存。
TS包解析模块302,用于从缓存模块中获取TS包,对TS包逐个分析,用于判断当前TS包是否为视频包,若是,则将该TS包交由PES包分析模块,否则获取下一个TS包继续分析;分析时,若当前TS包的PID(PacketIdentifier,包标识符)是TS流中的视频PID,则说明本TS包是视频包。
PES包分析模块303,用于判断TS包中是否包含PES(Packet ElementaryStream,打包的基本码流)头,若是,则交由检索控制模块处理,否则,通知TS包解析模块继续获取下一个TS包进行分析;判断时,若当前TS包的有效负载的前三字节是PES起始码0x000001,则可判定本TS包中包含PES头信息。
检索控制模块304,用于判断当前是寻找I帧的起始位置还是结束位置,若是需要寻找I帧的起始位置,则交由起始位置查找模块处理;若是需要寻找I帧结束位置,则交由结束位置查找模块处理。
起始位置查找模块305,用于跳过PES头所包含的字节,判断后续字节是否包含SPS/PPS参数集的起始码,若是则说明当前的TS包是I帧的起始位置,通知TS包解析模块继续获取下一个TS包进行分析,寻找I帧的结束位置;否则,直接通知TS包解析模块继续获取下一个TS包。
结束位置查找模块306,用于判断当前的TS包中PES头后续数据是否包含有Slice头信息,若当前NAL(Network Abstraction Level,网络抽象层)类型是IDR(Instantaneous Decoder Refresh,即时刷新)图像的片头slice、非IDR图像的slice、序列参数集、图像参数集之一,则说明该NAL后的数据是slice头信息,则交由片头解析模块处理;否则通知TS包解析模块继续获取下一个TS包。
片头解析模块307,用于判断当前slice头信息的first_mb_in_slice语法元素的值是否为0,若first_mb_in_slice语法元素的值为0,则说明该slice的第一个宏块是本帧图像的第一个宏块,从而进一步说明该slice是本帧图像的起始数据,即找到了新的一个帧的起始位置,那么就可以判定上一个TS包就是I帧的结束位置,判定结束位置后,则通知TS包解析模块继续分析下一个TS包,寻找下一个I帧的起始位置。若此语法元素first_mb_in_slice的值不为0,则直接通知TS包解析模块继续分析下一个TS包。
本发明的用于I帧检索的检索装置,可以位于服务器侧,也可以位于终端侧,可以为单独的装置,也可以是服务器或机顶盒的组成部分,用于无论服务器侧还是终端侧对I帧进行快速准确检索定位。
采用本发明所述的I帧检索方法与装置,不用解析H.264中的SPS、PPS、slice等语法元素,而通过对TS流中的各个TS包通过简单比较和判断就可以定位I帧位置,找到I帧的起始位置和结束位置,能够快速准确的实现I帧检索定位,为用户相关业务应用提供了快速响应。
以上所述仅为本发明的实施例而已,并不用于限制本发明,对于本领域的技术人员来说,本发明可以有各种更改和变化。凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的权利要求范围之内。