本发明涉及数据传输技术领域,特别是涉及切片视频传输的方法和装置。
背景技术:
对于视频文件的传输,传统的直播/点播采用按帧传输的方式,近年来,互联网视频网站开始采用切片式的传输协议,包括苹果公司的hls(httplivestreaming),adobe公司的hds(httpdynamicstreaming),以及mpeg标准化组织的mpeg-dash。
这些切片式的传输协议的底层传输均采用http/https协议,因此能够兼容传统的cdn(contentdeliverynetwork,内容分发网络),由客户端按需索取切片数据,增大了客户端的缓冲,一定程度上缓解了网络波动问题。然而,由于http/https对丢包敏感,且延迟较大,因此现有的切片式的传输协议,客户端通过网络获取视频文件进行播放时,尤其是在网络波动较大、丢包率和延迟均较大的无线网络环境下,客户端经常出现播放卡顿的问题。
技术实现要素:
基于此,本发明提供了切片视频传输的方法及装置,能够解决客户端播放网络视频文件时的播放卡顿问题。
本发明方案包括:
一种切片视频传输方法,包括以下步骤:
建立与服务器之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接向服务器发送获取切片视频的请求消息,其中,所述获取切片视频的请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息;
接收服务器发送的与所述请求消息对应的响应消息,解析所述响应消息获得请求的切片视频。
其中,还包括:
向服务器发送取消切片视频传输的请求消息,其中,所述取消切片视频传输的请求消息为基于amf-rpc实现的第二请求函数。
其中,所述amf-rpc是使用amf数据格式实现的远程方法调用,其中,所述amf数据格式是用于flash远程调用的一种数据格式。
其中,所述第一请求函数的格式为:
get(<uri>,<httpheaders>,<taskid>),
其中,get表示调用名,其数据类型为amf0string;<uri>表示请求的视频文件的统一资源定位符uri,其数据类型为amf0string;<httpheaders>表示http请求头,其数据类型为amf0object;<taskid>表示请求的任务id,其数据类型为amf0number;
其中,所述第二请求函数的格式为:
get(<null>,<ranges>,<taskid>),
其中,get表示调用名,其数据类型为amf0string;<null>表示空参数,其数据类型为null;<ranges>表示取消传输的数据范围,其数据类型为amf3bytearray;<taskid>表示请求的任务id,其数据类型为amf0number。
其中,还包括,获得请求的切片视频之后,将该切片视频数据推送至视频缓冲区并进行渲染播放。
其中,还包括:
检测所述视频缓冲区的切片视频数据是否达到预设值;
若否,则继续向服务器发送获取切片视频的请求消息;
若是,则启动延时定时器,达到预设的时间后重新检测所述视频缓冲区的视频切片数据是否达到所述预设值。
一种切片视频传输方法,包括以下步骤:
建立与客户端之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接接收客户端发送的获取切片视频的请求消息,所述请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息;
基于符合rtmfp协议规则的udp端口向客户端发送响应消息,所述响应消息为基于amf-rpc实现的响应函数,使得客户端获得相应的切片视频。
其中,建立与客户端之间基于实时媒体流协议rtmfp的通信连接的步骤包括:
监听符合rtmfp协议规则的udp端口,读取udp包,对所述udp包的前3个dowrd异或,得到连接id;
若所述连接id等于设定数值,将所述udp包识别为握手数据包,向客户端回送rhello消息,以建立与客户端之间基于实时媒体流协议rtmfp的通信连接;其中,所述rhello消息中包括:根据所述握手数据包处理ikeying密钥交换向客户端回送的rkeying信息;
在建立与客户端之间基于实时媒体流协议rtmfp的通信连接的步骤之后,还包括:生成以所述连接id为唯一标识的连接对象并加入到连接对象表中。
其中,在建立与客户端之间基于实时媒体流协议rtmfp的通信连接的步骤之后,还包括:
监听符合rtmfp协议规则的udp端口并读取udp数据包,以接收客户端发送的取消切片视频的请求消息,该请求消息为基于amf-rpc实现的第二请求函数,其包含所取消的切片视频的标识信息;
根据客户端发送的取消切片视频的请求消息,取消对相应切片视频的传输。
其中,所述amf-rpc是使用amf数据格式实现的远程方法调用,其中,所述amf数据格式是用于flash远程调用的一种数据格式。
其中,所述第一请求函数的格式为:
get(<uri>,<httpheaders>,<taskid>),
其中,get表示调用名,其数据类型为amf0string;<uri>表示请求的视频文件的统一资源定位符uri,其数据类型为amf0string;<httpheaders>表示http请求头,其数据类型为amf0object;<taskid>表示请求的任务id,其数据类型为amf0number;
其中,所述第二请求函数的格式为:
get(<null>,<ranges>,<taskid>),
其中,get表示调用名,其数据类型为amf0string;<null>表示空参数,其数据类型为null;<ranges>表示取消传输的数据范围,其数据类型为amf3bytearray;<taskid>表示请求的任务id,其数据类型为amf0number。
其中,若所述连接id等于零,将所述udp包识别为握手数据包,若所述连接id不为零,将所述udp包识别为连接数据包。
其中,所述握手包采用预设的固定密钥以aes-128方式加密;所述连接数据包采用的加密密钥为预设的固定密钥经过迪菲-赫尔曼dh密钥交换之后产生的密钥,所述连接数据包以aes-128方式加密。
其中,所述响应函数的格式为:
getr(<block>,<type>,<taskid>);
其中,getr表示调用名,其数据类型为amf0string;<block>表示响应的切片视频,其数据类型为amf3bytearray;<type>表示响应类型,其数据类型为amf0number,0为http响应头,1为http响应体,2为响应结束;<taskid>表示客户端的请求任务id,其数据类型为amf0number。
一种切片视频传输装置,包括:
发送模块:用于建立与服务器之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接向服务器发送获取切片视频的请求消息,其中,所述获取切片视频的请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息;
接收模块:用于接收服务器发送的与所述请求消息对应的响应消息,解析所述响应消息获得请求的切片视频。
一种切片视频传输装置,包括:
监听模块:用于建立与客户端之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接接收客户端发送的获取切片视频的请求消息,所述请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息;
响应模块:用于基于符合rtmfp协议规则的udp端口向客户端发送响应消息,所述响应消息为基于amf-rpc实现的响应函数,使得客户端获得相应的切片视频。
一种计算机可读存储介质,其上存储有计算机程序,该程序被处理器执行时实现上述任一方法的步骤。
一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时实现上述任一方法的步骤。
上述技术方案,客户端建立与服务器之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接向服务器发送获取切片视频的请求消息;对应地,服务器通过监听符合rtmfp协议规则的udp端口并读取udp数据包,以接收客户端发送的获取切片视频的请求消息,所述获取切片视频的请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息;基于所述符合rtmfp协议规则的udp端口向客户端发送响应消息,所述响应消息为基于amf-rpc实现的响应函数,使得客户端获得相应的切片视频;客户端接收服务器发送的与所述请求消息对应的响应消息,解析所述响应消息获得请求的切片视频;此外,客户端还可基于amf-rpc实现的第二请求函数,向服务器请求取消传输设定范围的切片视频,服务器收到取消传输切片视频的请求消息后,不再向客户端传输对应范围的切片视频。客户端和服务器通过所述rtmfp协议上传输视频切片数据,可实现在高丢包率、高延迟的网络环境下客户端视频文件的无卡顿播放。
附图说明
图1为实现本发明切片视频传输方法的环境示意图;
图2为一实施例的客户端切片视频传输方法的示意性流程图;
图3为另一实施例的客户端获取切片视频的方法的示意性流程图;
图4为一实施例的服务器端切片视频传输方法的示意性流程图;
图5为另一实施例的服务器端切片视频传输的方法的示意性流程图;
图6为一实施例的切片视频传输的装置的示意性结构图;
图7为另一实施例的切片视频传输的装置的示意性结构图。
具体实施方式
为了使本发明的目的、技术方案及优点更加清楚明白,以下结合附图及实施例,对本发明进行进一步详细说明。应当理解,此处所描述的具体实施例仅仅用以解释本发明,并不用于限定本发明。
本发明中的步骤虽然用标号进行了排列,但并不用于限定步骤的先后次序,除非明确说明了步骤的次序或者某步骤的执行需要其他步骤作为基础,否则步骤的相对次序是可以调整的。
图1为实现视频切片数据传输的方法的环境示意图;如图1所示,该系统包括客户端和服务器。其中,所述服务器中保存有视频文件的切片数据(即切片视频),所述视频文件的切片数据指的是,将直播流或者点播视频流文件包含的数据,按固定的时间单位,例如3秒到10秒不等进行切分,形成一组切片数据,此外,通常还生成一个索引文件,记录视频文件信息,包括文件标识信息,例如uri(uniformresourceidentifier,统一资源标识符)信息等。所述客户端运行在终端上,可用于播放视频文件,所述终端可为智能手机、平板、移动电脑等,所述客户端可以为pc端的应用程序、androidapp、iosapp等,包括但不限于adobeflashplayer。
进一步的,所述客户端实现了rtmfp(realtimemediaflowprotocol,实时媒体流协议),并在rtmfp协议基础上,基于amf-rpc定义了客户端httpget方法的语法和语义。所述服务器也实现了rtmfp协议,并在rtmfp协议基础上,采用amf-rpc定义了服务器端httpget方法的语法和语义。
其中,rtmfp是adobe公司开发的一种专有协议,可以让adobeflashplayer所在的终端用户之间实现直接点对点等多种通信。
其中,所述amf-rpc是使用amf数据格式实现的远程方法调用,其中,所述amf数据格式是用于flash远程调用的一种数据格式。rpc(remoteprocedurecallprotocol,远程过程调用协议)
可选地,所述客户端同时还实现http协议,作为客户端在rtmfp协议不可用的场合的备用传输协议。所述服务器同时还实现http协议,与rtmfp协议并行运行,由此,客户端可探测和选定http协议或者rtmfp协议与所述服务器连接通信连接。
基于上述环境,图2为一实施例的客服端的切片视频传输方法的示意性流程图;在该实施例中,是以该方法应用于客户端为例进行说明。如图2所示,本实施例中的所述视频切片数据传输的方法包括步骤:
s11,建立与服务器之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接向服务器发送获取切片视频的请求消息,其中,所述获取切片视频的请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息;
s12,接收服务器发送的与所述请求消息对应的响应消息,解析所述响应消息获得请求的切片视频。
其中,所述amf-rpc是使用amf数据格式实现的远程方法调用,其中,所述amf数据格式是用于flash远程调用的一种数据格式。
在一可选实施例中,所述第一请求函数的格式为:
get(<uri>,<httpheaders>,<taskid>),
其中,get表示调用名,其数据类型为amf0string;<uri>表示请求的视频文件的统一资源定位符uri,其数据类型为amf0string;<httpheaders>表示http请求头,其数据类型为amf0object;<taskid>表示请求的任务id,其数据类型为amf0number。
在一可选实施例中,所述第二请求函数的格式为:
get(<null>,<ranges>,<taskid>),
其中,get表示调用名,其数据类型为amf0string;<null>表示空参数,其数据类型为null;<ranges>表示取消传输的数据范围,其数据类型为amf3bytearray;<taskid>表示请求的任务id,其数据类型为amf0number。
客户端向服务器发送请求获取切片数据的请求指令,所述请求指令为基于amf-rpc定义的httpget指令,所述请求指令中包括请求的切片数据的标识信息;服务器通过与客户端之间的rtmfp通信连接接收客户端的所述请求指令,根据所述请求指令中携带的切片数据的标识信息查询得到对应的切片数据,生成所述切片数据对应的响应消息并发送给所述客户端,所述响应消息为基于amf-rpc定义的httpget响应消息;进一步地,客户端解析所述响应消息,获得所述视频文件对应的切片数据。
基于上述实施例的切片视频的方法,客户端通过rtmfp协议向服务器发送基于amf-rpc定义的httpget指令,以请求获取视频文件对应的切片数据,所述请求指令中包括请求的切片数据的标识信息;服务器通过与客户端之间的rtmfp通信连接接收客户端的所述请求指令,根据视频文件的标识信息查询得到对应的切片数据,生成对应的响应消息,基于所述符合rtmfp协议规则的udp端口向客户端发送响应消息;客户端接收并解析所述响应消息,由此可获得所述视频文件对应的切片数据。客户端和服务器通过所述rtmfp协议上传输视频的切片数据,可实现在高丢包率、高延迟的网络环境下客户端视频文件的无卡顿播放。
在一实施例中,建立与服务器之间基于实时媒体流协议rtmfp的通信连接的步骤的具体实现方式包括:
服务器监听符合rtmfp协议规则的udp端口,读取udp包;对所述udp包的前3个dowrd异或,得到连接id;若所述连接id等于设定数值,将所述udp包识别为握手数据包,向客户端回送rhello消息,以建立与客户端之间基于实时媒体流协议rtmfp的通信连接;其中,所述rhello消息中包括:根据所述握手数据包处理ikeying密钥交换向客户端回送的rkeying信息。
若所述连接id等于设定数值,所述服务器在建立与客户端之间基于实时媒体流协议rtmfp的通信连接之后,还生成以所述连接id为唯一标识的连接对象并加入到连接对象表中。
其中,dword全称doubleword,每个word为2个字节的长度,dword双字即为4个字节。
优选地,若所述连接id等于零,将所述udp包识别为握手数据包,若所述连接id不为零,将所述udp包识别为连接数据包。
在一实施例中,所述请求获取视频文件对应的切片数据的指令的格式包括:
get(<uri>,<httpheaders>,<taskid>);
其中,get表示调用名;<uri>表示所请求的视频文件的uri;
<httpheaders>表示本次请求的http请求头;<taskid>表示本次的请求任务id。
可选地,get调用名为amf0string类型;<uri>为amf0string类型;<httpheaders>为amf0object类型,如果<httpheaders>为null,则表示没有请求头;<taskid>为amf0number类型;优选地,请求任务id从1开始,即第一个请求任务的请求任务id为1,第二个请求任务的请求任务id为2,以此类推。
所述httpget响应消息的格式包括:
getr(<block>,<type>,<taskid>);
其中,getr表示调用名;<block>表示响应的数据块,用于存储切片数据;<type>表示响应类型;<taskid>表示客户端的请求任务id,由客户端分配的唯一标识本次请求任务的id,从1开始。
可选地,getr调用名为amf0string类型;<block>为amf3bytearray类型;<type>为amf0number类型;<taskid>为amf0number类型。其中,<type>为0表示http响应头,<type>为1表示http响应体,<type>为2表示结束响应。
可选地,所述响应类型包括http响应头、http响应体或者响应结束。例如:<type>为0表示http响应头,为1表示http响应体,为2表示响应结束。
进一步地,在一实施例中,所述的切片视频传输方法还包括:向服务器发送取消切片视频传输的请求消息,其中,所述取消切片视频传输的请求消息为基于amf-rpc实现的第二请求函数。即客户端在向服务器发送请求获取切片数据的请求指令之后,还可向服务器发送取消切片数据传输的请求指令,该请求指令也是基于amf-rpc定义的httpget指令,该指令中包括需要取消传输的切片数据的范围信息。对应地,服务器监听符合rtmfp协议规则的udp端口并读取udp包,以接收客户端发送的取消切片视频的请求消息,该请求消息为基于amf-rpc实现的第二请求函数,其包含所取消的切片视频的标识信息。在服务器收到客户端的取消切片数据传输的请求指令之后,将不再对对应的切片数据生成响应消息并发送给客户端,即取消对相应切片视频的传输。
可选地,客户端取消切片数据传输的请求指令的格式包括:
get(<null>,<ranges>,<taskid>);
其中,get调用名;<null>空参数;<ranges>为要取消传输的切片数据的范围;<taskid>为请求任务id,
优选地,get调用名为amf0string类型;<null>为amf0null类型;<ranges>为amf3bytearray类型,如果ranges为null,表示取消当前请求任务对应的所有切片数据;<taskid>为amf0number类型。
基于上述的指令格式,若客户端要请求某个视频文件file1的切片数据,所述file1包括3个切片数据。则客户端和服务器的消息交互过程可包括:
进一步地,在一实施例中,客户端获得请求的切片视频之后,将该切片视频数据推送至视频缓冲区并进行渲染播放。例如:客户端解析服务器针对获得请求的切片视频的请求消息返回的响应消息,获得所述视频对应的切片数据之后,将所述切片数据推送到预设的播放缓冲队列,对所述播放缓冲队列中的切片数据进行播放,并将已经播放的切片数据从所述播放缓冲队列中删除。
在一实施例中,客户端将所述切片数据推送到预设的播放缓冲队列之后,还包括:检测所述播放缓冲队列中切片数据是否达到设定的数量,若否,重新向服务器发送请求获取切片数据的请求指令;若是,启动定时器,在定时器设定的时间届满之后重新检测所述播放缓冲队列中切片数据是否达到设定的数量。
通过上述实施例的切片视频传输的方法,客户端和服务器均在rtmfp协议基础上,基于amf-rpc实现一套http协议get方法的语法和语义,用于传输切片视频,与传统的切片视频的http传输协议相比,优点包括:在高丢包率和高延迟的网络环境可以平稳无卡顿的播放直播和点播视频;在同一个连接上可以并发发送多个请求,无需建立多个连接。
图3为另一实施例的切片视频传输的方法的示意性流程图,本实施例中,以flashplayer为客户端,客户端请求的视频文件为视频文件。如图3所示,所述实施例的切片视频传输的方法包括步骤:
s21:初始化netconnection对象,具体方式例如:
vartaskid:number=1;
varconn:netconnection=newnetconnection();
s22:建立与服务器的连接,具体方式例如:
conn.connect(“rtmfp://[domain][:port]”);
s23:注册getr结果回调;
conn.client={getr:handleresponse};
s24:针对视频文件的切片数据发送get指令,具体方式例如:
conn.call(“get”,null,uri,null,taskid++);
s25:对服务器返回的响应消息进行处理,具体方式例如:
functionhandleresponse(block,type:number,taskid:number)
{
}
该步骤接收与s24发送请求指令对应的服务器响应消息,将得到的视频切片数据推送到视频缓冲队列,对所述视频缓冲队列中的视频数据进行视频渲染,等待播放。
检查视频缓冲队列中的视频切片数据是否足够,如果不够,调用s24步骤获取更多视频切片数据并推送到视频缓冲队列;如果数据足够,启动s26的延迟定时器,延迟一定时间之后再次检查视频缓冲队列的数据状态;可选地,所述定时器设定的时钟可为500毫秒。
s27,缓冲所述视频缓冲队列视频数据并播放。
基于图1所示的系统环境,图4为一实施例的服务器端切片视频传输方法的示意性流程图;在该实施例中,是以该方法应用于服务器端为例进行说明。如图4所示,本实施例中的视频切片数据传输的方法包括步骤:
s31,建立与客户端之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接接收客户端发送的获取切片视频的请求消息,所述请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息。
s32,基于符合rtmfp协议规则的udp端口向客户端发送响应消息,所述响应消息为基于amf-rpc实现的响应函数,使得客户端获得相应的切片视频。
其中,所述amf-rpc是使用amf数据格式实现的远程方法调用,其中,所述amf数据格式是用于flash远程调用的一种数据格式。
在与客户端建立基于rtmfp的通信连接之后,服务器继续监听符合rtmfp协议的udp端口,以接收客户端发送的获取切片视频的请求指令,所述请求中包括客户端请求的切片视频的标识信息;进一步地,根据所述请求中携带的切片视频的标识信息查询得到对应的切片数据,生成所述切片数据对应的响应消息;所述响应消息为基于amf-rpc定义的httpget响应消息;然后通过rtmfp向客户端发送所述响应消息,使得客户端通过解析所述响应消息获得对应的切片数据。
在一实施例中,所述第一请求函数的格式为:
get(<uri>,<httpheaders>,<taskid>),
其中,get表示调用名,其数据类型为amf0string;<uri>表示请求的视频文件的统一资源定位符uri,其数据类型为amf0string;<httpheaders>表示http请求头,其数据类型为amf0object;<taskid>表示请求的任务id,其数据类型为amf0number。
在一实施例中,所述响应函数的格式为:
getr(<block>,<type>,<taskid>);
其中,getr表示调用名,其数据类型为amf0string;<block>表示响应的切片视频,其数据类型为amf3bytearray;<type>表示响应类型,其数据类型为amf0number,0为http响应头,1为http响应体,2为响应结束;<taskid>表示客户端的请求任务id,其数据类型为amf0number。
在一实施例中,服务器与客户端建立基于rtmfp协议的通信连接之后,还可基于该通信连接,接收客户端发送的获取切片视频的请求,还可接收客户端发送的取消切片视频传输的请求消息。
可选的,建立连接的步骤包括:监听符合rtmfp协议规则的udp端口,读取udp包;对所述udp包的前3个dowrd异或,得到连接id;若所述连接id等于设定数值,将所述udp包识别为握手数据包,向客户端回送rhello消息,以建立与客户端之间基于实时媒体流协议rtmfp的通信连接;其中,所述rhello消息中包括:根据所述握手数据包处理ikeying密钥交换向客户端回送的rkeying信息;在建立与客户端之间基于实时媒体流协议rtmfp的通信连接的步骤之后,还包括:生成以所述连接id为唯一标识的连接对象并加入到连接对象表中。
即,在一可选实施例中,在服务器与客户端建立连接的阶段,即握手阶段,服务器端根据读取的udp数据包中,符合rtmfp协议规则的数据包的前三个双字节异或后得到的数值得到连接id,其中连接id为零的udp数据包表示握手数据包。在连接成功之后,即握手过程已经完成状态下,服务器继续监听udp端口,该情况下监听到的udp数据包得到连接id是不为零的,非零连接id对应的udp数据包为连接数据包,通过查找连接对象表可确定该连接数据包对应的连接对象。
可选地,所述握手数据包采用预设的固定密钥以aes-128方式加密。所述连接数据包采用的加密密钥为预设的固定密钥经过迪菲-赫尔曼dh密钥交换之后产生的密钥,所述连接数据包以aes-128方式加密。
服务器监听符合rtmfp协议的udp端口,确认客户端是否有发送获取切片视频的请求,若客户端有发送获取切片视频的请求,根据所述请求中携带的切片视频的标识信息查询得到对应的切片数据的具体实施方式可包括:通过rtmfp协议接收客户端发送的获取切片视频的请求指令,根据所述请求指令得到对应的连接id;根据所述连接id从本地的连接对象表中查找出对应的连接对象,控制所述连接对象根据所述视频文件的标识信息查询得到对应的切片数据。
在一实施例中,所述客户端发送的获取切片视频的请求指令中还包括请求任务id。对应地,在服务器,控制所述连接对象根据所述视频文件的标识信息查询得到对应的切片数据的具体实现方式可包括:
根据所述获取切片视频的请求指令得到请求任务id,将所述请求任务id记录在所述连接对象的任务表中;根据视频文件的标识信息查询得到所述视频文件对应的切片数据;
首先,生成http响应头,将所述http响应头以getr调用方式发送给客户端;
然后,读取一个切片数据生成对应的响应消息,将该响应消息以getr调用方式发送给客户端;
检测所述视频文件对应的切片数据是否遍历完成,若否,读取下一个切片数据生成新的响应消息,将新的响应消息以getr调用方式发送给客户端;返回检测所述视频文件对应的切片数据是否遍历完成的步骤,直到所述视频文件对应的切片数据遍历完成;
最后,生成结束响应,将所述结束响应以getr调用方式发送给客户端。
进一步地,在一实施例中,所述的切片视频传输方法还包括:服务器端监听符合rtmfp协议规则的udp端口并读取udp数据包,以接收客户端发送的取消切片视频的请求消息,该请求消息为基于amf-rpc实现的第二请求函数,其包含所取消的切片视频的标识信息;进一步根据客户端发送的取消切片视频的请求消息,取消对相应切片视频的传输。
可见,服务器还可接收客户端发送的取消切片数据传输的请求指令,所述请求指令中包含需要取消传输的切片数据的范围信息;服务器基于rtmfp收到该指令之后,不再生成相应范围内的切片数据对应的响应消息,也不会返回对应范围内的切片数据的响应消息包给所述客户端。
可选地,所述第二请求函数的格式为:
get(<null>,<ranges>,<taskid>),
其中,get表示调用名,其数据类型为amf0string;<null>表示空参数,其数据类型为null;<ranges>表示取消传输的数据范围,其数据类型为amf3bytearray;<taskid>表示请求的任务id,其数据类型为amf0number。
基于上述的指令格式,若客户端要请求某个视频文件的切片视频,例如file1的切片数据,file1包含3个切片视频,则客户端和服务器的信令交互过程可为:
图5为另一实施例的视频切片数据传输的方法的示意性流程图,本实施例中,以flashplayer为客户端,客户端请求视频文件。如图5所示,在服务器端切片视频传输方法包括步骤:
s41,服务器在启动时根据配置监听指定的符合rtmfp规则的udp端口;
s42,从udp端口中读取udp数据包;
该过程为异步读取,不阻塞,当udp数据包达到时触发s23;终端通过udp端口向服务器发出的指令消息均为udp类型的数据包。
s43,符合rtmfp规则的数据包前3个dowrd异或之后,得到连接id,0表示握手数据包,其它为连接数据包,连接数据包包括请求获取切片数据的第一请求指令或者取消传输切片数据的第二请求指令。
可选地,其中,客户端发送的udp数据包中,第一个dword之后的数据为加密数据;握手数据包采用固定的密钥以aes-128方式加密;连接数据包为加密密钥为握手期间采用dh密钥交换之后的产生的密钥,以aes-128方式加密;服务器端解密后,执行校验,若校验失败,则丢弃这个数据包;
根据数据包类型对客户端发送的udp数据包进行分拣,如果是握手数据包,则进入握手流程s44,如果是连接数据包,则进入步骤s46。
s44,服务器端执行与客户端的连接握手操作;
包括回送rhello,处理ikeying密钥交换回送rkeying给客户端,最终产生以所述连接id为唯一标识的连接对象加入到服务器端的连接对象表(s45)。
s46,根据所述连接id从连接对象表中查找出连接对象;
s47,由所述连接对象处理客户端发送的连接数据包,组包成对应的响应消息,并投递给消息处理过程处理;
s48,消息处理过程判断生成的响应消息为amf调用,且调用名为get,则开始执行s481过程;
s481,将客户端的请求任务id记录在所述连接对象的任务表上;
s482,打开客户端请求视频文件对应的切片数据所在的文件;
s483,所述连接对象发送类似http的响应头,以getr调用方式发送给客户端;
s484,将客户端请求读取切片数据作为响应的数据块,并以getr调用方式发送给客户端,直到客户端请求的切片数据全部返回;
s485,所述连接对象发送响应结束的响应数据包,以getr调用方式发送给客户端,关闭所述切片数据的文件,并从所述连接对象的任务表中移除当前请求任务id,任务处理结束。通过服务器端设置连接对象的方式,在同一个连接对象上可以并发发送多个请求任务,无需建立多个连接。
基于上述实施例,客户端在请求视频文件的切片数据时,采用上述实施例所述的rtmfp协议进行视频切片数据传输;客户端和服务器通过所述rtmfp协议上传输视频切片数据,可实现在高丢包率、高延迟的网络环境下客户端视频无卡顿播放。并且,在同一个通信连接上,客户端可以向服务器并发发送多个请求,无需建立与服务器的多个通信连接。
需要说明的是,对于前述的各方法实施例,为了简便描述,将其都表述为一系列的动作组合,但是本领域技术人员应该知悉,本发明并不受所描述的动作顺序的限制,因为依据本发明,某些步骤可以采用其它顺序或者同时进行。
基于与上述实施例中的视频切片数据传输的方法相同的思想,本发明还提供切片视频传输的装置和视频切片数据传输的装置,所述装置可用于执行上述切片视频传输的方法和视频切片数据传输的方法。为了便于说明,装置实施例的结构示意图中,仅仅示出了与本发明实施例相关的部分,本领域技术人员可以理解,图示结构并不构成对装置的限定,可以包括比图示更多或更少的部件,或者组合某些部件,或者不同的部件布置。
图6为本发明一实施例的切片视频传输装置的示意性结构图,该装置可以应用于终端。如图6所示,所述实施例的切片视频传输装置包括:
发送模块:用于建立与服务器之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接向服务器发送获取切片视频的请求消息,其中,所述获取切片视频的请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息;
接收模块:用于接收服务器发送的与所述请求消息对应的响应消息,解析所述响应消息获得请求的切片视频。
图7为本发明一实施例的切片视频传输装置的示意性结构图,该装置可以应用于终端。如图7所示,所述实施例的切片视频传输装置包括:
监听模块:用于建立与客户端之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接接收客户端发送的获取切片视频的请求消息,所述请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息;
响应模块:用于基于符合rtmfp协议规则的udp端口向客户端发送响应消息,所述响应消息为基于amf-rpc实现的响应函数,使得客户端获得相应的切片视频。
本发明还提供一种视频切片数据传输的系统的实施例,所述视频切片数据传输的系统包括:客户端和服务器。
所述客户端包括:
发送模块:用于建立与服务器之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接向服务器发送获取切片视频的请求消息,其中,所述获取切片视频的请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息;
接收模块:用于接收服务器发送的与所述请求消息对应的响应消息,解析所述响应消息获得请求的切片视频。
所述服务器包括:
监听模块:用于建立与客户端之间基于实时媒体流协议rtmfp的通信连接,基于所述通信连接接收客户端发送的获取切片视频的请求消息,所述请求消息为基于amf-rpc实现的第一请求函数,其包含所请求的切片视频的标识信息;
响应模块:用于基于符合rtmfp协议规则的udp端口向客户端发送响应消息,所述响应消息为基于amf-rpc实现的响应函数,使得客户端获得相应的切片视频。
需要说明的是,上述示例的装置/系统实施方式中,各模块之间的信息交互、执行过程等内容,由于与本发明前述方法实施例基于同一构思,其带来的技术效果与本发明前述方法实施例相同,具体内容可参见本发明方法实施例中的叙述,此处不再赘述。
此外,上述示例的装置实施方式中,各程序模块的逻辑划分仅是举例说明,实际应用中可以根据需要,例如出于相应硬件的配置要求或者软件的实现的便利考虑,将上述功能分配由不同的程序模块完成,即将所述装置的内部结构划分成不同的程序模块,以完成以上描述的全部或者部分功能。
本领域普通技术人员可以理解,实现上述实施例方法中的全部或部分流程,是可以通过计算机程序来指令相关的硬件来完成,所述的程序可存储于一计算机可读取存储介质中,作为独立的产品销售或使用。所述程序在执行时,可执行如上述各方法的实施例的全部或部分步骤。此外,所述存储介质还可设置于一种计算机设备中,所述计算机设备中还包括处理器,所述处理器执行所述存储介质中的程序时,能够实现上述各方法的实施例的全部或部分步骤。其中,所述的存储介质可为磁碟、光盘、只读存储记忆体(read-onlymemory,rom)或随机存储记忆体(randomaccessmemory,ram)等。
在上述实施例中,对各个实施例的描述都各有侧重,某个实施例中没有详述的部分,可以参见其它实施例的相关描述。可以理解,其中所使用的术语“第一”、“第二”等在本文中用于区分对象,但这些对象不受这些术语限制。
以上所述实施例仅表达了本发明的几种实施方式,不能理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。