首页> 中国专利> 一种从实时传输协议数据包中重建编码方式的方法和装置

一种从实时传输协议数据包中重建编码方式的方法和装置

摘要

本发明公开了一种从RTP数据包中重建编码方式的方法和装置:对接收到的N个RTP数据包分别进行解析,通过解析确定出每个RTP数据包对应的编码方式,N为大于1的正整数;分别统计确定出的每种编码方式对应的RTP数据包数,将统计结果最大的编码方式作为重建出的编码方式。本发明所述方案适用范围广泛,且能够节省带宽等。

著录项

  • 公开/公告号CN105407351A

    专利类型发明专利

  • 公开/公告日2016-03-16

    原文格式PDF

  • 申请/专利号CN201410468714.5

  • 发明设计人 辛安民;

    申请日2014-09-15

  • 分类号H04N19/103(20140101);H04N19/44(20140101);

  • 代理机构11018 北京德琦知识产权代理有限公司;

  • 代理人谢安昆;宋志强

  • 地址 310053 浙江省杭州市滨江区阡陌路555号海康科技园

  • 入库时间 2023-12-18 14:59:01

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2019-03-12

    授权

    授权

  • 2016-04-13

    实质审查的生效 IPC(主分类):H04N19/103 申请日:20140915

    实质审查的生效

  • 2016-03-16

    公开

    公开

说明书

技术领域

本发明涉及互联网领域,特别涉及一种从实时传输协议(RTP)数据包中重建编 码方式的方法和装置。

背景技术

当前,在视频监控行业中,作为发送端的监控设备产生的RTP数据包经互联网传 输后到达接收端,接收端需要重建出RTP数据包中的数据的编码方式,以便恢复出所 需的基本码流(ES)等。

现有技术中,主要通过以下两种方式来重建出编码方式:

方式一

发送端和接收端之间采用实时流传输协议(RTSP)来传输RTP数据包,接收端通 过对RTSP协议中的会话描述协议(SDP)进行解析来获取编码方式;

方式二

传输专门的私有数据包,利用私有数据包来指明编码方式。

但是,上述两种方式在实际应用中均会存在一定的问题,如:对于方式一来说, 必须依赖于RTSP协议中的SDP信息,从而适用范围有限;对于方式二来说,由于需 要额外传输私有数据包,因此会增大对带宽的占用。

发明内容

有鉴于此,本发明提供了一种从RTP数据包中重建编码方式的方法和装置,适用 范围广泛,且能够节省带宽。

为了达到上述目的,本发明的技术方案是这样实现的:

一种从RTP数据包中重建编码方式的方法,包括:

对接收到的N个RTP数据包分别进行解析,通过解析确定出每个RTP数据包对 应的编码方式,N为大于1的正整数;

分别统计确定出的每种编码方式对应的RTP数据包数,将统计结果最大的编码方 式作为重建出的编码方式。

一种从RTP数据包中重建编码方式的装置,包括:

第一处理模块,用于对接收到的N个RTP数据包分别进行解析,通过解析确定出 每个RTP数据包对应的编码方式,N为大于1的正整数;分别统计确定出的每种编码 方式对应的RTP数据包数,将统计结果最大的编码方式作为重建出的编码方式。

可见,采用本发明所述方案,既无需依赖于RTSP协议中的SDP信息,也无需额 外传输私有数据包,从而克服了现有技术中存在的问题,使得本发明所述方案不但适 用范围广泛,而且能够节省带宽等。

附图说明

图1为本发明从RTP数据包中重建编码方式的方法实施例的流程图。

图2为现有JPEG头的组成结构示意图。

图3为现有SingleNALU模式下的数据结构示意图。

图4为现有FU-A模式下的数据结构示意图。

图5为图4中所示的FUheader字段的组成结构示意图。

图6为现有STAP-A模式下的数据结构示意图。

具体实施方式

为了使本发明的技术方案更加清楚、明白,以下参照附图并举实施例,对本发明 所述方案作进一步的详细说明。

图1为本发明从RTP数据包中重建编码方式的方法实施例的流程图。如图1所示, 包括以下步骤11~12。

步骤11:对接收到的N个RTP数据包分别进行解析,通过解析确定出每个RTP 数据包对应的编码方式,N为大于1的正整数。

步骤12:分别统计确定出的每种编码方式对应的RTP数据包数,将统计结果最大 的编码方式作为重建出的编码方式。

N的具体取值可根据实际需要而定,之所以要对多个RTP数据包进行解析,主要 是考虑到可通过增加解析样本数来提高最终结果的准确性。

在实际应用中,所述编码方式可包括:动态图像专家组4(MPEG4)、MPEG2、 联合图像专家组(JPEG)和H.264等。其中,H.264编码方式又可进一步包括以下模 式:单独封包(SingleNALU)模式、分片封包(FU-A)模式和组合封包(STAP-A) 模式。以下分别对如何确定是否为上述编码方式进行说明。

1.1)MPEG4

针对每个RTP数据包,可分别确定跳过该RTP数据包的RTP头之后的起始码是 否为000001B0,如果是,则可确定该RTP数据包对应的编码方式为MPEG4。

1.2)MPEG2

针对每个RTP数据包,可分别确定跳过该RTP数据包的RTP头之后的起始码是 否为000001B3,如果是,则可确定该RTP数据包对应的编码方式为MPEG2。

1.3)JPEG

针对每个RTP数据包,可分别确定跳过该RTP数据包的RTP头之后的第7个字 节是否符合JPEG宽度定义标准以及第8个字节是否符合JPEG高度定义标准,如果均 符合,则可确定该RTP数据包对应的编码方式为JPEG。

图2为现有JPEG头的组成结构示意图。如图2所示,其中包括:类型特定 (Type-Specific)、分段偏移(FragmentOffset)、类型(Type)、Q、宽度(Width)和 高度(Height)等字段;其中,类型特定、类型、Q、宽度和高度字段均占用一个字节, 分段偏移字段占用3个字节,而且,宽度字段占用RTP头之后的第7个字节,高度字 段占用RTP头之后的第8个字节。

1.4)H.264

针对每个RTP数据包,可分别读取跳过该RTP数据包的RTP头之后的第一个字 节的后5位;

如果取值在1~23之间,则可确定该RTP数据包对应的编码方式为H.264中的 SingleNALU模式;

如果取值为28,则可确定该RTP数据包对应的编码方式为H.264中的FU-A模式;

如果取值为24,则可确定该RTP数据包对应的编码方式为H.264中的STAP-A模 式。

当一个H.264的网络适配层单元(NALUnit,即NALU)的长度不超过传输系统 (MTU)对RTP数据包负载部分长度的限制时,可采用SingleNALU模式;

当一个H.264的NALUnit的长度超过MTU对RTP数据包负载部分长度的限制时, 需要将一个NALUnit进行分片,即拆分成多个RTP数据包来进行发送,即采用FU-A 模式;

当一个H.264的NALUnit的长度非常小时,可以将多个NALUnit封装在一个RTP 数据包中进行发送,即采用STAP-A模式。

在实际应用中,对于每个RTP数据包来说,可首先确定其对应的编码方式是否为 MPEG4,如果是,则结束处理,否则,可进一步确定其对应的编码方式是否为MPEG2, 如果是,则结束处理,否则,可进一步确定其对应的编码方式是否为JPEG,如果是, 则结束处理,否则,可进一步确定其对应的编码方式是否为H.264;当然,以上仅为 一种较佳的实施方式,具体采用何种顺序可根据实际需要而定。

在重建出编码方式之后,可针对接收到的各RTP数据包,根据重建出的编码方式 恢复出ES并输出。

根据重建出的编码方式的不同,恢复出ES的方式也会不同,以下分别进行说明。

2.1)MPEG4

针对接收到的各RTP数据包,可分别将其去除RTP头后输出。

2.2)MPEG2

针对接收到的各RTP数据包,可分别将其去除RTP头后输出。

2.3)JPEG

针对接收到的各RTP数据包,可分别进行以下处理:

将该RTP数据包中的负载数据提取出来,即将该RTP数据包中跳过RTP头和JPEG 头之后的数据提取出来;

确定该RTP数据包的RTP头中的时间戳相比于最近一次接收到的RTP数据包的 RTP头中的时间戳是否有更新,如果是,则将组帧缓存中的数据输出,并在提取出的 负载数据前添加一个量化表后添加到组帧缓存中,如果否,则将提取出的负载数据添 加到组帧缓存中,如何添加量化表为现有技术。

举例说明:

假设一帧JPEG数据被封装成4个RTP数据包,结构分别为:RTP头+JPEG头+ 负载数据1、RTP头+JPEG头+负载数据2、RTP头+JPEG头+负载数据3、RTP头+JPEG 头+负载数据4;那么,组帧缓存中输出的数据将为:量化表+负载数据1+负载数据2+ 负载数据3+负载数据4。

时间戳发生更新,则表示更换为了下一帧JPEG数据。

2.4)H.264

2.4.1)SingleNALU模式

图3为现有SingleNALU模式下的数据结构示意图。如图3所示,其中第一个字 节包含的F、NRI和Type字段与H.264标准定义的NALUnit第一个字节完全相同, 因此,在恢复ES时,只需要将RTP数据包去除RTP头后并添加起始码00000001或 000001即可。

另外,在实际应用中,如果没有重建出序列参数集(SPS)或图像参数集(PPS), 得到的码流是无法进行解码的,为此,在进行上述处理之前,还需要先进行以下处理: 确定出接收到的各RTP数据包中第一个符合以下条件的RTP数据包:跳过该RTP数 据包的RTP头之后的第一个字节的后5位的取值为7或8,之后,可从确定出的RTP 数据包开始,针对接收到的各RTP数据包,分别将其去除RTP头并添加起始码 00000001或000001后输出。

2.4.2)FU-A模式

图4为现有FU-A模式下的数据结构示意图。如图4所示,其中FUindicator字段 的前3位的内容与所负载的NALUnit的第一个字节的高3位的内容一致,FUindicator 字段的后5位为FU-A模式的标识码28,即0x1c。

另外,图5为图4中所示的FUheader字段的组成结构示意图。如图5所示,其 中,S为开始位,当开始位设置为1时,指示分片NALUnit的开始,即跟随的负载为 将一个NALUnit进行分片后的第一个分片,否则设置为0;E为结束位,当结束位设 置为1时,指示分片NALUnit的结束,即跟随的负载为将一个NALUnit进行分片后 的最后一个分片,否则设置为0;R为保留位,设置为0。

基于上述介绍,并考虑到SPS和PPS的问题,针对FU-A模式,恢复出ES的方 式可为:

确定出接收到的各RTP数据包中第一个符合以下条件的RTP数据包:该RTP数 据包的FUheader字段中的开始位设置为1(标示一帧开始)、且FUheader字段中的 后5位的取值为7或8;

从确定出的RTP数据包开始,针对接收到的各RTP数据包,分别进行以下处理:

将该RTP数据包中的负载数据提取出来,即将该RTP数据包中位于FUheader之 后的负载数据提取出来;

确定该RTP数据包的RTP头中的时间戳相比于最近一次接收到的RTP数据包的 RTP头中的时间戳是否有更新,如果是,则将组帧缓存中的数据输出,并在提取出的 负载数据前依次添加一个起始码00000001或000001,以及一个由该RTP数据包的FU indicator字段中的前3位和FUheader字段中的后5位组合成的码字后,添加到组帧缓 存中,如果否,则将提取出的负载数据添加到组帧缓存中。

2.4.3)STAP-A模式

图6为现有STAP-A模式下的数据结构示意图。

考虑到SPS和PPS的问题,针对STAP-A模式,恢复出ES的方式可为:

确定出接收到的各RTP数据包中第一个符合以下条件的RTP数据包:该RTP数 据包中的第一段负载数据(如图6中所示的NALU1Data)的第一个字节的后5位的 取值为7或8;

从确定出的RTP数据包开始,针对接收到的各RTP数据包,分别进行以下处理: 将该RTP数据包中的各段负载数据(如图6中所示的NALU1Data、NALU2Data) 提取出来,并分别添加起始码00000001或000001后输出。

基于上述介绍,本发明同时公开了一种从RTP数据包中重建编码方式的装置,包 括:第一处理模块。

第一处理模块,用于对接收到的N个RTP数据包分别进行解析,通过解析确定出 每个RTP数据包对应的编码方式,N为大于1的正整数;分别统计确定出的每种编码 方式对应的RTP数据包数,将统计结果最大的编码方式作为重建出的编码方式。

其中,

所述编码方式可包括:动态图像专家组MPEG4、MPEG2、联合图像专家组JPEG 和H.264;

所述H.264编码方式又可进一步包括以下模式:单独封包SingleNALU模式、分 片封包FU-A模式和组合封包STAP-A模式。

具体地,

第一处理模块针对每个RTP数据包,分别确定跳过该RTP数据包的RTP头之后 的起始码是否为000001B0,如果是,则确定该RTP数据包对应的编码方式为MPEG4。

第一处理模块针对每个RTP数据包,分别确定跳过该RTP数据包的RTP头之后 的起始码是否为000001B3,如果是,则确定该RTP数据包对应的编码方式为MPEG2。

第一处理模块针对每个RTP数据包,分别确定跳过该RTP数据包的RTP头之后 的第7个字节是否符合JPEG宽度定义标准以及第8个字节是否符合JPEG高度定义标 准,如果均符合,则确定该RTP数据包对应的编码方式为JPEG。

第一处理模块针对每个RTP数据包,分别读取跳过该RTP数据包的RTP头之后 的第一个字节的后5位,如果取值在1~23之间,则确定该RTP数据包对应的编码方 式为H.264中的SingleNALU模式,如果取值为28,则确定该RTP数据包对应的编 码方式为H.264中的FU-A模式,如果取值为24,则确定该RTP数据包对应的编码方 式为H.264中的STAP-A模式。

该装置中还可进一步包括:

第二处理模块,用于针对接收到的各RTP数据包,根据重建出的编码方式恢复出 基本码流ES并输出。

具体地,

当重建出的编码方式为MPEG4时,第二处理模块针对接收到的各RTP数据包, 分别将其去除RTP头后输出。

当重建出的编码方式为MPEG2时,第二处理模块针对接收到的各RTP数据包, 分别将其去除RTP头后输出。

当重建出的编码方式为JPEG时,第二处理模块针对接收到的各RTP数据包,分 别进行以下处理:将该RTP数据包中的负载数据提取出来;确定该RTP数据包的RTP 头中的时间戳相比于最近一次接收到的RTP数据包的RTP头中的时间戳是否有更新, 如果是,则将组帧缓存中的数据输出,并在提取出的负载数据前添加一个量化表后添 加到组帧缓存中,如果否,则将提取出的负载数据添加到组帧缓存中。

当重建出的编码方式为H.264中的SingleNALU模式时,第二处理模块确定出接 收到的各RTP数据包中第一个符合以下条件的RTP数据包:跳过该RTP数据包的RTP 头之后的第一个字节的后5位的取值为7或8;从确定出的RTP数据包开始,针对接 收到的各RTP数据包,分别将其去除RTP头并添加起始码00000001或000001后输出。

当重建出的编码方式为H.264中的FU-A模式时,第二处理模块确定出接收到的 各RTP数据包中第一个符合以下条件的RTP数据包:该RTP数据包的FUheader字 段中的开始位设置为1、且FUheader字段中的后5位的取值为7或8;从确定出的RTP 数据包开始,针对接收到的各RTP数据包,分别进行以下处理:将该RTP数据包中的 负载数据提取出来;确定该RTP数据包的RTP头中的时间戳相比于最近一次接收到的 RTP数据包的RTP头中的时间戳是否有更新,如果是,则将组帧缓存中的数据输出, 并在提取出的负载数据前依次添加一个起始码00000001或000001以及一个由该RTP 数据包的FUindicator字段中的前3位和FUheader字段中的后5位组合成的码字后, 添加到组帧缓存中,如果否,则将提取出的负载数据添加到组帧缓存中。

当重建出的编码方式为H.264中的STAP-A模式时,第二处理模块确定出接收到 的各RTP数据包中第一个符合以下条件的RTP数据包:该RTP数据包中的第一段负 载数据的第一个字节的后5位的取值为7或8;从确定出的RTP数据包开始,针对接 收到的各RTP数据包,分别进行以下处理:将该RTP数据包中的各段负载数据提取出 来,并分别添加起始码00000001或000001后输出。

上述装置实施例的具体工作流程请参照前述方法实施例中的相应说明,此处不再 赘述。

总之,采用本发明所述方案,既无需依赖于RTSP协议中的SDP信息,也无需额 外传输私有数据包,从而克服了现有技术中存在的问题,使得本发明所述方案不但适 用范围广泛,而且能够节省带宽等。

综上所述,以上仅为本发明的较佳实施例而已,并非用于限定本发明的保护范围。 凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本 发明的保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号