CN102665140B - 一种avs视频帧的rtp封装方法 - Google Patents
一种avs视频帧的rtp封装方法 Download PDFInfo
- Publication number
- CN102665140B CN102665140B CN201210151540.0A CN201210151540A CN102665140B CN 102665140 B CN102665140 B CN 102665140B CN 201210151540 A CN201210151540 A CN 201210151540A CN 102665140 B CN102665140 B CN 102665140B
- Authority
- CN
- China
- Prior art keywords
- frame
- rtp
- length
- data
- macro block
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Landscapes
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
本发明涉及一种AVS视频帧的RTP封装方法。所述方法包括获取编码器产生的视频码流,解析码流的视频帧类型;解析视频帧的帧长度,结合帧类型分别做不同的RTP封装;若是I帧、视频序列头等关键视频数据,单独封装成短包长的RTP包发送;若是P帧数据,进行以条带为主要封装单位的封装,并且尽可能多地封装进RTP包;若是B帧数据,进行以宏块为主要封装单位的封装,并且尽可能多地封装进RTP包,同时,在一个RTP包中,若封装B帧前已经封装了P帧数据,则该B帧数据以条带为单位进行封装等步骤。本发明不仅有效地保护重要的视频数据;而且减少了链路开销,降低了总的丢包率。
Description
技术领域
本发明涉及流媒体领域,特别涉及一种AVS视频帧的RTP封装方法。
背景技术
AVS(Audio Video coding Standard)标准是数字音视频编解码技术标准工作组制定的数字音视频编码标准。AVS编码产生的视频码流结构语法层次从高到低依次为序列、图像、条带、宏块、块,AVS码流分层结构如图3所示。视频帧类型有I、P、B三种,其中I帧是解码的关键帧。宏块有帧内预测和帧间预测两种块,是空间预测补偿、时间预测补偿和空间变换的基本单元。
流媒体是以流的方式在网络中传输音频、视频和多媒体文件的媒体形式。为了支持网络的实时传输服务,流媒体多是以RTP(Real-time TransportProtocol)封装发送的。RTP是用于Internet上针对多媒体数据流的一种传输协议,RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步。RTP通常使用UDP(User Datagram Protocol,用户数据报协议)来传送数据,UDP数据在IP上进行传送。当应用程序开始一个RTP会话时将使用两个端口:一个给RTP,一个给RTCP(RTP ControlProtocol,RTP控制协议)。RTP提供端对端的网络传输功能,适合通过组播和点播传送实时数据,如视频、音频和仿真数据。RTP没有涉及资源预订和质量保证等实时服务,RTCP扩充数据传输以允许监控数据传送,提供最小的控制和识别功能。RTP头固定部分格式如图4所示。
由于视频帧的数据长度相差很大,如果按照每个RTP包只封装一帧视频数据,大于MTU(Maximum Transmission Unit,最大传输单元)的视频帧在下层就会被分片,分片的不确定性增加了丢包率;有些视频帧远小于MTU,每一帧单独封装进一个RTP包发送,则增加了额外的头开销。所以本发明针对以上问题提出了一种既能降低网络开销又不造成下层分片的AVS视频帧RTP封装方法,该方法把P帧、B帧数据尽可能多地封装进RTP包,减小了发包频率,在一定长度上降低了丢包率;把I帧、视频序列头等关键数据单独封装成短包长的RTP包发送,短包长一定程度上意味着低丢包率,从而有效地保护了I帧等关键视频数据。
发明内容
为了解决现有技术中问题,本发明提供了一种AVS视频帧的RTP封装方法,
步骤一:
编码器产生视频序列,打包开始,打包器接收编码器传来的视频数据,判断接收到的视频数据类型,若为视频序列头或序列结束,转向步骤二;
若为视频帧数据,转向步骤三;
步骤二:
将视频序列头或序列结束,单独封装进RTP包并发送,然后接收下一数据;
步骤三:
获取该数据帧的类型值,判断该帧所属帧类型,解析该帧的帧长度,设为L,
若为I帧,则转向步骤四;
若为P帧,则转向步骤五;
若为B帧,则转向步骤七;
步骤四:
比较L与J的长度,J为在不造成下层分片的情况下,也就是说在不超过MTU的情况下,最多可封装进RTP包的数据长度,分以下两种情况处理:
若L小于等于J,则将该帧封装进RTP包并发送;
若L大于J,将该帧以宏块为单位,以趋均匀的方式均匀分为n份,封装进RTP包发送;
步骤五:
比较L与J的大小,分以下两种情况处理:
若L小于等于J,则将该帧封装进RTP包,然后转向步骤六;
若L大于J,准备按条带为单位进行封装,则尽可能多的将条带封装进RTP包,将能够封装进RTP包的帧头和条带封装进RTP包并发送,然后转向步骤十;
步骤六:
准备继续封装新一帧数据,分以下两种情况处理:
若该帧数据为I帧,不再尝试继续封装,将RTP包发送;
若该帧数据非I帧,即P、B帧,则判断可再封装数据长度Lp与Y+s1的大小,s1是该视频帧的第一条带的数据长度;
若小于Y+s1仍将RTP包发送;
若大于等于Y+s1,开始比较Lp与该帧长度的大小,
若Lp小于帧长度的大小,准备按条带为单位进行封装,则尽可能多的将条带封装进RTP包,方法是:按条带在视频帧中的顺序,将Lp减去Y+s1得到可再封装数据长度,获取第二个条带的数据长度,将可再封装数据长度减去第二个条带的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一条带的数据长度,将这些经过计算能够封装进RTP包的帧头和条带封装进RTP包并发送,然后进入步骤十;
若Lp大于帧长度,则将该帧封装进RTP包,同时,返回步骤六;
步骤七:
比较L与J的大小,分两种情况处理:
若小于等于J,将该帧封装进RTP包,同时进入步骤八;
若大于J,准备按宏块为单位进行封装,则尽可能多的将宏块封装进RTP包,方法是:按宏块在视频帧中的顺序,将J减去Y得到可再封装数据长度,获取第一个宏块的数据长度,将可再封装数据长度减去第一个宏块的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度,将这些经过计算能够封装进RTP包的帧头和宏块封装进RTP包并发送,然后转向步骤十一;
步骤八:
准备继续封装下一帧,
若为I帧,不再尝试继续封装,将RTP包发送,并进入步骤一,进行新的判断处理;
若不为I帧,继续判断是否为B帧,分以下两种情况处理:
若不为B帧,即P帧,进入步骤六中的非I帧数据处理过程;
若为B帧,进入步骤九;
步骤九:
判断可再封装进RTP包的数据长度Lb与Y+b1的大小,分两种情况处理:
若小于Y+b1,将RTP包发送;
若大于等于Y+b1,继续比较Lb与整个帧长度的大小,b1为该视频帧的第一宏块的数据长度,
若大于等于整个帧长度,将该帧封装进RTP包,并转向步骤八;
若小于整个帧长度,准备按宏块为单位进行封装,则尽可能多的将宏块封装进RTP包,方法是:按宏块在视频帧中的顺序,将Lb减去Y+b1得到可再封装数据长度,获取第二个宏块的数据长度,将可再封装数据长度减去第一个宏块的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度,将这些经过计算能够封装进RTP包的帧头和宏块封装进RTP包并发送,并转向步骤十一;
步骤十:
判断该帧剩余条带数据的长度与J的大小,分以下两种情况处理:
若小于等于J,将剩余的条带封装进RTP包,并计算RTP包剩余可再封装数据长度,并转向步骤六;
若大于J,比较第一条带与J的大小;
若大于J,准备按宏块为单位进行封装,则尽可能多的将宏块封装进RTP包,方法是:按宏块在视频帧中的顺序,获取第一个宏块的数据长度,将J减去第一个宏块数据的长度得到可再封装的数据长度,获取下一个宏块数据长度,用可再封装数据长度减去这个宏块的数据长度得到新的可再封装数据长度,重复进行上述的计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度,将这些经过计算能够封装进RTP包的宏块封装进RTP包并发送,并转向步骤十一;
若小于等于J,则尽可能多的将条带封装进RTP包,方法是:按条带在视频帧中的顺序,将J减去第一个条带的数据的长度得到可再封装的数据长度,获取下一个条带数据长度,用可再封装数据长度减去这个条带的数据长度得到新的可再封装数据长度,重复进行上述的计算,直到剩余可再封装数据长度小于按顺序封装的下一条带的数据长度,将这些经过计算能够封装进RTP包的条带封装进RTP包并发送,并返回步骤十;
步骤十一:获取剩余宏块的数据长度,分以下两种情况处理:
若剩余宏块数据长度小于等于J,将剩余的宏块转换为NALU,并封装进RTP包,并转向步骤八;
若剩余宏块的数据长度大于J,则尽可能多的将宏块封装进RTP包,方法是:按宏块在视频帧中的顺序,获取第一个宏块的数据长度,将J减去第一个宏块数据的长度得到可再封装的数据长度,获取下一个宏块数据长度,用可再封装数据长度减去这个宏块的数据长度得到新的可再封装数据长度,重复进行上述的计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度,将这些经过计算能够封装进RTP包的宏块封装进RTP包并发送,并返回步骤十一。
作为本发明的进一步改进,步骤四中,J由以下公式计算得出,J=MTU的长度-IP(Internet Protocol,网际协议)头报文长度-UDP头报文长度-RTP固定头长度-额外的K字节的数据长度,单位都是字节。
作为本发明的进一步改进:K=k-2,k由PSI(Payload Structure Indicator,净载结构指示符),NALU(Network Abstract Layer Unit,网络抽象层单元)无符号尺寸信息,解码顺序号和时间偏移等的长度组成;2是AVS比特流转换为NALU流时减少的2字节长度,不同的打包模式K值不同。
作为本发明的进一步改进,计算J的公式中各项取值如下:MTU的长度:1500字节;IP头报文长度:20字节;UDP头报文长度:8字节;RTP固定头长度:12字节。
作为本发明的进一步改进,以上所有发明步骤中,可再封装数据长度都是指该包的剩余空间长度减去K字节长度的NALU相关开销得到的可再封装的纯视频数据的长度。
作为本发明的进一步改进,步骤四中,根据J(n-1)≤L<J(n)得出一个整数n值。
作为本发明的进一步改进,准备按条带为单位进行封装,尽可能多的将条带封装进RTP包的方法是:按条带在视频帧中的顺序,将J减去Y,Y为视频帧帧头的固定长度,得到可再封装数据长度,获取第一个条带的数据长,将可再封装数据长度减去第一个条带的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一条带的数据长度。
作为本发明的进一步改进,Y的取值为4。
本发明提出一种AVS视频帧的RTP封装方法。主要的创新在于依据AVS视频帧的I帧、P帧、B帧的特点采取不同的封装方法。通过不同程度地、尽可能多地将P帧、B帧封装进RTP包,减少了链路开销,提高了网络处理能力,降低了频繁发送RTP包造成的高丢包率。将I帧、序列头等关键视频数据单独封装进RTP包发送,保证了封装关键数据的RTP包具有较短的包长,从而降低了封装关键数据的RTP包的丢包率,保护了关键视频数据。因为I帧,视频序列头等重要视频数据以短包长的方式封装进RTP包,短包长可以大幅降丢包率,所以有效地保护了重要的视频数据;因为P、B帧数据几乎填满RTP包,所以可有效地减少链路开销,降低发包的频率,一定程度上降低了总的丢包率。
附图说明
图1AVS视频帧的封装流程图示;
图2NALU头和PSI图示;
图3AVS码流分层结构图示;
图4RTP头固定部分格式图示;
图5单NALU包的RTP净载格式图示;
图6包含一个由两个多时间复合单元组成的MTAP16图示。
具体实施方式
下面结合附图说明及具体实施方式对本发明进一步说明。
AVS-P2视频序列由序列头开始,后面跟着一个或多个编码图像,序列结束码表明了一个视频序列的结束。序列头后的第一个编码图像应是I帧。一幅图像是一帧,其编码数据由图像起始码开始,到序列起始码、序列结束码或下一个图像起始码结束,除起始码外的任何情况下都不应出现这些比特串。起始码由起始码前缀和起始码值构成,起始码前缀是比特串‘000000000000000000000001’。所有起始码都应字节对齐。起始码值是一个8比特整数,用来表示起始码的类型。
本发明中没有对RTP进行头扩展,所以RTP固定头中的位X=0,此外,V=10表示版本号,P=0表示用户最后没有RTP数据填充,当一个RTP包中包含任一帧最后一个条带或宏块时,置M=1;否则,置M=0。CSRC则根据标识符的数量而定。
在封装进RTP包之前都要将视频数据转换为NALU,NALU头的各位含义如下:
F:1bit
禁止位(forbidden_zero_bit)。值应为0。
NRI:2bit
NAL参考标号(nal_ref_idc)。
值不等于0说明该NAL单元包含的数据为序列头或参考帧数据;
值等于0说明该NAL单元所包含的数据为非参考帧数据。对于序列头NAL单元,nal_ref_idc不应为0。对于某一帧,如果其某一NAL单元的nal_ref_idc为0,则属于该帧的所有NAL单元的nal_ref_idc均应为0。I帧的NAL单元的nal_ref_idc不应为0。
Type:5bit
NAL单元类型。其值参考随后NAL单元数据中的起始码值及其相应的图象头内容而定,具体取值依据见下表所示。
RTP净载格式定义了三种不同的基本净载结构,每种又可分为不同的子类型:单NALU包、复合包、分割单元,不同的净载结构通过RTP净载中的第一个字节PSI来进行区分。PSI与上述NALU头有完全相同的格式,如图2所示,
F:1bit
值0表示RTP净载中不宜包含比特错误或其它语法错误。
值1表示RTP净载中可能包含比特错误或其它语法错误。
NRI:2bit
NRI值表明RTP包的相对传输优先级。MANE可以利用这个信息更好地保护更重要的RTP包。优先级由高到低的NRI值依次为11b、10b、01b和00b。含有序列头和I帧图像的RTP净载中的NRI值宜为11b。
Type:5bit
用于指示RTP净载的结构,语义见下表所示。
具体步骤如下:
AVS-P2视频帧的RTP封装流程图如图1所示,具体步骤如下:
步骤一启动RTP打包进程,接受编码器传来的视频数据,判断接收到的视频数据类型,若为视频序列头或序列结束,转向步骤二;
若为视频帧数据,转向步骤三。
步骤二将视频序列头或序列结束,转化为一个NALU,NALU头的格式如图2所示,单独封装进RTP包并发送,然后接受下一数据。
步骤三获取该数据帧的类型值,判断该帧所属帧类型,解析该帧的帧长度,设为L,
若为I帧,转向步骤四;
若为P帧,转向步骤五;
若为B帧,转向步骤七。
步骤四比较L与J的大小,分以下两种情况处理:
若L小于等于J,则将该帧转化为一个NALU,封装进RTP包并发送,此时封装的为单NALU包,它的RTP净载格式如图5所示,RTP包的标志位M置1;
若L大于J,则根据J(n-1)≤L<J(n)得出一个整数n值,将该帧以宏块为单位,以趋均匀的方式均匀分为n份,并转换为NALU,封装进RTP包发送,由此保证了帧头与第一宏块封装在一个RTP包中,在这n块中,仅包含帧头的1个RTP包的标志位M置1,其他n-1个RTP包的标志位M置0。
步骤四中,J=1500-20-8-12-K字节,其中K=k-2,k由PSI,NALU无符号尺寸信息,解码顺序号和时间偏移等的长度组成;2是AVS-P2比特流转换为NALU流时减少的2字节长度,不同的打包模式K值不同。例如封装为单NALU包时K=-2,因为此时PSI就是NALU头,可认为没有PSI,且没有涉及其他项,所以k=0。
步骤五比较L与J的大小,分以下两种情况处理:
若L小于等于J,则将该帧转化为一个NALU,封装进RTP包,RTP包的标志位M置1,然后转向步骤六;
若L大于J,准备按条带为单位进行封装,则尽可能多的将条带封装进RTP包,方法是:按条带在视频帧中的顺序,将J减去4得到可再封装数据长度,获取第一个条带的数据长度,将可再封装数据长度减去第一个条带的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一条带的数据长度,将这些经过计算能够封装进RTP包的帧头和条带转换为NALU,封装进RTP包并发送,该RTP包的标志位M置1,然后转向步骤十。
步骤五中,可再封装数据长度是指该包的剩余空间长度减去K字节长度的NALU相关开销得到的可再封装的纯视频数据的长度,下文中出现的可再封装数据长度都是这个含义。
步骤五中,4,指的是4字节AVS-P2视频帧帧头的固定长度,下文中4,4+s1,4+b1等的4都是这个含义。
步骤六准备继续封装新一帧数据,分以下两种情况处理:
若该帧数据为I帧,不再尝试继续封装,将RTP包发送;
若该帧数据为非I帧,即P、B帧,则判断可再封装的数据长度Lp与4+s1的大小,s1是该视频帧的第一条带的数据长度。
若小于4+s1仍将RTP包发送;
若大于等于4+s1,开始比较Lp与该帧长度的大小,
若小于帧长度的大小,准备按条带为单位进行封装,则尽可能多的将条带封装进RTP包,方法是:按条带在视频帧中的顺序,将Lp减去4+s1得到可再封装数据长度,获取第二个条带的数据长度,将可再封装数据长度减去第二个条带的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一条带的数据长度,将这些经过计算能够封装进RTP包的帧头和条带转换为NALU,封装进RTP包并发送,该RTP包的标志位M置1,此时封装的的多个NALU具有不同的时间,为多时间复合包,以封装2个多时间复合包为例,RTP净载格式如图6所示,然后进入步骤十;
若大于帧长度,则将帧转化为NALU,封装进RTP包,同时,返回步骤六。
步骤七比较L与J的大小,分两种情况处理:
若小于等于J,将该帧转化为NALU封装进RTP包,同时进入步骤八;
若大于J,准备按宏块为单位进行封装,则尽可能多的将宏块封装进RTP包,方法是:按宏块在视频帧中的顺序,将J减去4得到可再封装数据长度,获取第一个宏块的数据长度,将可再封装数据长度减去第一个宏块的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度,将这些经过计算能够封装进RTP包的帧头和宏块转换为NALU,封装进RTP包并发送,该RTP包的标志位M置1,然后转向步骤十一。
进入步骤十一的原因:因为处理完该步骤后,出现了一个视频帧还有部分宏块没有被发送的情况,所以不能像步骤三一样进行处理;在步骤十中,同样是因为一个完整的视频帧还有剩余的条带没有被发送,所以还需继续处理。
步骤八准备继续封装下一帧,
若为I帧,不再尝试继续封装,将RTP包发送,并进入步骤一,进行新的判断处理;
若不为I帧,继续判断是否为B帧,分以下两种情况处理:
若不为B帧,即为P帧,进入步骤六中的非I帧数据处理过程;
若为B帧,进入步骤九。
步骤九判断可再封装数据长度Lb与4+b1的大小,分两种情况处理:
若小于4+b1,将RTP包发送;
若大于等于4+b1,继续比较Lb与整个帧长度的大小,b1为该视频帧的第一宏块的数据长度,
若大于等于整个帧长度,将该帧转换为NALU,封装进RTP包,并转向步骤八;
若小于整个帧长度,准备按宏块为单位进行封装,则尽可能多的将宏块封装进RTP包,方法是:按宏块在视频帧中的顺序,将Lb减去4+b1得到可再封装数据长度,获取第二个宏块的数据长度,将可再封装数据长度减去第一个宏块的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度,将这些经过计算能够封装进RTP包的帧头和宏块转换为NALU,封装进RTP包并发送,该RTP包的标志位M置1,并转向步骤十一。
步骤十判断该帧剩余条带数据的长度与J的大小,分以下两种情况处理:
若小于等于J,将剩余的条带封装进RTP包,并计算RTP包剩余可再装数据长度,并转向步骤六;
若大于J,继续比较第一条带与J的大小;
若大于J,准备按宏块为单位进行封装,则尽可能多的将宏块封装进RTP包,方法是:按宏块在视频帧中的顺序,获取第一个宏块的数据长度,将J减去第一个宏块数据的长度得到可再封装的数据长度,获取下一个宏块数据长度,用可再封装数据长度减去这个宏块的数据长度得到新的可再封装数据长度,重复进行上述的计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度,将这些经过计算能够封装进RTP包的宏块转换为NALU,封装进RTP包并发送,并转向步骤十一;
若小于等于J,则尽可能多的将条带封装进RTP包,方法是:按条带在视频帧中的顺序,将J减去第一个条带的数据的长度得到可再封装的数据长度,获取下一个条带数据长度,用可再封装数据长度减去这个条带的数据长度得到新的可再封装数据长度,重复进行上述的计算,直到剩余可再封装数据长度小于按顺序封装的下一条带的数据长度,将这些经过计算能够封装进RTP包的条带转换为NALU,封装进RTP包并发送,并返回步骤十。
步骤十一获取剩余宏块的数据长度,分以下两种情况处理:
若剩余宏块数据长度小于等于J,将剩余的宏块转换为NALU,并封装进RTP包,并转向步骤八;
若剩余宏块的数据长度大于J,则尽可能多的将宏块封装进RTP包,方法是:按宏块在视频帧中的顺序,获取第一个宏块的数据长度,将J减去第一个宏块数据的长度得到可再封装的数据长度,获取下一个宏块数据长度,用可再封装数据长度减去这个宏块的数据长度得到新的可再封装数据长度,重复进行上述的计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度,将这些经过计算能够封装进RTP包的宏块转换为NALU,封装进RTP包并发送,并返回步骤十一。
本发明主要是针对AVS编码产生的视频帧数据进行封装,但是很明显该方法同样适合于H.26X以及MPEG系列的编码方式。
以上内容是结合具体的优选实施方式对本发明所作的进一步详细说明,不能认定本发明的具体实施只局限于这些说明。对于本发明所属技术领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干简单推演或替换,都应当视为属于本发明的保护范围。
Claims (9)
1.一种AVS视频帧的RTP封装方法,其特征在于:
步骤一:
编码器产生视频序列,打包开始,打包器接收编码器传来的视频数据,判断接收到的视频数据类型,若为视频序列头或序列结束,转向步骤二;
若为视频帧数据,转向步骤三;
步骤二:
将视频序列头或序列结束,单独封装进RTP包并发送,然后接收下一数据;
步骤三:
获取该数据帧的类型值,判断该帧所属帧类型,解析该帧的帧长度,设为L,
若为I帧,则转向步骤四;
若为P帧,则转向步骤五;
若为B帧,则转向步骤七;
步骤四:
比较L与J的长度,J为在不造成下层分片的情况下,也就是说在不超过MTU的情况下,最多可封装进RTP包的数据长度,分以下两种情况处理:
若L小于等于J,则将该帧封装进RTP包并发送;
若L大于J,将该帧以宏块为单位,以趋均匀的方式均匀分为n份,封装进RTP包发送,根据J(n-1)≤L<J(n)得出一个整数n值;
步骤五:
比较L与J的大小,分以下两种情况处理:
若L小于等于J,则将该帧封装进RTP包,然后转向步骤六;
若L大于J,准备按条带为单位进行封装,则尽可能多的将条带封装进RTP包,将能够封装进RTP包的帧头和条带封装进RTP包并发送,然后转向步骤十;
步骤六:
准备继续封装新一帧数据,分以下两种情况处理:
若该帧数据为I帧,不再尝试继续封装,将RTP包发送;
若该帧数据非I帧,即P、B帧,则判断可再封装的数据长度Lp与Y+s1的大小,s1是该视频帧的第一条带的数据长度;Y为视频帧帧头的固定长度,
若小于Y+s1仍将RTP包发送;
若大于等于Y+s1,开始比较Lp与该帧长度的大小,
若Lp小于帧长度的大小,准备按条带为单位进行封装,则尽可能多的将条带封装进RTP包,将经过计算能够封装进RTP包的帧头和条带封装进RTP包并发送,然后进入步骤十;
若Lp大于帧长度,则将该帧封装进RTP包,返回步骤六;
步骤七:
比较L与J的大小,分两种情况处理:
若小于等于J,将该帧封装进RTP包,同时进入步骤八;
若大于J,准备按宏块为单位进行封装,尽可能多的将宏块封装进RTP包,将经过计算能够封装进RTP包的帧头和宏块封装进RTP包并发送,然后转向步骤十一;
步骤八:
准备继续封装下一帧,
若为I帧,不再尝试继续封装,将RTP包发送,并进入步骤一,对新的视频序列进行操作;
若不为I帧,继续判断是否为B帧,分以下两种情况处理:
若不为B帧,即P帧,进入步骤六中的非I帧数据处理过程;
若为B帧,进入步骤九;
步骤九:
判断可再封装进RTP包的数据长度Lb与Y+b1的大小,分两种情况处理:
若小于Y+b1,将RTP包发送;
若大于等于Y+b1,继续比较Lb与整个帧长度的大小,b1为该视频帧的第一宏块的数据长度,
若大于等于整个帧长度,将该帧封装进RTP包,并转向步骤八;
若小于整个帧长度,准备按宏块为单位进行封装,则尽可能多的将宏块封装进RTP包,将经过计算能够封装进RTP包的帧头和宏块封装进RTP包并发送,并转向步骤十一;
步骤十:
判断该帧剩余条带数据的长度与J的大小,分以下两种情况处理:
若小于等于J,将剩余的条带封装进RTP包,并计算RTP包剩余可再封装数据长度,并转向步骤六;
若大于J,比较第一条带与J的大小;
若大于J,准备按宏块为单位进行封装,则尽可能多的将宏块封装进RTP包,方法是:按宏块在视频帧中的顺序,获取第一个宏块的数据长度,将J减去第一个宏块数据的长度得到可再封装的数据长度,获取下一个宏块数据长度,用可再封装数据长度减去这个宏块的数据长度得到新的可再封装数据长度,重复进行上述的计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度,将这些经过计算能够封装进RTP包的宏块封装进RTP包并发送,并转向步骤十一;
若小于等于J,则尽可能多的将条带封装进RTP包,方法是:按条带在视频帧中的顺序,将J减去第一个条带的数据的长度得到可再封装的数据长度,获取下一个条带数据长度,用可再封装数据长度减去这个条带的数据长度得到新的可再封装数据长度,重复进行上述的计算,直到剩余可再封装数据长度小于按顺序封装的下一条带的数据长度,将这些经过计算能够封装进RTP包的条带封装进RTP包并发送,并返回步骤十;
步骤十一:获取剩余宏块的数据长度,分以下两种情况处理:
若剩余宏块数据长度小于等于J,将剩余的宏块转换为NALU,并封装进RTP包,并转向步骤八;
若剩余宏块的数据长度大于J,则尽可能多的将宏块封装进RTP包,方法是:按宏块在视频帧中的顺序,获取第一个宏块的数据长度,将J减去第一个宏块数据的长度得到可再封装的数据长度,获取下一个宏块数据长度,用可再封装数据长度减去这个宏块的数据长度得到新的可再封装数据长度,重复进行上述的计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度,将这些经过计算能够封装进RTP包的宏块封装进RTP包并发送,并返回步骤十一。
2.根据权利要求1所述的一种AVS视频帧的RTP封装方法,其特征在于:J=MTU的长度-IP头报文长度-UDP头报文长度-RTP固定头长度-额外的K字节的数据长度,单位都是字节。
3.根据权利要求2所述的一种AVS视频帧的RTP封装方法,其特征在于:K=k-2,k由PSI、NALU无符号尺寸信息、解码顺序号和时间偏移的长度组成;2是AVS比特流转换为NALU流时减少的2字节长度,不同的打包模式K值不同。
4.根据权利要求3所述的一种AVS视频帧的RTP封装方法,其特征在于:计算J的公式中各项取值如下:MTU的长度:1500字节;IP头报文长度:20字节;UDP头报文长度:8字节;RTP固定头长度:12字节。
5.根据权利要求4所述的一种AVS视频帧的RTP封装方法,其特征在于:准备按条带为单位进行封装,尽可能多的将条带封装进RTP包的方法是:按条带在视频帧中的顺序,将J减去Y,得到可再封装数据长度,获取第一个条带的数据长,将可再封装数据长度减去第一个条带的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一条带的数据长度。
6.根据权利要求1所述的一种AVS视频帧的RTP封装方法,其特征在于:步骤六中,若Lp小于帧长度的大小,准备按条带为单位进行封装,则尽可能多的将条带封装进RTP包的方法是:按条带在视频帧中的顺序,将Lp减去Y+s1得到可再封装数据长度,获取第二个条带的数据长度,将可再封装数据长度减去第二个条带的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一条带的数据长度。
7.根据权利要求1所述的一种AVS视频帧的RTP封装方法,其特征在于:步骤七中,准备按宏块为单位进行封装,尽可能多的将宏块封装进RTP包的方法是:按照宏块在视频帧中的顺序,将J减去Y得到可再封装数据长度,获取第一个宏块的数据长度,将可再封装数据长度减去第一个宏块的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度。
8.根据权利要求1所述的一种AVS视频帧的RTP封装方法,其特征在于:步骤九中,准备按宏块为单位进行封装,则尽可能多的将宏块封装进RTP包的方法是:按宏块在视频帧中的顺序,将Lb减去Y+b1得到可再封装数据长度,获取第二个宏块的数据长度,将可再封装数据长度减去第一个宏块的数据长度得到新的可再封装数据长度,重复进行上述计算,直到剩余可再封装数据长度小于按顺序封装的下一宏块的数据长度。
9.根据权利要求1所述的一种AVS视频帧的RTP封装方法,其特征在于:Y的取值为4。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210151540.0A CN102665140B (zh) | 2012-05-16 | 2012-05-16 | 一种avs视频帧的rtp封装方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201210151540.0A CN102665140B (zh) | 2012-05-16 | 2012-05-16 | 一种avs视频帧的rtp封装方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102665140A CN102665140A (zh) | 2012-09-12 |
CN102665140B true CN102665140B (zh) | 2014-04-09 |
Family
ID=46774530
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201210151540.0A Active CN102665140B (zh) | 2012-05-16 | 2012-05-16 | 一种avs视频帧的rtp封装方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102665140B (zh) |
Families Citing this family (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104079949B (zh) * | 2014-06-26 | 2017-06-16 | 北京世纪鼎点软件有限公司 | 面向多屏的场景自适应的数据封装方法和装置及系统 |
CN105681342B (zh) * | 2016-03-08 | 2019-12-17 | 随锐科技集团股份有限公司 | 一种基于h264的多路视频会议系统的抗误码方法及系统 |
KR102497216B1 (ko) | 2017-05-10 | 2023-02-07 | 삼성전자 주식회사 | 슬라이스 기반의 압축을 수행하는 영상 처리 장치 및 영상 처리 방법 |
CN109348282A (zh) * | 2018-11-19 | 2019-02-15 | 深圳市炬力北方微电子有限公司 | 一种降低无线投屏时延的方法及装置 |
CN109600616B (zh) * | 2018-11-27 | 2022-11-04 | 西安汇明科技发展有限责任公司 | 一种基于h.264视频压缩标准的码流封装方法 |
CN111385269B (zh) * | 2018-12-29 | 2021-02-12 | 广州市百果园网络科技有限公司 | 数据传输方法和装置 |
CN115103209B (zh) * | 2022-06-10 | 2023-03-17 | 慧之安信息技术股份有限公司 | 实现监控视频倍速回放的方法 |
Family Cites Families (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1985477B (zh) * | 2004-05-13 | 2012-11-07 | 高通股份有限公司 | 用于分配信息到通信系统的信道的方法和设备 |
CN101505420B (zh) * | 2008-12-02 | 2011-01-26 | 深圳市同洲电子股份有限公司 | 一种视频压缩数据的封装方法 |
CN101562615A (zh) * | 2009-05-20 | 2009-10-21 | 宁波大学 | 基于mpeg-4编码的多媒体数据流自适应网络带宽的传输方法 |
-
2012
- 2012-05-16 CN CN201210151540.0A patent/CN102665140B/zh active Active
Also Published As
Publication number | Publication date |
---|---|
CN102665140A (zh) | 2012-09-12 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN102665140B (zh) | 一种avs视频帧的rtp封装方法 | |
KR101972951B1 (ko) | 오버헤드를 최소화한 헤더를 가지는 패킷 기반의 미디어 데이터 전송 방법 | |
CN108777676B (zh) | 用于在多媒体传输系统中接收媒体数据的装置及方法 | |
US20200029130A1 (en) | Method and apparatus for configuring content in a broadcast system | |
CN101505316B (zh) | 重排和复用属于互相关会话的多媒体流的包的方法和设备 | |
US20070086481A1 (en) | RTP Payload Format For VC-1 | |
CN100568971C (zh) | 一种mpeg-4的传输码流到互联网流媒体联盟流的实时转换方法 | |
EP3050300B1 (en) | Hybrid codec scalable video | |
CN104168439B (zh) | 一种视频编码方法和装置 | |
CN101179736B (zh) | 一种传输流节目转换成中国移动多媒体广播节目的方法 | |
CN107147916A (zh) | 一种在传输层上传输h.265编码视频数据的方法 | |
EP3029869B1 (en) | Information processing device, information processing method, and program | |
US9936266B2 (en) | Video encoding method and apparatus | |
CN100479529C (zh) | 一种广播网络复用协议的转换方法 | |
CN102917276A (zh) | 一种应用于流媒体服务的音视频交错封装方法 | |
WO2008022499A1 (fr) | Procédé de paquetisation de flux de diffusion multimédia mobile en temps réel | |
CN112333470B (zh) | 一种基于视频帧的fec纠错系统 | |
CN101193290A (zh) | 一种mpeg-4的传输码流到互联网流媒体联盟流的实时转换系统 | |
CN101505420B (zh) | 一种视频压缩数据的封装方法 | |
CN106303537B (zh) | 一种openh264多码流传输方法 | |
KR102087585B1 (ko) | M-유닛의 설정 방법 및 전송 방법 | |
CN101179738B (zh) | 一种传输流到中国移动多媒体广播复用协议的转换方法 | |
WO2008043213A1 (fr) | Système de diffusion mobile multimédia destiné à augmenter l'efficacité de transmisstion au moyen d'une trame à longueur variable et procédé associé | |
Paulsen et al. | MPEG-4/AVC versus MPEG-2 in IPTV. | |
CN101179737B (zh) | 一种多媒体广播网络中复用协议的转换方法 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
C14 | Grant of patent or utility model | ||
GR01 | Patent grant |