用于传输直播媒体内容的装置和方法
技术领域
本发明总体上涉及媒体内容传输。更具体地,本发明涉及通过常规HTTP协议的直播媒体内容传输。
背景技术
在广域网和局域网上的视频内容传送在使用上不断扩大。媒体的实时传送和回放,通常称为流传输,向用于发送及接收内容的网络和设备带来了沉重负担。
一种用于管理数据传送的公知方法是使用传送组块作为信号编码的一部分。组块传输编码是超文本传输协议(HTTP)中的数据传输机制,允许HTTP数据在服务(例如,web服务器)和在终端客户设备中运行的客户应用程序(例如,web浏览器)之间可靠地传输。组块编码修改消息的主体,以便将它作为一系列组块而传输,每个组块都有自己的大小指示符,后面跟着包含实体-首部字段的可选尾部。该机制允许在传输之前不知道整个消息主体的大小的情况下进行传送。通过将消息的数据有效载荷分成小部分(组块)并和将每个组块与其大小一起传输,实现上述机制。通过长度为零的最终组块来终止数据传输。
组块传输编码也可应用于视频内容传送。大多数使用HTTP1.1组块方法的服务器简单地发送出流的前沿,流通常包含在存储器内的缓冲器中。一些实施方式可能也使用文件,而不是存储器内的缓冲器,并随着文件由于附加直播内容的获取而增长时,简单地从文件的结束处循环读取。这些方法的优点是它们的实施非常简单直接。它们的缩放性很好并且鲁棒。
然而,使用组块传输编码将视频内容分段可能导致额外的操作低效率,尤其在接收设备中。例如,在使用以上技术的媒体流中搜寻比简单地流传播该流的前沿要复杂。此外,除非服务器使用允许媒体文件缓冲器的起点的实时切断的特殊文件系统,否则当持续地提供直播内容时文件将无限地继续增长并且不能在大小上减小。因此,需要一种用于通过HTTP协议高效传送直播流的改进机制。
Apple提出了称为HTTP直播流传输的系统,所述系统以片段形式流传输音频和视频。服务器将媒体流分成片段,并单独地发送每个片段。这比从前沿开始的流传输技术上有优势。然而,Apple的技术需要客户保持片段的播放列表并且将它们作为连续流呈现。这样的要求令Apple的直播流传输客户成为与现有常规HTTP客户不兼容的特殊客户。
本发明解决通过常规HTTP协议从媒体服务器向用户发送媒体直播流的问题。
发明内容
本发明针对用于向HTTP客户发送直播流的方法和装置。
根据本发明的一个方面,提供了一种用于向HTTP客户发送直播流的装置。所述装置包括分段器和控制器。分段器将直播流的输入内容分成片段文件。当片段文件中的至少一个可用时,控制器向HTTP客户发送所述片段文件。
根据本发明的另一方面,提供了一种用于向HTTP客户发送直播流的方法。所述方法包括步骤:将直播流的输入内容分成片段文件;当所述片段文件中的至少一个可用时,向HTTP客户发送所述片段文件。
附图说明
结合以下示例性附图,可以更好地理解本原理,附图中:
图1示出了根据本发明用于发送直播流的媒体流传输服务器的框图。
图2示出了根据本发明用于发送直播流的处理的流程图。
图3示出了根据本发明描述用于发送直播流的处理的优选实施的示例。
图4示出了片段文件到虚拟文件的映射。
图5示出了描述接收设备的实施例的框图。
图6示出了其中可使用本发明构思的触摸板显示器或远程平板。
具体实施方式
图1示出了根据本发明用于发送直播流的媒体流传输服务器100的框图。媒体流传输服务器包括分段器110,所述分段器将输入的直播流(例如,MPEG传输流)的内容分为片段文件。可以通过使用现有的分段器插件或本领域技术人员已知的其它方法来实施所述分段。
媒体流服务器还可以包括控制器130。控制器接收来自常规HTTP客户的针对直播流的请求,处理该请求并向客户发送所请求的直播流。由于直播流已被分段成片段文件,所以当直播流的一个或多个片段文件可用时,即,已媒体流传输服务器接收并处理时,控制器发送所述流。控制器的一种示例性实施是通过HTTP宿,其被本领域技术人员称为GStreamer组件,GStreamer组件基本上是向HTTP客户发送媒体片段的HTTP服务器。
在本发明的一个实施例中,片段文件映射到如图4所示的虚拟文件中,以便对用户而言,直播流看起来像一个连续文件。在图4中,片段Spts_rec001、Spts_rec002、Spts_rec003等每一个是片段文件,且具有大约10秒的长度。可以通过在虚拟文件中记录每个片段文件的起点的偏移量,来执行所述映射。例如,对于Spts_rec002,在虚拟文件中它的偏移量是934361字节,这表明在虚拟文件中,片段文件Spts_rec002刚好在片段文件Spts_rec001之后。利用这样的虚拟文件,对客户而言分段是透明的。客户接收直播流或者对直播流执行其它操作(例如搜寻),就如同所述流是单个连续文件一样。在一种实施中,通过数据结构,例如,链表,来实现所述虚拟映射,其中每个元素具有如下优选的结构
通过使用该结构,可以建立片段列表来实现映射操作。在本发明的一个实施例中,由控制器130保持所述片段列表。
在一个实施例中,由事件监视器140通知控制器130片段文件的可用性。事件监视器140监视片段文件。如果分段器110已产生了一个或多个片段文件,事件监视器140向控制器130发送通知。接着控制器130更新片段列表,并获取所产生的文件,以便响应于客户请求向客户发送文件。在非限制性示例中,片段文件在由分段器110产生之后被存储在存储器设备120上。事件监视器140针对关于片段文件的任何变化来监视存储设备120。在一种实施中,使用异步文件系统事件系统作为事件监视器,例如inotify,inotify是Linux内核子系统,用于扩展文件系统以通知文件系统的改变,并向应用报告这些改变。
本实施例的优点是能够从存储介质中移除/删除来自媒体流的较旧的片段文件,防止存储介质随着时间被填满。任何类型的文件系统都可以和该服务器一同使用,例如,支持2GB文件大小限制的文件系统。因此,如图1所示的媒体流传输服务器100还可以包括片段移除器(未示出),以从存储介质移除/删除片段文件。用于移除片段的算法工作如下。计算在当前片段列表中包括最新片段(长度为Lsegment_most_recent)的内容的总长度Lsegment_list。由用户设置片段列表内容的所需长度Ldesired。如果片段列表的总长度减去最新片段长度超过了所需长度的特定比例,则移除片段列表中最旧的片段,一次一个。在一个实施例中,如果3*(Lsegment_list-Lsegment_most_recent)>Ldesired,则移除最旧的片段。片段列表的所需长度是能够由用户规定的参数。Ldesired的示例值可以是240秒的内容。Ldesired的另一示例值可以是130MB。
图2根据本发明的一个实施例,示出了直播流发送处理的流程图。在步骤210中,从用户接收针对直播媒体流的请求。接着在步骤220中,将直播媒体流分段。同时,设置针对分段的事件监视,以监视分段文件的产生。当分段文件上有任何修改时,例如长度改变或文件名称改变时,在步骤230中,更新/保持片段列表,片段列表记录了片段文件的整个集合且将所述片段文件映射到一个虚拟连续文件中。决策步骤250确定片段列表是否为空。如果是,该处理返回步骤230,等待来自片段文件的更新。如果在片段列表中具有至少一个条目,该处理移至步骤260,发送片段列表中的下一片段文件。HTTP组块传输编码可以用于发送一个片段文件。接着,在步骤270中,将指向片段列表的指针移至下一片段文件。该处理返回步骤250,确定是否有更多的片段文件可用于发送。为了节省存储介质中的空间,在步骤240中,如本申请中其它地方所述的,可以移除较旧的片段文件,并且在步骤230相应地更新片段列表。
以下总结用于操作媒体流传输服务器的优选细节处理,所述媒体流传输服务器包括根据本发明的直播媒体发送系统。所述处理允许常规HTTP1.1客户支持播放来自网络的直播媒体流。所述处理包括如下能力:对直播媒体流的分段;以及提供片段文件,如同它们确实是数据的一个连续缓冲一样,随后是通过处理中的删除算法对被标记以删除的较旧片段文件进行删除。可以通过如图1所示的媒体流传输服务器或实现相同功能的其他系统设置来执行该处理。所述处理进一步由以下示出的步骤定义:
1.客户连接到指向直播流的已知URL,这触发分段器110(位于媒体流传输服务器100中)开始将直播媒体流分为特定时长的片段文件。该片段文件大小或时长可以根据在传输延时和片段管理开销之间所需的权衡而改变,例如,可以是10秒。
2.使用异步文件系统事件系统或事件监视器,例如,inotify,来设置对片段文件将要写入位置处的目录的事件监视,监视何时修改了每个片段文件。
3.事件系统或者事件监视器将在片段文件被修改时发信号通知。注意,分段器通过对写入针对片段文件的多个子片段直到达到为该片段文件所配置的长度或者时间,来产生片段文件。多个子片段的集合形成片段文件。因此,可以通过创建新的片段文件或者对在一个片段文件中添加/更新一个或多个子片段,来引发对片段文件的修改。此时,记录片段文件的全文件路径和名称,连同片段文件的起点及长度。如果这是来自流的第一片段文件,则起点将是零,且长度将是片段文件的当前大小。对于相同片段文件中的每个相继的修改事件,起点偏移量是1+先前片段文件起点+先前片段文件长度。该片段文件添加到片段列表的末端。如果片段文件名改变,这意味着正在创建新的片段文件,则此时应该将已添加到片段列表的先前条目标示为整个片段列表的最末片段文件。在分段器的示例性实施中,针对每x kbps(即,一个子片段)来更新片段长度,直到到达片段文件的全长度,在此时开始新的片段文件。应注意,较小的x,即,子片段越小,消耗越多开销,但是提供对片段文件的更及时的更新。在极端情况下,x等于片段文件的全长度,即,片段文件只包括一个子片段。
4.下一步骤是等待,直到片段列表具有至少一个条目。在一个实施中,创建媒体流传输服务器中的另一线程,以等待从分段器产生一个片段文件。一旦该线程察觉到片段文件的可用性,那么该线程发信号通知主要线程来处理该片段文件以发送给HTTP客户。
5.检查片段列表中的第一条目。一旦一个条目已添加到片段列表,需要打开该片段文件以从本地存储介质中读取。如果列表中没有片段文件,该处理应等待,直到存在至少一个产生的并可用于检查的片段文件。
6.接着读取被检查的片段文件,并服务器将通过HTTP组块传输编码以预定组块大小Sc发送出该片段文件。基于开销与传输延时之间的权衡,来确定该组块大小Sc。仅作为举例,针对Sc,128千字节是发送给用户的合适组块大小。
7.如果片段文件的长度大于组块大小Sc,则服务器可以迭代地从存储介质读取该文件的Sc并将其发送给客户。
8.将对片段列表中当前片段文件的位置加以指示的指针递增1,并且将检查下一个片段文件。
9.一旦向客户发送当前片段文件的一部分,则针对当前片段文件,需要将逻辑流或者虚拟文件内的位置指示符设置到先前位置值加向客户发送的字节的总数目。
10.重复该处理直至会话结束。当媒体源结束广播时,或者当客户从HTTP服务器断开连接时,会话可以结束。
在不同实施例中,针对片段文件中的每个子片段,执行步骤6-9。也就是说,读取片段文件的一个子片段,并通过HTTP组块传输编码发送出该子片段。针对每个子片段,更新逻辑流或虚拟文件中的位置指示符。重复这些步骤直到处理了片段文件中的所有子片段。
注意到上述处理仅是一个示例性实施例是重要的。不同处理可以省略以上步骤中的一个或多个,并且还可以包括没有描述的额外步骤。此外,在不根本地改变所述处理的重要和有利方面的前提下,可以组合或者并行实施步骤中的一个或多个。
图3示出了图2所示实施例的示例性实施。该实施包括存储控制、管理、片段文件的映射和片段列表管理的方面。
1.以HTTP组块模式启动web服务器(步骤310)。
2.监听web根目录上的inotify文件系统事件IN_CLOSE_WRITE(步骤320)。当关闭为了写入而打开的文件时,发送事件IN_CLOSE_WRITE。
3.当从分段工具创建分段文件名和它们的长度时,将片段文件名和它们的长度的映射保持作为片段列表。
4.等待来自客户的请求,所述请求具有例如“范围:字节=0-”等的范围首部(步骤340。客户指定该范围首部以便指定web服务器使用HTTP1.1组块模式来进行片段的传送),并且向HTTP客户提供第一片段文件的可配置组块大小Sc(步骤350)。Sc的示例性值是128K字节。
5.等待来自客户的请求,所述请求具有例如“范围:字节=12389098-”之类的范围首部(步骤340),并且从范围首部中指定的字节偏移量开始,向客户提供可配置组块大小Sc(步骤350)。在该示例中偏移量是12389098。注意,一个组块可能跨越两个不同的片段文件,并且将需要在步骤3提及的映射中查找。
6.定义属性,所述属性设置应在片段列表中保持多少个片段。如本申请中其它地方所述的方式,从片段列表和硬盘移除其余的片段文件(步骤360)。
在多个客户请求相同直播流的情况下,可以使用针对不同客户的不同指针,在所述流中记录每个客户的版本的当前位置。
在具有多个节目输入(即,多个直播流)的情况下,可以使用多个分段器,每个节目一个分段器。在不同的实施例中,在多个直播流之间共享一个或多个分段器。可以在多个直播流之间共享存储设备,但是需要为不同的节目建立不同的目录。应该建立文件系统事件监视器以便监视每个目录。控制器配置为处理多个线程/程序,以响应于不同直播流的多个请求。
实施例以与现有技术类似的方式支持客户在内容中搜寻例如所需的呈现时间,除了执行搜寻的方式不同之外。在本实施例中,在存储介质上将直播媒体流分成片段文件。在知道每个片段文件的字节边界的情况下,所公开的处理使用搜寻功能,以便能够向客户表示媒体流的逻辑表示。尽管媒体流被分成不同文件,但是客户设备实际上将媒体流视为连续的。换言之,即使媒体流被分段成一些已知数目的现有片段文件和未知数目的未来片段文件,在服务器中执行的算法也使媒体流在每个客户看来仿佛是一个连续文件。
图5示出了接收设备的实施例的框图。接收设备可以被包含作为网关设备、调制解调器、机顶盒或者其它相似通信设备的一部分。所示设备也可以并入到包括音频设备或者显示设备的其它系统中。不管哪种情况,由于对于本领域技术人员而言,系统的完整操作所需的若干组件是公知的,所以为了简明的目的,未示出所述组件。
在图5所示的设备中,由输入信号接收器510接收内容。输入信号接收器可以是若干已知接收器电路中的一个,所述接收器电路用于接收、解调和解码在包括无线电、有线、卫星、以太网、光纤以及电话线网络的若干可能网络之一上提供的信号。可以基于通过控制接口或者触摸板接口提供的用户输入,由输入信号接收器选择并获取所需的输入信号。触摸板接口可以包括针对触摸屏设备的接口。也可以将触摸板接口适配为与蜂窝电话、平板、鼠标、高端远程或类似物等对接。
向输入流处理器520提供解码的输出信号。输入流处理器执行最终的信号选择和处理,并且包括对于内容流将音频内容与视频内容分离。向音频处理器630提供音频内容,以从接收格式(例如压缩数字信号)转换为模拟波形信号。向音频接口540提供模拟波形信号,并进一步向显示设备或者音频放大器提供模拟波形信号。备选地,音频接口可以使用高清多媒体接口(HDMI)缆线,或者备选的音频接口(例如,经由Sony/Philips数字互连格式(SPDIF))向音频输出设备或者显示设备提供数字信号。音频接口也可以包括用于驱动一组或多组扬声器的放大器。音频处理器也执行针对音频信号的存储的任何必要转换。
向视频处理器550提供来自输入流处理器的视频输出。视频信号可以是几个格式中的一种。基于输入信号格式,视频处理器提供必要的视频内容的转换。视频处理器也执行用于视频信号的存储的任何必要转换。
存储设备560存储在输入处接收的音频和视频内容。存储设备在控制器的控制下,也基于从用户接口和/或触摸板接口585接收的命令(例如,如快进(FF)和倒退(Rew)等导航指令),允许稍后对内容的检索和回放。存储设备可以是硬盘驱动、一个或多个大容量集成电子存储器,例如,静态RAM(SRAM)或动态RAM(DRAM),或者可以是可互换的光盘存储系统,例如,压缩盘(CD)驱动或数字视频盘(DVD)驱动。
向显示接口570提供来自视频处理器的、源自输入或来自存储设备的经转换的视频信号。显示接口还向显示设备(例如,电视、计算机或显示监视器)提供显示信号。显示接口可以是模拟信号接口,例如,红绿蓝(RGB),或者可以是数字接口,例如HDMI。
控制器580通过总线与接收设备的若干组件互连,若干组件包括输入流处理器520、音频处理器530、视频处理器550、存储设备以及用户接口590。控制器管理转换处理,所述转换处理用于将输入流信号转换为用于存储在存储设备上或用于显示的信号。控制器也管理存储的内容的检索和回放。
控制器还耦合到用于存储针对控制器的信息和指令代码的控制存储器595,(例如,易失性或非易失性存储器,包括RAM、SRAM、DRAM、ROM、可编程ROM(PROM)、闪存、电可编程ROM(EPROM)、电可擦除可编程ROM(EEPROM)等)。控制存储器可以存储由控制器执行的操作接收设备和主要设备(例如,网关、机顶盒)的指令。可以通过控制器执行用于操作的软件组件和软件接口。此外,通过通信接口上软件代码的通信,能够传输一些操作,并且通过外部设备(例如,下述的触摸板设备)执行这些操作。控制存储器也可以存储元素数据库,例如包括内容的图形元素。此外,控制存储器的实施可以包括若干可能的实施例,例如,单个存储设备,或者备选地,多于一个的存储电路,通信地连接或耦合在一起以形成共享的或共用的存储器。此外,存储器可以与其它电路(例如,总线通信电路的部分)一起包括在较大的电路中。
本公开的用户接口处理采用能够用于表达功能(例如,快进、倒退等)的输入设备。为此,可以经由如图5所示的接收设备的用户接口和/或触摸板接口,与图6所示的触摸板设备或者远程平板对接。触摸板设备可以基于通过所述板被翻译成针对机顶盒或其他控制设备的手部运动或手势以及动作,允许接收设备或机顶盒的操作。
重要的是要注意,针对图5中的接收设备而描述的一些电路和功能也可以存在于触摸板设备中。在一个实施例中,触摸板可以仅作为导航工具来导航显示。在另一实施例中,触摸板将额外地用作允许用户通过内容的显示更直接地与导航交互的显示装置。重要的是,注意触摸板设备可以集成入机顶盒本身,作为例如面板显示器或阵列的一部分。触摸板设备也可以被包括作为遥控设备的一部分,所述遥控设备包含更多的常规控制功能,例如,激活器按钮。
在图5所述的接收设备(作为机顶盒或网关的一部分)与或图6所述的触摸板显示器远程平板之间的通信接口可以包括在局域网中工作的客户服务器类型协议。例如,可以经由HTTP1.1标准,在服务器(例如,机顶盒或网关)与客户(例如,触摸板设备)之间传送媒体内容(例如,视频、音频)。此外,如之前所公开的,服务器可以支持向多于一个的客户(例如,第二机顶盒、瘦客户设备)同时传送媒体。
重要的是,应注意以上实施例非常轻量且能够在局域网中操作,如上所述,在本地服务器(例如,机顶盒、网关等)和本地客户(例如,远程设备、平板等)之间。本构思也可以扩展到使用在广域网中。例如,该处理可以容易地适配以用在利用web服务器和用户家中的一组客户设备的因特网服务中。
尽管文中详细的描述了本发明的优选实施例,应理解,本发明不限于这些实施例,并且在不脱离所附权利要求限定的本发明的范围的前提下,本领域技术人员可以做出其他修改和改变。