媒体流的实时推送方法及服务器与流程

文档序号:18298573发布日期:2019-07-31 09:45阅读:396来源:国知局
媒体流的实时推送方法及服务器与流程
本发明涉及数字信息传送
技术领域
,特别涉及一种媒体流的实时推送方法及服务器。
背景技术
:随着互联网特别是移动互联网的快速发展,通过互联网来实时传送音频、视频、图像等多媒体数据成为许多应用的基本需求,为满足这一需求,人们提出了各种流媒体实时传送技术,根据数据传送的发起方不同,这些流媒体实时传送技术可分为两大类:一类是流拉取方式,基本原理是客户端主动向服务器请求实时数据,采用流拉取方式的技术方案有:苹果公司提出的hls(httplivestreaming)、微软提出的平滑流smoothstreaming、adobe提出的hds(httpdynamicstreaming)、mpeg组织提出的dash(dynamicadaptivestreamingoverhttp);另一类是流推送方式,基本原理是服务器主动向客户端推送实时产生的媒体流,采用流推送方式的技术方案有:实时传送协议(rtp(real-timetransportprotocol,实时传输协议)/rtsp(realtimestreamingprotocol,实时流传输协议))、实时消息传送协议(realtimemessagingprotocol,rtmp)和http-flv协议。相对于流拉取方式来说,流推送方式不需要等待客户端的请求,可以将实时产生的媒体流数据快速发送给客户端,实现低延时,因此,在实时性要求较高的应用场合,如带有交互的视频直播、视频监控等,普遍采用这种基于推送的模式。但是,现有的各种流推送方案存在以下问题:问题1,缺乏对媒体数据的分段推送。在现有各种流推送方案中,一旦媒体数据产生,则立即送入发送缓冲区,但是,如果单个媒体单元的数据量较少,频繁的单次推送将增加网络传输开销,降低传送效率。问题2,推送控制完全由服务器完成,难以支持大规模自适应推送。在现有各种流推送方案中,推送过程完全由服务器控制,客户端只是被动接收推送的数据。服务器需要为每个客户端维护一个推送进程,用于对媒体流到每个客户端的传输情况进行实时监控,并处理客户端的各种需求变化和互联网上的各种连接异常,如网络拥塞、丢包、连接中断等。由于单个推送进程的处理开销较大,服务器难以支持大规模的自适应媒体流推送。技术实现要素:本发明旨在至少在一定程度上解决相关技术中的技术问题之一。为此,本发明的第一个目的在于提出一种媒体流的实时推送方法,该方法能够实现媒体流的按需分段推送,简化服务器端的推送过程,提高媒体流的传送效率和对大规模自适应推送的支持。本发明的第二个目的在于提出一种媒体流的实时推送服务器。本发明的第三个目的在于提出一种计算机设备。本发明的第四个目的在于提出一种非临时性计算机可读存储介质。本发明的第五个目的在于提出一种计算机程序产品。为达到上述目的,本发明第一方面实施例提出了一种媒体流的实时推送方法,其中,所述媒体流为实时产生的媒体单元的序列,其中,每个媒体单元关联有一个产生时间和/或一个指示产生顺序的序号,所述方法包括以下步骤:接收客户端发送的媒体段请求,其中,所述媒体段请求携带至少一个命令,所述命令包括:启动推送命令;根据所述启动推送命令来启动一个推送任务,其中,当所述启动推送命令携带指示待传送的目标媒体流的第一类参数、指示待传送的候选媒体单元特征的第二类参数和分段策略中的至少一个时,根据所述第一类参数确定待传送的目标媒体流,为推送任务分配一个推送任务标识,根据所述第二类参数生成初始媒体段,并根据所述分段策略持续生成新的媒体段,将所述推送任务标识和生成的媒体段发送给所述客户端,所述媒体段封装了所述目标媒体流中的候选媒体单元。本发明实施例的媒体流的实时推送方法,可以实现媒体流的按需分段推送,这种分段推送可以将小的媒体单元聚合成媒体段,减少推送的次数,提高媒体流的传送效率;其次,简化了服务器端的推送过程,服务器端只需按照客户端指定的策略来生成媒体段并发送给客户端,不再需要复杂的自适应算法来应对传输过程中的各种问题,降低了服务器端需要维护的状态和处理开销,有利于支持大规模的媒体流推送;最后,每个客户端可以根据媒体流的传输情况来随时调整服务器端的推送过程,使得推送过程更快的适应网络条件和客户端需求的变化。另外,根据本发明上述实施例的媒体流的实时接收方法还可以具有以下附加的技术特征:在本发明的一个实施例中,当所述启动推送命令不携带所述第一类参数时,所述目标媒体流为缺省指定;当所述启动推送命令不携带所述第二类参数时,所述初始媒体段封装了缺省指定的媒体单元;当所述启动推送命令不携带所述分段策略时,所述推送任务的分段策略为缺省指定。在本发明的一个实施例中,所述缺省指定的媒体单元为所述目标媒体流中所有和最新媒体单元的序号间隔小于第一预设值的媒体单元,或者为所述目标媒体流中所有和最新媒体单元的产生时间间隔小于第二预设值的媒体单元。在本发明的一个实施例中,当所述启动推送命令携带的第二类参数包括起始序号且起始序号有效时,所述候选媒体单元的序号在所述起始序号之后。在本发明的一个实施例中,当所述启动推送命令携带的第二类参数包括起始时间且起始时间有效时,所述候选媒体单元的产生时间在所述起始时间之后。在本发明的一个实施例中,所述每个媒体单元关联一个优先级,当所述启动推送命令携带的第二类参数包括单元优先级范围时,所述候选媒体单元的优先级在所述单元优先级范围内。在本发明的一个实施例中,所述分段策略为等序号间隔推送,所述分段策略携带的参数包括:指定序号间隔,所述按照所述分段策略生成新的媒体段,包括以下步骤:s801、当初始媒体段生成时,确定推送起始序号;s802、当新的媒体单元产生时,判断所述新的媒体单元的序号与所述推送起始序号的间隔是否等于所述指定序号间隔,如果是,则将所有序号在所述推送起始序号之后的候选媒体单元封装成新的媒体段,更新所述推送起始序号;s803、重复执行s802。在本发明的一个实施例中,所述分段策略为等时间间隔推送,所述分段策略携带的参数包括:指定时间间隔,所述按照所述分段策略生成新的媒体段,包括:从生成初始媒体段的时间开始,每经过一个时长为所述指定时间间隔的时间段,则将所述时间段内产生的候选媒体单元封装成新的媒体段。在本发明的一个实施例中,若干个序号连续的媒体单元组成了一个单元集,所述分段策略为单元集推送,所述分段策略携带的参数包括:指定单元集个数,所述按照所述分段策略生成新的媒体段,包括:当新的媒体单元产生时,判断所述新的媒体单元是否为一个单元集的最后一个媒体单元,如果是,再判断当前待推送的单元集的个数是否等于所述指定单元集个数,如果是,则将所述当前待推送的单元集中的候选媒体单元封装成新的媒体段。在本发明的一个实施例中,为每个启动的所述推送任务设置一个截止时间,当到达所述截止时间时,终止所述推送任务,其中,所述终止所述推送任务包括:停止生成新的媒体段。在本发明的一个实施例中,所述命令还包括:继续推送命令,所述继续推送命令携带至少一个命令参数:推送任务标识,所述方法还包括:根据所述继续推送命令,为与所述继续推送命令携带的所述推送任务标识对应的推送任务重新设置一个截止时间,所述推送任务的新截止时间为当前系统时间加上一个预设的推送持续时间。在本发明的一个实施例中,所述命令还包括:终止推送命令,所述终止推送命令携带至少一个命令参数:推送任务标识,所述方法还包括:根据所述终止推送命令来终止与所述终止推送命令携带的所述推送任务标识对应的推送任务,其中,停止生成新的媒体段。在本发明的一个实施例中,所述命令还包括:重启推送命令,所述重启推送命令携带推送任务标识,所述重启推送命令不携带或携带如下至少一个命令参数:指示待传送的目标媒体流的第一类参数、指示待传送的候选媒体单元特征的第二类参数和分段策略,所述方法还包括:根据所述重启推送命令来重新启动与所述重启推送命令携带的所述推送任务标识对应的推送任务,其中,首先停止所述推送任务当前的媒体段生成和发送过程,再根据所述重启推送命令携带的所述第一类参数确定待传送的目标媒体流,生成初始媒体段,根据所述重启推送命令携带的所述分段策略持续生成新的媒体段,将生成的媒体段发送给客户端,所述媒体段封装了所述目标媒体流中根据所述重启推送命令携带的所述第二类参数确定的候选媒体单元。在本发明的一个实施例中,所述媒体段还封装了媒体流索引信息,所述媒体流索引信息包含属于同一个内容的多个媒体流描述信息,所述媒体流描述信息包括媒体流标识和媒体流比特率。在本发明的一个实施例中,所述命令还包括:媒体段拉取命令,所述的媒体段拉取命令不携带或携带至少一个命令参数,所述命令参数包括:指示待传送的目标媒体流的第一类参数和指示待传送的候选媒体单元特征的第二类参数,所述方法还包括:根据所述媒体段拉取命令生成媒体段并将生成的媒体段发送给客户端,其中,根据所述第一类参数确定所述待传送的目标媒体流,根据所述第二类参数确定所述待传送的候选媒体单元,并将所述待传送的候选媒体单元封装成所述媒体段。为达到上述目的,本发明第二方面实施例提出了一种媒体流的实时推送服务器,其中,所述媒体流为实时产生的媒体单元的序列,其中,每个媒体单元关联有一个产生时间和/或一个指示产生顺序的序号,所述服务器包括:客户端接口组件,用于接收客户端发送的媒体段请求并返回相应的媒体段,其中,所述媒体段请求携带至少一个命令,所述命令包括:启动推送命令;媒体段生成组件,用于根据所述媒体段请求中的启动推送命令来启动一个推送任务,其中,当所述启动推送命令携带指示待传送的目标媒体流的第一类参数、指示待传送的候选媒体单元特征的第二类参数和分段策略中的至少一个时,根据所述第一类参数确定待传送的目标媒体流,为推送任务分配一个推送任务标识,根据所述第二类参数生成初始媒体段,并根据所述分段策略持续生成新的媒体段,将所述推送任务标识和生成的媒体段通过所述客户端接口组件发送至所述客户端,所述媒体段封装了所述目标媒体流中的候选媒体单元。本发明实施例的媒体流的实时推送服务器,可以实现媒体流的按需分段推送,这种分段推送可以将小的媒体单元聚合成媒体段,减少推送的次数,提高媒体流的传送效率;其次,简化了服务器端的推送过程,服务器端只需按照客户端指定的策略来生成媒体段并发送给客户端,不再需要复杂的自适应算法来应对传输过程中的各种问题,降低了服务器端需要维护的状态和处理开销,有利于支持大规模的媒体流推送;最后,每个客户端可以根据媒体流的传输情况来随时调整服务器端的推送过程,使得推送过程更快的适应网络条件和客户端需求的变化。另外,根据本发明上述实施例的媒体流的实时接收方法还可以具有以下附加的技术特征:在本发明的一个实施例中,当所述启动推送命令不携带所述第一类参数时,所述目标媒体流为缺省指定;当所述启动推送命令不携带所述第二类参数时,所述初始媒体段封装了缺省指定的媒体单元;当所述启动推送命令不携带所述分段策略时,所述推送任务的分段策略为缺省指定。在本发明的一个实施例中,所述缺省指定的媒体单元为所述目标媒体流中所有和最新媒体单元的序号间隔小于第一预设值的媒体单元,或者为所述目标媒体流中所有和最新媒体单元的产生时间间隔小于第二预设值的媒体单元。在本发明的一个实施例中,当所述启动推送命令携带的第二类参数包括起始序号且起始序号有效时,所述候选媒体单元的序号在所述起始序号之后。在本发明的一个实施例中,当所述启动推送命令携带的第二类参数包括起始时间且起始时间有效时,所述候选媒体单元的产生时间在所述起始时间之后。在本发明的一个实施例中,所述每个媒体单元关联一个优先级,当所述启动推送命令携带的第二类参数包括单元优先级范围时,所述候选媒体单元的优先级在所述单元优先级范围内。在本发明的一个实施例中,所述分段策略为等序号间隔推送,所述分段策略携带的参数包括:指定序号间隔,所述媒体段生成组件,还用于执行以下步骤:s801、当初始媒体段生成时,确定推送起始序号;s802、当新的媒体单元产生时,判断所述新的媒体单元的序号与所述推送起始序号的间隔是否等于所述指定序号间隔,如果是,则将所有序号在所述推送起始序号之后的候选媒体单元封装成新的媒体段,更新所述推送起始序号;s803、重复执行s802。在本发明的一个实施例中,所述分段策略为等时间间隔推送,所述分段策略携带的参数包括:指定时间间隔,所述媒体段生成组件,还用于:从生成初始媒体段的时间开始,每经过一个时长为所述指定时间间隔的时间段,则将所述时间段内产生的候选媒体单元封装成新的媒体段。在本发明的一个实施例中,若干个序号连续的媒体单元组成了一个单元集,所述分段策略为单元集推送,所述分段策略携带的参数包括:指定单元集个数,所述媒体段生成组件,还用于:当新的媒体单元产生时,判断所述新的媒体单元是否为一个单元集的最后一个媒体单元,如果是,再判断当前待推送的单元集的个数是否等于所述指定单元集个数,如果是,则将所述当前待推送的单元集中的候选媒体单元封装成新的媒体段。在本发明的一个实施例中,所述媒体段生成组件,还用于:为每个启动的所述推送任务设置一个截止时间,当到达所述截止时间时,终止所述推送任务,其中,所述终止所述推送任务包括:停止生成新的媒体段。在本发明的一个实施例中,所述命令还包括:继续推送命令,所述继续推送命令携带至少一个命令参数:推送任务标识,所述媒体段生成组件,还用于:根据所述继续推送命令,为与所述继续推送命令携带的所述推送任务标识对应的推送任务重新设置一个截止时间,所述推送任务的新截止时间为当前系统时间加上一个预设的推送持续时间。在本发明的一个实施例中,所述命令还包括:终止推送命令,所述终止推送命令携带至少一个命令参数:推送任务标识,所述媒体段生成组件,还用于:根据所述终止推送命令来终止与所述终止推送命令携带的所述推送任务标识对应的推送任务,其中,停止生成新的媒体段。在本发明的一个实施例中,所述命令还包括:重启推送命令,所述重启推送命令携带推送任务标识,所述重启推送命令不携带或携带如下至少一个命令参数:指示待传送的目标媒体流的第一类参数、指示待传送的候选媒体单元特征的第二类参数和分段策略,所述媒体段生成组件,还用于:根据所述重启推送命令来重新启动与所述重启推送命令携带的所述推送任务标识对应的推送任务,其中,首先停止所述推送任务当前的媒体段生成和发送过程,再根据所述重启推送命令携带的所述第一类参数确定待传送的目标媒体流,生成初始媒体段,根据所述重启推送命令携带的所述分段策略持续生成新的媒体段,将生成的媒体段发送给客户端,所述媒体段封装了所述目标媒体流中根据所述重启推送命令携带的所述第二类参数确定的候选媒体单元。在本发明的一个实施例中,所述媒体段还封装了媒体流索引信息,所述媒体流索引信息包含属于同一个内容的多个媒体流描述信息,所述媒体流描述信息包括媒体流标识和媒体流比特率。在本发明的一个实施例中,所述命令还包括:媒体段拉取命令,所述的媒体段拉取命令不携带或携带至少一个命令参数,所述命令参数包括:指示待传送的目标媒体流的第一类参数和指示待传送的候选媒体单元特征的第二类参数,所述媒体段生成组件,还用于:根据所述媒体段拉取命令生成媒体段并将生成的媒体段发送给客户端,其中,根据所述第一类参数确定所述待传送的目标媒体流,根据所述第二类参数确定所述待传送的候选媒体单元,并将所述待传送的候选媒体单元封装成所述媒体段。为达到上述目的,本发明第三方面实施例提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,所述处理器执行所述程序时,实现如上述实施例描述的媒体流的实时推送方法。为达到上述目的,本发明第四方面实施例提出了一种非临时性计算机可读存储介质,该程序被处理器执行时实现如上述实施例描述的媒体流的实时推送方法。为达到上述目的,本发明第五方面实施例提出了一种计算机程序产品,当所述计算机程序产品中的指令由处理器执行时,执行如上述实施例描述的媒体流的实时推送方法。本发明附加的方面和优点将在下面的描述中部分给出,部分将从下面的描述中变得明显,或通过本发明的实践了解到。附图说明本发明上述的和/或附加的方面和优点从下面结合附图对实施例的描述中将变得明显和容易理解,其中:图1为根据本发明一个实施例的媒体流的实时推送方法的流程图;图2为根据本发明一个实施例的媒体流的实时推送过程的示意图;图3为根据本发明一个实施例的分段策略为等序号间隔推送时生成新媒体段的流程图;图4为根据本发明一个实施例的分段策略为等时间间隔的推送过程的示意图;图5为根据本发明一个实施例的分段策略为单元集推送的推送过程的示意图;图6为根据本发明一个实施例的服务器端主动终止推送任务的过程示意图;图7为根据本发明一个实施例的服务器端根据客户端请求来终止推送任务的过程示意图;图8为根据本发明一个实施例的服务器根据重启推送命令来调整分段策略的过程示意图;图9为根据本发明一个实施例的服务器根据重启推送命令来切换目标媒体流的过程示意图;图10是根据本发明一个实施例的媒体流的实时推送服务器的结构示意图。具体实施方式下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,旨在用于解释本发明,而不能理解为对本发明的限制。在互联网中,经常需要将各种实时产生的音频流、视频流或数据流从一个网络节点传送到另一个网络节点,这些网络节点既包括各种终端,如pc、手机、平板,也包括各种应用服务器,如视频服务器、音频服务器,将传送的这些音频流、视频流或数据流统称为媒体流。媒体流的传送过程可以用通用的客户端-服务器模型来描述:实时产生的媒体流由服务器递送给客户端。这里的服务器和客户端指的是逻辑上的功能实体,其中,服务器为发送媒体流的功能实体,客户端为接收媒体流的功能实体。服务器和客户端可存在于任何网络节点上。每个传送的媒体流是一个实时产生的媒体单元的序列。不同的媒体流,其对应的媒体单元可以自行选择。当媒体流是一个实时产生的字节流时,可以选取一个字节为媒体单元;当媒体流是一个经过实时采样获得的音频流或视频流时,可以选取原始的音频帧或视频帧为媒体单元;当媒体流是一个经过实时采样和编码的音频流或视频流时,可以选择编码后的音频帧、编码后的视频帧或访问单元(accessunit)为媒体单元;当媒体流是一个经过实时采样、编码和封装的音频流或视频流时,可以选择封装后的传输包(如rtp包,pes/ps/ts包等)为媒体单元;当媒体流是一个经过实时采样、编码、封装和预分段的音频流或视频流时,可以选择一个已分割的媒体片段(如hls协议中使用的ts格式片段、dash协议中使用的fmp4格式片段)为媒体单元。每个媒体单元可以关联一个产生时间,该产生时间通常为一个时间戳。每个媒体单元还可以关联一个序号,该序号可以用来表示媒体单元产生的顺序。当序号用来表示媒体单元产生的顺序时,序号的意义需要根据具体的媒体单元来定义。当媒体单元为一个字节时,媒体单元的序号为字节序号;当媒体单元为音频帧、视频帧时,媒体单元的序号为帧序号;当媒体单元为一个传输包时,媒体单元的序号为包序号;当媒体单元为一个流片段时,媒体单元的序号为片段序号(如hls中每个ts片段的mediasequence)。对于一个媒体流来说,可以给媒体单元同时关联一个表示产生顺序的序号和一个产生时间,例如,当实时媒体流为一个rtp包流时,rtp头部既有包序号(sequencenumber)字段来指示rtp包的顺序,又有time-stamp字段来指示rtp中封装的媒体数据的产生时间。在此情况下,多个连续的rtp包可能对应相同的产生时间,但是其序号则是唯一的。本发明实施例的方法可以针对任何一种实时媒体流来实施。在下面的实施例当中,本发明实施例将分别选择rtp实时媒体流或mpeg2-ts实时媒体流来阐述本发明实施例的实施方法。对于rtp实时流来说,媒体单元为一个rtp包,选择rtp的包序号(sequencenumber)为媒体单元的序号,rtp包的包序号为一个16位字段,最大值为65535,对于连续产生的rtp包,其序号是循环计数的,如果当前包序号为seq,则下一个包的序号为(seq+1)%65536,因此,序号在实现上受制于其位长,可能出现序号大小无法反映其先后顺序的情况,此时,可通过媒体单元的产生时间来判断序号是否出现循环计数,以准确判断两个媒体单元的序号的先后关系及其间隔。对于mpeg2-ts实时流来说,可以预先采用类似于hls/dash的方式,将实时产生或接收的ts流分割成短时长比如1秒左右的ts片段,每个ts片段可包括多个媒体帧,然后将这些片段按产生顺序编上序号,作为媒体单元,每个片段中包含的第一个媒体帧的时间戳指明了该片段的产生时间。在传统的实时流媒体协议如rtp、rtmp或http-flv中,采用的是服务器推送的方式:服务器上一旦有新的媒体单元,则主动发送给客户端,并不涉及到对媒体流的分段封装,而在各种http自适应流(如hls、平滑流,mpeg-dash)中,则采用了预分段的方式,媒体流按照固定的时间长度来生成媒体片段并发布清单文件,然后等待客户端的拉取。与上述这些方式都不同的是,在本发明实施例中,服务器按照客户端请求中的分段策略对媒体流进行实时分段并推送,客户端可以随时调整媒体流的分段策略。下面参照附图描述根据本发明实施例提出的媒体流的实时推送方法及服务器,首先将参照附图描述根据本发明实施例提出的媒体流的实时推送方法。图1是本发明一个实施例的媒体流的实时推送方法的流程图。如图1所示,该媒体流的实时推送方法,媒体流为实时产生的媒体单元的序列,其中,每个媒体单元关联有一个产生时间和/或一个指示产生顺序的序号,方法包括:在步骤s101中,接收客户端发送的媒体段请求,其中,媒体段请求携带至少一个命令,命令包括一种:启动推送命令。具体而言,媒体段请求可以采用任何网络传输协议来提交,比如常见的超文本传输协议(hypertexttransferprotocol,http)、传输控制协议(transmissioncontrolprotocol,tcp)、用户数据报协议(userdatagramprotocol,udp)、quic(quickudpinternetconnection)协议等。服务器可以预留指定的协议端口来监听并接收客户端发送的媒体段请求,比如使用80端口来接收基于http协议发送的媒体段请求。当客户端采用http协议提交媒体段请求时,可以采用http-get方法或者http-post方法向服务器提交媒体段请求。媒体段请求中至少携带了一个命令,每个命令可不携带或携带至少一个命令参数。命令可以有多种,其中包括一种:启动推送命令,可以根据进一步实施的需要定义新的命令。命令不同,所携带的命令参数也不同。当命令为启动推送命令时,可以携带的命令参数包括:指示待传送的目标媒体流的第一类参数、指示待传送的候选媒体单元特征的第二类参数和分段策略。当然,启示推送命令也可以不携带任何命令参数。在具体的实施例中,可以作为第一类参数的命令参数包括:媒体流标识、媒体流名称,可以作为第二类参数的命令参数包括:起始序号、起始时间、优先级范围,分段策略可以为以下策略之一:等序号间隔推送、等时间间隔推送、单元集推送。当然,还可以根据进一步实施的需要为启动推送命令定义新的命令参数。客户端需要采用一定的封装方法,将命令及其对应的命令参数封装成字节流或字符串流,发送给服务器。例如,当采用http-get来发送媒体段请求时,如果媒体段请求只携带一个命令,则可将命令及其携带的命令参数封装成一个字符串,再将该字符串封装到url中进行传输。采用http-get的媒体段请求的示例如下:get“http://www.xxx-server.com/msreq?cmd=pushstart”get“http://www.xxx-server.com/msreq?cmd=pushstart&streamid=601”get“http://www.xxx-server.com/msreq?cmd=pushstart&seqbegin=1008”get“http://www.xxx-server.com/msreq?cmd=pushstart&timebegin=31000”get“http://www.xxx-server.com/msreq?cmd=pushstart&priorityrange=1-2”get“http://www.xxx-server.com/msreq?cmd=pushstart&streamid=602&seqbegin=2010”get“http://www.xxx-server.com/msreq?cmd=pushstart&segstrategy=(esi:3)”get“http://www.xxx-server.com/msreq?cmd=pushstart&streamid=601&timebegin=32000&segstrategy=(eti:2000)”上述url中,参数名cmd、streamid、seqbegin、timebegin、priorityrange、segstrategy分别代表命令类型、媒体流标识、起始序号、起始时间、优先级范围、分段策略,一个命令的所有命令参数应该紧跟在其命令类型后面。服务器端可以采用web服务器来接收上述客户端的媒体段请求,并从请求的url中首先提取出命令类型,然后再提取出对应的命令参数,例如当url中包含cmd=pushstart时即表明该媒体段请求携带一个启动推送命令,然后对后续的命令参数进行分类:如果是媒体流标识,则该命令参数为第一类参数;如果为起始序号、起始时间、优先级范围,则为第二类参数。当一个媒体段请求中携带多个命令时,也可以采用httpget方式或httppost方式来发送请求。首先,将每个命令及其对应的命令参数封装成一个字符串,然后再将这些字符串用字符’&’级联起来附加在httpget请求的url部分,或者,将每个字符串单独作为一行封装到httppost请求的正文(requestbody)部分。在步骤s102中,根据启动推送命令来启动一个推送任务,其中,当启动推送命令携带指示待传送的目标媒体流的第一类参数、指示待传送的候选媒体单元特征的第二类参数和分段策略中的至少一个时,根据第一类参数确定待传送的目标媒体流,为推送任务分配一个推送任务标识,生成初始媒体段,根据分段策略持续生成新的媒体段,将推送任务标识和生成的媒体段发送给客户端,所述媒体段封装了目标媒体流中的候选媒体单元。具体而言,每个启动推送命令都是针对当前服务器上的一个媒体流。如果启动推送命令携带第一类参数,如媒体流名称或媒体流标识,可直接利用该第一类参数来确定目标媒体流。如果命令参数不包括任何第一类参数,那么,服务器将指定一个缺省的媒体流作为待传送的目标媒体流。例如,服务器可以根据向客户端推送的历史媒体流,确定与历史媒体流的类型相同的一个媒体流作为待传送的目标媒体流。一个服务器可以同时接收多个客户端的启动推送命令,并开启多个推送任务,为了区分不同的推送任务,服务器给每个推送任务分配一个唯一的推送任务标识,并将该推送任务标识返回给客户端。客户端可在后续的请求中,对特定的推送任务做出调整。每个推送任务都对应着一个媒体段的持续生成和发送过程。服务器首先生成初始媒体段,然后根据分段策略来生成新的媒体段。如果请求中未指定分段策略,则服务器可以为每个媒体流预设一个缺省的分段策略来生成新的媒体段,可选择的分段策略可参考本实施说明的后面部分。上述媒体段的生成过程可以用两种方式生成,一种是为每个推送任务建立一个独立的推送进程/线程,另一种则是为多个推送任务建立一个统一的推送进程/线程,该进程/线程可以采用轮流的方式依次为每个推送任务来生成媒体段。每个生成的媒体段都封装了由第二类参数来指示的候选媒体单元。服务器可以采用自定义的封装协议将一个或多个媒体单元封装成媒体段,例如,一个简单的封装协议如下:媒体段由段头和段净荷组成,段净荷由若干个媒体单元级联而成,段头中则指示每个媒体单元的起始位置和长度,方便客户端的解析。如果媒体单元中未包含其产生时间和/或序号,则还需将媒体单元对应的产生时间和/或序号也应封装在媒体段中,方便接收端的接收和解析。推送任务标识可直接封装到初始媒体段的段头中,这样,不需要单独将推送任务标识返回给客户端,客户端可从接收的初始媒体段中解析出推送任务标识。无论是初始媒体段还是新的媒体段,一旦生成则发送给客户端。当服务器通过一个双向连接(如http连接、tcp连接或quic连接)来接收媒体段请求时,服务器可直接利用该双向网络连接来发送媒体段。当服务器通过一个单向连接(如udp连接)接收媒体段请求时,服务器可通过udp包的接收获得客户端的ip地址及发送端口号,并将此发送端口号作为客户端接收媒体段的缺省的接收端口号,然后将媒体段发送给客户端。当存在多个推送任务时,服务器需要建立一个推送任务信息表,用来维护与推送任务相关的上下文信息,包括以下表项:推送任务标识、客户端标识、目标媒体流、候选媒体单元特征参数、分段策略、当前网络连接标识(如socket)以及推送进程/线程标识等等。当服务器接收到新的客户端请求时,如果客户端请求中携带推送任务标识,可通过查询推送任务信息表获取该推送任务的当前状态信息,并做出进一步的处理。图2中给出了本实施例的一个推送过程的示意图,其中,客户端发起媒体段请求ms_req,其中携带一个启动推送命令(cmd=pushstart),启动推送命令中携带的参数中包含了分段策略(segstrategy=esi:3),服务器接收到请求后,首先生成初始媒体段ms1,其中封装了推送业务标识(ptid),并将ms1发送给客户端,然后根据分段策略,实时生成后续新的媒体段(ms2,ms3,ms4,……),并发送给客户端。采用上述方法,服务器可根据客户端的请求来启动推送过程,并且按照请求中指定的分段策略来生成媒体段。通过将小的媒体单元组合成媒体段,本方法可以减少推送的次数,提高推送的效率。其次,在本方法中,如何分段由客户端来决定,服务器端只需按客户端指定的分段策略来生成媒体段并发送给客户端,而不必处理各种推送过程中遇到的异常情况,这充分简化了服务器端的推送处理过程。上述是对实施例1的详细阐述,下面将对实施例2进行详细说明,以下实施例中,将对服务器如何生成初始媒体段做出说明。进一步地,在本发明的一个实施例中,当启动推送命令不携带任何第二类参数时,初始媒体段封装了缺省指定的媒体单元,缺省指定的媒体单元为媒体流中所有和最新媒体单元的序号间隔小于第一预设值的媒体单元,或者为媒体流中所有和最新媒体单元的产生时间间隔小于第二预设值的媒体单元。为降低传送延时,初始媒体段一般包含最新产生的媒体单元,即将最新产生的媒体单元立刻推送出去,另一方面,初始媒体段的大小与客户端的接收缓存有关,客户端接收到初始媒体段后,将其存入接收缓冲区,因此,初始媒体段的长度不应该超过其接收缓冲区的大小,因此,在推送之前,服务器和客户端应该约定初始媒体段中包含的媒体单元个数(由第一预设值决定)或初始媒体段的时长(由第二预设值决定)。下述实施过程以mpeg2-ts实时流为例,媒体单元为一个ts片段,每个ts片段都关联了一个序号。如图2所示,假定最新产生的ts片段的序号为21,客户端和服务器约定的第一预设值为2,则初始媒体段ms1中封装了2个媒体单元(序号为20和21)。当然,我们也可以采用第二预设值来限制初始媒体段的时长,例如,假定每个ts片段的时长为1秒,第二预设值设为3秒,则意味着初始媒体段的时长不超过3秒,即最多包括3个媒体单元。下面将对实施例3进行详细说明,以下实施例中,将对启动推送命令中的第二类参数如何影响媒体段的生成做出说明。启动推送命令中携带的第二类参数是用来指示待发送的候选媒体单元应满足的特征要求,当存在多个第二类参数时,则待发送候选媒体单元应该满足每个第二类参数的特征要求。在本发明中,给出了三种可选的第二类参数,各参数对应的特征要求如下:1)起始序号:当起始序号有效时,候选媒体单元的序号在起始序号之后;2)起始时间:当起始时间有效时,候选媒体单元的产生时间在起始时间之后;3)优先级范围:候选媒体单元的优先级在该优先级范围内。上述的第二类参数的有效和无效是指参数的值是否在一个指定的范围内。以起始序号为例,该起始序号的值不能超过当前最新媒体单元的序号,另一方面,为保证实时性,起始序号的值不能是早于某个现有媒体单元的序号,在上述范围内的起始序号即为有效。如果某个第二类参数为无效,则等同于不携带这个第二类参数。当所有第二类参数均无效时,待传送的候选媒体单元为缺省指定的媒体单元。在上述第二类参数中,有些参数,例如起始序号和起始时间,只影响初始媒体段的生成,这是因为:只要初始媒体段中的候选媒体单元的序号或产生时间符合要求,之后产生的媒体段封装的是新产生的媒体单元,这些媒体单元的序号和产生时间也必然符合要求。而另一些第二类参数,例如优先级范围,则不仅影响初始媒体段的生成,还影响后续所有媒体段的生成。下述实施过程以带优先级的rtp流为例,媒体单元为一个rtp包,每个rtp包都携带一个包序号,并且根据rtp包携带的净荷内容关联了一个优先级。每个媒体单元的优先级可以根据具体情况来定义,例如,当rtp包为一个多媒体数据流时,可以将rtp包分为三个优先级:优先级3:rtp包中封装的是音频信息;优先级2:rtp包中封装的是关键视频信息;优先级1:rtp包中封装的是非关键视频信息;假定最新产生的rtp包的包序号为1020,从包序号为1000的rtp包开始,每个rtp包关联的优先级如表1所示。表1服务器接收到如下媒体段请求时:1)get“http://www.xxx-server.com/msreq?cmd=pushstart&seqbegin=1008”该媒体段请求只携带了一个第二类参数:起始序号,根据该起始序号的指示,候选媒体单元的序号只能在起始序号之后,因此,初始媒体段中封装的媒体单元包括序号从1009到1020的12个rtp包。起始序号只影响初始媒体段的生成,不影响后续根据缺省的分段策略产生的新的媒体段。2)get“http://www.xxx-server.com/msreq?cmd=pushstart&timebegin=31000”该媒体段请求只携带了一个第二类参数:起始时间,根据该起始时间的指示,候选媒体单元的产生时间只能在起始时间之后,因此,初始媒体段中封装的媒体单元包括序号从1005到1020的16个rtp包。起始时间只影响初始媒体段的生成,不影响后续根据缺省的分段策略产生的新的媒体段。3)get“http://www.xxx-server.com/msreq?cmd=pushstart&seqbegin=1008&priorityrange=3”该媒体段请求只携带了两个第二类参数:起始序号和优先级范围,根据该起始序号的指示,候选媒体单元的序号只能在起始序号之后,根据优先级范围的指示,候选媒体单元的优先级只能是3,候选媒体单元的序号和优先级应该同时满足上述两个第二类参数的指示,因此,初始媒体段中封装的媒体单元包括序号为1012,1016和1020的3个rtp包。起始序号只影响初始媒体段的生成,不影响后续根据缺省的分段策略产生的新的媒体段,但是,优先级范围还会影响后续的媒体段的生成,即根据缺省分段策略生成的新的媒体段中只能封装优先级为3的rtp包。在专利实施时,还可以定义其他的第二类参数,如初始媒体段的时长、初始媒体段的最大序偏、初始媒体段的最大时偏等等。从上述实施例可以看出,客户端通过媒体段请求中携带的第二类参数可以控制服务器推送特定特征的媒体单元,这使得服务器端的推送过程可以更好的适应客户端的需求。实施例4,以下实施例中,将对服务器如何根据分段策略来生成新的媒体段进行说明。进一步的,在本发明的一个实施例中,启动推送命令中携带的分段策略为等序号间隔推送(esi,equalsequenceinterval),该分段策略携带的参数包括:指定序号间隔,按照该分段策略生成新的媒体段的方法,如图3所示,包括以下步骤:s801、当初始媒体段生成时,确定推送起始序号;s802、当新的媒体单元产生时,判断新媒体单元的序号与推送起始序号的间隔是否大于或等于指定序号间隔,如果是,则将所有序号在推送起始序号之后的候选媒体单元封装成新的媒体段,更新推送起始序号;s803、重复执行s802。具体而言,当生成初始媒体段时,服务器可以将当时最新产生的媒体单元的序号设置为起始推送序号;每产生一个新的媒体单元,则对其序号进行检查,一旦该序号与起始推送序号的间隔等于指定序号间隔,则生成新的媒体段,然后将该新媒体单元的序号设置为新的起始推送序号。附图2中给出了一个分段策略为等序号间隔的推送过程的示意图,其中,启动推送命令中携带了一个参数:segstrategy=esi:3,该参数指示分段策略为等序号间隔推送(esi),指定序号间隔为3,服务器生成初始媒体段ms1时,推送起始序号为21,则当新产生的媒体单元的序号为24、27、30时,分别生成新的媒体段ms2、ms3、ms4。从以上实施例可以看出,客户端可以通过分段策略来控制每个推送的媒体段中的媒体单元个数,通过增加或减少媒体段中媒体单元的个数来适应网络的动态变化。实施例5,以下实施例中,将进一步对服务器如何根据分段策略来生成新的媒体段进行说明。进一步的,在本发明的一个实施例中,启动推送命令中携带的分段策略为等时间间隔推送(eti,equaltimeinterval),该分段策略携带的参数包括:指定时间间隔,则按照该分段策略生成新的媒体段,包括:从生成初始媒体段的时间开始,每经过一个时长为指定时间间隔的时间段,则将此时间段内产生的候选媒体单元封装成新的媒体段。附图4给出了一个分段策略为等时间间隔的推送过程的示意图,其中,启动推送命令中携带了一个参数:segstrategy=eti:2000,该参数指示分段策略为等时间间隔推送(eti),指定时间间隔为2000毫秒,服务器生成初始媒体段ms1时的时间为t0,则服务器启动一个定时器,当时间到达t0+2000时,将时间段(t0,t0+2000]内产生的所有候选媒体单元封装成一个新的媒体段ms2,当时间到达t0+4000时,将时间段(t0+2000,t0+4000]内产生的所有候选媒体单元封装成一个新的媒体段ms3,以此类推。从以上实施例可以看出,客户端可以通过分段策略来控制推送的每个媒体段的时长,通过增加或减少媒体段时长来适应网络的动态变化。实施例6,以下实施例中,将进一步对服务器如何根据分段策略来生成新的媒体段进行说明。进一步的,在本发明的一个实施例中,若干个序号连续的媒体单元组成了一个单元集,启动推送命令中携带的分段策略为单元集推送(mus,mediaunitset),该分段策略携带的参数包括:指定单元集个数,则按照该分段策略生成新的媒体段,包括:当新的媒体单元产生时,判断新的媒体单元是否为一个单元集的最后一个媒体单元,如果是,再判断当前待推送的单元集的个数是否等于指定单元集个数,如果是,则将当前待推送的单元集中的候选媒体单元封装成新的媒体段。具体而言,在许多媒体流中,当若干个序号连续的媒体单元具有共同的特征时,这些媒体单元之间可能存在依赖关系,如果只传送其中的一个媒体单元是没有意义的,最好能将其作为一个整体来传送。例如,当媒体流为一个视频rtp包流时,一个图像帧可能封装成多个rtp包,这些rtp包的时间戳都是相同的,但是其序号是不同的,此时,这些时间戳相同的rtp包即构成了一个单元集。另一个例子,当选择视频帧作为媒体单元时,连续的若干个视频帧构成了一个图像集(groupofpictures,gop),每个图像集构成了一个可独立解码的集合,那么也可将该gop看成是一个单元集。附图5给出了一个分段策略为单元集推送的推送过程的示意图,其中,启动推送命令中携带了一个参数:segstrategy=mus:2,该参数指示分段策略为单元集推送(mus),指定单元集个数为2。在本例中,将产生时间相同的所有媒体单元看作一个单元集,例如,时间t1产生的两个媒体单元u22和u23构成了一个单元集,其中,u23为单元集的最后一个单元;时间t2时刻产生的一个媒体单元u24也构成了一个单元集,其中,u24是单元集的最后一个单元。当u24产生时,待发送的媒体单元集已经达到了指定单元集个数的要求,此时,将此两个单元集的3个媒体单元封装成一个新的媒体段发送给客户端。从以上实施例可以看出,客户端可以通过分段策略,使得服务器按照单元集来进行推送,这样,有依赖关系的媒体单元可以作为一个整体来发送,提高传送的效率。上述实施例4、5、6中分别给出了三种分段策略及其具体实施方法,在实际应用中,服务器可以根据媒体流的特点选择其中一种作为缺省的分段策略,当客户端的媒体段请求中不指明分段策略时,服务器将按照缺省指定的分段策略进行分段,当然,还可以根据实施需要定义新的分段策略。需要说明的是,媒体段请求中携带的启动推送命令,也可以不携带命令参数,此时,服务器可以根据预先设置的针对第一类参数的缺省指定确定目标媒体流,并根据预先设置的针对第二类参数的缺省指定生成初始媒体段,以及根据预设缺省指定的分段策略,生成新的媒体段。也就是说,当启动推送命令不携带命令参数时,目标媒体流为缺省指定的,初始媒体段是通过缺省指定的媒体单元封装得到的,分段策略也是缺省指定的。实施例7,以下实施例中,将对服务器如何终止推送任务来进行说明。进一步的,在本发明的一个实施例中,为每个启动的推送任务设置一个截止时间,当到达截止时间时,终止推送任务。所述终止推送任务包括:停止生成新的媒体段。具体而言,为每个启动的推送任务分配完推送任务标识后,就可以为该推送任务设置一个截止时间,所述截止时间是当前系统时间再加一个预设的推送持续时间。所述预设的推送持续时间可以是一个固定的时长(比如60s或120s),在该推送持续时间内,客户端不需要再重复提交请求,服务器主动将媒体段推送给客户端,当时间到达截止时间时,终止该推送任务。进一步的,在本发明的一个实施例中,媒体段请求携带的命令还包括一种:继续推送命令,继续推送命令携带至少一个命令参数:推送任务标识,本发明的方法还包括:根据继续推送命令,为与继续推送命令携带的推送任务标识对应的推送任务重新设置一个推送任务的截止时间,推送任务的新的截止时间为当前系统时间加上一个预设的推送持续时间。具体而言,为了防止服务器在截止时间到达时终止推送任务,客户端需要主动向服务器发送继续推送命令,来维持该推送任务。在具体实施时,客户端需要知道何时向服务器发送继续推送命令,这可以通过以下方法来实现:1)服务器接收到启动推送命令后,将预设的推送持续时间封装到媒体段中,发送给客户端,客户端自行推测出推送任务还将持续多长时间,并在截止时间之前发送继续推送命令;2)服务器将剩余的推送时长封装到每个媒体段中,发送给客户端,客户端根据该剩余的推送时长来决定,是否要向服务器发送继续推送命令。一旦服务器收到继续推送命令,则更新其截止时间。图6给出了一个服务器端主动终止推送任务的过程示意图。从以上实施例可知,即使客户端发生任何异常,服务器也能自行结束推送过程,释放掉该推送任务所占有的服务器资源和传送带宽。客户端可以通过定期提交继续推送命令,向服务器证明自己仍然处在正常接收状态,以此来保持服务器端的推送任务。实施例8,以下实施例中,将进一步对服务器如何终止推送任务来进行说明。进一步的,在本发明的一个实施例中,媒体段请求携带的命令还包括一种:终止推送命令,终止推送命令携带至少一个命令参数:推送任务标识,本发明的方法还包括:根据终止推送命令来终止与终止推送命令携带的推送任务标识对应的推送任务,其中,终止与终止推送命令携带的推送任务标识对应的推送任务包括:停止生成新的媒体段。具体而言,该实施例给出了客户端主动终止推送任务的一种方法。客户端可以在需要的时候,向服务器发送终止推送命令来终止传送任务。这样,可以保证服务器快速终止不需要的推送任务。进一步的,客户端主动终止推送任务还可以和实施例7中的服务器端主动终止推送任务联合起来使用,充分保证服务器可以快速可靠地终止不需要的推送任务,图7给出了这两种方法联合使用时的推送过程示意图。实施例9,以下实施例中,将对服务器如何根据客户端的命令来调整推送任务以实现自适应推送进行说明。进一步的,在本发明的一个实施例中,媒体段请求携带的命令还包括一种:重启推送命令,重启推送命令携带推送任务标识,重启推送命令还可不携带或携带其他命令参数,包括如下参数中的至少一个:指示待传送的目标媒体流的第一类参数、指示待传送的候选媒体单元特征的第二类参数和分段策略,本发明的方法还包括:根据重启推送命令来重新启动与重启推送命令携带的推送任务标识对应的推送任务,其中,首先停止推送任务当前的媒体段生成和发送过程,再根据重启推送命令携带的第一类参数确定待传送的目标媒体流,生成初始媒体段,然后根据重启推送命令携带的段策略持续生成新的媒体段,将生成的媒体段发送给客户端,所述媒体段封装了目标媒体流中根据重启推送命令携带的第二类参数确定的候选媒体单元。具体而言,重启推送命令实际上包括了两个处理步骤:步骤1)终止与重启推送命令中携带的推送任务标识对应的推送任务当前的推送过程(包括媒体段生成和发送);步骤2)按照重启推送命令携带的命令参数重新启动推送任务。后一步骤与启动推送命令的处理过程相似,区别在于不必重新为该推送任务分配任务标识。客户端在接收推送的媒体段进行时,可以对接收过程进行监控,判断当前网络的传输条件,比如传输带宽和传输延时,然后,通过发送重启推送命令,对当前的推送过程进行调整,这包括:1)调整候选媒体单元的特征要求客户端可以通过媒体段的接收,判断当前网络的传输带宽,如果传输带宽小于媒体流的码率,则可以调整候选媒体单元的优先级范围,使得重启的推送任务只发送高优先级的媒体单元。重启推送命令可携带明确的第二类参数对候选媒体单元的特征要求进行修改。当重启推送命令只携带推送任务标识,而不携带任何其他命令参数时,服务器端将认为推送任务的目标媒体流和分段策略仍保持不变,而原有的第二类参数失效,此时,服务器将缺省指定的候选单元封装成初始媒体段,并根据原有分段策略生成新的媒体段。2)调整分段策略客户端还可以根据自身的延时需求及可靠性要求来调整分段策略,例如,当客户端需要更小的传送延时时,可以缩短媒体段产生的序号间隔或时间间隔;当客户端需要更高的可靠性时,可以增加媒体段产生的序号间隔或时间间隔。图8给出了一个服务器根据重启推送命令来调整分段策略的示意图。在一个实施例中,客户端向服务器发送启动推送命令“cmd=pushstart”,启动推送命令中携带了参数“segstrategy=esi:3”,即分段策略为等序号间隔,指定序号间隔为3,服务器首先返回初始媒体段ms1,其中指明推送任务标识ptid为101,然后根据分段策略开启新的媒体段生成过程。当客户端接收完媒体段ms3时,发现网络传送带宽足够,此时为了减少传送延时,客户端向服务器发送重启推送命令“cmd=pushrestart”,携带了该推送任务标识“ptid=101”,起始序号“seqbegin=27”和分段策略“segstrategy=esi:2”,服务器收到该重启推送命令后,首先终止该推送任务对应的现有媒体段生成过程和发送过程,然后,生成初始媒体段ms4,再根据新的分段策略开启新的媒体段生成过程,生成后续新的媒体段。3)切换目标媒体流客户端可以根据媒体段的接收情况,判断当前网络的传输带宽,如果当前网络传输带宽无法支持当前的目标媒体流的码率,那么客户端可以请求服务器推送一个属于该内容的低码率媒体流。显然,服务器需要告知客户端当前哪些媒体流属于同一个内容。在具体实施时,服务器可采用多种方法来将此信息通告给客户端。进一步的,在本发明的一个实施例中,所述媒体段还封装了媒体流索引信息,媒体流索引信息包含属于同一个内容的多个媒体流描述信息,媒体流描述信息包括媒体流标识和媒体流比特率。举例而言,当服务器中存在属于同一个内容的多个实时媒体流时,可以通过不同的媒体流标识来区分这些实时媒体流,并建立起该内容的媒体流索引信息;这个媒体流索引信息实际上包括了媒体流标识和媒体流比特率的映射关系。如表2所示,显示了同一个内容(比如一个现场演唱会直播)对应的媒体流索引信息:该内容包括了三个实时媒体流,其中媒体流1(标识为1000,码率为8mbps)为高清码流,媒体流2(标识为1001,码率为2mbps)为标清码流,媒体流3(标识为1002,码率为500kbps)为移动标清流。表2媒体流标识媒体流码率6018000kbps6022000kbps603500kbps当客户端请求推送媒体流标识为601的实时流时,服务器通过查询媒体流索引表,发现存在来自同一个内容源的媒体流2和媒体流3,此时,服务器可将上述媒体流索引信息作为一个控制消息,和其他媒体单元一起封装到媒体段中。客户端可根据媒体流索引信息,根据网络传输情况选择请求推送的目标媒体流。一般来说,由于媒体流索引信息在一段较长时间内保持不变,所以没有必要在每个媒体段中都封装该媒体流索引信息,可以将媒体流索引信息封装到间隔选定的媒体段中,或者封装到发送给客户端的前几个媒体段中。图9给出了一个服务器根据重启推送命令来切换目标媒体流的示意图。在一个实施例中,客户端向服务器发送启动推送命令“cmd=pushstart”,命令中携带了媒体流标识“sid=601”和分段策略参数“segstrategy=esi:3”,服务器开启对8mbps媒体流streama的推送:首先返回初始媒体段ms1,其中封装了推送任务标识ptid为101和如表2所示的媒体流索引信息,然后根据分段策略开启媒体段生成过程,依次生成媒体段ms2,ms3。当客户端接收到ms3时,发现实际传送带宽只有5mbps,无法支持当前的媒体流码率8mbps,因此,客户端向服务器发送重启推送命令“cmd=pushrestart”,携带了该推送任务标识“ptid=101”,媒体流标识“sid=602”和分段策略“segstrategy=esi:3”,服务器收到该重启推送命令后,首先终止该推送任务对应的现有8mpbs媒体流streama的媒体段生成过程和发送过程,然后,开始推送2mbps的媒体流streamb,生成初始媒体段ms4,再根据新的分段策略开启新的媒体段生成过程,生成后续新的媒体段。为简化起见,图9中虽然streama和streamb的码率不同,但同一时间产生的媒体段的序号保持一致。当然,streama和streamb的序号也可以不一致,客户端可通过在启动推送命令中携带第二类参数(如起始时间)来保证在时间切换的准确性,从而保证不同码率的码流的平滑切换。从上述实施例可以看出,服务器端可根据客户端的请求来实时调整推送过程,从而实现自适应推送。由于所有的自适应推送控制由客户端完成,而服务器端不需要复杂的处理过程,因此,本方法可以支持服务器端大规模的自适应推送。实施例10,以下实施例中,将对服务器如何同时支持推送和拉取两种传送方式进行说明。进一步的,在本发明的一个实施例中,媒体段请求携带的命令还包括一种:媒体段拉取命令,媒体段拉取命令可不携带或携带至少一个命令参数,命令参数包括:指示待传送的目标媒体流的第一类参数和指示待传送的候选媒体单元特征的第二类参数,方法还包括:根据媒体段拉取命令生成媒体段并将生成的媒体段发送给客户端,其中,根据第一类参数确定待传送的目标媒体流,根据第二类参数确定待传送的候选媒体单元,并将待传送的候选媒体单元封装成媒体段。具体而言,服务器在收到媒体段拉取命令时,将仅生成一个媒体段并发送给客户端。媒体段拉取命令携带的第一类参数和第二类参数与启动推送命令携带的参数一致,且第二类参数也可以包括:起始时间、起始序号、优先级范围等等。当采用http-get方式来接收媒体段请求时,携带了媒体段拉取命令的媒体段请求的示例如下:get“http://www.xxx-server.com/msreq?cmd=mspull&streamid=601”get“http://www.xxx-server.com/msreq?cmd=mspull&seqbegin=1010”get“http://www.xxx-server.com/msreq?cmd=mspull&timebegin=32000”其中,“cmd=mspull”用来指示命令类型为媒体段拉取命令,streamid、seqbegin、timebegin分别代表命令参数:媒体流标识、起始序号、起始时间。当服务器收到该媒体段请求时,直接生成媒体段,其生成媒体段的处理过程与前述接收到启动推送命令后生成初始媒体段的处理过程基本一致,可参考前述初始媒体段的生成过程,此处不再赘述。在该实施例中,服务器通过同时支持启动推送命令和媒体段拉取命令,可同时支持媒体流的拉取和按需推送两种传送方式,更好的满足客户端的传送需求。本发明实施例的媒体流的实时推送方法,可以实现媒体流的按需分段推送,这种分段推送可以将小的媒体单元聚合成媒体段,减少推送的次数,提高媒体流的传送效率;其次,简化了服务器端的推送过程,服务器端只需按照客户端指定的策略来生成媒体段并发送给客户端,不再需要复杂的自适应算法来应对传输过程中的各种问题,降低了服务器端需要维护的状态和处理开销,有利于支持大规模的媒体流推送;最后,每个客户端可以根据媒体流的传输情况来随时调整服务器端的推送过程,使得推送过程更快的适应网络条件和客户端需求的变化。其次参照附图描述根据本发明实施例提出的媒体流的实时推送服务器。图10是本发明一个实施例的媒体流的实时推送服务器的结构示意图,其中,媒体流为实时产生的媒体单元的序列,其中,每个媒体单元关联有一个产生时间和/或一个指示产生顺序的序号。如图10所示,该媒体流的实时推送服务器10包括:客户端接口组件100和媒体段生成组件200。其中,客户端接口组件100用于接收客户端发送的媒体段请求并返回相应的媒体段,其中,媒体段请求携带至少一个命令,命令包括:启动推送命令。其中,启动推送命令可以不携带或者携带至少一个命令参数,命令参数包括:指示待传送的目标媒体流的第一类参数、指示待传送的候选媒体单元特征的第二类参数和分段策略。媒体段生成组件200用于根据媒体段请求中的启动推送命令来启动一个推送任务,其中,当启动推送命令携带指示待传送的目标媒体流的第一类参数、指示待传送的候选媒体单元特征的第二类参数和分段策略中的至少一个时,根据第一类参数确定待传送的目标媒体流,为推送任务分配一个推送任务标识,根据第二类参数生成初始媒体段,然后根据分段策略持续生成新的媒体段,将推送任务标识和生成的媒体段通过客户端接口组件100发送至所述客户端,所述媒体段封装了目标媒体流中的候选媒体单元。当启动推送命令不携带任何命令参数时,目标媒体流、初始媒体段和新的媒体段可以通过缺省指定确定。本发明实施例的服务器10根据客户端的请求来实时生成媒体段,并返回给客户端,以实现媒体流的按需分段推送,简化了服务器端的推送过程,提高了媒体流的传送效率和对大规模自适应推送的支持。具体而言,客户端接口组件100用于接收客户端的媒体段请求,以及将生成的媒体段发送给客户端;媒体段请求中携带的启动推送命令可以携带0个、1个或多个命令参数;命令参数包括以下类别:第一类参数、第二类参数和分段策略;第一类参数用于指示待传送的目标媒体流;第二类参数用于指示待传送的候选媒体单元的特征。客户端接口组件可以采用任何指定的协议来接收媒体段请求,例如,当采用http协议时,客户端接口组件可以是一个web服务器,可以接收任何采用http协议的媒体段请求并且通过http响应来返回媒体段;当采用tcp协议时,客户端接口组件是一个tcp服务器,并提供一个固定的服务端口用于接收客户端的请求。媒体段生成组件200用于根据媒体段请求中的启动推送命令来启动一个推送任务,此推送任务将负责生成媒体段。媒体段生成组件200从客户端接口组件100获取启动推送命令及其命令参数,根据第一类参数来确定待传送的目标媒体流,为该推送任务分配一个唯一的推送任务标识,生成初始媒体段,将推送任务标识和初始媒体段交由客户端接口组件来发送,然后根据分段策略持续生成新的媒体段,将新的媒体段也交由客户端接口组件来发送。在本发明的一种可能的实现方式中,当启动推送命令不携带第一类参数时,目标媒体流为缺省指定;当启动推送命令不携带第二类参数时,初始媒体段封装了缺省指定的媒体单元;当启动推送命令不携带分段策略时,推送任务的分段策略为缺省指定。在本发明的一种可能的实现方式中,缺省指定的媒体单元为目标媒体流中所有和最新媒体单元的序号间隔小于第一预设值的媒体单元,或者为目标媒体流中所有和最新媒体单元的产生时间间隔小于第二预设值的媒体单元。在本发明的一种可能的实现方式中,当启动推送命令携带的第二类参数包括起始序号且起始序号有效时,候选媒体单元的序号在起始序号之后。在本发明的一种可能的实现方式中,当启动推送命令携带的第二类参数包括起始时间且起始时间有效时,候选媒体单元的产生时间在起始时间之后。在本发明的一种可能的实现方式中,每个媒体单元关联一个优先级,当所述启动推送命令携带的第二类参数包括单元优先级范围时,所述候选媒体单元的优先级在所述单元优先级范围内。在本发明的一种可能的实现方式中,分段策略为等序号间隔推送,分段策略携带的参数包括:指定序号间隔,媒体段生成组件,还用于执行以下步骤:s801、当初始媒体段生成时,确定推送起始序号;s802、当新的媒体单元产生时,判断新的媒体单元的序号与推送起始序号的间隔是否等于指定序号间隔,如果是,则将所有序号在推送起始序号之后的候选媒体单元封装成新的媒体段,更新推送起始序号;s803、重复执行s802。在本发明的一种可能的实现方式中,分段策略为等时间间隔推送,分段策略携带的参数包括:指定时间间隔,媒体段生成组件,还用于:从生成初始媒体段的时间开始,每经过一个时长为所述指定时间间隔的时间段,则将所述时间段内产生的候选媒体单元封装成新的媒体段。在本发明的一种可能的实现方式中,若干个序号连续的媒体单元组成了一个单元集,分段策略为单元集推送,分段策略携带的参数包括:指定单元集个数,媒体段生成组件,还用于:当新的媒体单元产生时,判断新的媒体单元是否为一个单元集的最后一个媒体单元,如果是,再判断当前待推送的单元集的个数是否等于指定单元集个数,如果是,则将当前待推送的单元集中的候选媒体单元封装成新的媒体段。在本发明的一种可能的实现方式中,媒体段生成组件,还用于:为每个启动的所述推送任务设置一个截止时间,当到达所述截止时间时,终止所述推送任务,其中,所述终止所述推送任务包括:停止生成新的媒体段。在本发明的一种可能的实现方式中,命令还包括:继续推送命令,继续推送命令携带至少一个命令参数:推送任务标识,媒体段生成组件,还用于:根据继续推送命令,为与继续推送命令携带的推送任务标识对应的推送任务重新设置一个截止时间,推送任务的新截止时间为当前系统时间加上一个预设的推送持续时间。在本发明的一种可能的实现方式中,命令还包括:终止推送命令,终止推送命令携带至少一个命令参数:推送任务标识,媒体段生成组件,还用于:根据终止推送命令来终止与终止推送命令携带的推送任务标识对应的推送任务,其中,停止生成新的媒体段。在本发明的一种可能的实现方式中,命令还包括:重启推送命令,重启推送命令携带推送任务标识,重启推送命令不携带或携带如下至少一个命令参数:指示待传送的目标媒体流的第一类参数、指示待传送的候选媒体单元特征的第二类参数和分段策略,媒体段生成组件,还用于:根据重启推送命令来重新启动与重启推送命令携带的推送任务标识对应的推送任务,其中,首先停止推送任务当前的媒体段生成和发送过程,再根据重启推送命令携带的第一类参数确定待传送的目标媒体流,生成初始媒体段,根据重启推送命令携带的分段策略持续生成新的媒体段,将生成的媒体段发送给客户端,媒体段封装了目标媒体流中根据重启推送命令携带的第二类参数确定的候选媒体单元。在本发明的一种可能的实现方式中,媒体段还封装了媒体流索引信息,媒体流索引信息包含属于同一个内容的多个媒体流描述信息,媒体流描述信息包括媒体流标识和媒体流比特率。在本发明的一种可能的实现方式中,命令还包括:媒体段拉取命令,媒体段拉取命令不携带或携带至少一个命令参数,命令参数包括:指示待传送的目标媒体流的第一类参数和指示待传送的候选媒体单元特征的第二类参数,媒体段生成组件,还用于:根据媒体段拉取命令生成媒体段并将生成的媒体段发送给客户端,其中,根据第一类参数确定待传送的目标媒体流,根据第二类参数确定待传送的候选媒体单元,并将待传送的候选媒体单元封装成媒体段。需要说明的是,前述对媒体流的实时推送方法实施例的解释说明也适用于该实施例的媒体流的实时推送服务器,其实现原理类似,此处不再赘述。本发明实施例的媒体流的实时推送服务器,可以实现媒体流的按需分段推送,这种分段推送可以将小的媒体单元聚合成媒体段,减少推送的次数,提高媒体流的传送效率;其次,简化了服务器端的推送过程,服务器端只需按照客户端指定的策略来生成媒体段并发送给客户端,不再需要复杂的自适应算法来应对传输过程中的各种问题,降低了服务器端需要维护的状态和处理开销,有利于支持大规模的媒体流推送;最后,每个客户端可以根据媒体流的传输情况来随时调整服务器端的推送过程,使得推送过程更快的适应网络条件和客户端需求的变化。为了实现上述实施例,本发明实施例还提出了一种计算机设备,包括存储器、处理器及存储在存储器上并可在处理器上运行的计算机程序,处理器执行程序时,实现如上述实施例描述的媒体流的实时推送方法。为了实现上述实施例,本发明实施例还提出了一种非临时性计算机可读存储介质,该程序被处理器执行时实现如上述实施例描述的媒体流的实时推送方法。为了实现上述实施例,本发明实施例还提出了一种计算机程序产品,当计算机程序产品中的指令由处理器执行时,执行如上述实施例描述的媒体流的实时推送方法。此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性或者隐含指明所指示的技术特征的数量。由此,限定有“第一”、“第二”的特征可以明示或者隐含地包括至少一个该特征。在本发明的描述中,“多个”的含义是至少两个,例如两个,三个等,除非另有明确具体的限定。在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不必须针对的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任一个或多个实施例或示例中以合适的方式结合。此外,在不相互矛盾的情况下,本领域的技术人员可以将本说明书中描述的不同实施例或示例以及不同实施例或示例的特征进行结合和组合。尽管上面已经示出和描述了本发明的实施例,可以理解的是,上述实施例是示例性的,不能理解为对本发明的限制,本领域的普通技术人员在本发明的范围内可以对上述实施例进行变化、修改、替换和变型。当前第1页12
当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1