一种基于规则模型的音视频流解封装方法和系统与流程

文档序号:30068112发布日期:2022-05-18 01:25阅读:212来源:国知局
一种基于规则模型的音视频流解封装方法和系统与流程

1.本发明涉及音视频播控技术领域,具体涉及一种基于规则模型的音视频流解封装方法和系统。


背景技术:

2.随着视频监控技术的快速发展,音视频从采集、编码、传输到解码涉及的相关技术越来越成熟,为了保证音视频通过网络传输时数据的正确性,以及满足音视频多路复用的需求,产生了各种各样的音视频封装方式,当前主要封装和解封装方式有ps(program stream,节目流)、ts(transport stream,传输流)、flv(flash video)、fu-a(基于rtp的分组方式)及厂家私有方式等。音视频流通过封装技术可实现多源、多路复用,同时保障了音视频数据在传输时的正确性和完整性。但是由于音视频封装方式不同,导致播放器或者应用系统必须针对每种封装方式,实现不同的解封装方式,而在公共安全视频监控领域,监控平台需要对各类音视频源进行接入、解封装、解码和播放,由于各个音视频源封装方式存在差异,甚至同一音视频源也可能临时更改封装方式,如果平台不能根据实时接收的音视频数据,自动快速地匹配正确的解封装方式,可能导致音视频播放延时较大,甚至无法正常播放。针对此类问题,当前主要的解决方案是音视频的解封装模块集成尽可能多的解封装库,接入音视频时根据音视频数据去遍历调用解封装库,进行解封装操作,如果解封装成功,就认为当前音视频源的解封装方式为此解封装方式,对此音视频源后续音视频帧都按照此解封装方式进行解封装,但是此种方案普遍性能较低,音视频流第一次解封装时耗时较长,导致音视频播放延时较大。


技术实现要素:

3.本发明提供一种基于规则模型的音视频流解封装方法和系统,主要解决现有音视频流解封装方式耗时长的技术问题。
4.根据第一方面,一种实施例中提供一种基于规则模型的音视频流解封装方法,包括:
5.获取音视频流,读取所述音视频流的第一个音视频数据包;
6.从预先设置的规则模型库中逐个读取规则模型,与所述第一个音视频数据包进行匹配,直至获得与所述第一个音视频数据包相匹配的规则模型或遍历完整个规则模型库为止;其中每个规则模型对应一种音视频的封装方式,规则模型中包括校验数据长度和一条或多条特征规则;
7.当获得与所述第一个音视频数据包相匹配的规则模型时,则获取该规则模型对应的封装方式,采用该封装方式对应的解封装方式对所述音视频流的后续音视频包进行解封装。
8.一种实施例中,所述校验数据长度指校验封装方式所需的所述第一个音视频数据包从头部开始的数据长度,所述特征规则表征在规则模型对应的封装方式下,音视频流的
封装包头所需符合的条件。
9.一种实施例中,当采用某一规则模型进行匹配时,判断所述第一个音视频数据包中长度为该规则模型的校验数据长度的数据,是否符合该规则模型中的特征规则,根据所有特征规则的判断结果判断该规则模型是否与所述第一个音视频数据包相匹配。
10.一种实施例中,所述特征规则包括特征名称、数据定位信息、关系运算符和校验值,其中数据定位信息包括起始位置、结束位置和数据类型;对于每一条特征规则,取所述第一个音视频数据包中从所述起始位置到所述结束位置处的数据,采用与所述数据类型对应的比较方式,将该数据与所述校验值进行比较,若两者的关系与所述关系运算符所表示的关系相同,则判定所述第一个音视频数据包符合该特征规则,否则判定所述第一个音视频数据包不符合该特征规则。
11.一种实施例中,所述规则模型还包括特征规则间的逻辑运算符,所述根据所有特征规则的判断结果判断该规则模型是否与所述第一个音视频数据包相匹配,包括:
12.将所有特征规则的判断结果按该规则模型中特征规则间的逻辑运算符进行逻辑运算,当逻辑运算结果为真时则判定该规则模型与所述第一个音视频数据包相匹配,否则判定该规则模型与所述第一个音视频数据包不匹配。
13.一种实施例中,所述将所有特征规则的判断结果按该规则模型中特征规则间的逻辑运算符进行逻辑运算,当逻辑运算结果为真时则判定该规则模型与所述第一个音视频数据包相匹配,否则判定该规则模型与所述第一个音视频数据包不匹配,包括:
14.根据特征规则构建特征判定表达式用于表示特征规则的判断结果;
15.根据该规则模型中特征规则间的逻辑运算符将所有特征判定表达式组合成匹配判定表达式,当匹配判定表达式的运算结果为真时则判定该规则模型与所述第一个音视频数据包相匹配,否则判定该规则模型与所述第一个音视频数据包不匹配;其中所述特征判定表达式和所述匹配判定表达式均为一布尔表达式。
16.一种实施例中,所述音视频流解封装方法还包括:当遍历完整个规则模型库仍未获得与所述第一个音视频数据包相匹配的规则模型时,则判定所述音视频流的封装方式不被支持。
17.一种实施例中,所述音视频流解封装方法还包括:响应于用户操作对所述规则模型库中的规则模型进行添加、删除和修改。
18.根据第二方面,一种实施例中提供一种基于规则模型的音视频流解封装系统,包括:
19.音视频源接入模块,用于获取音视频流;
20.规则模型库,用于存储规则模型,其中每个规则模型对应一种音视频的封装方式,规则模型中包括校验数据长度和一条或多条特征规则,所述校验数据长度指校验封装方式所需的所述第一个音视频数据包从头部开始的数据长度,所述特征规则表征在规则模型对应的封装方式下,音视频流的封装包头所需符合的条件;
21.规则模型匹配模块,与所述音视频接入模块和所述规则模型库连接,用于读取所述音视频流的第一个音视频数据包,从所述规则模型库中逐个读取规则模型,与所述第一个音视频数据包进行匹配,直至获得与所述第一个音视频数据包相匹配的规则模型或遍历完整个规则模型库为止;当获得与所述第一个音视频数据包相匹配的规则模型时,则获取
该规则模型对应的封装方式,并发送该封装方式对应的解封装方式,当遍历完整个规则模型库仍未获得与所述第一个音视频数据包相匹配的规则模型时,则判定所述音视频流的封装方式不被支持;其中,当采用某一规则模型进行匹配时,判断所述第一个音视频数据包中长度为该规则模型的校验数据长度的数据,是否符合该规则模型中的特征规则,根据所有特征规则的判断结果判断该规则模型是否与所述第一个音视频数据包相匹配;
22.解封装模块,与所述规则模型匹配模块连接,用于接收所述规则模型匹配模块发送的解封装方式,并调用相应的解封装库对所述音视频流后续的音视频包进行解封装。
23.根据第三方面,一种实施例中提供一种计算机可读存储介质,所述介质上存储有程序,所述程序能够被处理器执行以实现如上述第一方面所述的音视频流解封装方法。
24.依据上述实施例的基于规则模型的音视频流解封装方法和系统,通过为音视频的封装方式事先构建对应的规则模型并保存在规则模型库中,规则模型中包括校验数据长度和一条或多条特征规则;在解封装时,读取音视频流的第一个音视频数据包与规则模型库中的规则模型进行匹配,当获得相匹配的规则模型时,则可确定该音视频流的封装方式为所匹配的规则模型对应的封装方式,从而能够快速确定音视频封装方式,采用该封装方式对应的解封装方式对音视频流进行解封装,进而极大地缩短了音视频解封装的时间,相较于通过遍历调用解封装库直接进行解封装操作,其解封装速度有了极大提升。
附图说明
25.图1为一种实施例中的基于规则模型的音视频流解封装方法的流程图;
26.图2为一种音视频封装格式的示意图;
27.图3为一种实施例的基于规则模型的音视频流解封装系统的结构示意图;
28.图4为另一种实施例的基于规则模型的音视频流解封装系统的结构示意图。
具体实施方式
29.下面通过具体实施方式结合附图对本发明作进一步详细说明。其中不同实施方式中类似元件采用了相关联的类似的元件标号。在以下的实施方式中,很多细节描述是为了使得本技术能被更好的理解。然而,本领域技术人员可以毫不费力的认识到,其中部分特征在不同情况下是可以省略的,或者可以由其他元件、材料、方法所替代。在某些情况下,本技术相关的一些操作并没有在说明书中显示或者描述,这是为了避免本技术的核心部分被过多的描述所淹没,而对于本领域技术人员而言,详细描述这些相关操作并不是必要的,他们根据说明书中的描述以及本领域的一般技术知识即可完整了解相关操作。
30.另外,说明书中所描述的特点、操作或者特征可以以任意适当的方式结合形成各种实施方式。同时,方法描述中的各步骤或者动作也可以按照本领域技术人员所能显而易见的方式进行顺序调换或调整。因此,说明书和附图中的各种顺序只是为了清楚描述某一个实施例,并不意味着是必须的顺序,除非另有说明其中某个顺序是必须遵循的。
31.本文中为部件所编序号本身,例如“第一”、“第二”等,仅用于区分所描述的对象,不具有任何顺序或技术含义。而本技术所说“连接”、“联接”,如无特别说明,均包括直接和间接连接(联接)。
32.请参考图1,一种实施例中基于规则模型的音视频流解封装方法包括步骤110~
160,下面具体说明。
33.步骤110:获取音视频流,读取该音视频流的第一个音视频数据包。音视频流的传输协议可以是rtsp(real time streaming protocol,实时流传输协议)、rtmp(real time messaging protocol,实时消息传输协议)、hls(http live streaming)等,也可以是安防领域监控设备的主流协议规范,比如gb/t 28181、onvif等协议。
34.步骤120:从预先设置的规则模型库中读取一个未匹配过的规则模型,与第一个音视频数据包进行匹配。
35.规则模型用于表示音视频封装方式的特征,其中每个规则模型对应一种音视频的封装方式,针对每种音视频的封装方式可以提取出其特征构建一规则模型,当读取的第一个音视频数据包和某一规则模型匹配时,则说明音视频流的封装方式为该规则模型对应的封装方式。
36.规则模型中包括校验数据长度和一条或多条特征规则,校验数据长度指校验封装方式所需的音视频流的第一个音视频数据包从头部开始的数据长度,特征规则表征在规则模型对应的封装方式下,音视频流的封装包头所需符合的条件。当采用某一规则模型进行匹配时,取第一个音视频数据包中长度与该规则模型的校验数据长度相等的数据,判断其是否符合该规则模型中的各特征规则,根据所有特征规则的判断结果判断该规则模型是否与第一个音视频数据包相匹配。
37.当前常用的封装方式基本上是在原始音视频流头部增加几十个字节的数据得到封装包头以对音视频流进行封装,一般封装包头包含头标识、帧长度、时间戳、帧标识等信息,通过对常用封装格式及多种私有格式进行分析可知,可根据封装方式的包头规则,来抽象出封装方式的规则模型。一种实施例中,特征规则包括特征名称、数据定位信息、关系运算符和校验值,其中特征名称由用户定义,其作用在于便于理解特征含义,例如可以定义为封装包头中的信息的名称,如头标识、帧长度或帧标识等,数据定位信息包括起始位置、结束位置和数据类型,关系运算符可以是例如小于、大于、小于等于、大于等于、等于、不等于等。根据以上特征规则,当判断第一个音视频数据包是否符合特征规则时,可以取第一个音视频数据包中从起始位置到结束位置处的数据,采用与数据定位信息中的数据类型对应的比较方式,将该数据与校验值进行比较,若两者的关系与关系运算符所表示的关系相同,则判定第一个音视频数据包符合该特征规则,否则判定第一个音视频数据包不符合该特征规则。
38.一种实施例中,规则模型中还包括特征规则间的逻辑运算符,可以将所有特征规则的判断结果按该规则模型中特征规则间的逻辑运算符进行逻辑运算来判断该规则模型是否与第一个音视频数据包相匹配,当逻辑运算结果为真时则判定该规则模型与第一个音视频数据包相匹配,否则判定该规则模型与第一个音视频数据包不匹配。
39.下面通过两个例子来说明规则模型。以某公司音视频私有封装方式(znvp封装方式)为例,znvp的封装方式如图2所示,其包头总共24个字节,头标识占8字节,固定为0x0100000001000000,时间戳占8字节,帧长度占4字节,帧标识占4字节,这里帧长度的值不会超过2097152,因此可构建znvp封装方式的规则模型如下:
40.校验数据长度:lc=24byte;
41.特征规则:
[0042][0043]
又如常用的ps流封装方式,其头标识占5字节,固定为0x000001ba,因此可构建特征规则如下:
[0044][0045]
一种实施例中,可以根据特征规则和逻辑运算符来构建判定表达式,通过判定表达式判断规则模型是否与第一个音视频数据包匹配,所构建的判定表达式称为匹配判定表达式。可以根据每条特征规则构建一个特征判定表达式用于表示特征规则的判断结果,然后将所有特征判定表达式根据该规则模型中特征规则间的逻辑运算符组成匹配判定表达式。如上述znvp封装方式的规则模型,其匹配判定表达式为(以c++为例):
[0046]
uchar framflags[8]={0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00};
[0047]
bool bresult=((0==memcmp(pbuf,framflags,8))&&*((unsigned int*)(pbuf+16)《2097152))
[0048]
其中framflags为头标识的校验值数据,pbuf为第一个音视频数据包的起始位置,特征表达式0==memcmp(pbuf,framflags,8)根据第一条特征规则构建,特征表达式(unsigned int*)(pbuf+16)《2097152根据第二条特征规则构建,两个特征判定表达式根据该规则模型中特征规则间的逻辑运算符“与”(“&&”)组成了匹配判定表达式。当匹配判定表达式的运算结果为真时(即bresult=true)则判定该规则模型与第一个音视频数据包相匹配,否则判定该规则模型与第一个音视频数据包不匹配。
[0049]
在有的实施例中,可以在匹配前读取规则模型库中的所有规则模型并生成相应的匹配判定表达式,将匹配判定表达式加载到缓存中,在匹配时直接从缓存中读取匹配判定表达式进行判定即可。
[0050]
用户可通过交互界面进行规则模型的添加、编辑、删除和查询等操作,配置需要支持的所有音视频封装方式的规则模型。规则模型配置好后被保存到关系型数据库中形成规则模型库,关系型数据库可以是mysql数据库等。当用户添加新的规则模型或者对某个规则模型进行更新或者删除时,也会实时地在缓存中添加、更新或者删除此规则模型,从而保证了规则模型可以实时增加、更新或者删除并立即生效。
[0051]
步骤130:判断当前规则模型是否与第一个音视频数据包匹配,若是则执行步骤140,否则执行步骤150。
[0052]
步骤140:获取该规则模型对应的封装方式,采用该封装方式对应的解封装方式对
音视频流的后续音视频包进行解封装。
[0053]
步骤150:判断是否已遍历完整个规则模型库,若是则执行步骤160,否则执行步骤120。
[0054]
步骤160:判定该音视频流的封装方式不被支持,并通过交互界面提示用户。
[0055]
本技术还提供一种基于规则模型的音视频流解封装系统,请参考图3,一种实施例中该系统包括音视频源接入模块1、规则模型库2、规则模型匹配模块3和解封装模块4,下面分别说明。
[0056]
音视频源接入模块1用于获取音视频流,音视频流的传输协议可以是rtsp、rtmp、hls等,也可以是安防领域监控设备的主流协议规范,比如gb/t 28181、onvif等协议。
[0057]
规则模型库2用于存储规则模型,其中每个规则模型对应一种音视频的封装方式,针对每种音视频的封装方式可以提取出其特征构建一规则模型。规则模型用于和音视频流进行匹配,可以读取音视频流的第一个音视频数据包和规则模型进行匹配,当第一个音视频数据包和某一规则模型匹配时,则说明音视频流的封装方式为该规则模型对应的封装方式。
[0058]
规则模型中包括校验数据长度和一条或多条特征规则,校验数据长度指校验封装方式所需的音视频流的第一个音视频数据包从头部开始的数据长度,特征规则表征在规则模型对应的封装方式下,音视频流的封装包头所需符合的条件。当采用某一规则模型进行匹配时,取第一个音视频数据包中长度与该规则模型的校验数据长度相等的数据,判断其是否符合该规则模型中的各特征规则,根据所有特征规则的判断结果判断该规则模型是否与第一个音视频数据包相匹配。
[0059]
当前常用的封装方式基本上是在原始音视频流头部增加几十个字节的数据得到封装包头以对音视频流进行封装,一般封装包头包含头标识、帧长度、时间戳、帧标识等信息,通过对常用封装格式及多种私有格式进行分析可知,可根据封装方式的包头规则,来抽象出封装方式的规则模型。一种实施例中,特征规则包括特征名称、数据定位信息、关系运算符和校验值,其中特征名称由用户定义,其作用在于便于理解特征含义,例如可以定义为封装包头中的信息的名称,如头标识、帧长度或帧标识等,数据定位信息包括起始位置、结束位置和数据类型,关系运算符可以是例如小于、大于、小于等于、大于等于、等于、不等于等。根据以上特征规则,当判断第一个音视频数据包是否符合特征规则时,可以取第一个音视频数据包中从起始位置到结束位置处的数据,采用与数据定位信息中的数据类型对应的比较方式,将该数据与校验值进行比较,若两者的关系与关系运算符所表示的关系相同,则判定第一个音视频数据包符合该特征规则,否则判定第一个音视频数据包不符合该特征规则。
[0060]
一种实施例中,规则模型中还包括特征规则间的逻辑运算符,可以将所有特征规则的判断结果按该规则模型中特征规则间的逻辑运算符进行逻辑运算来判断该规则模型是否与第一个音视频数据包相匹配,当逻辑运算结果为真时则判定该规则模型与第一个音视频数据包相匹配,否则判定该规则模型与第一个音视频数据包不匹配。
[0061]
下面通过两个例子来说明规则模型。以某公司音视频私有封装方式(znvp封装方式)为例,znvp的封装方式如图2所示,其包头总共24个字节,头标识占8字节,固定为0x0100000001000000,时间戳占8字节,帧长度占4字节,帧标识占4字节,这里帧长度的值不
会超过2097152,因此可构建znvp封装方式的规则模型如下:
[0062]
校验数据长度:lc=24byte;
[0063]
特征规则:
[0064][0065]
又如常用的ps流封装方式,其头标识占5字节,固定为0x000001ba,因此可构建特征规则如下:
[0066][0067]
规则模型匹配模块3与音视频接入模块1和规则模型库2连接,用于读取音视频流的第一个音视频数据包,并从规则模型库2中逐个读取规则模型,与第一个音视频数据包进行匹配,直至获得与第一个音视频数据包相匹配的规则模型或遍历完整个规则模型库2为止。
[0068]
一种实施例中,规则模型匹配模块3可以根据特征规则和逻辑运算符来构建判定表达式,通过判定表达式判断规则模型是否与第一个音视频数据包匹配,所构建的判定表达式称为匹配判定表达式。可以根据每条特征规则构建一个特征判定表达式用于表示特征规则的判断结果,然后将所有特征判定表达式根据该规则模型中特征规则间的逻辑运算符组成匹配判定表达式。如上述znvp封装方式的规则模型,其匹配判定表达式为(以c++为例):
[0069]
uchar framflags[8]={0x01,0x00,0x00,0x00,0x01,0x00,0x00,0x00};
[0070]
bool bresult=((0==memcmp(pbuf,framflags,8))&&*((unsigned int*)(pbuf+16)《2097152))
[0071]
其中framflags为头标识的校验值数据,pbuf为第一个音视频数据包的起始位置,特征表达式0==memcmp(pbuf,framflags,8)根据第一条特征规则构建,特征表达式(unsigned int*)(pbuf+16)《2097152根据第二条特征规则构建,两个特征判定表达式根据该规则模型中特征规则间的逻辑运算符“与”(“&&”)组成了匹配判定表达式。当匹配判定表达式的运算结果为真时(即bresult=true)则判定该规则模型与第一个音视频数据包相匹配,否则判定该规则模型与第一个音视频数据包不匹配。
[0072]
在有的实施例中,规则模型匹配模块3可以在匹配前读取规则模型库2中的所有规则模型并生成相应的匹配判定表达式,将匹配判定表达式加载到缓存中,在匹配时直接从缓存中读取匹配判定表达式进行判定即可。
[0073]
当获得与第一个音视频数据包相匹配的规则模型时,规则模型匹配模块3获取该规则模型对应的封装方式,并发送该封装方式对应的解封装方式给解封装模块4,当遍历完整个规则模型库2仍未获得与第一个音视频数据包相匹配的规则模型时,则判定音视频流的封装方式不被支持并通过交互界面提示用户。
[0074]
解封装模块4与规则模型匹配模块3连接,用于接收规则模型匹配模块3发送的解封装方式,并调用相应的解封装库对音视频流后续的音视频包进行解封装,生成音视频裸流,并推送裸流给解码库进行解码或者其他第三方应用。
[0075]
请参考图4,一种实施例中,基于规则模型的音视频流解封装系统还包括规则模型管理模块5,规则模型管理模块5用于提供交互界面供用户进行规则模型的添加、删除和修改等操作,并响应于用户操作对规则模型库2中的规则模型作相应的更新。用户可通过交互界面配置需要支持的所有音视频封装方式的规则模型,规则模型配置好后被保存到关系型数据库中形成规则模型库2,关系型数据库可以是mysql数据库等。当用户添加新的规则模型或者对某个规则模型进行更新或者删除时,模型管理模块5也会实时地规则模型匹配模块3在缓存中添加、更新或者删除此规则模型,从而保证了规则模型可以实时增加、更新或者删除并立即生效。
[0076]
依据上述实施例的基于规则模型的音视频流解封装方法和系统,通过为音视频的封装方式事先构建对应的规则模型并保存在规则模型库中,在解封装时,读取音视频流的第一个音视频数据包与规则模型库中的规则模型进行匹配,当获得相匹配的规则模型时,则可确定该音视频流的封装方式为所匹配的规则模型对应的封装方式,从而能够快速确定音视频封装方式,采用该封装方式对应的解封装方式对音视频流进行解封装,进而极大地缩短了音视频解封装的时间。通过实际应用发现,本技术提供的音视频流解封装方法相较于通过遍历调用解封装库直接进行解封装操作的方法大约快2-4倍,极大地提升了音视频流解封装的速度。同时用户可通过对规则模型进行增删改,实现对各种音视频封装方式的灵活支持,解决了添加和修改解封装方式不够灵活的问题。
[0077]
本领域技术人员可以理解,上述实施方式中各种方法的全部或部分功能可以通过硬件的方式实现,也可以通过计算机程序的方式实现。当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序可以存储于一计算机可读存储介质中,存储介质可以包括:只读存储器、随机存储器、磁盘、光盘、硬盘等,通过计算机执行该程序以实现上述功能。例如,将程序存储在设备的存储器中,当通过处理器执行存储器中程序,即可实现上述全部或部分功能。另外,当上述实施方式中全部或部分功能通过计算机程序的方式实现时,该程序也可以存储在服务器、另一计算机、磁盘、光盘、闪存盘或移动硬盘等存储介质中,通过下载或复制保存到本地设备的存储器中,或对本地设备的系统进行版本更新,当通过处理器执行存储器中的程序时,即可实现上述实施方式中全部或部分功能。
[0078]
以上应用了具体个例对本发明进行阐述,只是用于帮助理解本发明,并不用以限制本发明。对于本发明所属技术领域的技术人员,依据本发明的思想,还可以做出若干简单推演、变形或替换。
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1