一种实时视频传送、播放方法及装置与流程

文档序号:13912366阅读:215来源:国知局

本发明涉及视频技术领域,特别涉及一种实时视频传送、播放方法及装置。



背景技术:

在一些实时获取视频数据的场景下,比如直播或者监控等,服务器从视频采集设备中实时获取视频数据流。用户可以通过手机、平板电脑、计算机等客户端观看实时视频。

具体过程可以包括:客户端向服务器发送url(uniformresourcelocator,统一资源定位符)请求,服务器验证客户端合法后,建立与客户端的连接。建立连接之后,服务器便可以向客户端发送客户端请求的实时视频数据流。

视频数据一般由多个gop(groupofpicture,图像组)组成,一个gop中包括一个i帧(内部画面帧)及i帧之后依靠i帧解码的其他数据帧。因此,服务器向客户端发送实时视频数据流时,需要等到视频数据流中出现一个i帧时才开始进行数据传输,这样才能保证该i帧之后的其他数据帧能够正常解码播放。

在上述方案中,如果服务器获取的视频数据流中刚刚流过一个i帧后,服务器接收到客户端发送的视频请求,这种情况下,服务器需要等待较长一段时间才能等到视频数据流中再出现一个i帧,也就是说,客户端在发送完视频请求后,需要等待较长一段时间才能得到服务器的反馈,客户端中会出现黑屏现象。

为了解决上述技术问题,通常的做法是,在服务器中缓存一个gop的视频数据。当服务器接收到客户端发送的视频请求后,先将自身缓存的视频数据发送给客户端,然后再发送获取到的当前视频数据流。但是,应用这种方案,服务器中需要额外缓存一个gop的视频数据,提高了服务器的内存资源占用率。



技术实现要素:

本发明实施例的目的在于提供一种实时视频传送、播放方法及装置,降低服务器的内存资源占用率。

为达到上述目的,本发明实施例公开了一种实时视频传送方法,应用于服务器,所述方法包括:

接收客户端发送的视频请求;

将缓存的当前内部画面i帧发送给所述客户端;

将获取的当前视频数据流发送给所述客户端,以使所述客户端根据所述当前i帧对所述当前视频数据流中第一个i帧之前的数据帧进行解码播放。

可选的,所述方法还可以包括:

获取第一视频数据流;

缓存所述第一视频数据流中的当前i帧;

当所述第一视频数据流中出现所述当前i帧的下一个i帧时,将所述下一个i帧确定为当前i帧;

删除所缓存的i帧,并返回执行所述缓存所述第一视频数据流中的当前i帧的步骤。

可选的,在所述接收客户端发送的视频请求之后,还可以包括:

判断所述客户端请求的第二视频数据流中相邻i帧之间的第一时间间隔是否大于第一预设阈值,其中,所述第一时间间隔为获取到相邻i帧的时刻之间的间隔;

如果是,执行所述将缓存的当前内部画面i帧发送给所述客户端的步骤;

如果否,当所述第二视频数据流中出现i帧时,将所述第二视频数据流发送给所述客户端。

可选的,在判断所述客户端请求的第二视频数据流中相邻i帧之间的第一时间间隔大于第一预设阈值的情况下,还可以包括:

判断所述第二视频数据流中的当前帧与所述当前帧之后的第一个i帧之间的第二时间间隔是否大于第二预设阈值,其中,所述第二时间间隔为获取到所述当前帧的时刻与获取到所述当前帧之后的第一个i帧的时刻之间的间隔;

如果是,执行所述将缓存的当前内部画面i帧发送给所述客户端的步骤;

如果否,当所述第二视频数据流中出现i帧时,将所述第二视频数据流发送给所述客户端。

可选的,在所述接收客户端发送的视频请求之后,还可以包括:

判断获取的当前视频数据流中的数据是否为编码数据;

如果否,对所述当前视频数据流中的数据进行编码;

所述将缓存的当前内部画面i帧发送给所述客户端,包括:

将缓存的编码后的当前内部画面i帧发送给所述客户端;

所述将获取的当前视频数据流发送给所述客户端,包括:

将编码后的的当前视频数据流发送给所述客户端。

可选的,所述方法还可以包括:

向所述客户端发送视频质量信息,所述视频质量信息包括所述服务器提供的多种视频质量;

接收所述客户端发送的选择指令,所述选择指令中携带客户端选择的第一视频质量;

根据所述选择指令,将当前数据帧之后的图像组gop转化为所述第一视频质量下的视频数据流;

将转化后的视频数据流发送给所述客户端。

为达到上述目的,本发明实施例还公开了一种实时视频播放方法,应用于客户端,所述方法包括:

向服务器发送视频请求;

接收所述服务器发送的当前i帧及当前视频数据流;

根据所述当前i帧对所述当前视频数据流中第一个i帧之前的数据帧进行解码播放。

为达到上述目的,本发明实施例还公开了一种实时视频传送装置,应用于服务器,所述装置包括:

接收模块,用于接收客户端发送的视频请求;

第一发送模块,用于将缓存的当前内部画面i帧发送给所述客户端;

第二发送模块,用于将获取的当前视频数据流发送给所述客户端,以使所述客户端根据所述当前i帧对所述当前视频数据流中第一个i帧之前的数据帧进行解码播放。

可选的,所述装置还可以包括:

获取模块,用于获取第一视频数据流;

缓存模块,用于缓存所述第一视频数据流中的当前i帧;

确定模块,用于当所述第一视频流中出现所述当前i帧的下一个i帧时,将所述下一个i帧确定为当前i帧;

删除模块,用于删除所缓存的i帧,并触发所述缓存模块。

可选的,所述装置还可以包括:

第一判断模块,用于判断所述客户端请求的第二视频数据流中相邻i帧之间的第一时间间隔是否大于第一预设阈值,其中,所述第一时间间隔为获取到相邻i帧的时刻之间的间隔;如果是,触发所述缓存模块,如果否,触发第三发送模块;

第三发送模块,用于当所述第二视频数据流中出现i帧时,将所述第二视频数据流发送给所述客户端。

可选的,所述装置还可以包括:

第二判断模块,用于判断所述第二视频数据流中的当前帧与所述当前帧之后的第一个i帧之间的第二时间间隔是否大于第二预设阈值,其中所述第二时间间隔为获取到所述当前帧的时刻与获取到所述当前帧之后的第一个i帧的时刻之间的间隔;如果是,触发所述缓存模块,如果否,触发所述第三发送模块。

可选的,所述装置还可以包括:

第三判断模块,用于判断获取的当前视频数据流中的数据是否为编码数据;

编码模块,用于当所述第三判断模块判断结果为否时,对所述当前视频数据流中的数据进行编码;

所述缓存模块,具体用于:

将缓存的编码后的当前内部画面i帧发送给所述客户端;

所述第二发送模块,具体用于:

将编码后的的当前视频数据流发送给所述客户端。

可选的,所述装置还可以包括:

第四发送模块,用于向所述客户端发送视频质量信息,所述视频质量信息包括所述服务器提供的多种视频质量;

第一接收模块,用于接收所述客户端发送的选择指令,所述选择指令中携带客户端选择的第一视频质量;

转化模块,用于根据所述选择指令,将当前数据帧之后的图像组gop转化为所述第一视频质量下的视频数据流;

第五发送模块,用于将转化后的视频数据流发送给所述客户端。

为达到上述目的,本发明实施例还公开了一种实时视频播放装置,应用于客户端,所述装置包括:

第六发送模块,用于向服务器发送视频请求;

第二接收模块,用于接收所述服务器发送的当前i帧及当前视频数据流;

播放模块,用于根据所述当前i帧对所述当前视频数据流中第一个i帧之前的数据帧进行解码播放。

应用本发明实施例,服务器接收到客户端发送的视频请求后,将缓存的当前i帧及获取的当前视频数据流发送给客户端;客户端根据该当前i帧对该当前视频数据流中第一个i帧之前的数据帧进行解码播放,不会出现黑屏现象。也就是说,服务器中只缓存一个i帧的视频数据,不需要缓存一个gop的视频数据,降低了服务器的内存资源占用率。

附图说明

为了更清楚地说明本发明实施例或现有技术中的技术方案,下面将对实施例或现有技术描述中所需要使用的附图作简单地介绍,显而易见地,下面描述中的附图仅仅是本发明的一些实施例,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。

图1为本发明实施例提供的一种应用于服务器的实时视频传送方法的流程示意图;

图2为本发明实施例提供的一种应用于客户端的实时视频播放方法的流程示意图;

图3为本发明实施例提供的一种应用于服务器的实时视频传送装置的结构示意图;

图4为本发明实施例提供的一种应用于客户端的实时视频播放装置的结构示意图。

具体实施方式

下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整地描述,显然,所描述的实施例仅仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有作出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。

为了解决上述技术问题,本发明实施例提供了一种应用于服务器的实时视频传送方法及装置、以及一种应用于客户端的实时视频播放方法及装置。

下面首先对本发明实施例提供的应用于服务器的实时视频传送方法进行详细说明。

图1为本发明实施例提供的一种应用于服务器的实时视频传送方法的流程示意图,包括:

s101:接收客户端发送的视频请求。

在服务器接收客户端发送的视频请求之前,还可以包括握手、建立连接、建立网络流等信令交互的过程。可以简单理解为,客户端先向服务器发送url请求,该url请求的格式可以为“rtmp://serverip:port/streamname”,其中,rtmp表示服务器与客户端之间通过rtmp(realtimemessagingprotocol,实时消息传输协议)通信连接,当然还可以通过其它协议通信连接,在此不做限制;serverip:port表示该客户端连接的服务器的端口标识;streamname表示该客户端请求的视频数据流的标识。服务器验证通过后,与客户端建立连接,允许客户端从该端口中获取其请求的视频数据流。

上述过程之后,服务器才能接收到客户端发送的视频请求,该视频请求中可以包含客户端请求的视频数据流的标识信息。

s102:将缓存的当前内部画面i帧发送给所述客户端。

在本实施例中,服务器从视频采集设备中实时获取视频数据流。顾名思义,视频数据流可以理解为实时流动的视频数据。需要说明的是,通常情况下,服务器并不存储该视频数据流,只是在接收到客户端针对该视频数据流的视频请求后,将该视频数据流实时转发给客户端。

但是在本实施例中,服务器针对获取到的每一视频数据流,缓存每一视频数据流的当前i帧。i帧即为内部画面帧,视频数据由多个gop组成,一个gop中包括一个i帧及i帧之后依靠i帧解码的其他数据帧。

为了方便描述,下面针对第一视频数据流进行说明,第一视频数据流为服务器获取到的任一视频数据流。

服务器缓存第一视频数据流中的当前i帧,当前i帧即为第一视频数据流中最新出现的i帧,该i帧在自其出现时开始、至第一视频数据流中又出现了该i帧的下一个i帧时为止的时间段内为当前i帧。

当所述第一视频流中出现所述当前i帧的下一个i帧时,将所述下一个i帧确定为当前i帧。此时,删除所缓存的i帧,并缓存新确定的当前i帧。循环执行这一过程,保证服务器中一直缓存有视频数据流中流过的最新的i帧。

在接收到客户端发送的视频请求后,确定客户端所请求的视频数据流,将缓存的该视频数据流的当前i帧发送给客户端,再执行s103。另外,如果服务器中不存在客户端请求的视频数据流,服务器可以向客户端发送未找到资源等类似的提示信息。

s103:将获取的当前视频数据流发送给所述客户端。

将客户端所请求的视频数据流实时发送给该客户端,也就是说,将获取的当前视频数据流发送给客户端。如果该当前视频数据流中流过的是需要依靠i帧进行解码的其他数据帧,比如p(前向预测)帧或b(双向内插)帧,下面以p帧为例进行说明,客户端在接收到该p帧后,依靠接收的当前i帧对该p帧进行解码播放。如果该当前视频数据流中流过了多个p帧后出现了第一个i帧,则对于这多个p帧,客户端都依靠接收的当前i帧对这多个p帧进行解码播放。而后面出现的第一个i帧及之后流过的视频数据流都可以正常解码播放。

应用本发明图1所示实施例,服务器接收到客户端发送的视频请求后,将缓存的当前i帧及获取的当前视频数据流发送给客户端;客户端根据该当前i帧对该当前视频数据流中第一个i帧之前的数据帧进行解码播放,不会出现黑屏现象。也就是说,服务器中只缓存一个i帧的视频数据,不需要缓存一个gop的视频数据,降低了服务器的内存资源占用率。

作为本发明的一种实施方式,在所述接收客户端发送的视频请求之后,可以先判断所述客户端请求的第二视频数据流中相邻i帧之间的第一时间间隔是否大于第一预设阈值,其中,所述第一时间间隔为获取到相邻i帧的时刻之间的间隔;如果是,再将缓存的当前内部画面i帧发送给所述客户端;如果否,当所述第二视频数据流中出现i帧时,将所述第二视频数据流发送给所述客户端。

可以理解的是,不同的视频数据流中相邻i帧之间的时间间隔可能不同。如果该时间间隔本身很小,则现有技术中,服务器等到视频数据流中出现一个i帧时才开始进行数据传输,即便等一整个相邻i帧之间的时间间隔,也只是很短的时间,客户端不会出现黑屏的现象。这种情况下,服务器可以不再缓存当前i帧,或者不再将缓存的当前i帧发送给客户端,而是等到视频数据流中出现i帧时,将该视频数据流发送给客户端。

需要说明的是,上述第一预设阈值可以根据客户端所能等待的时长的上限来确定。

作为本发明的一种实施方式,在判断所述客户端请求的第二视频数据流中相邻i帧之间的第一时间间隔大于第一预设阈值的情况下,还可以进一步判断所述第二视频数据流中的当前帧与所述当前帧之后的第一个i帧之间的第二时间间隔是否大于第二预设阈值,其中,所述第二时间间隔为获取到所述当前帧的时刻与获取到所述当前帧之后的第一个i帧的时刻之间的间隔;

如果是,将缓存的当前内部画面i帧发送给所述客户端;

如果否,当所述第二视频数据流中出现i帧时,将所述第二视频数据流发送给所述客户端。

可以理解的是,如果视频数据流中流过的当前帧为p帧,该p帧与下一个i帧之间的时间间隔非常小,则现有技术中,服务器等到视频数据流中出现一个i帧时才开始进行数据传输,只是等待很短的时间,客户端不会出现黑屏的现象。这种情况下,服务器可以不再将缓存的当前i帧发送给客户端,而是等到视频数据流中出现i帧时,将该视频数据流发送给客户端。

需要说明的是,上述第二预设阈值可以根据客户端所能等待的时长的上限来确定。

在本发明所示实施例中,服务器从视频采集设备中获取的视频数据流可能是编码数据,也可能是未编码的数据。如果是未编码的数据,则服务器首先将获取的视频数据流进行编码。因此,缓存的当前i帧应该为编码后的i帧,发送给客户端的当前视频数据流也应该为编码后的数据。

在本发明所示实施例中,服务器还可以向客户端发送视频质量信息,该视频质量信息中可以包括服务器所能提供的多种码率、分辨率等信息。客户端根据接收到的该视频质量信息,并结合自身实际情况,比如网络状况、移动场景下还可以考虑自身电量信息等,选择合适的视频质量(合适的码率及分辨率等)。客户端将携带有所选择视频质量的选择指令发送给服务器。服务器在接收到该选择指令之后,将当前数据帧之后的各个gop的视频质量转化为客户端选择的视频质量,并将转化后的视频数据流发送给客户端。

当然,在客户端对视频数据流进行解码播放的过程中,如果客户端的网络状况发生了变化,或者出现了其他需要调整视频质量的情况,客户端也可以向服务器发送调整视频质量的请求。服务器将视频数据流转化为客户端请求的视频质量后再发送给客户端。

需要说明的是,服务器在对视频数据的视频质量进行转化时,通常是对整个gop进行转化,如果服务器接收到选择指令或者调整视频质量的请求时,一个gop还没有完全流过,则等该gop完全流过后,从流经的下一个gop开始,对视频数据流进行调整。

与上述传送方法相对应,本发明还提供一种应用于客户端的实时视频播放方法,如图2所示,包括:

s201:向服务器发送视频请求。

在客户端向服务器发送视频请求之前,还可以包括握手、建立连接、建立网络流等信令交互的过程。可以简单理解为,客户端先向服务器发送url请求,该url请求的格式可以为“rtmp://serverip:port/streamname”,其中,rtmp表示服务器与客户端之间通过rtmp(realtimemessagingprotocol,实时消息传输协议)通信连接,serverip:port表示该客户端连接的服务器的端口标识,streamname表示该客户端请求的视频数据流的标识。服务器验证通过后,与客户端建立连接,允许客户端从该端口中获取其请求的视频数据流。

上述过程之后,客户端向服务器发送视频请求,该视频请求中可以包含请求的视频数据流的标识信息。

s202:接收所述服务器发送的当前i帧及当前视频数据流。

在本实施例中,服务器从视频采集设备中实时获取视频数据流。顾名思义,视频数据流可以理解为实时流动的视频数据。需要说明的是,通常情况下,服务器并不存储该视频数据流,只是在接收到客户端针对该视频数据流的视频请求后,将该视频数据流实时转发给客户端。

但是在本实施例中,服务器针对获取到的每一视频数据流,缓存每一视频数据流的当前i帧。i帧即为内部画面帧,视频数据由多个gop组成,一个gop中包括一个i帧及i帧之后依靠i帧解码的其他数据帧。

服务器在接收到客户端发送的视频请求后,确定客户端请求的视频数据流,将缓存的该视频数据流的当前i帧发送给客户端,然后将该视频数据流实时发送给该客户端,也就是说,将获取的当前视频数据流发送给客户端。客户端接收该i帧及该当前视频数据流。

s203:根据所述当前i帧对所述当前视频数据流中第一个i帧之前的数据帧进行解码播放。

如果该当前视频数据流中流过的是需要依靠i帧进行解码的其他数据帧,比如p(前向预测)帧或b(双向内插)帧,下面以p帧为例进行说明,客户端在接收到该p帧后,依靠接收的当前i帧对该p帧进行解码播放。如果该当前视频数据流中流过了多个p帧后出现了第一个i帧,则对于这多个p帧,客户端都依靠接收的当前i帧对这多个p帧进行解码播放。而后面出现的第一个i帧及之后流过的视频数据流都可以正常解码播放。

应用本发明图2所示实施例,服务器接收到客户端发送的视频请求后,将缓存的当前i帧及获取的当前视频数据流发送给客户端;客户端根据该当前i帧对该当前视频数据流中第一个i帧之前的数据帧进行解码播放,不会出现黑屏现象。也就是说,服务器中只缓存一个i帧的视频数据,不需要缓存一个gop的视频数据,降低了服务器的内存资源占用率。

与上述的方法实施例相对应,本发明实施例还提供一种实时视频传送装置及实时视频播放装置。

图3为本发明实施例提供的应用于服务器的实时视频传送装置,包括:

接收模块301,用于接收客户端发送的视频请求;

第一发送模块302,用于将缓存的当前内部画面i帧发送给所述客户端;

第二发送模块303,用于将获取的当前视频数据流发送给所述客户端,以使所述客户端根据所述当前i帧对所述当前视频数据流中第一个i帧之前的数据帧进行解码播放。

在本实施例中,还可以包括:获取模块、缓存模块、确定模块和删除模块(图中未示出),其中,

获取模块,用于获取第一视频数据流;

缓存模块,用于缓存所述第一视频数据流中的当前i帧;

确定模块,用于当所述第一视频流中出现所述当前i帧的下一个i帧时,将所述下一个i帧确定为当前i帧;

删除模块,用于删除所缓存的i帧,并触发所述缓存模块。

在本实施例中,还可以包括:第一判断模块和第三发送模块(图中未示出),其中,

第一判断模块,用于判断所述客户端请求的第二视频数据流中相邻i帧之间的第一时间间隔是否大于第一预设阈值,其中,所述第一时间间隔为获取到相邻i帧的时刻之间的间隔;如果是,触发所述缓存模块,如果否,触发第三发送模块;

第三发送模块,用于当所述第二视频数据流中出现i帧时,将所述第二视频数据流发送给所述客户端。

在本实施例中,还可以包括:第二判断模块(图中未示出),用于判断所述第二视频数据流中的当前帧与所述当前帧之后的第一个i帧之间的第二时间间隔是否大于第二预设阈值,其中所述第二时间间隔为获取到所述当前帧的时刻与获取到所述当前帧之后的第一个i帧的时刻之间的间隔;如果是,触发所述缓存模块,如果否,触发所述第三发送模块。

在本实施例中,还可以包括:第三判断模块和编码模块(图中未示出),其中,

第三判断模块,用于判断获取的当前视频数据流中的数据是否为编码数据;

编码模块,用于当所述第三判断模块判断结果为否时,对所述当前视频数据流中的数据进行编码;

所述缓存模块,具体可以用于:将缓存的编码后的当前内部画面i帧发送给所述客户端;

所述第二发送模块,具体可以用于:将编码后的的当前视频数据流发送给所述客户端。

在本实施例中,还可以包括:第四发送模块、第一接收模块、转化模块和第五发送模块(图中未示出),其中,

第四发送模块,用于向所述客户端发送视频质量信息,所述视频质量信息包括所述服务器提供的多种视频质量;

第一接收模块,用于接收所述客户端发送的选择指令,所述选择指令中携带客户端选择的第一视频质量;

转化模块,用于根据所述选择指令,将当前数据帧之后的图像组gop转化为所述第一视频质量下的视频数据流;

第五发送模块,用于将转化后的视频数据流发送给所述客户端。

应用本发明图3所示实施例,服务器接收到客户端发送的视频请求后,将缓存的当前i帧及获取的当前视频数据流发送给客户端;客户端根据该当前i帧对该当前视频数据流中第一个i帧之前的数据帧进行解码播放,不会出现黑屏现象。也就是说,服务器中只缓存一个i帧的视频数据,不需要缓存一个gop的视频数据,降低了服务器的内存资源占用率。

图4为本发明实施例提供的应用于客户端的实时视频播放装置,包括:

第六发送模块401,用于向服务器发送视频请求;

第二接收模块402,用于接收所述服务器发送的当前i帧及当前视频数据流;

播放模块403,用于根据所述当前i帧对所述当前视频数据流中第一个i帧之前的数据帧进行解码播放。

应用本发明图4所示实施例,服务器接收到客户端发送的视频请求后,将缓存的当前i帧及获取的当前视频数据流发送给客户端;客户端根据该当前i帧对该当前视频数据流中第一个i帧之前的数据帧进行解码播放,不会出现黑屏现象。也就是说,服务器中只缓存一个i帧的视频数据,不需要缓存一个gop的视频数据,降低了服务器的内存资源占用率。

需要说明的是,在本文中,诸如第一和第二等之类的关系术语仅仅用来将一个实体或者操作与另一个实体或操作区分开来,而不一定要求或者暗示这些实体或操作之间存在任何这种实际的关系或者顺序。而且,术语“包括”、“包含”或者其任何其他变体意在涵盖非排他性的包含,从而使得包括一系列要素的过程、方法、物品或者设备不仅包括那些要素,而且还包括没有明确列出的其他要素,或者是还包括为这种过程、方法、物品或者设备所固有的要素。在没有更多限制的情况下,由语句“包括一个……”限定的要素,并不排除在包括所述要素的过程、方法、物品或者设备中还存在另外的相同要素。

本说明书中的各个实施例均采用相关的方式描述,各个实施例之间相同相似的部分互相参见即可,每个实施例重点说明的都是与其他实施例的不同之处。尤其,对于装置实施例而言,由于其基本相似于方法实施例,所以描述的比较简单,相关之处参见方法实施例的部分说明即可。

本领域普通技术人员可以理解实现上述方法实施方式中的全部或部分步骤是可以通过程序来指令相关的硬件来完成,所述的程序可以存储于计算机可读取存储介质中,这里所称得的存储介质,如:rom/ram、磁碟、光盘等。

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

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1