视频帧组装方法、装置、电子设备及存储介质转让专利

申请号 : CN202110607742.0

文献号 : CN113365098B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 肖志勇

申请人 : 平安国际智慧城市科技股份有限公司

摘要 :

本发明涉及视频传输技术,揭露了一种视频帧组装方法,包括:接收发送端发出的RTP数据包集;获取所述RTP数据包集中每个RTP数据包的时间戳,根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中;获取所述当前帧缓存和所述前一帧缓存中每个RTP数据包的序列号、尾包标志和首包标志;按照预设执行方式,分别在所述当前帧缓存和所述前一帧缓存中,根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,得到当前帧视频帧和前一帧视频帧。因此本发明提出的视频帧组装方法、装置、电子设备及计算机可读存储介质,可以解决对视频帧进行组装时,系统开销大的问题。

权利要求 :

1.一种视频帧组装方法,其特征在于,所述方法包括:

接收发送端发出的RTP数据包集;

获取所述RTP数据包集中每个RTP数据包的时间戳,根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中,通过数组函数管理所述当前帧缓存和前一帧缓存,分别为所述当前帧缓存和前一帧设置缓存指定一个下标,以对所述两个视频帧缓存进行区分;

获取所述当前帧缓存和所述前一帧缓存中每个RTP数据包的序列号、尾包标志和首包标志;

按照预设执行方式,分别在所述当前帧缓存和所述前一帧缓存中,根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,得到当前帧视频帧和前一帧视频帧,所述链表由一系列结点组成,每个所述结点包括两部分,一部分存放所述RTP数据包,一部分存放用来指向下一个节点的指针,用于将多个所述RTP数据包数据组装成一个所述视频帧。

2.如权利要求1所述的视频帧组装方法,其特征在于,所述根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中,包括:将时序上相邻的两个时间戳分别作为当前帧时间戳和前一帧时间戳;

将所述RTP数据包集中时间戳等于所述当前帧时间戳的RTP数据包缓存到所述当前帧缓存中;

将所述RTP数据包集中时间戳等于所述前一帧时间戳的RTP数据包缓存到所述前一帧缓存中;

当所述RTP数据包集中存在时间戳既不等于所述当前帧时间戳也不等于所述前一帧时间戳的RTP数据包时,对所述前一帧缓存中的RTP数据包进行关键帧判断,根据所述关键帧判断的结果调整所述前一帧缓存,并将所述时间戳既不等于所述当前帧时间戳也不等于所述前一帧时间戳的RTP数据包缓存到调整后的所述前一帧缓存中。

3.如权利要求2所述的视频帧组装方法,其特征在于,所述根据所述关键帧判断的结果调整所述前一帧缓存,包括:若所述前一帧缓存中的RTP数据包中的视频帧是关键帧,则通知上层应用取走所述前一帧缓存中的RTP数据包,并释放所述前一帧缓存;

若所述前一帧缓存中的RTP数据包中的视频帧不是关键帧,则直接释放所述前一帧缓存。

4.如权利要求1所述的视频帧组装方法,其特征在于,所述预设执行方式包括下述的其中一种:同时并行对所述当前帧缓存中的RTP数据包和所述前一帧缓存中RTP数据包进行排序;或按照预设的时间间隔,先后对所述当前帧缓存中的RTP数据包及所述前一帧缓存中RTP数据包进行排序。

5.如权利要求1所述的视频帧组装方法,其特征在于,所述根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,包括:通过遍历操作,提取所述当前帧缓存中的其中一个RTP数据包;

根据所述RTP数据包的首包标志,判断所述RTP数据包是否为视频帧的第一个数据包;

若所述RTP数据包是第一个数据包,则将所述RTP数据包插入到当前帧链表中的第一个位置,并记录所述RTP数据包的序列号为首包序列号;

若所述RTP数据包不是第一个数据包,根据所述RTP数据包的尾包标志,判断所述RTP数据包是否为视频帧的最后一个数据包;

若所述RTP数据包是最后一个数据包,则将所述RTP数据包插入到所述当前帧链表中的最后一个位置,并记录所述RTP数据包的序列号为尾包序列号;

若所述RTP数据包既不是第一个数据包也不是最后一个数据包,则根据所述RTP数据包的序列号,按照由小到大的规则,从所述当前帧链表的第一个空白位置,将所述RTP数据包插入到所述当前帧链表中。

6.如权利要求5所述的视频帧组装方法,其特征在于,所述得到当前帧视频帧及前一帧视频帧之后,还包括:根据所述尾包序列号及所述首包序列号,得到当前帧视频帧及前一帧视频帧应有RTP数据包个数;

若所述当前帧视频帧及前一帧视频帧中,所述应有RTP数据包个数大于对应的当前帧视频帧及前一帧视频帧的实际RTP数据包个数,则通过所述当前帧视频帧及前一帧视频帧中的RTP数据包,判断所述当前帧视频帧及前一帧视频帧是否是关键帧;

如果所述当前帧视频帧及前一帧视频帧是关键帧,则通知上层应用所述当前帧视频帧及前一帧视频帧是关键帧且存在丢包。

7.如权利要求1至6中任意一项所述的视频帧组装方法,其特征在于,所述接收发送端发出的RTP数据包集之前,所述方法还包括:在所述发送端,利用H264技术对原始视频数据进行编码,得到H264视频帧集;

利用节目流技术对所述H264视频帧集进行封装,得到PS视频帧集;

利用RTP协议对所述PS视频帧集进行打包,得到所述PS视频帧集对应的RTP数据包集。

8.一种视频帧组装装置,其特征在于,所述装置包括:

数据包接收模块,用于接收发送端发出的RTP数据包集;

数据包缓存模块,用于获取所述RTP数据包集中每个RTP数据包的时间戳,根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中,通过数组函数管理所述当前帧缓存和前一帧缓存,分别为所述当前帧缓存和前一帧设置缓存指定一个下标,以对所述两个视频帧缓存进行区分;

数据包排序模块,用于获取所述当前帧缓存和所述前一帧缓存中每个RTP数据包的序列号、尾包标志和首包标志;按照预设执行方式,分别在所述当前帧缓存和所述前一帧缓存中,根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,得到当前帧视频帧和前一帧视频帧,所述链表由一系列结点组成,每个所述结点包括两部分,一部分存放所述RTP数据包,一部分存放用来指向下一个节点的指针,用于将多个所述RTP数据包数据组装成一个所述视频帧。

9.一种电子设备,其特征在于,所述电子设备包括:

存储器,用于存放计算机程序;

处理器,用于执行存储器上所存放的程序时,实现权利要求1至7中任意一项所述的视频帧组装方法。

10.一种计算机可读存储介质,存储有计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至7中任意一项所述的视频帧组装方法。

说明书 :

视频帧组装方法、装置、电子设备及存储介质

技术领域

[0001] 本发明涉及视频传输技术领域,尤其涉及一种视频帧组装方法、装置、电子设备及计算机可读存储介质。

背景技术

[0002] 当今视频传输技术广泛应用于人们的日常工作和生活之中,例如,影视视频传输、会议视频传输、短视频直播等。为满足视频数据的传输要求,通常原始视频数据在发送端会被分解成多个视频帧,每个视频帧又被拆分为多个RTP数据包,再利用UDP(User Datagram Protocol,用户数据报协议)协议将所述RTP数据包传输到接收端,并在接收端对所述RTP数据包进行排序,将多个所述RTP数据包组装成视频帧。
[0003] 关于视频帧的组装,现有技术主要是在所述接收端,根据RTP数据包中的时间戳、序列号等信息,计算所接收到的当前RTP数据包与所接收到的前一个RTP数据包的关系,根据计算结果对接收到RTP数据包进行排序,将多个所述RTP数据包组装成视频帧。
[0004] 采用这种方式,在视频帧的组装过程中,所述接收端需要频繁进行内存分配以存储接收到的RTP数据包、并进行大量的计算工作,导致系统开销大,因此现有技术有待提升。

发明内容

[0005] 本发明提供一种视频帧组装方法、装置及计算机可读存储介质,其主要目的在于解决对视频帧进行组装时,系统开销大的问题。
[0006] 为实现上述目的,本发明提供的一种视频帧组装方法,包括:
[0007] 接收发送端发出的RTP数据包集;
[0008] 获取所述RTP数据包集中每个RTP数据包的时间戳,根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中;
[0009] 获取所述当前帧缓存和所述前一帧缓存中每个RTP数据包的序列号、尾包标志和首包标志;
[0010] 按照预设执行方式,分别在所述当前帧缓存和所述前一帧缓存中,根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,得到当前帧视频帧和前一帧视频帧。
[0011] 可选地,所述根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中,包括:
[0012] 将时序上相邻的两个时间戳分别作为当前帧时间戳和前一帧时间戳;
[0013] 将所述RTP数据包集中时间戳等于所述当前帧时间戳的RTP数据包缓存到所述当前帧缓存中;
[0014] 将所述RTP数据包集中时间戳等于所述前一帧时间戳的RTP数据包缓存到所述前一帧缓存中;
[0015] 当所述RTP数据包集中存在时间戳既不等于所述当前帧时间戳也不等于所述前一帧时间戳的RTP数据包时,对所述前一帧缓存中的RTP数据包进行关键帧判断,根据所述关键帧判断的结果调整所述前一帧缓存,并将所述时间戳既不等于所述当前帧时间戳也不等于所述前一帧时间戳的RTP数据包缓存到调整后的所述前一帧缓存中。
[0016] 可选地,所述根据所述关键帧判断的结果调整所述前一帧缓存,包括:
[0017] 若所述前一帧缓存中的RTP数据包中的视频帧是关键帧,则通知上层应用取走所述前一帧缓存中的RTP数据包,并释放所述前一帧缓存;
[0018] 若所述前一帧缓存中的RTP数据包中的视频帧不是关键帧,则直接释放所述前一帧缓存。
[0019] 可选地,所述根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,包括:
[0020] 通过遍历操作,提取所述当前帧缓存中的其中一个RTP数据包;
[0021] 根据所述RTP数据包的首包标志,判断所述RTP数据包是否为视频帧的第一个数据包;
[0022] 若所述RTP数据包是第一个数据包,则将所述RTP数据包插入到当前帧链表中的第一个位置,并记录所述RTP数据包的序列号为首包序列号;
[0023] 若所述RTP数据包不是第一个数据包,根据所述RTP数据包的尾包标志,判断所述RTP数据包是否为视频帧的最后一个数据包;
[0024] 若所述RTP数据包是最后一个数据包,则将所述RTP数据包插入到所述当前帧链表中的最后一个位置,并记录所述RTP数据包的序列号为尾包序列号;
[0025] 若所述RTP数据包既不是第一个数据包也不是最后一个数据包,则根据所述RTP数据包的序列号,按照由小到大的规则,从所述当前帧链表的第一个空白位置,将所述RTP数据包插入到所述当前帧链表中。
[0026] 可选地,所述得到当前帧视频帧及前一帧视频帧之后,还包括:
[0027] 根据所述尾包序列号及所述首包序列号,得到当前帧视频帧及前一帧视频帧应有RTP数据包个数;
[0028] 若所述当前帧视频帧及前一帧视频帧中,所述应有RTP数据包个数大于对应的当前帧视频帧及前一帧视频帧的实际RTP数据包个数,则通过所述当前帧视频帧及前一帧视频帧中的RTP数据包,判断所述当前帧视频帧及前一帧视频帧是否是关键帧;
[0029] 如果所述当前帧视频帧及前一帧视频帧是关键帧,则通知上层应用所述当前帧视频帧及前一帧视频帧是关键帧且存在丢包。
[0030] 为了解决上述问题,本发明还提供了一种视频帧组装装置,所述装置包括:
[0031] 数据包接收模块,用于接收发送端发出的RTP数据包集;
[0032] 数据包缓存模块,用于获取所述RTP数据包集中每个RTP数据包的时间戳,根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中;
[0033] 数据包排序模块,用于获取所述当前帧缓存和所述前一帧缓存中每个RTP数据包的序列号、尾包标志和首包标志;按照预设执行方式,分别在所述当前帧缓存和所述前一帧缓存中,根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,得到当前帧视频帧和前一帧视频帧。
[0034] 为了解决上述问题,本发明还提供一种电子设备,所述电子设备包括:
[0035] 存储器,存储至少一个计算机程序;及
[0036] 处理器,执行所述存储器中存储的计算机程序以实现上述所述的视频帧组装方法。
[0037] 为了解决上述问题,本发明还提供一种计算机可读存储介质,所述计算机可读存储介质中存储有至少一个计算机程序,所述至少一个计算机程序被电子设备中的处理器执行以实现上述所述的视频帧组装方法。
[0038] 本申请实施例利用预构建的视频帧缓存存储RTP数据包集,并结合预构建的链表的数据结构特点,根据所述视频帧缓存中的RTP数据包的序列号、首包标志、尾包标志,将所述RTP数据包插入到所述链表的对应节点,从而实现了对所述视频帧缓存中的RTP数据包集的排序和组装。在组装过程中,通过分配视频帧缓存的方式,避免了所述接收端频繁进行内存分配,同时利用链表对所述RTP数据包集进行排序,不需要计算每个RTP数据包与前后对应的RTP数据包的关系,减少了计算量。因此本发明提出的视频帧组装方法、装置、电子设备及计算机可读存储介质,可以解决对视频帧进行组装时,系统开销大的问题。

附图说明

[0039] 图1为本发明一实施例提供的一种视频帧组装方法的流程示意图;
[0040] 图2为本发明一实施例提供的对RTP数据包集分组缓存的流程示意图;
[0041] 图3为本发明一实施例提供的对当前帧缓存中的RTP数据包集组装的流程示意图;
[0042] 图4为本发明一实施例提供的一种视频帧组装方法的装置的功能模块图;
[0043] 图5为本发明一实施例提供的实现所述视频组装帧方法的电子设备的结构示意图。
[0044] 本发明目的的实现、功能特点及优点将结合实施例,参照附图做进一步说明。

具体实施方式

[0045] 应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
[0046] 本申请实施例提供一种视频帧组装方法。所述视频帧组装方法的执行主体包括但不限于服务端、终端等能够被配置为执行本申请实施例提供的该方法的电子设备中的至少一种。换言之,所述视频帧组装方法可以由安装在终端设备或服务端设备的软件或硬件来执行,所述软件可以是区块链平台。所述服务端包括但不限于:单台服务器、服务器集群、云端服务器或云端服务器集群等。
[0047] 参照图1所示,为本发明一实施例提供的视频帧组装方法的流程示意图。
[0048] 在本实施例中,所述视频帧组装包括:
[0049] S1、接收发送端发出的RTP数据包集;
[0050] 本发明实施例中,在影视视频、会议视频或直播短视频等视频数据传输过程中,为满足所述视频数据在网络中的传输要求,通常原始视频数据在发送端会被分解成多个视频帧,每个视频帧又被拆分为多个RTP(Real‑time Transport Protocol,实时传输协议)数据包,再利用UDP(User Datagram Protocol,用户数据报协议)协议将所述RTP数据包的传输到接收端。
[0051] 所述发送端可以是提供视频数据发送或中转功能的设备或模块,例如,手机、电脑或电视等设备中的负责视频数据发送的模块。
[0052] 所述接收端可以是提供视频数据接收或缓存的设备或模块,例如手机、电脑或电视等设备中的负责视频数据接收的模块。
[0053] 本发明实施例中,所述原始视频数据可以理解为由一张张连续的图片组成,其中每一幅图片就是一个视频帧。
[0054] 所述RTP数据包是所述原始视频数据在网络中传输的最小单位。所述RTP数据包集包含多个RTP数据包。详细地,所述接收发送端发出的RTP数据包集之前,所述方法还包括:
[0055] 在所述发送端,利用H264技术对原始视频数据进行编码,得到H264视频帧集;
[0056] 利用PS(Program Stream,节目流)技术对所述H264视频帧集进行封装,得到PS视频帧集;
[0057] 利用RTP协议对所述PS视频帧集进行打包,得到所述PS视频帧集对应的RTP数据包集。
[0058] 所述H264技术是一种对所述原始视频数据进行编解码的技术。
[0059] 所述PS技术通常用于对所述H264视频帧集进行封装,以提升所述H264视频帧集在网络中传输的速度和质量。
[0060] 所述PS视频帧集是包含多个利用所述PS技术对所述H264视频流封装后的视频帧,即由多个PS视频帧组成。
[0061] 本发明实施例中,利用所述RTP协议对所述PS视频帧进行拆分打包,以满足网络底层对视频数据传输的要求。
[0062] 通常一个所述PS视频帧可以被打包成多个RTP数据包,即同一个所述PS视频帧对应多个RTP数据包。
[0063] S2、获取所述RTP数据包集中每个RTP数据包的时间戳,根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中;
[0064] 本发明实施例中,所述时间戳是用来表示所述利用RTP协议对所述PS视频帧集进行打包的时间,同一所述PS视频帧对应的多个RTP数据包的时间戳相同。
[0065] 根据同一视频帧对应的RTP数据包的时间戳相同的原则,对所述RTP数据包集进行分组缓存,将具有相同时间戳的RTP数据包放入同一缓存,从而保证同一缓存中存放的是同一视频帧对应的RTP数据包。
[0066] 本发明实施例中,预构建了两个视频帧缓存,用来存放所述RTP数据包,实际应用中,可根据实际需要构建多个视频帧缓存。较佳地,可以通过定义一个数组函数,管理所述当前帧缓存和前一帧缓存,分别为所述当前帧缓存和前一帧设置缓存指定一个下标,得到述当前帧下标和所述前一帧下标,对所述两个视频帧缓存进行区分。
[0067] 详细地,参阅图2所示,本发明实施例中,所述S2,包括:
[0068] S21、从所述RTP数据包集中每个RTP数据包的RTP头中,获取所述RTP数据包的时间戳;
[0069] S22、将时序上相邻的两个时间戳,分别作为当前帧时间戳和前一帧时间戳;
[0070] S23、判断所述RTP数据包的时间戳是否等于所述当前帧时间戳;
[0071] 若所述RTP数据包的时间戳等于所述当前帧时间戳,则执行S24、则将所述RTP包缓存到所述当前帧缓存中;
[0072] 若所述RTP数据包的时间戳不等于所述当前帧时间戳,则执行S25、进一步判断所述RTP数据包的时间戳是否等于所述前一帧时间戳;
[0073] 若所述RTP数据包的时间等于所述前一帧时间戳,则执行S26、则将所述RTP包缓存到所述前一帧缓存中;
[0074] 若所述RTP数据包的时间戳既不等于所述当前帧时间戳也不等于所述前一帧时间戳,则执行S27、对所述前一帧缓存中的RTP数据包进行关键帧判断,并根据判断的结果调整所述前一帧缓存,将所述时间戳既不等于所述当前帧时间戳也不等于所述前一帧时间戳的RTP数据包缓存到调整后的所述前一帧缓存中。
[0075] 详细地,所述对所述前一帧缓存中的RTP数据包进行关键帧判断,并根据判断的结果调整所述前一帧缓存,包括:获取所述前一帧缓存中的RTP数据包的H264头;根据所述H264头判断所述前一帧缓存中的RTP数据包对应的视频帧是否是关键帧;若所述前一帧缓存中的RTP数据包对应的视频帧是关键帧,则通知上层应用取走所述前一帧缓存中的RTP数据包后,释放所述前一帧缓存;若所述前一帧缓存中的RTP数据包对应的视频帧不是关键帧,则直接释放所述前一帧缓存。
[0076] 本发明实施例中,一个所述RTP数据包的数据结构包括:RTP头+PS头+H264头+H264载荷。其中,所述H264头包含所述H264视频帧的帧类型信息,所述帧类型包括关键帧和普通帧。所述关键帧也称做参考帧,可以理解为是一幅完整图片,利用所述H264技术对所述关键帧进行解码时,只需要所述关键帧数据就能重构一幅完整的图片。所述普通帧,是指利用所述H264技术对所述普通帧进行解码时,需要依赖所述关键帧或其他普通帧,才能重构一幅完整的图片,一般所述普通帧数据量比较小。
[0077] 所述H264载荷是指所述H264视频帧对应的数据内容。
[0078] 所述PS头是利用所述PS技术对所述H264视频帧集进行封装时,在所述H264视频帧数据结构的基础上增加的字段,包含所述封装动作的相关信息。
[0079] 所述RTP头共计12个字节,包括时间戳信息。同一所述PS视频帧对应的多个所述RTP数据包的时间戳相同。
[0080] 本发明实施例中,所述上层应用可以是提供对视频数据做进一步处理功能的模块或设备,例如,对视频数据进行解码的模块、对视频数据进行纠错的模块或播放视频数据的设备。
[0081] 本发明实施例中,利用同一所述PS视频帧对应的多个RTP数据包时间戳相同的特性,对所述RTP数据包集进行分组缓存,得到当前帧缓存对应的RTP数据包集和前一帧缓存对应的RTP数据包集,一方面,同一视频帧缓存对应的RTP数据包集归属同一个PS视频帧,保证了后续组装视频帧的准确性,另一方面,同时对两组所述RTP数据包集进行组装,提升了处理效率。
[0082] S3、获取所述当前帧缓存和所述前一帧缓存中每个RTP数据包的序列号、尾包标志和首包标志;
[0083] 本发明实施例中,可以从每个RTP数据包的RTP头中获取所述RTP数据包的序列号,尾包标志,从所述RTP数据包的PS头中获取首包标志位。
[0084] 所述序列号是指所述利用RTP协议对所述PS视频帧集进行打包时,生成的多个RTP数据包具有先后顺序,每顺序生成一个RTP数据包,所述RTP数据包对应的序列号会自动加1。
[0085] 同一个所述PS视频帧通过所述RTP技术打包时,会对应生成多个RTP数据包,所述尾包标志是用来表示所述RTP数据包是否是对应的PS视频帧的最后一个数据包。
[0086] 所述PS头共计14个字节,包括起始码字段即所述首包标志,所述起始码字段用来表示所述RTP数据包是否是对应的PS视频帧的第一个数据包。
[0087] S3、按照预设执行方式,根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,得到当前帧视频帧和前一帧视频帧。本发明实施例中,所述预设执行方式包括下述的其中一种:同时并行对所述当前帧缓存中的RTP数据包和所述前一帧缓存中RTP数据包进行排序;按照预设的时间间隔,先后对所述当前帧缓存中的RTP数据包及所述前一帧缓存中RTP数据包进行排序。本发明较佳实施例中,可以采用同时并行对所述当前帧缓存中的RTP数据包和所述前一帧缓存中RTP数据包进行排序的处理方式。
[0088] 本发明实施例中,所述链表是用来组装所述RTP数据包集的一种数据结构,通常由一系列结点组成,每个所述结点包括两部分,一部分存放所述RTP数据包,一部分存放用来指向下一个节点的指针,可以利用所述链表将多个所述RTP数据包数据组装成一个所述视频帧。
[0089] 本发明另一个实施例中,也可以利用动态数组组装所述RTP数据包集。
[0090] 本发明实施例中,对所述当前帧缓存中的RTP数据包集和对所述前一帧缓存中的RTP数据包集进行排序的方法相同,以对所述当前帧缓存中的RTP数据包集进行排序为例进行说明,详细地,参阅图3所示,所述S4包括:
[0091] S41、通过遍历操作,提取所述当前帧缓存中的其中一个RTP数据包;
[0092] S42、根据所述RTP数据包的首包标志,判断所述RTP数据包是否为视频帧的第一个数据包;
[0093] 若所述RTP数据包是第一个数据包,则执行S43、将所述RTP数据包插入到所述当前帧链表中的第一个位置,并记录所述RTP数据包的序列号为首包序列号;
[0094] 若所述RTP数据包不是第一个数据包,则执行S44、根据所述RTP数据包的尾包标志,判断所述RTP数据包是否为视频帧的最后一个数据包;
[0095] 若所述RTP数据包是最后一个数据包,则执行S45、将所述RTP数据包插入到所述当前帧链表中的最后一个位置,并记录所述RTP数据包的序列号为尾包序列号;
[0096] 若所述RTP数据包既不是第一个数据包也不是最后一个数据包,则执行S46、根据所述RTP数据包的序列号,按照由小到大的规则,从所述当前帧链表的第一个空白位置,将所述RTP数据包插入到所述当前帧链表中。
[0097] 本发明实施例中,得到所述当前帧视频帧及前一帧视频帧之后,详细地,还包括:
[0098] 根据所述尾包序列号及所述首包序列号,得到当前帧视频帧及前一帧视频帧应有RTP数据包个数;若所述当前帧视频帧及前一帧视频帧中,所述应有RTP数据包个数大于当前帧视频帧及前一帧视频帧的实际RTP数据包个数,则通过所述当前帧视频帧及前一帧视频帧中的RTP数据包,判断所述当前帧视频帧及前一帧视频帧是否是关键帧;如果所述当前帧视频帧及前一帧视频帧是关键帧,则通知上层应用所述当前帧视频帧及前一帧视频帧是关键帧且存在丢包的情况。
[0099] 本申请实施例利用预构建的视频帧缓存存储RTP数据包集,并结合预构建的链表的数据结构特点,根据所述视频帧缓存中的RTP数据包的序列号、首包标志、尾包标志,将所述RTP数据包插入到所述链表的对应节点,从而实现了对所述视频帧缓存中的RTP数据包集的排序和组装。在组装过程中,通过分配视频帧缓存的方式,避免了所述接收端频繁进行内存分配,同时利用链表对所述RTP数据包集进行排序,不需要计算每个RTP数据包与前后对应的RTP数据包的关系,减少了计算量。因此本发明提出的视频帧组装方法、装置、电子设备及计算机可读存储介质,可以解决对视频帧进行组装时,系统开销大的问题。
[0100] 如图4所示,是本发明一实施例提供的视频帧组装装置的功能模块图。
[0101] 本发明所述视频帧组装装置100可以安装于电子设备中。根据实现的功能,所述视频帧组装装置100可以包括数据包接收模块101、数据包缓存模块102、数据包排序模块103。本发明所述模块也可以称之为单元,是指一种能够被电子设备处理器所执行,并且能够完成固定功能的一系列计算机程序段,其存储在电子设备的存储器中。其中:
[0102] 所述数据包接收模块101,用于接收发送端发出的RTP数据包集;
[0103] 所述数据包缓存模块102,用于获取所述RTP数据包集中每个RTP数据包的时间戳,根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中;
[0104] 所述数据包排序模块103,用于获取所述当前帧缓存和所述前一帧缓存中每个RTP数据包的序列号、尾包标志和首包标志;按照预设执行方式,分别在所述当前帧缓存和所述前一帧缓存中,根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,得到当前帧视频帧和前一帧视频帧。
[0105] 详细地,本发明实施例中所述视频帧组装装置100中的各个模块在使用时采用与上述的图1至图3中所述的视频帧组装方法一样的技术手段,并能够产生相同的技术效果,这里不再赘述。
[0106] 如图5所示,是本发明一实施例提供的实现视频帧组装方法的电子设备的结构示意图。
[0107] 所述电子设备1可以包括处理器10、存储器11和总线,还可以包括存储在所述存储器11中并可在所述处理器10上运行的计算机程序,如视频帧组装程序。
[0108] 其中,所述存储器11至少包括一种类型的可读存储介质,所述可读存储介质包括闪存、移动硬盘、多媒体卡、卡型存储器(例如:SD或DX存储器等)、磁性存储器、磁盘、光盘等。所述存储器11在一些实施例中可以是电子设备1的内部存储单元,例如该电子设备1的移动硬盘。所述存储器11在另一些实施例中也可以是电子设备1的外部存储设备,例如电子设备1上配备的插接式移动硬盘、智能存储卡(Smart Media Card,SMC)、安全数字(Secure Digital,SD)卡、闪存卡(Flash Card)等。进一步地,所述存储器11还可以既包括电子设备1的内部存储单元也包括外部存储设备。所述存储器11不仅可以用于存储安装于电子设备1的应用软件及各类数据,例如视频帧组装程序的代码等,还可以用于暂时地存储已经输出或者将要输出的数据。
[0109] 所述处理器10在一些实施例中可以由集成电路组成,例如可以由单个封装的集成电路所组成,也可以是由多个相同功能或不同功能封装的集成电路所组成,包括一个或者多个中央处理器(Central Processing unit,CPU)、微处理器、数字处理芯片、图形处理器及各种控制芯片的组合等。所述处理器10是所述电子设备的控制核心(Control Unit),利用各种接口和线路连接整个电子设备的各个部件,通过运行或执行存储在所述存储器11内的程序或者模块(例如视频帧组装程序等),以及调用存储在所述存储器11内的数据,以执行电子设备1的各种功能和处理数据。
[0110] 所述总线可以是外设部件互连标准(peripheral component interconnect,简称PCI)总线或扩展工业标准结构(extended industry standard architecture,简称EISA)总线等。该总线可以分为地址总线、数据总线、控制总线等。所述总线被设置为实现所述存储器11以及至少一个处理器10等之间的连接通信。
[0111] 图5仅示出了具有部件的电子设备,本领域技术人员可以理解的是,图3示出的结构并不构成对所述电子设备1的限定,可以包括比图示更少或者更多的部件,或者组合某些部件,或者不同的部件布置。
[0112] 例如,尽管未示出,所述电子设备1还可以包括给各个部件供电的电源(比如电池),优选地,电源可以通过电源管理装置与所述至少一个处理器10逻辑相连,从而通过电源管理装置实现充电管理、放电管理、以及功耗管理等功能。电源还可以包括一个或一个以上的直流或交流电源、再充电装置、电源故障检测电路、电源转换器或者逆变器、电源状态指示器等任意组件。所述电子设备1还可以包括多种传感器、蓝牙模块、Wi‑Fi模块等,在此不再赘述。
[0113] 进一步地,所述电子设备1还可以包括网络接口,可选地,所述网络接口可以包括有线接口和/或无线接口(如WI‑FI接口、蓝牙接口等),通常用于在该电子设备1与其他电子设备之间建立通信连接。
[0114] 可选地,该电子设备1还可以包括用户接口,用户接口可以是显示器(Display)、输入单元(比如键盘(Keyboard)),可选地,用户接口还可以是标准的有线接口、无线接口。可选地,在一些实施例中,显示器可以是LED显示器、液晶显示器、触控式液晶显示器以及OLED(Organic Light‑Emitting Diode,有机发光二极管)触摸器等。其中,显示器也可以适当的称为显示屏或显示单元,用于显示在电子设备1中处理的信息以及用于显示可视化的用户界面。
[0115] 应该了解,所述实施例仅为说明之用,在专利申请范围上并不受此结构的限制。
[0116] 所述电子设备1中的所述存储器11存储的视频帧组装程序是多个指令的组合,在所述处理器10中运行时,可以实现:
[0117] 接收发送端发出的RTP数据包集;
[0118] 获取所述RTP数据包集中每个RTP数据包的时间戳,根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中;
[0119] 获取所述当前帧缓存和所述前一帧缓存中每个RTP数据包的序列号、尾包标志和首包标志;
[0120] 按照预设执行方式,分别在所述当前帧缓存和所述前一帧缓存中,根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,得到当前帧视频帧和前一帧视频帧。
[0121] 具体地,所述处理器10对上述指令的具体实现方法可参考图1对应实施例中相关步骤的描述,在此不赘述。
[0122] 进一步地,所述电子设备1集成的模块/单元如果以软件功能单元的形式实现并作为独立的产品销售或使用时,可以存储在一个计算机可读存储介质中。所述计算机可读存储介质可以是易失性的,也可以是非易失性的。例如,所述计算机可读介质可以包括:能够携带所述计算机程序代码的任何实体或装置、记录介质、U盘、移动硬盘、磁碟、光盘、计算机存储器、只读存储器(ROM,Read‑Only Memory)。
[0123] 本发明还提供一种计算机可读存储介质,所述可读存储介质存储有计算机程序,所述计算机程序在被电子设备的处理器所执行时,可以实现:
[0124] 接收发送端发出的RTP数据包集;
[0125] 获取所述RTP数据包集中每个RTP数据包的时间戳,根据所述时间戳,将所述RTP数据包集中的RTP数据包分别缓存到预构建的当前帧缓存和前一帧缓存中;
[0126] 获取所述当前帧缓存和所述前一帧缓存中每个RTP数据包的序列号、尾包标志和首包标志;
[0127] 按照预设执行方式,分别在所述当前帧缓存和所述前一帧缓存中,根据所述每个RTP数据包的序列号、尾包标志和首包标志,将所述RTP数据包插入到预构建的链表中的对应位置,得到当前帧视频帧和前一帧视频帧。
[0128] 在本发明所提供的几个实施例中,应该理解到,所揭露的设备,装置和方法,可以通过其它的方式实现。例如,以上所描述的装置实施例仅仅是示意性的,例如,所述模块的划分,仅仅为一种逻辑功能划分,实际实现时可以有另外的划分方式。
[0129] 所述作为分离部件说明的模块可以是或者也可以不是物理上分开的,作为模块显示的部件可以是或者也可以不是物理单元,即可以位于一个地方,或者也可以分布到多个网络单元上。可以根据实际的需要选择其中的部分或者全部模块来实现本实施例方案的目的。
[0130] 另外,在本发明各个实施例中的各功能模块可以集成在一个处理单元中,也可以是各个单元单独物理存在,也可以两个或两个以上单元集成在一个单元中。上述集成的单元既可以采用硬件的形式实现,也可以采用硬件加软件功能模块的形式实现。
[0131] 对于本领域技术人员而言,显然本发明不限于上述示范性实施例的细节,而且在不背离本发明的精神或基本特征的情况下,能够以其他的具体形式实现本发明。
[0132] 因此,无论从哪一点来看,均应将实施例看作是示范性的,而且是非限制性的,本发明的范围由所附权利要求而不是上述说明限定,因此旨在将落在权利要求的等同要件的含义和范围内的所有变化涵括在本发明内。不应将权利要求中的任何附关联图标记视为限制所涉及的权利要求。
[0133] 本发明所指区块链是分布式数据存储、点对点传输、共识机制、加密算法等计算机技术的新型应用模式。区块链(Blockchain),本质上是一个去中心化的数据库,是一串使用密码学方法相关联产生的数据块,每一个数据块中包含了一批次网络交易的信息,用于验证其信息的有效性(防伪)和生成下一个区块。区块链可以包括区块链底层平台、平台产品服务层以及应用服务层等。
[0134] 此外,显然“包括”一词不排除其他单元或步骤,单数不排除复数。系统权利要求中陈述的多个单元或装置也可以由一个单元或装置通过软件或者硬件来实现。第二等词语用来表示名称,而并不表示任何特定的顺序。
[0135] 最后应说明的是,以上实施例仅用以说明本发明的技术方案而非限制,尽管参照较佳实施例对本发明进行了详细说明,本领域的普通技术人员应当理解,可以对本发明的技术方案进行修改或等同替换,而不脱离本发明技术方案的精神和范围。