基于单输入接口的mpeg2文件实时播放的方法

文档序号:7615255阅读:224来源:国知局
专利名称:基于单输入接口的mpeg2文件实时播放的方法
技术领域
本发明是一种实现单输入接口IP机顶盒中的MPEG2流媒体文件,进行下载并实时播放的方法。
背景技术
目前由于网络带宽、硬件本身处理能力和协议规范等方面的限制,从网络媒体下载大量的音、视频多媒体数据,对下载时间和存储空间都有很高的要求。对于存储空间比较小,对实时性要求比较高的单输入接口IP机顶盒来说,这一矛盾就显得尤为突出。
现有采用的流媒体技术很好地解决了这一难题。流是近年在网络上出现的新概念,主要是指通过网络传输多媒体数据的技术总称。
流媒体则包含广义和狭义两种内涵广义上的流媒体,指的是使音频和视频形成稳定和连续的传输流和回放流的一系列技术、方法和协议的总称,即流媒体技术;狭义上的流媒体,是相对于传统的下载-回放方式而言的,指的是一种从网络上获取音频和视频等多媒体数据的新方法,其能够支持多媒体数据流的实时传输和实时播放。通过流媒体技术,服务器能够向客户端发送稳定和连续的多媒体数据流,客户端在接收数据的同时以一个稳定的速率回放,而不用等数据全部下载完之后再进行回放,即实现一种实时播放的模式。
目前流媒体传输主要采用的是RTSP,RTP/RTCP协议。RTP协议在传输时将音、视频数据进行分开传输,这样客户端接收到的数据包括独立的音、视频文件,因此一般的软件播放器采用音、视频分别接收和解码的方法,如后附图3所示。而且,现有专门用于支持播放流媒体的硬件解码芯片较少,一般硬件解码芯片只支持单接口的本地文件播放,因此这类解码器是无法针对RTP协议传输数据进行解码和实时播放的。

发明内容
本发明所述基于单输入接口的MPEG2文件实时播放的方法,其目的在于解决上述问题而针对现有单输入接口解码芯片,将经过RTSP,RTP/RTCP传输协议分离的音、视频数据参考MPEG2 PS流系统文件组织格式,合成类似MPEG2系统格式的数据流文件,从而实现在单输入接口IP机顶盒中进行MPEG2流媒体文件的下载和实时播放。
所述基于单输入接口的MPEG2文件实时播放的方法,是针对RTP数据文件的封装过程而采取一种与之相反的过程,即在解码器上实现由RTP包还原成MPEG流。
根据RFC3550和RFC2250,流媒体服务器端MPEG流封装成RTP协议包时,一个视频RTP包,是由RTP固定包头、MPEG视频特定标头(可能有扩展头)、RTP有效载荷三部分构成的。一个音频RTP包,是由RTP固定包头、MPEG音频特定标头、RTP有效载荷三部分构成的。
上述过程实际上是对MPEG2进行系统层解析的过程,即从MPEG流中搜索一些重要的信息填充到RTP包中几个重要的数据结构中,同时根据已有的规范来完成一个RTP包的封装。
而所述基于单输入接口的MPEG2文件实时播放的方法,是根据RTP包中的重要数据完成解码器进行实时播放,而实现MPEG2流媒体的PACK和PACKET头部数据填充,并按RTP序列号缓存重组得到的基本数据流,形成完整的MPEG2数据格式后,送入解码器进行解码、播放。
经过RTP传输后得到的分离媒体数据与本地文件的复用数据相比,一方面缺少了原来整个MPEG2文件的头部信息;另一方面,MPEG2文件中的PACK头部信息也没有传输,只是将某些字段映射到RTP头部。
所述基于单输入接口的MPEG2文件实时播放的方法,根据RTSP流传输中一些控制信息获得文件解码信息,用来初始化硬件解码器;通过RTSP协议获得文件的SDP(Session Description Protocol,即会话描述协议)中得到媒体的类型、编码格式和持续时间等信息参数。其中,SDP用于说明一个流媒体会话的基本属性,包括媒体类型和编码格式、所需要的传输带宽、播放的时间范围、所需Buffer信息等。
根据MPEG2标准文件格式填充每帧数据的PACK和PACKET头部,通过RTP包的包头得到编码格式和时间戳;
根据MPEG2 PS文件标准(即ISO/IEC 13818标准)填充相应的文件头信息,形成完整的文件头部格式,并按RTP序列号缓存重组得到的基本数据流,并通过缓存送到硬件解码器。
如上述内容,从硬件解码器的角度来看,重新组成的MPEG2数据与本地播放的文件格式没有本质区别,从而可由现有的解码器对经过RTP传输后得到的分离媒体数据进行下载、重组和实时播放。
所述基于单输入接口的MPEG2文件实时播放的方法,其实现流程是第一步,通过RTSP协议传输的SDP信息解析出解码器实时播放需要的文件信息参数。
从SDP信息中可以获取的信息参数包括有,文件类型,持续时间,音频,视频的编码格式,采样频率,最大速率等,上述参数用来初始化硬件解码器。
第二步,从网络服务器接收包含流媒体数据的RTP包。
针对参考信息,首先根据RTP包中的负载类型,来区分是音频还是视频数据;然后根据RTP包中包含的序列号,从RTP包中提取媒体数据并进行重组;重组后的音频、视频数据文件是按顺序排列好的基本流,但此时仍不是完整的、具有逻辑意义的PACK文件,因此直接送给解码器是无法解码和实时播放的。
第三步,将音频、视频数据的每一帧都附加一个PACK头部。
第四步,在音频、视频数据的每一个帧前再分别增加上一个PACKET头部,以表明其是音频帧、还是视频帧,并且根据SDP信息填充缓冲区字段。
根据RTP包头中的时间戳信息填充显示时间戳PTS字段,其它的PACKET头部的字段按照固定格式填入相应的位信息。
第五步,将修改后的数据缓存,通过与硬件解码器的交互送入解码器进行解码,并将带有完整的MPEG2系统文件头部格式的数据进行实时播放。
如上述方法步骤所示,在实现MPEG2流媒体数据PACK和PACKET头部填充的过程中,MPEG2流媒体数据中的PACK数据码、复用速率、系统目标解码器缓冲区数据均从SDP信息中获取得到。
MPEG2流媒体数据中的流类型和显示时间戳,直接从RTP头部映射获得。
如上述方法步骤所示,在音频或视频数据的每一帧前附加PACK头部时,复用速率由以下表达式得出 其中,音频速率和视频速率是由SDP信息中“a=AvgBitRate:integer”字段中得出;PACKET长度为固定值,是由SDP信息中(a=AvgPacketSize:integer)字段中得到。
所述单输入接口的MPEG2文件实时播放的方法,其优点是可基于现有播放本地文件的解码芯片实时播放流媒体文件,不仅降低了系统设计和硬件投入成本,而且在不增加计算量的情况下实现视频点播功能。


图1是RTSP协议中的SDP描述;图2是RTP头部格式示意图;图3是现有RTP数据传输和解码流程示意图;图4是MPEG2流媒体数据的PACK示意图;图5是MPEG2流媒体数据的PACKET示意图;图6是根据本发明所述方法实现MPEG2流媒体数据PACK和PACKET头部填充示意图;图7是本发明所述解码芯片的实时播放流程图。
具体实施例方式
实施例1,如附图所示,所述基于单输入接口的MPEG2文件实时播放的方法步骤如下第一步,通过RTSP协议传输的SDP信息解析出解码器实时播放需要的文件信息参数。
从SDP信息中可以获取的信息参数包括有,文件类型,持续时间,音频、视频的编码格式,采样频率,最大速率等,上述参数用来初始化硬件解码器。
如图1所示,SDP中的下列参数可以获得的播放支持信息有“m=(媒体名称和传输地址)”字段获得媒体类型和编码格式;“a=*(0个或多个会话属性行)”字段的格式是a=<属性>:<值>,其中属性包括有,持续时间、采样频率、最大速率、视频的宽高,音频的通道个数等;第二步,从网络服务器接收包含流媒体数据的RTP包。
如图2所示,在RTP包中包括有如下参考信息,“Ver”为RTP协议版本号;“P”用于标志该RTP包的末尾是否包含有附加信息;“X”用于标志是否存在扩展头部;“CC”用于标志在固定头部后存在多少个CSRC标记;“M”是标志位;“负载类型”标记RTP包中所携带信息的类型;“SSRC”用于标识数据源;“CSRC”标识贡献的数据源。
针对上述参考信息,首先根据RTP包中的负载类型,来区分是音频还是视频数据;然后根据RTP包中包含的序列号,从RTP包中提取媒体数据并进行重组;重组后的音频、视频数据文件是按顺序排列好的基本流。
第三步,将音频、视频数据的每一帧都附加一个PACK头部。
如图4所示,PACK头部的起始码设置为是00 00 01 BA;接着填充2个固定位‘01’;随后的46bit是系统参考时钟,表示送入系统目标解码器的时间;除了中间穿插的标志位以外的各位均填充为0;这是因为我们采用人工送入的方式,解码的时间依赖于人工送入的时间,因此填充为0不会影响解码器正常解码;然后是24位的复用速率,表明码流进入解码器的速率,复用速率由下述表达式推算得出
其中,音频速率和视频速率是由SDP信息中“a=AvgBitRate:integer”字段中得出;PACKET长度为固定值,是由SDP信息中(a=AvgPacketSize:integer)字段中得到。
后面的保留位全部设置为1,同时不需要填充字节,所以后面的表示填充字节长度的3个字节填充为0。
第四步,在音频、视频数据的每一个帧前再分别增加上一个PACKET头部,以表明其是音频帧、还是视频帧、以及解码时间等。
根据RTP包头中的PT字段填充帧的类型,根据RTP包头中的时间戳信息填充PTS字段,其它PACKET头部的字段按照固定格式填入相应的位信息。
具体地,如图5所示,PACKET头部的起始码前缀是00 00 01;接下来的8个bit是stream_id,表示流的类型;若为音频帧则填充为C0;若为视频帧则填充为E0;接着16位是PACKET长度(packet_length),通过计算包头长度加数据长度获得;然后填充2个固定位‘10’,同时将其后的标志位PES_scrambling_control(加密控制)、PES_priority(负载优先级)、data_alignment_indicator(紧跟在PES分组头部后的访问单元数据类型)、ESCR_flag(是否有ESCR字段)、ES_rate_flag(是否有ES_rate字段)、以及PES_CRC_flag(是否有CRC字段)等位设置为‘0’;标志位PES_extension_flag设置为1,表明此PACKET头后面存在一个扩展域;PTS_DTS_flags设置为‘10’,表明后面的时间戳是PTS。
接着下一个字节,表示PACKET头部中可选区域的数据长度,设为5,即PTS的长度为5个字节。
接下来填充4个固定bit‘0010’,表明后面是解码时间戳PTS;然后将RTP包头中的时间戳映射成PTS;由于前面设置标志位PES_extension_flag为1,所以存在有下列扩展域标志位PES_private_data_flag、pack_header_field_flag、program_packet_sequence_counter_flag均设置为0;标志位P-STD_buffer_flag置为1;然后是3bit保留位,全部置0;标志位PES_extension_flag_2置1,标志后面有PES_extension_field_length字段;随后填充2个固定位‘01’,表明后面跟着的是系统目标解码器缓冲区缩放因子P-STD_buffer_scale(1个bit)和系统目标解码器缓冲区的大小P-STD_buffer_size(13个bit);对于P-STD_buffer_scale字段,若为音频帧则填充为0;若为视频帧,则填充为1;对于P-STD_buffer_size字段,其表示解码器缓冲区的大小,填充时首先判断视频的宽(a=Width:integer)和高(a=Height:integer)的大小(由SDP中获得)。如果宽小于等于320,高小于等于240,则整个16位(2比特固定位‘01’+1比特P-STD_buffer_scale+13比特P-STD_buffer_size)音频填充为“40 20”,视频则填充为“60 2E”;如果不满足此约定,则视频缓冲区大小则从[64×1024]、以及 中取较大的一个,其中,Rvmax是最大视频速率,其从SDP信息的“a=MaxBitRate:integer”字段中获得;音频缓冲区,最大取32×128字节。
由于前面标志位PES_extension_flag_2设置为1,所以接下来是PES_extension_field_length字段,通过计算扩展域的长度来填充。
第五步,将修改后的数据缓存,通过与硬件解码器的交互送入解码器进行解码,并将带有完整的MPEG2系统文件头部格式的数据进行实时播放。
如图6和上述方法步骤所示,在实现MPEG2流媒体数据PACK和PACKET头部填充的过程中,MPEG2流媒体数据中的PACK数据码、复用速率、系统目标解码器缓冲区数据均从SDP信息中获取得到。
MPEG2流媒体数据中的流类型和显示时间戳,直接从RTP头部映射获得。
如图7所示,应用支持单接口、本地文件播放的解码器,如本发明所述的MPEG2文件实时播放的方法,首先,进行硬件初始化;然后,通过RTSP协议获取SDP信息并分析解码器需要的支持播放信息;随后,解码器通过交互判断是否可以解码;若可以解码,则利用RTP/RTCP协议接收数据,在实现MPEG2流媒体数据PACK和PACKET头部填充后,根据标志位向解码器中交互送入音、视频数据,以进行解码和实时播放的;上述过程直至完成全部数据被解码和播放。
权利要求
1.一种基于单输入接口的MPEG2文件实时播放的方法,其特征在于根据RTSP流传输中一些控制信息获得文件解码信息,用来初始化硬件解码器;通过RTSP协议获得文件的SDP中得到相关信息参数;根据MPEG2标准文件格式填充每帧数据的PACK和PACKET头部,通过RTP包的包头得到编码格式和时间戳;根据MPEG2文件标准填充相应的文件头信息,形成完整的文件头部格式,并按RTP序列号缓存重组得到的基本数据流,并通过缓存送到硬件解码器。
2.根据权利要求1所述的基于单输入接口的MPEG2文件实时播放的方法,其特征在于所述MPEG2文件实时播放的方法流程是,第一步,通过RTSP协议传输的SDP信息解析出解码器实时播放需要的文件信息参数;第二步,从网络服务器接收包含流媒体数据的RTP包;针对参考信息,首先根据RTP包中的负载类型,来区分是音频还是视频数据;然后根据RTP包中包含的序列号,从RTP包中提取媒体数据并进行重组;重组后的音频、视频数据文件是按顺序排列好的基本流;第三步,将音频、视频数据的每一帧都附加一个PACK头部;第四步,在音频、视频数据的每一个帧前再分别增加上一个PACKET头部,以表明其是音频帧、还是视频帧,并且根据SDP信息填充缓冲区字段;根据RTP包头中的时间戳信息填充显示时间戳PTS字段,其它的PACKET头部的字段按照固定格式填入相应的位信息;第五步,将修改后的数据缓存,通过与硬件解码器的交互送入解码器进行解码,并将带有完整的MPEG2系统文件头部格式的数据进行实时播放。
3.根据权利要求2所述的基于单输入接口的MPEG2文件实时播放的方法,其特征在于在实现MPEG2流媒体数据PACK和PACKET头部填充的过程中,MPEG2流媒体数据中的PACK数据码、复用速率、系统目标解码器缓冲区数据均从SDP信息中获取得到;MPEG2流媒体数据中的流类型和显示时间戳,直接从RTP头部映射获得。
4.根据权利要求3所述的基于单输入接口的MPEG2文件实时播放的方法,其特征在于在音频或视频数据的每一帧前附加PACK头部时,复用速率由以下表达式得出, 其中,音频速率和视频速率是由SDP信息中“a=AvgBitRateinteger”字段中得出;PACKET长度为固定值,是由SDP信息中(a=AvgPacketSizeinteger)字段中得到。
全文摘要
本发明所述基于单输入接口的MPEG2文件实时播放的方法,针对现有单输入接口解码芯片将经过RTSP,RTP/RTCP传输协议分离的音、视频数据,合成类似MPEG2 PS系统格式的数据流文件,从而实现在单输入接口中进行MPEG2流媒体文件的下载和实时播放。所述基于单输入接口的MPEG2文件实时播放的方法,是针对RTP数据文件的封装过程而采取一种与之相反的过程,即在解码器上实现由RTP包还原成MPEG流。
文档编号H04L29/06GK1972444SQ20051004544
公开日2007年5月30日 申请日期2005年11月27日 优先权日2005年11月27日
发明者刘琚, 胥长彬, 乔建苹, 李玉军, 周鹏 申请人:海信集团有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1