一种基于MPEG-2传输流的特技流生成方法
技术领域
本发明涉及视频点播技术领域,尤其涉及一种基于MPEG-2传输流的特技流生成方法。
背景技术
点播电视***使得观众能有选择的观看存储在媒体服务器的节目,服务器通过广播网之类的数据传送信道接至用户机顶盒等设备,当观众选中一个节目时,对应节目数据通过传送信道到达用户终端。除了能选择节目外,观众还常常希望能对观看的节目进行快进、快退等特技播放操作。由于传送信道带宽有限,对于快速播放要求,无法采用简单加快节目传送速度方式,需要服务器端发送专门的特技播放流等方法来解决。
MPEG-2***部分是描述如何将视、音频以及其它数据的基本流组合成一个或多个适合于存储或传送的码流规范。MPEG-2是以视频和音频的广泛应用为目的而制定的,所以,它除了具有节目流(PS)之外,还有传输流(TS)。
音频和视频等数字信号经过压缩编码各自形成基本流(ES),这个基本流并不能以应用为目的而直接存储或传送,还必需将其送进特定的子***(或称打包器),把基本流按一定的格式分成段落,并加入特定的标志字形成打包基本流(PES)。PES的头部包含有许多信息,可藉此识别这个PES是视频还是音频、或是数据,也可以知道包的长度等其它信息。经过打包器形成PES包后,信号被分别以两种不同类型的码流送入信道,一种叫节目流,一种叫传输流。
PES流进入传输复用器中,被分割成一个个固定长度的包,称为传输包。由传输包组成的数据流称为传输流(TS)。TS流是各传输***之间的连接格式,是传输设备间的基本接口。
TS流是由一道或多道节目组合而成的。每道节目由一个或多个原始流和一些其它流复合在一起,其中包括有视频流、音频流、节目特殊信息流(PSI)和其它数据包。其中PSI表有4种类型:节目相关表(PAT)、节目映射表(PMT)、网络信息表和条件访问表。
节目关联表(Program Association Table,PAT)所在分组的PID=0PAT中列出了传输流中存在的节目流PAT指定了传输流中每个节目对应PMT所在分组的PID PAT的第一条数据指定了NIT所在分组的PID,其他数据指定了PMT所在分组的PID。
节目映射表(Program Map Table,PMT)所在分组的PID由PAT指定,所以要先解出PAT,再解PMT。PMT中包含了属于同一节目的视频、音频和数据原始流的PID。找到了PMT,解多路复用器就可找到一道节目对应的每个原始流的PID,再根据原始流PID,去获取原始流。
MPEG-2视频编码结构从上至下依次为:视频序列层(Sequence)、图像组层(Group of Picture,GOP)、图像层(Picture)、像条层(Slice)、宏块层(MacroBlock)和像块层(Block)。
序列指构成某路节目的图像序列,序列起始码后的序列头中包含了图像尺寸、宽高比、图像速率等信息。序列扩展中包含了一些附加数据。为保证能随时进入图像序列,序列头是重复发送的。
序列层下是图像组层,一个图像组由相互间有预测和生成关系的一组I、P、B帧像构成,但头一帧图像总是I帧。GOP头中包含了时间信息。
图像组层下是图像层,分为I、P、B三类。PIC头中包含了图像编码的类型和时间参考信息。I帧为帧内编码,P帧为前向预测编码,B帧为双向预测编码,即I帧能单独解码,P帧需依赖前面的I或P帧才能解码,B帧需依赖它前后的I或者P帧。
图像层下是像条层,一个像条包括一定数量的宏块,其顺序与扫描顺序一致,MPML中一个像条必须在同一宏块行内。
像条层下是宏块层。MPEG-2中定义了三种宏块结构:4:2:0宏块、4:2:2宏块和4:4:4宏块,分别代表构成一个宏块的亮度像块和色差像块的数量关系。
对于远程点播而言,由于带宽限制,想要达到快速播放效果只有针对发送数据进行处理,一类方案是直接通过对节目源处理编码生成符合mpeg-2标准的特技播放流,当需要快速播放时候,只需改为发送特技播放流数据即可。另一类方案是对节目源不进行编码处理,只发送特技播放所需的部分数据。
第一类方案目前技术有几种,一是直接将节目源解码,按倍速将选中的解码图进行重新编码,这种方式得到码流可以适应任何倍速,且播放画面质量连续稳定,缺点就是代价大,需要对源解码和重编码。对这种方式的改进技术有只解码部分图像,比如较低倍速只解码I、P帧,较高倍速下只解码I帧,编码步骤一样,但仍然存在消耗资源过大的缺点。
第二类方案可理解为跳转技术,针对MPEG-2编码特性,由于I帧可以单独解码,P帧只依赖前向I、P帧特性,可以只传送挑选的I帧或者I、P帧数据。挑选数据过程既可以由服务器完成,也可以由机顶盒完成,但这类方案都要求解码器附加针对不连续码流的处理,即适用性受到限制。而且另一个缺点就是由于I、P帧大小并不保持不变,简单挑选部分数据情况下,码率随时变化,对发送信道有要求。在发送信道不支持变码率情况下,还得附加额外数据以达到固定码率。
发明内容
本发明的目的在于提出一种基于MPEG-2传输流的特技流生成方法,能够生成符合MPEG-2标准的特技流,从而无需对机顶盒等终端设备的解码器有特殊要求。
为达此目的,本发明采用以下技术方案:
一种基于MPEG-2传输流的特技流生成方法,包括以下步骤:
A、按序分析MPEG-2视频节目的传输流包,找到PID为0的PAT包,得到PMT表PID,保存PAT包数据,并根据PMT表PID找到PMT包,找到视频节目PID和节目时钟PID,保存PMT包数据;
B、提取I帧,构造出与I帧运动向量和预测误差都为零的P帧,形成新码流;
C、根据视频节目PID,进行新码流的传输流封装,获得P帧的大小;
D、根据视频节目PID,寻找新码流的视频PES头和视频序列头,分析视频序列信息得到帧率,保存视频PES信息;
E、在新码流的传输流包中,按照顺序找到一个图像组,根据这个图像组的图像个数,获得目前位置的图像总个数;
F、如果所述目前位置的图像总个数大于播放倍速和已经生成的特技流总图像数之积,则转至步骤G,否则抛弃当前图像组,并返回步骤E;
G、抽取当前图像组的I帧,放入特技流中,并计算当前图像组的I帧的大小;
H、将当前图像组的P帧放入特技流中,放入特技流中P帧的数量取决于以下公式:
((I帧的大小+P帧的数量*P帧的大小)*帧率)/(1+P帧的数量)<限定码率;
I、更新已经生成的特技流的总图像数;
J、在特技流的I帧前添加视频PES头信息、视频序列头信息和图像组信息,在特技流的P帧前添加视频PES头信息;
K、填写特技流每帧前视频PES头信息里的PTS值和DTS值;
L、对特技流中所有存在有效数据的传输流包修改连续计数器位,包括PAT包连续计数器、PMT连续计数器和视频包连续计数器;
M、在特技流中添加空包以达到码率固定,添加的空包加上后面要***的带PCR的空包总大小取决于以下公式:
((空包总大小+I帧的大小+P帧的数量*P帧的大小)*帧率)/(1+P帧的数量)和限定码率之间的差值最小;
N、对于特技流I帧所在包,如果PCR的PID和视频节目PID一致,改写带PCR的空包的PCR值,如果PCR的PID和视频节目PID不一致,每当I帧所在包数据量达到码率与40ms的乘积时,***一个附带PCR值的空包;对于特技流P帧所在包或者空包数据,每当数据量达到码率与40ms的乘积时,***一个附带PCR值的空包;
P、重复步骤E到步骤N,每次获得一个图像组长度的传输流,直到新码流的传输流包中所有图像组全部处理完成,将得到的传输流片段连接在一起,形成视频节目的特技流。
步骤E中,在新码流的传输流包中,找到一个图像组的起始码,再找到下一个图像组的起始码,从而判断这个图像组的图像个数。
步骤G中,从当前图像组起始位置到第一个不为I帧的图像起始码为止是一个完整的I帧,当前图像组中第一个且保存从I帧所在包到下一帧图像起始码之间的视频包的数据大小就是I帧的大小。
步骤K中,根据帧率和已经生成的特技流的总图像数,计算出每帧图像具体时刻,按照计算出来的时刻,填写特技流每帧前视频PES头信息里的PTS值和DTS值。
采用了本发明的技术方案,能够生成符合MPEG-2标准的特技流,从而无需对机顶盒等终端设备的解码器有特殊要求,应用广泛;由于生成特技流的同时无需进行图像解压和重新编码,相比以往的编解码生成码流方式效率大大提高,对运行环境需求很低,能满足大并发量要求;而且本发明技术方案灵活多变,既可以事先生成特技流并存储,在大并发量点播时特技播放也不会占用更多软件资源,而且存储的特技流也可以单独用于节目预览等特效,也可以实时处理生成码流,每次得到一个GOP长度即可发送,快速且无需占用大量存储空间。
附图说明
图1是本发明具体实施方式中基于MPEG-2传输流的特技流生成的流程图。
具体实施方式
下面结合附图并通过具体实施方式来进一步说明本发明的技术方案。
为了生成特技流且不重新编解码图像,显然必须利用原有的图像,由于帧内编码图像I帧可以单独解码而不依赖其他图像数据,所以可以将I帧作为特技播放流的组成图像,依据播放倍速要求,选择合适的I帧显示即可达到快速播放要求。
另一方面,由于MPEG-2标准中,帧率只有固定的若干种,并考虑到正常码流和特技流切换正常过渡,大多数IPQAM设备和机顶盒要求固定码率,生成的特技流的帧率和码率要与原码流一致。显然,如果仅将原码流的I帧作为特技流的全部图像是不够的。
举例来说,典型的MPEG-2视频图组结构为IBBPBBPBBPBB,也就是在每12副图像中有一副I帧,在低于12倍速播放情况下,I帧作为特技流的全部图像成员显然是不够的,在高于12倍时,虽然I帧数目是够了,但又引发了另外一个问题:I帧作为独立编码帧,其大小远超全部图像大小的平均值,在这种情况下,全部由I帧构成的码流的码率不仅会超出原码流的码率,也会超出IPQAM对单路码流的限制带宽。
综合上述而言,由于帧率和码率这两方面限制,生成的特技流中不仅需要有原码流的I帧存在,还需要添加额外的图像,这个图像还必须较小,使得所生成的特技流码率限定到一定范围。由此就产生一个问题,添加什么样的图像数据能使得解码器能正常解码并且不影响I帧显示效果。思考MPEG-2视频标准,三种图像类型中,P帧构成都是依赖与前向的I或者P帧数据,是前面已解码图像数据加上运动向量以及预测误差补偿而成,那么若P帧相对前面的图的运动向量和预测误差都为0,那么显示出的图像也就与前面完全一致了。到这一步,构造出这样一个P帧,也就解决了帧率和码率限制问题,因为每个I帧后面都添加上这样若干的P帧,机顶盒解码显示出来的P帧实际上全是I帧的内容,而且这样构造出的P帧很小,可以将码率拉低,在此基础上处理可以达到符合要求的固定码率。
最重要的帧率与码率限制根源问题解决后,就只是考虑生成的特技流符合MPEG-2标准的细节了。为了高效利用原码流数据,I帧数据可以包括其TS包头部分。针对本发明的技术方案构造的特技流,还有一些要求需满足:
1、在视频基本流层面:需存在图组头信息、序列头信息;
2、在打包视频流层面:需存在视频流头信息,以及显示时间标签、解码时间标签的正确和连续性;
3、在传输包分组(TS)层面:每0.5秒内需要有PAT,PMT表,每40ms内至少有一个PCR且正确连续,包计数器位数值连续,码率恒定。
对于这些要求的解决办法:
1、其中图组头信息、序列头信息、视频流头信息、PAT,PMT表都可以拷贝利用原码流的;
2、每个I帧前面***PAT,PMT表,基本能满足0.5秒要求;
3、每个PES分组中的PTS.DTS需要修改,PCR信息需要添加;
4、处理修改TS包的连续计数器位;
5、为达到固定码率,需要在每个图后面添加适当空包。
图1是本发明具体实施方式中基于MPEG-2传输流的特技流生成的流程图。如图1所示,基于MPEG-2传输流的特技流生成的流程包括以下步骤:
步骤101、解析MPEG-2视频节目,按序分析大小为188的传输流包,找到PID为0的PAT包,得到PMT表PID,保存PAT包数据,并根据PMT表PID找到PMT包,找到视频节目PID(video_pid)和节目时钟PID(pcr_pid),,保存PMT包数据。
步骤102、提取视频节目传输流包的每个图像组的I帧,将每个图像组内I帧后面图像全部构造成与I帧运动向量和预测误差都为零的P帧,形成IPPPP…方式的新码流。
步骤103、根据视频节目PID,进行新码流的传输流封装,获得P帧的大小p_size。
对新码流的传输流封装可以只提取单纯I帧,添加P帧数据,然后每个图组为单元进行封装;也可以提取的是包含I帧数据的TS封装,其后添加封装后的P帧数据,再进一步处理。
步骤104、根据视频节目PID,寻找新码流的视频PES头和视频序列头,分析视频序列信息得到帧率frame_rate,保存视频PES头信息。
步骤105、在新码流的传输流包中,按照顺序找到一个图像组,找到图像组的起始码(也代表找到了I帧头),再找到下一个图像组起始码,根据图像起始码00000100判断这个图像组的图像个数,根据这个图像组的图像个数,获得目前位置的图像总个数src_pic_num。
步骤106、播放倍速为speed,如果所述目前位置的图像总个数大于播放倍速和已经生成的特技流总图像数之积,即src_pic_num-speed*dst_pic_num<=0(dst_pic_num为已经生成的特就流的总图像数),则转至步骤107,否则抛弃当前图像组不处理,并返回步骤105。
步骤107、抽取当前图像组的I帧,放入特技流中,并计算当前图像组的I帧的大小i_size,其中从当前图像组起始位置到第一个不为I帧的图像起始码为止是一个完整的I帧,当前图像组中第一个且保存从I帧所在包到下一帧图像起始码之间的视频包的数据大小就是I帧的大小。
步骤108、将当前图像组的P帧放入特技流中,估算需添加的P帧数目p_num,显然P帧数目越多,生成的码流码率越低,从仅添加1副P帧开始,逐渐增大P帧数目,最终达到满足估算的码率低于限定码率,即(图像大小/图像时长)<限定码率。
因此放入特技流中P帧的数量取决于以下公式:
((i_size+p_num*p_size)*frame_rate)/(1+p_num)<BIT_RATE(其中BIT_RATE为限定码率)。
步骤109、更新已经生成的特技流的总图像数,即dst_pic_num+=1+p_num。
步骤110、在特技流的I帧前添加视频PES头信息、视频序列头信息和图像组信息,在特技流的P帧前添加视频PES头信息。
步骤111、根据帧率和已经生成的特技流的总图像数,计算出每帧图像具体时刻dst_pic_num/frame_rate,按照计算出来的时刻,填写特技流每帧前视频PES头信息里的PTS值和DTS值。
步骤112、对特技流中所有存在有效数据的传输流包修改连续计数器位,包括PAT包连续计数器、PMT连续计数器和视频包连续计数器。
步骤113、仅由前列数据构成的码流显然码率无法达到恒定,所以还必须添加若干空包以达到码率固定。在特技流中添加空包以达到码率固定,添加的空包加上后面要***的带PCR的空包总大小add_size取决于以下公式:
((空包总大小+I帧的大小+P帧的数量*P帧的大小)*frame-rate)/(1+P帧的数量)和限定码率之间的差值最小,即使得
((add_size+i_size+p_num*p_size)*frame_rate)/(1+p_num)和BIT_RATE最接近为止。
步骤114、码率是由PCR体现出来的,对于特技流I帧所在包,如果PCR的PID和视频节目PID一致,改写带PCR的空包的PCR值,如果PCR的PID和视频节目PID不一致,每当I帧所在包数据量达到码率与40ms的乘积时,***一个附带PCR值的空包;对于特技流P帧所在包或者空包数据,每当数据量达到码率与40ms的乘积时,***一个附带PCR值的空包。
步骤115、判断新码流的传输流包中所有图像组是否全部处理完成,如果没有,重复步骤105到步骤114,每次获得一个图像组长度的传输流,如果新码流的传输流包中所有图像组全部处理完成,则转至步骤116。
步骤116、将得到的传输流片段连接在一起,形成视频节目的特技流。
本具体实施方式中,特技流的帧率和码率可以与MPEG-2视频节目片源的帧率和码率不一致,只要传输设备和播放设备能侦测或获悉这种改变并适应即可,但常理来说,特技流的帧率和码率与MPEG-2视频节目片源的帧率和码率保持一致可以减少码流切换负担。
对于快进流,全部顺序处理即可,而对于快退流,既可以顺序获得I帧,逆序存储TS流片段(需事先一定存储空间范围),也可以逆序扫描获得I帧,顺序存储,或者更进一步,顺序扫描,将全部I帧位置记录下来,然后再分别顺序生成快进流,逆序生成快退流。
以上所述,仅为本发明较佳的具体实施方式,但本发明的保护范围并不局限于此,任何熟悉该技术的人在本发明所揭露的技术范围内,可轻易想到的变化或替换,都应涵盖在本发明的保护范围之内。因此,本发明的保护范围应该以权利要求的保护范围为准。