掌桥专利:专业的专利平台
掌桥专利
首页

一种实时视频传输系统、方法及计算机可读存储介质

文献发布时间:2023-06-19 11:27:38


一种实时视频传输系统、方法及计算机可读存储介质

技术领域

本发明涉及视频处理领域,具体涉及一种实时视频传输系统、方法及计算机可读存储介质。

背景技术

实时视频的传输一般由服务端和客户端完成,图1为现有的实时视频传输流程,服务端完成图像采集、视频流编码、视频流发送等环节;客户端通过网络完成视频流接收、视频流解码以及图像显示,把远程的图像画面呈现给本地观察者。高清实时视频网络传输过程中客观上丢帧和堵塞都会导致数据解析错误,都会引起画面污损和停顿,内在的原因是由于视频高压缩比,参考帧解码失败后,需要下一个IDR帧才能恢复,最重要的影响因素是网络丢包、烂序和堵塞。

在IP网络中基础传输协议是TCP和UDP,TCP:Transmission Control Protocol,是一种面向连接的、可靠的、基于字节流的传输层通信协议,由IETF的RFC 793定义; UDP:用户数据报协议,是一个简单的面向数据报的传输层协议,提供的是非面向连接的、不可靠的数据流传输,UDP不提供可靠性,也不提供报文到达确认、排序以及流量控制等功能,它只是把应用程序传给IP层的数据报发送出去,但是并不能保证它们能到达目的地。TCP是可靠性传输协议,传输延时大;UDP是数据报文传输协议,传输延时小,不可靠,存在丢包、烂序和堵塞的问题。在实时视频流传输中,通过IP网络,传输压缩的视频数据(一帧一帧的压缩视频),主流技术使用的是RTMP协议和RTSP协议,RTMP协议是基于TCP的,延时较大,实现低延时力不从心;RTSP协议视频传输底层使用的是UDP传输,延时较小,不可靠受到UDP传输的三大固有问题。解码器接收到错误的视频数据时,会出现画面污损,需要等待下一个IDR帧才能恢复正常显示,因此,RTSP在接收部分往往添加视频缓存,缓冲一段视频数据,这些都提高了视频传输的延时。数据堵塞的主要原因的数据量过大或收到干扰时画面停顿,只有收到编码器重新编码的IDR帧才能恢复。

发明内容

本发明所要解决的技术问题是提供一种实时视频传输系统、方法及计算机可读存储介质,可以解决网络丢包、烂序和堵塞等视频网络传输问题。

本发明解决上述技术问题的技术方案如下:一种实时视频传输系统,包括服务端以及接入所述服务端的客户端;

所述服务端包括视频接收模块、H264编码模块、控制模块、变FEC编码模块、RTP编码模块和I帧消峰传输模块;所述客户端包括RTP解码模块、FEC解码模块、H264解码模块和显示模块;

在所述服务端中:

所述视频接收模块,其用于接收输入的原始视频数据;

所述H264编码模块,其用于基于H264标准对所述原始视频数据进行编码,得到H264编码数据,其中,所述H264编码数据包括I帧数据和P帧数据;

所述控制模块,其用于当接收到所述客户端发送的IDR请求指令时,向所述H264编码模块发送IDR请求;

所述H264编码模块,还用于响应所述IDR请求,并输出带有IDR帧数据的H264编码数据,其中所述IDR帧数据为多个连续I帧数据中的首个I帧数据;

所述变FEC编码模块,其用于根据数据长度分别为所述I帧数据和所述P帧数据设定不同的向前纠错冗余度,并根据对应的向前纠错冗余度对所述I帧数据和所述P帧数据进行向前纠错编码,得到向前纠错编码数据;

所述RTP编码模块,其用于基于RTP传输协议对所述向前纠错编码数据进行编码,得到RTP编码数据;

所述I帧消峰传输模块,其用于接收所述RTP编码数据,并利用I帧消峰式的传输方法将所述RTP编码数据传输给所述客户端;

在所述客户端中:

所述RTP解码模块,其用于基于RTP传输协议接收并解码所述RTP编码数据,若解码错误,则向所述服务端中的控制模块发送IDR请求指令,若解码正确,则得到RTP解码数据;

所述FEC解码模块,其用于对所述RTP解码数据进行向前纠错解码,得到向前纠错解码数据;

所述H264解码模块,其用于基于H264标准对所述向前纠错解码数据进行解码,得到H264解码数据;

所述显示模块,其用于对所述H264解码数据进行显示处理,并显示成视频。

基于上述一种实时视频传输系统,本发明还提供一种实时视频传输方法。

一种实时视频传输方法,应用于如上述所述的实时视频传输系统中,包括以下步骤,

S1,将原始视频数据输入至服务端中,并在所述服务端中依次执行S2至S5;

S2,基于H264标准对所述原始视频数据进行编码,得到H264编码数据,其中,所述H264编码数据包括I帧数据和P帧数据;

S3,根据数据长度分别为所述I帧数据和所述P帧数据设定不同的向前纠错冗余度,并根据对应的向前纠错冗余度对所述I帧数据和所述P帧数据进行向前纠错编码,得到向前纠错编码数据;

S4,基于RTP传输协议对所述向前纠错编码数据进行编码,得到RTP编码数据;

S5,接收所述RTP编码数据,并利用I帧消峰式的传输方法将所述RTP编码数据传输给客户端;

S6,在客户端中基于RTP传输协议接收并解码所述RTP编码数据;若解码错误,则向所述服务端发送IDR请求指令,并返回执行S2,使服务端输出带有IDR帧数据的H264编码数据,其中所述IDR帧数据为多个连续I帧数据中的首个I帧数据;若解码正确,则得到RTP解码数据,并在客户端中依次执行S7至S9;

S7,对所述RTP解码数据进行向前纠错解码,得到向前纠错解码数据;

S8,基于H264标准对所述向前纠错解码数据进行解码,得到H264解码数据;

S9,对所述H264解码数据进行显示处理,并显示成视频。

基于上述一种实时视频传输方法,本发明还提供一种计算机可读存储介质。

一种计算机可读存储介质,包括存储器以及存储在所述存储器内的计算机程序,所述计算机程序被处理器执行时实现如上述所述的实时视频传输方法。

本发明的有益效果是:本发明一种实时视频传输系统、方法及计算机可读存储介质采用前向纠错类容错方案,保证延时不扩散,收敛于可控传输间隔,I帧数据和P帧数据按数据长度使用不同的FEC系数,降低了I帧数据量增大的影响,从而可以对瞬间网络带宽抑制;鉴于I帧数据和P帧数据量相差悬殊,采用I帧消峰的方式进行数据传输;同时在传输过程中增加了IDR更新机制,可以解决烂序和丢包的问题。

附图说明

图1为现有技术中实时视频传输流程图;

图2为本发明一种实时视频传输系统的结构框图;

图3为本发明一种实时视频传输方法的流程图;

图4为本发明一种实时视频传输方法的时序图;

图5为本发明一种实时视频传输方法中服务端工作的流程图;

图6为本发明一种实时视频传输方法中客户端请求IDR的流程图。

具体实施方式

以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。

实施例一:

如图2所示,一种实时视频传输系统,包括服务端以及接入所述服务端的客户端;

所述服务端包括视频接收模块、H264编码模块、控制模块、变FEC编码模块、RTP编码模块和I帧消峰传输模块;所述客户端包括RTP解码模块、FEC解码模块、H264解码模块和显示模块;

在所述服务端中:

所述视频接收模块,其用于接收输入的原始视频数据;

所述H264编码模块,其用于基于H264标准对所述原始视频数据进行编码,得到H264编码数据,其中,所述H264编码数据包括I帧数据和P帧数据;

所述控制模块,其用于当接收到所述客户端发送的IDR请求指令时,向所述H264编码模块发送IDR请求;

所述H264编码模块,还用于响应所述IDR请求,并输出带有IDR帧数据的H264编码数据,其中所述IDR帧数据为多个连续I帧数据中的首个I帧数据;

所述变FEC编码模块,其用于根据数据长度分别为所述I帧数据和所述P帧数据设定不同的向前纠错冗余度,并根据对应的向前纠错冗余度对所述I帧数据和所述P帧数据进行向前纠错编码,得到向前纠错编码数据;

所述RTP编码模块,其用于基于RTP传输协议对所述向前纠错编码数据进行编码,得到RTP编码数据;

所述I帧消峰传输模块,其用于接收所述RTP编码数据,并利用I帧消峰式的传输方法将所述RTP编码数据传输给所述客户端;

在所述客户端中:

所述RTP解码模块,其用于基于RTP传输协议接收并解码所述RTP编码数据,若解码错误,则向所述服务端中的控制模块发送IDR请求指令,若解码正确,则得到RTP解码数据;

所述FEC解码模块,其用于对所述RTP解码数据进行向前纠错解码,得到向前纠错解码数据;

所述H264解码模块,其用于基于H264标准对所述向前纠错解码数据进行解码,得到H264解码数据;

所述显示模块,其用于对所述H264解码数据进行显示处理,并显示成视频。

在本发明一种实时视频传输系统中,H264是由ITU-T视频编码专家组(VCEG)和ISO/IEC动态图像专家组(MPEG)联合组成的联合视频组(JVT,Joint Video Team)提出的高度压缩数字视频编解码器标准。这个标准通常被称之为H.264/AVC。在H264协议里定义了三种帧,完整编码的帧叫I帧,参考之前的I帧生成的只包含差异部分编码的帧叫P帧。在I帧中,所有宏块都采用帧内预测的方式,因此解码时仅用I帧的数据就可重构完整图像,不需要参考其他画面而生成。H.264中规定了两种类型的I帧:普通I帧(normal Iframes)和IDR帧(InstantaneousDecoding Refresh, 即时解码刷新)。IDR帧实质也是I帧,使用帧内预测。IDR帧的作用是立即刷新,播放器永远可以从一个IDR帧播放,因为在它之后没有任何帧引用之前的帧。如果一个视频中没有IDR帧,这个视频是不能随机访问的。

RTP传输协议即为实时传输协议,实时传输协议RTP被定义为在一对一或一对多的传输情况下工作,其目的是提供时间信息和实现流同步;RTP通常使用UDP来传送数据。

FEC是一种前向性纠错技术,发送方将要发送的数据加上一定的冗余纠错码一起发送,接收方则根据纠错码对接收到的数据进行差错检测,如发现差错,则由接收方进行纠错。

本发明引入前向纠,通过增加数据冗余的方法,保证延时不扩散,收敛于可控传输间隔。实时视频一般使用I帧和P帧,带宽=每帧数据量*(1+FEC)*用户数,I帧使用帧间编码技术,一般是P帧数据长度的6-30倍,因此在多用户条件下,I帧带宽突增明显;本发明对I帧和P帧采用不同FEC系数,降低了I帧由于FEC编码带来的带宽突增,即降低了I帧数据量增大的影响,解决瞬间网络带宽抑制。

FEC系数就是前向纠错冗余度,例如,原始数据为100,前向纠错冗余度40,发送的数据就是140。经过测试,设计的目标是一帧丢失4个包时能恢复出正确数据,对40个包,FEC系数为10%;30个包,FEC 系数为15%,低于10个包的FEC系数设置为40%。以40个包帧为例子,包FEC系数为40%的,需要发送56个包;FEC系数为10%的时候只需要发44个包。如果接收成员多,40%的冗余度需要多发12个包。

在本具体实施例中,所述客户端设有多个,将所有所述客户端分为两组,形成第一客户端集群和第二客户端集群;优选的,第一客户端集群内的客户端具体为接入所述服务端的接入序号为单数的客户端,第二客户端集群内的客户端具体为接入所述服务端的接入序号为偶数的客户端;或,第一客户端集群内的客户端具体为接入所述服务端的接入序号为偶数的客户端,第二客户端集群内的客户端具体为接入所述服务端的接入序号为单数的客户端。

所述I帧消峰传输模块,其具体用于当接收到所述RTP编码数据中的I帧数据时,将所述I帧数据传输给所述第一客户端集群中的所有客户端,并缓存所述I帧数据,当接收到所述I帧数据的下一帧数据时,先将缓存的所述I帧数据传输给所述第二客户端集群中的所有客户端,再将所述I帧数据的下一帧数据传输给所述第一客户端集群中的所有客户端和所述第二客户端集群中的所有客户端。

鉴于I帧数据量和P帧数据量相差悬殊,本发明将I帧数据传输分成2个阶段,第一阶段为收到I帧数据,把I帧数据传给第一客户端集群,并缓存I帧数据;第二阶段为收到I帧数据下一帧(I帧数据下一帧可能为I帧数据也可能为P帧数据),发送缓存的I帧数据到第二客户端集群,然后发送P帧数据到所有成员(第一客户端集群和第二客户端集群中的所有客户端)。

在本具体实施例中,所述RTP解码模块,其具体用于基于RTP传输协议接收并解析所述RTP编码数据,得到解码FEC信息;判断所述解码FEC信息是否正确,若所述解码FEC信息错误,则向所述服务端中的控制模块发送IDR请求指令,若所述解码FEC信息正确,则对所述RTP编码数据进行RTP解码,并判断RTP解码是否正确,若RTP解码错误,则向所述服务端中的控制模块发送IDR请求指令,若RTP解码正确,则重建视频帧,并判断重建的视频帧是否正确,若重建的视频帧错误,则向所述服务端中的控制模块发送IDR请求指令,若重建的视频帧正确,则得到所述RTP解码数据,并继续接收所述RTP编码数据,且将得到的所述RTP解码数据发送至所述FEC解码模块。

在本具体实施例中,控制模块采用UDP通讯协议与RTP解码模块进行通讯。

在本发明的服务端内,运行视频输入、H.264b编码、前向纠错系数获取、前向纠错编码、RTP协议编码发送,内置控制模块采用UDP通讯协议和客户端进行控制通讯;客户端接收RTP协议数据,解析出FEC信息,获得当前帧号、分帧号、数据帧数量、FEC数据帧信息,送入解码器进行解码和显示,出错时向服务端中的控制模块发出IDR请求指令;服务端响应IDR请求,发送IDR请求时迅速控制编码器输出IDR帧,重新恢复。

为了解决网络丢包、烂序和堵塞等视频网络传输问题,目前有二大方案:容错方案和重传方案;重传方案增大了传输延时,前向纠错编以数据冗余来提高容错,是以带宽传输为代价的,在多客户端的情况下,带宽的消耗,特别是瞬时带宽的突增,网络负荷的加重,堵塞的问题相应的又凸显出来。因此对前向纠错方案,瞬时带宽控制对前向纠错类方案效果至关重要。本发明高清视频传输采用了前向纠错类容错方案,并对瞬时带宽进行了控制,有效降低了瞬时带宽;同时针对堵塞,在传输系统中增加了IDR更新机制,总体取得了较好的效果。

实施例二:

基于上述一种实时视频传输系统,本发明还提供一种实时视频传输方法。

如图3和图4所示,一种实时视频传输方法,应用于如上述所述的实时视频传输系统中,包括以下步骤,

S1,将原始视频数据输入至服务端中,并在所述服务端中依次执行S2至S5;

S2,基于H264标准对所述原始视频数据进行编码,得到H264编码数据,其中,所述H264编码数据包括I帧数据和P帧数据;

S3,根据数据长度分别为所述I帧数据和所述P帧数据设定不同的向前纠错冗余度,并根据对应的向前纠错冗余度对所述I帧数据和所述P帧数据进行向前纠错编码,得到向前纠错编码数据;

S4,基于RTP传输协议对所述向前纠错编码数据进行编码,得到RTP编码数据;

S5,接收所述RTP编码数据,并利用I帧消峰式的传输方法将所述RTP编码数据传输给客户端;

S6,在客户端中基于RTP传输协议接收并解码所述RTP编码数据;若解码错误,则向所述服务端发送IDR请求指令,并返回执行S2,使服务端输出带有IDR帧数据的H264编码数据,其中所述IDR帧数据为多个连续I帧数据中的首个I帧数据;若解码正确,则得到RTP解码数据,并在客户端中依次执行S7至S9;

S7,对所述RTP解码数据进行向前纠错解码,得到向前纠错解码数据;

S8,基于H264标准对所述向前纠错解码数据进行解码,得到H264解码数据;

S9,对所述H264解码数据进行显示处理,并显示成视频。

在服务端的编码线程中,监控IDRevent事件,当发生IDRevent事件时控制编码器立即输出IDR帧;服务端的工作流程如图5所示。在服务端中,初始化网络接收,如Ip,端口等;接收网络数据,即客户端发送到本服务端的数据;提取IDR事件,其中,IDR事件由专门的网络定义信令;设定IDRevent,IDR是多线程共享的条件变量,变量值有效是为<0,帧序号>,取出后变为<0,0>,实际只使用帧序号,设定IDRevent就是解锁,设置<0,帧序号>。在服务端内,采集原始视频数据;读取IDRevent,判断IDR是否为真,若否,则H264编码器输出P帧数据,若是,则将当前帧pict_type设置为AV_PICTURE_TYRE_I(编码器输入数据类型标识);编码器根据数据类型标识输出I帧数据(普通I帧数据或IDR帧数据);基于FEC变系数对P帧数据和I帧数据进行向前纠错编码;接着进行RTP编码;最后发送到客户端。

在本具体实施例中,所述客户端设有多个,将所有所述客户端分为两组,形成第一客户端集群和第二客户端集群;第一客户端集群内的客户端具体为接入所述服务端的接入序号为单数的客户端;第二客户端集群内的客户端具体为接入所述服务端的接入序号为偶数的客户端;或,第一客户端集群内的客户端具体为接入所述服务端的接入序号为偶数的客户端;第二客户端集群内的客户端具体为接入所述服务端的接入序号为单数的客户端。

所述S5具体为,当接收到所述RTP编码数据中的I帧数据时,将所述I帧数据传输给所述第一客户端集群中的所有客户端,并缓存所述I帧数据,当接收到所述I帧数据的下一帧数据时,先将缓存的所述I帧数据传输给所述第二客户端集群中的所有客户端,再将所述I帧数据的下一帧数据传输给所述第一客户端集群中的所有客户端和所述第二客户端集群中的所有客户端。

在本具体实施例中,如图6所示,所述S6具体为,基于RTP传输协议接收并解析所述RTP编码数据,得到解码FEC信息;判断所述解码FEC信息是否正确,若所述解码FEC信息错误,则向所述服务端中的控制模块发送IDR请求指令,若所述解码FEC信息正确,则对所述RTP编码数据进行RTP解码,并判断RTP解码是否正确,若RTP解码错误,则向所述服务端中的控制模块发送IDR请求指令,若RTP解码正确,则重建视频帧,并判断重建的视频帧是否正确,若重建的视频帧错误,则向所述服务端中的控制模块发送IDR请求指令,若重建的视频帧正确,则得到所述RTP解码数据,并继续接收所述RTP编码数据,且将得到的所述RTP解码数据发送至所述FEC解码模块。

客户端监控接收过程,在接收过程中发生如下两种错误情况均发送IDR请求指令:1.接收当前帧时接收到下一帧的数据立即清空接收区,向服务端发送IDR请求指令(即客户端不处理烂序的情况;烂序的情况下马上向服务端发送IDR请求指令);2.丢包,采用FEC后,发现单包丢失后继续接收数据,接收的数据进行试探性RS解码,解码数据能提取出特征数据不进行错误上报,一直持续到RTP协议当前帧尾,解码错误也向服务端发送IDR请求指令,申请IDR帧。

实施例三:

基于上述一种实时视频传输方法,本发明还提供一种计算机可读存储介质。

一种计算机可读存储介质,包括存储器以及存储在所述存储器内的计算机程序,所述计算机程序被处理器执行时实现如上述所述的实时视频传输方法。

本发明的有益效果是:本发明一种实时视频传输系统、方法及计算机可读存储介质采用前向纠错类容错方案,保证延时不扩散,收敛于可控传输间隔,I帧数据和P帧数据按数据长度使用不同的FEC系数,降低了I帧数据量增大的影响,从而可以对瞬间网络带宽抑制;鉴于I帧数据和P帧数据量相差悬殊,采用I帧消峰的方式进行数据传输;同时在传输过程中增加了IDR更新机制,可以解决烂序和丢包的问题。

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

相关技术
  • 一种实时视频传输系统、方法及计算机可读存储介质
  • 视频传输系统、方法及计算机可读存储介质
技术分类

06120112935335