CN104580389B - URI标识的Ogg格式时间片段的客户端HTTP检索方法 - Google Patents

URI标识的Ogg格式时间片段的客户端HTTP检索方法 Download PDF

Info

Publication number
CN104580389B
CN104580389B CN201410791102.XA CN201410791102A CN104580389B CN 104580389 B CN104580389 B CN 104580389B CN 201410791102 A CN201410791102 A CN 201410791102A CN 104580389 B CN104580389 B CN 104580389B
Authority
CN
China
Prior art keywords
fragment
bytes
byte
bytes range
uri
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201410791102.XA
Other languages
English (en)
Other versions
CN104580389A (zh
Inventor
许卓明
王骏华
吴婷
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Hohai University HHU
Original Assignee
Hohai University HHU
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Hohai University HHU filed Critical Hohai University HHU
Priority to CN201410791102.XA priority Critical patent/CN104580389B/zh
Publication of CN104580389A publication Critical patent/CN104580389A/zh
Application granted granted Critical
Publication of CN104580389B publication Critical patent/CN104580389B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Abstract

公开一种URI标识的Ogg格式时间片段的客户端HTTP检索方法,包括:解析片段URI,获得该片段的主资源URI及片段的时间间隔;向服务端请求并获得主资源的头字节;运用折半搜索法向服务端请求,以将片段的时间间隔映射为片段的字节范围;向服务端请求并获得已映射出的片段字节范围;修改片段字节范围中每个数据页的位置信息,并与头字节合成为片段资源文件。公开的URI标识的Ogg格式时间片段的客户端HTTP检索方法能够支持W3C媒体片段URI 1.0标准,由客户端运用折半搜索法向传统服务端请求少量字节后完成时间片段URI向其主资源中相应字节范围的映射,并从传统服务端获取字节范围后生成媒体片段文件(以支持对片段的各种复用),从而大大节省网络通信带宽和缩短通信延时。

Description

URI标识的Ogg格式时间片段的客户端HTTP检索方法
技术领域
本发明涉及多媒体通信技术领域,尤其涉及一种URI标识的Ogg格式时间片段的客户端HTTP检索方法。
背景技术
图像、音频与视频等多媒体资源是万维网(Web)上的重要信息资源。尤其是近年来兴起的Web 2.0应用(如:共享视频资源的YouTube、优酷等)产生了海量的Web社交媒体资源。然而,各种媒体资源一直是Web的“二等公民”,即它们必须嵌入到其他Web资源(如HTML网页),依靠“plugin”软件的交互与解码后,视听内容才能被Web用户所访问与消费。为了使多媒体资源成为“一等公民”(first-class citizens),Web基础设施技术标准的制订者——国际万维网联盟(W3C)近年来正在完善Web基础设施,制定相关技术标准。
众所周知,大多数情况下,Web用户真正感兴趣的并不是一个完整媒体资源,而是媒体资源的一部分,即媒体片段(media fragment)。例如,一个古典音乐发烧友只想听贝多芬第九交响曲第四乐章中的《欢乐颂》部分,而不是整个交响曲音频;一个破案警察只需要一张街头照片中某个嫌疑人的头像部分,而不是包含大量人和背景图像的一个完整图像;一个体育频道主持人为了编辑一个“点球”集锦需要从几十个足球转播视频中分别抽取一分钟的视频剪切,等等。如果这些媒体资源都由各自的Web媒体服务器或其代理(下文统称为“服务端”)维护着,那么Web用户的某个应用程序(下文统称为“客户端”)用传统方法只能下载全部完整媒体资源文件后(意味着需要在网络上请求与传输大量字节),再按需手工(或借助专门的工具软件)来抽取其中的媒体片段,这样就导致了巨大的网络通信带宽代价和通信延迟。因此,万维网需要一种标准的Web机制来支持媒体片段的简便标识和高效检索。同时,由于Web媒体资源格式繁多,因此这种Web机制在标识媒体片段时必须是独立于媒体格式的,且使用国际标准RFC-3986URI(参见:T.Berners-Lee,R.Fielding,L.Masinter.Uniform Resource Identifier(URI):Generic Syntax.RFC 3986,TheInternet Society,January 2005.http://www.ietf.org/rfc/rfc3986.txt)来标识媒体片段。
W3C认识到以上用户需求的紧迫性,于2008年9月正式成立了媒体片段工作组(Media Fragments Working Group),致力于开发独立于媒体格式的、使用基于RFC-3986URI标准的、与现有的因特网协议(包括HTTP(S),FILE,RTSP)相兼容的技术规范,来唯一标识媒体片段。该工作组已于2012年9月发布了《媒体片段URI 1.0(基本)标准》(参见: Troncy,Erik Mannens,Silvia Pfeiffer,Davy Van Deursen(Editors).MediaFragments URI 1.0(basic).W3C Recommendation,25September 2012.http://www.w3.org/TR/media-frags/),目前支持时间片段(temporal fragment)与空间片段(spatial fragment)的标识。
由于当前Web使用的超文本传送协议(简称HTTP协议)国际标准RFC-2616HTTP/1.1(参见:R.Fielding,J.Gettys,J.Mogul,H.Frystyk,L.Masinter,P.Leach,T.Berners-Lee.Hypertext Transfer Protocol--HTTP/1.1.RFC 2616,The Internet Society,June1999.http://www.ietf.org/rfc/rfc2616.txt)不能支持除字节范围(byte range)检索以外的其他媒体片段检索策略,因此,为了支持《媒体片段URI 1.0(基本)标准》,W3C媒体片段工作组开发了一些新HTTP头(如:Content-Range-Mapping header)或新头维(如:RangeRequest Header dimensions),以指导并期望现有的服务端能按这种“扩充的HTTP协议”来进行升级改造,使其成为“懂媒体片段的(media fragments-aware)”服务端。但是,升级改造当前万维网上大量的服务端不仅取决于相关服务提供商的意愿,而且也需要有一个长期的过程;同时,当前的RFC-2616HTTP/1.1国际标准也需要进行升级。看来在目前的情况下,只能开发“懂媒体片段的”客户端,使其能在传统HTTP/1.1协议下与传统服务端(即当前支持HTTP/1.1协议的任何Web服务器,如Apache等,或其代理服务器)进行交互,来实现用媒体片段URI 1.0进行标识的媒体片段的HTTP检索。
W3C的《媒体片段URI 1.0(基本)标准》中规定可使用“URI片段”(URI fragment)方式来定址(addressing)一个媒体资源——称主资源(primary resource)中的某个时间片段(temporal fragment),由此形成时间片段的URI标识符。该标准同时还规定,这种时间片段URI标识符的解析结果应该是从主资源中抽取相应的字节范围(byte range),产生一个其媒体类型与主资源的媒体类型相同的次生资源(secondary resource)。这就要求媒体类型是“时间上线性的(time-linear)”,即具有单一的时间轴,通常是一种容器(container)格式。容器格式媒体资源包含沿着统一时间轴平行的多个轨(视频、音频等)的数据,每个轨的媒体资源有一个包含控制信息的数据头(data header),整个媒体资源通常有一个一般头(general header);为了能渐进解码,不同轨的数据(字节)一般以交错方式编码;所有这些都封装在一个单一的容器文件中。当前,大多数容器格式都能满足以上要求。一些支持全索引(full index)的容器格式(如MP4)的头信息中包含了时间到字节位移(byte-offset)的映射关系,因此,籍此能方便地实现从片段的时间间隔到该片段在主资源中相应字节范围的映射,也就能较为简便地实现从主资源文件中抽取一个时间片段作为次生资源。然而,对于非全索引容器格式,如Ogg格式(参见:S.Pfeiffer.The Ogg Encapsulation FormatVersion 0.RFC 3533,The Internet Society,May 2003.http://www.ietf.org/rfc/rfc3533.txt以及I.Goncalves,S.Pfeiffer,C.Montgomery.Ogg Media Types.RFC 5334,The Internet Society,September 2008.http://www.ietf.org/rfc/rfc5334.txt),其媒体资源的头信息中不包含时间到字节位移映射的完整信息,因此,为了能尽量少地请求主资源中的字节(以便节省网络通信带宽和减少通信延时),只能借助一定的“聪明方法”,实现将片段的时间间隔映射为片段的字节范围。
W3C的《媒体片段URI 1.0(基本)标准》中,时间片段在HTTP协议下的“URI片段”定址方式的标准语法格式为:
http://<主机>[:端口]<绝对路径>#<片段定址>
其中:“http://<主机>[:端口]<绝对路径>”部分用于标识主资源;“#<片段定址>”部分用于表示一个时间片段的定址参数,它采用特定的名-值对来表示:名用t表示,值用开始时间和结束时间(如视频编辑中的入点和出点)界定的半开时间间隔(timeinterval)来表示,开始时间(省略时默认为0秒)和结束时间(省略时默认为主资源的结束时间点)之间用逗号分隔,可选的时间单位包括:Normal Play Time(npt:)(为默认单位)、SMPTE(smpte:)、现实世界时钟时间(clock:),例如:t=npt:10,20表示时间间隔[10,20);t=,20表示时间间隔[0,20);t=smpte:0:02:00表示时间间隔[120,end)。
根据以上语法格式,以下时间片段URI:
http://dbws.hhu.edu.cn/oamm/fragments/concert.ogg#t=npt:10,910
解释为:由“http://dbws.hhu.edu.cn/oamm/fragments/concert.ogg”这个URI标识的主资源(一个Ogg容器格式的媒体资源,其文件名为concert.ogg)中,时间间隔为[10,910)的媒体片段(即主资源中第10秒开始一直延续到第910秒结束的部分)。
媒体片段在Web上具有广泛用途,W3C媒体片段工作组起草的《媒体片段用例与需求(草案)》(参见: Troncy,Erik Mannens(Editors).Use cases andrequirements for Media Fragments.W3C Working Draft,17December 2009.http://www.w3.org/TR/2009/WD-media-frags-reqs-20091217)中列举了媒体片段的实际用例,包括:片段的链接、显示或播放、浏览和置书签、重新合成、标注,以及媒体资源的改编等。
关于本领域的相关技术现状,现有的一些多媒体元数据格式确实已定义了依赖于其特定格式的媒体片段标识符,如:SMIL、MPEG-7、SVG、TV-Anytime、ImageMaps采用了非URI的标识符,而SVG、MPEG-21等虽采用了基于URI的标识符,但它们都依赖于特定的媒体格式,因而制约了这些(非标准的)媒体片段标识符在Web上的广泛使用。
国际上当前主要处在《媒体片段URI 1.0(基本)标准》如何在Web上(主要是在HTTP协议下)具体实施方法的讨论阶段。W3C媒体片段工作组成员公开发表在国际学术期刊《多媒体工具与应用》的相关论文中(参见:W.Van Lancker,D.Van Deursen,E.Mannens,R.Vande Walle.Implementation strategies for efficient media fragmentretrieval.Multimedia Tools and Applications,March 2012,57(2):243-267)讨论并比较了媒体片段HTTP检索的几种可能的实现策略,得出的结论是:①已有研究主要集中在探讨如何将服务端按“扩充的HTTP协议”来升级改造为“懂媒体片段的”服务端(如:作为URI1.0概念证明的NinSuna服务器),或如何开发媒体片段的(第三方)翻译服务器(如:作为URI1.0概念证明的MFTS翻译服务设想);②目前尚没有能通过传统HTTP协议与传统服务端进行交互来处理媒体片段URI的“懂媒体片段的”客户端实现。
最近,一些部分支持HTML5标准(参见:Ian Hickson,Robin Berjon,SteveFaulkner,Travis Leithead,Erika Doyle Navara,Edward O'Connor,Silvia Pfeiffer(Editors).HTML5:A vocabulary and associated APIs for HTML and XHTML.W3CRecommendation,28October 2014.http://www.w3.org/TR/html5/)的最新版浏览器(如:Mozilla Firefox和Google Chrome等)能部分支持媒体片段URI 1.0标识的时间片段的在线播放,其不足之处是仅部分支持时间片段URI 1.0语法,且只能对时间片段进行在线播放,而不能让客户端抽取并获得时间片段资源文件,因此无法进一步支持实现W3C《媒体片段用例与需求(草案)》中所要求的多种片段实际用例。
中国专利号CN 101577627 B,公开日2011年9月9日,授权公告日2011年12月14日,发明创造的名称为“多媒体文件的下载播放系统及方法”,该已授权发明专利公开了一种多媒体文件的下载播放系统及方法,其所述方法包括:下载多媒体文件的头部信息;解析头部信息,并根据头部信息获取多媒体数据的下载位置信息;根据下载位置信息下载多媒体数据以及播放下载的多媒体数据。该发明专利技术方案的主要缺陷包括:完全不支持W3C的《媒体片段URI 1.0(基本)标准》;只能在线播放多媒体文件,无法使客户端获取时间片段资源文件;客户端与服务端之间以及客户端的播放单元与下载单元之间需要不断进行复杂的交互;只宏观上描述了下载、解析多媒体文件头部信息并据此获取多媒体数据下载位置的步骤(不足以说明其技术方案针对各种多媒体格式的可实施性与实用性),特别地,未具体描述针对全索引(如MP4)和非全索引(如Ogg)容器格式媒体资源时间片段的技术方案,也未具体给出相应的HTTP请求/响应协议步骤。
发明人许卓明,吴婷,倪立显,何文洁,庄远航,王骏华,仵莉莉的中国发明专利申请,申请公布号:CN103747065A;申请公布日:2014.04.23;发明公布名称:“客户端HTTP检索全索引容器格式媒体资源时间片段的方法”,公开了一种客户端HTTP检索全索引容器格式媒体资源时间片段的方法,其所述方法无法实现URI标识的Ogg格式(一种典型的非全索引容器格式)时间片段的客户端HTTP检索。
因此,本发明要解决的技术问题是针对用符合W3C的《媒体片段URI 1.0(基本)标准》的URI来标识的Ogg格式媒体资源的时间片段,提出一种无需改造现有的服务端(媒体服务器或其代理服务器)和无需扩充当前的HTTP协议(即HTTP/1.1),而由客户端在传统HTTP协议下来检索并获取时间片段文件的方法,以避免对当前Web基础设施的改造,并且比下载整个媒体资源的传统技术方案大大节省网络通信带宽和缩短通信延时。
发明内容
本发明的目的旨在针对用符合W3C的《媒体片段URI 1.0(基本)标准》的URI来标识的Ogg格式(一种典型的非全索引容器格式)媒体资源的时间片段,提供客户端HTTP检索时间片段的方法。一方面,本方法无需改造现有的服务端和无需扩充当前的HTTP协议,以避免对当前Web基础设施的改造;另一方面,本方法由客户端运用折半搜索(binary search orhalf-interval search)方法向服务端请求少量字节实现将片段的时间间隔映射为片段的字节范围,并以此为基础来实现时间片段的HTTP检索,比下载完整媒体资源文件的传统技术方案大大节省网络通信带宽和缩短通信延时。
为了解决上述技术问题,本发明公开一种URI标识的Ogg格式时间片段的客户端HTTP检索方法,包括:步骤S1,解析片段URI,获得该片段的主资源URI及片段的时间间隔;步骤S2,向服务端请求并获得主资源的头字节;步骤S3,运用折半搜索法向服务端请求,以将片段的时间间隔映射为片段的字节范围;步骤S4,向服务端请求并获得已映射出的片段字节范围;步骤S5,修改片段字节范围中每个数据页的位置信息,并与头字节合成为片段资源文件。
进一步地,解析片段URI,获得该片段的主资源URI及片段的时间间隔,包括:步骤S1-1,以片段URI中的“#”为分割点获取主资源URI部分和片段定址部分;步骤S1-2,判断主资源URI部分是否符合RFC-3986URI语法,若否,则报错并终止;步骤S1-3,判断片段定址部分是否符合媒体片段URI 1.0语法,若否,则报错并终止;步骤S1-4,根据时间单位计算出以秒为计的片段开始时间与结束时间;步骤S1-5,判断开始时间是否小于结束时间,若否,则报错并终止;步骤S1-6,根据以秒为计的开始时间与结束时间计算出片段时间间隔。
进一步地,向服务端请求并获得主资源的头字节,包括:步骤S2-1,向服务端请求包含了主资源头字节的估计字节范围;步骤S2-2,在主资源头字节的估计字节范围中确定主资源头字节的最后字节位置,并读取主资源的头字节。
进一步地,运用折半搜索法向服务端请求,以将片段的时间间隔映射为片段的字节范围,包括:步骤S3-1,向服务端请求并获取主资源的总字节数;步骤S3-2,在主资源的总字节范围内以片段开始时间为搜索键进行递归式折半搜索,确定片段开始时间所对应的数据页;步骤S3-3,在主资源的总字节范围内以片段结束时间为搜索键进行递归式折半搜索,确定片段结束时间所对应的数据页;步骤S3-4,确定片段的时间间隔所对应的片段字节范围。
进一步地,所述向服务端请求并获得已映射出的片段字节范围,包括:步骤S4-1,向服务端发送HTTP字节范围请求,以请求片段字节范围;步骤S4-2,从服务端返回的HTTP206部分内容响应消息中读取片段字节范围。
进一步地,修改片段字节范围中每个数据页的位置信息,并与头字节合成为片段资源文件,包括:步骤S5-1,根据头字节来统计出媒体资源文件的逻辑流的个数、每个逻辑流的序列号、以及每个逻辑流的头页个数;步骤S5-2,向服务端请求并获取用于修改片段字节范围的位置信息;步骤S5-3,修改片段字节范围中每个数据页的位置信息;步骤S5-4,将修改后的片段字节范围与所得的头字节合成为新的片段资源文件。
本发明的技术方案是由客户端与服务端通过传统的HTTP协议(即HTTP/1.1)进行交互而实现的,因此无需扩充HTTP协议,也无需对现有的服务器端进行升级改造;本技术方案中客户端只从服务端请求了媒体资源(即片段的主资源)的头字节、映射所需的少量字节、以及片段字节范围,因此比下载完整媒体资源的技术方案大大节省了网络通信带宽、缩短了通信延时;由于本技术方案可获得时间片段文件,因此可支持各式各样的客户端应用对所获时间片段的复用,包括媒体片段的播放、标注或置书签、重新合成、以及媒体资源改编等。
本发明附加的方面和优点将在下面的描述中部分给出,这些将从下面的描述中变得明显,或通过本发明的实践了解到。
附图说明
图1示出了根据本发明技术方案的URI标识的Ogg格式时间片段的客户端HTTP检索方法的流程示意图;
图2示出了根据本发明技术方案的URI标识的Ogg格式时间片段的客户端HTTP检索方法的处理过程中客户端与服务端进行HTTP通信的方法的流程示意图;
图3示出了根据本发明技术方案的URI标识的Ogg格式时间片段的客户端HTTP检索方法的处理过程中客户端解析媒体片段URI并获得主资源URI及片段的时间间隔的流程示意图。
具体实施方式
下面详细描述本发明的实施方式,所述实施方式的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的概念、对象、要素等或具有相同或类似功能的概念、对象、要素等。下面通过参考附图描述的实施方式是示例性的,仅用于解释本发明,而不能解释为对本发明的限制。
本技术领域技术人员可以理解,除非另外定义,这里使用的所有术语(包括技术术语和科学术语)具有与本发明所属领域中的普通技术人员的一般理解相同的意义。还应该理解的是,诸如通用字典中定义的那些术语应该被理解为具有与现有技术的上下文中的意义一致的意义,并且除非像这里一样定义,不会用理想化或过于正式的含义来解释。
图1示出了根据本发明技术方案的URI标识的Ogg格式时间片段的客户端HTTP检索方法的流程示意图。图2示出了根据本发明技术方案的URI标识的Ogg格式时间片段的客户端HTTP检索方法的处理过程中客户端与服务端进行HTTP通信的方法的流程示意图。图3示出了根据本发明技术方案的URI标识的Ogg格式时间片段的客户端HTTP检索方法的处理过程中客户端解析片段URI并获得该片段的主资源URI及片段的时间间隔的流程示意图。为了解决上述技术问题,本发明是通过以下技术方案实现的:
如图1、图2所示,URI标识的Ogg格式时间片段的客户端HTTP检索方法,包括如下步骤:
步骤S1,解析片段URI,获得该片段的主资源URI及片段的时间间隔,如图3所示,具体包括:步骤S1-1,以片段URI中的“#”为分割点获取主资源URI部分和片段定址部分;步骤S1-2,判断主资源URI部分是否符合RFC-3986URI语法,若否,则报错并终止;步骤S1-3,判断片段定址部分是否符合媒体片段URI 1.0语法,若否,则报错并终止;步骤S1-4,根据时间单位计算出以秒为计的片段开始时间与结束时间;步骤S1-5,判断开始时间是否小于结束时间,若否,则报错并终止;步骤S1-6,根据以秒为计的开始时间与结束时间计算出片段时间间隔。
步骤S2,向服务端请求并获得主资源的头字节,具体包括:
步骤S2-1,向服务端请求包含了主资源头字节的估计字节范围,具体包括:
设估计字节范围为[0,lastBytePos]。令lastBytePos=32KB,客户端向服务端请求字节范围[0,lastBytePos];判断请求到的字节范围是否包含全部头字节,若是,则执行步骤S2-2;否则,重复执行如下步骤:每次以步长32KB来增加lastBytePos(即令lastBytePos=lastBytePos+32KB),由客户端向服务端重新请求字节范围[0,lastBytePos],直到请求到的字节范围包含全部头字节为止。
以上处理步骤中,客户端向服务端请求字节范围[0,lastBytePos]的方法如下:其中,客户端的HTTP字节范围请求指令如下:
GET<绝对路径>HTTP/1.1
Host:<主机>
Accept:video/*
Range:bytes=0-<lastBytePos>
其中,服务端从主资源文件中抽取相应字节范围,并返回给客户端的HTTP 206部分内容响应如下:
HTTP/1.1206Partial Content
Accept-Ranges:bytes
Content-Length:<lastBytePos>
Content-Type:video/ogg
Content-Range:bytes 0-<lastBytePos>/<主资源文件总字节数>
{binary data}(注:字节范围的二进制数据)
以上处理步骤中,判断字节范围[0,lastBytePos]是否包含全部头字节的方法为:在字节范围[0,lastBytePos]中找到存储了十六进制数“4F676753”的最后两个首字节位置position1和position2;提取字节范围[position1,position2],得到一个Ogg页oggPage;若oggPage的“granule position”字段值为0,则字节范围[0,lastBytePos]不包含全部头字节,否则字节范围[0,lastBytePos]包含了全部头字节。
步骤S2-2,在主资源头字节的估计字节范围中确定主资源头字节的最后字节位置,并读取主资源的头字节,具体包括:
设主资源头字节的最后字节位置为headerLastByte。从主资源头字节的估计字节范围[0,lastBytePos]中依次读取数个Ogg页,每读取到一个Ogg页就判断它是否为头页(即判断该Ogg页的“granule position”字段值是否为0),若是,则继续读取,直到读取到的Ogg页不是头页为止,则该非头页的Ogg页的首字节位置就是headerLastByte的值;从字节范围[0,lastBytePos]中截取字节范围[0,headerLastByte]得到头字节。
步骤S3,运用折半搜索法向服务端请求,以将片段的时间间隔映射为片段的字节范围,具体包括:
步骤S3-1,向服务端请求并获取主资源的总字节数,具体如下:
其中,客户端的HTTP头方法请求指令如下:
HEAD<绝对路径>HTTP/1.1
Host:<主机>
Accept:video/*
其中,服务端用实体头域来响应,其HTTP 200OK响应如下:
HTTP/1.1200OK
Accept-Ranges:bytes
Content-Length:<主资源的总字节数>
Content-Type:video/ogg
读取以上响应消息中Content-Length字段的值,得到主资源的总字节数totalBytes。
步骤S3-2,在主资源的总字节范围内以片段开始时间为搜索键进行递归式折半搜索,确定片段开始时间所对应的数据页,具体如下:
这里,折半搜索(binary search)的搜索键(search key)为片段开始时间fragStartTime。设搜索区间(search interval)为[start,end],第一次递归时,令start=0,end=totalBytes-1;以后每次递归时,将根据上一次递归中搜索区间的中点(midpoint)数据页的时间戳与搜索键(这里,即为片段开始时间fragStartTime)的比较结果来确定start和end(即新的搜索区间)。每次递归的执行步骤如下:
首先,计算搜索区间的中点的字节位置midPoint,计算方法如公式(1)所示:
其次,向服务端请求字节范围[midPoint-8*1024,midPoint+8*1024],方法如下:其中,客户端的HTTP字节范围请求指令如下:
GET<绝对路径>HTTP/1.1
Host:<主机>
Accept:video/*
Range:bytes=<midpoint-8*1024>-<midpoint+8*1024>
其中,服务端从主资源文件中抽取相应字节范围,并返回给客户端的HTTP 206部分内容响应如下:
HTTP/1.1206Partial Content
Accept-Ranges:bytes
Content-Length:<字节范围[midpoint-8*1024,midpoint+8*1024]的总字节数>
Content-Type:video/ogg
Content-Range:bytes<midpoint-8*1024>-<midpoint+8*1024>/<主资源文件总字节数>
{binary data}(注:字节范围的二进制数据)
再次,从字节范围[midPoint-8*1024,midPoint+8*1024]中读取中点数据页midDataPage,方法为:找到字节范围[midPoint-8*1024,midPoint]中存储了十六进制数“4F676753”的最后一个首字节位置position3,找到字节范围[midpoint,midpoint+8*1024]中存储了十六进制数“4F676753”的第一个首字节位置position4,提取字节范围[position3,position4]得到midDataPage。
最后,将片段开始时间fragStartTime与midDataPage的时间戳进行比较,确定下一次递归的搜索区间,方法如下:
计算midDataPage的时间戳timeStamp,方法为:读取midDataPage的“granuleposition”字段值granulePosition,读取midDataPage所在的逻辑流的流起始(beginningof stream)页,从该流起始页中读取帧率frameRate(对于视频流)或者采样率sampleRate(对于音频流),据此计算timeStamp,计算方法如公式(2)或(3)所示:
对于视频流:
对于音频流:
将片段开始时间fragStartTime与midDataPage的时间戳timeStamp进行比较。若fragStartTime小于timeStamp,则下一次递归搜索区间为[start,position3];若fragStartTime大于timeStamp,则下一次递归搜索区间为[position4,end];若fragStartTime等于timeStamp,则搜索成功(midDataPage就是片段开始时间所对应的数据页),本步骤结束。
步骤S3-3,在主资源的总字节范围内以片段结束时间为搜索键进行递归式折半搜索,确定片段结束时间所对应的数据页,具体包括:
使用与步骤S3-2相同的方法在主资源的总字节范围内进行递归式折半搜索,以确定片段结束时间所对应的数据页,唯一的区别是这里的搜索键为片段结束时间。
步骤S3-4,确定片段的时间间隔所对应的片段字节范围,具体包括:
读取片段开始时间所对应的数据页的起始字节位置,赋值给fragStartByte;读取片段结束时间所对应的数据页的终止字节位置,赋值给fragEndByte;于是,片段的字节范围即为[fragStartByte,fragEndByte]。
步骤S4,向服务端请求并获得已映射出的片段字节范围,具体包括:
步骤S4-1,向服务端发送HTTP字节范围请求,以请求片段字节范围,具体包括:
客户端向服务端发送的HTTP字节范围请求的指令如下:
GET<绝对路径>HTTP/1.1
Host:<主机>
Accept:video/*
Range:bytes=<fragStartByte>-<fragEndByte>
步骤S4-2,从服务端返回的HTTP 206部分内容响应消息中读取片段字节范围,具体包括:
服务端从主资源文件中抽取相应字节范围后,返回的HTTP 206部分内容响应的消息如下:
HTTP/1.1206Partial Content
Accept-Ranges:bytes
Content-Length:<片段总字节数>
Content-Type:video/ogg
Content-Range:bytes<fragStartByte>-<fragEndByte>/<主资源文件总字节数>
{binary data}(注:字节范围的二进制数据)
客户端从以上响应消息中抽取最后{binary data}部分,即得到片段字节范围。
步骤S5,修改片段字节范围中每个数据页的位置信息,并与头字节合成为片段资源文件,具体包括:
步骤S5-1,根据头字节来统计出主资源文件的逻辑流的个数、每个逻辑流的序列号、以及每个逻辑流的头页个数,具体包括:
设逻辑流的个数为n,每个逻辑流的头页个数为headerAccountk(k=1,2,...,n)。首先,从主资源头字节中依次重复读取头页,每读取到一个头页就判断它是否为流起始页(即判断该头页的“header type”字段值是否为2),若是,则继续读取,直到读取到的头页不是流起始页为止,这样,读取到的全部流起始页的个数就是逻辑流的个数n;然后,针对n个流起始页,重复读取每个流起始页的“serial number”字段值,即得到该流起始页所对应的逻辑流的序列号(用于唯一地标识一个逻辑流);最后,逐一遍历头字节中的全部头页,每遍历到一个头页就根据它的“serial number”字段值判断该头页所属的逻辑流,并将相应逻辑流的headerAccountk值加1(每个headerAccountk的初始值均为0),这样就统计出全部n个逻辑流的头页个数。
步骤S5-2,向服务端请求并获取用于修改片段字节范围的位置信息,具体如下:
每个逻辑流都对应两个用于修改片段字节范围的位置信息,因此,设n个逻辑流中这样的两个位置信息分别为preGranulePosk(k=1,2,...,n)和prePageSequencek(k=1,2,...,n)。
首先,客户端向服务端请求字节范围[fragStartByte-n*8192,fragStartByteEnd],方法如下:其中,客户端的HTTP字节范围请求指令如下:
GET<绝对路径>HTTP/1.1
Host:<主机>
Accept:video/*
Range:bytes=<fragStartByte-n*8192>-<fragStartByteEnd>
其中,服务端从主资源文件中抽取相应字节范围,并返回给客户端的HTTP 206部分内容响应如下:
HTTP/1.1206Partial Content
Accept-Ranges:bytes
Content-Length:<n*8192+1>
Content-Type:video/ogg
Content-Range:bytes<fragStartByte-n*8192>-<fragStartByteEnd>/<主资源总字节数>
{binary data}(注:字节范围的二进制数据)
其次,从请求到的字节范围中读取最后n个数据页(注:每个数据页对应了一个逻辑流)。
最后,针对以上n个数据页,逐一读取每个数据页的“granule position”字段值,得到相应的位置信息preGranulePosk,并逐一读取每个数据页的“page sequence”字段值,得到相应的位置信息prePageSequencek
步骤S5-3,修改片段字节范围中每个数据页的位置信息,具体如下:
逐一遍历片段字节范围中全部数据页,每遍历到一个数据页就根据前述两个步骤中已获得的有关信息来修改该数据页的“granule position”字段值和“page sequence”字段值,修改方法为:首先根据这个数据页的序列号来确定该数据页所属的逻辑流,然后将该数据页的“granule position”字段值减去所属逻辑流所对应的位置信息preGranulePosk,最后将该数据页的“page sequence”字段值减去所属逻辑流所对应的位置信息prePageSequencek,再加上所属逻辑流所对应的头页个数headerAccountk
步骤S5-4,将修改后的片段字节范围与所得的头字节合成为新的片段资源文件,具体如下:将所得的头字节和片段字节合成为一个字节流,并作为一个Ogg文件保存到本地。
本发明的技术方案是由客户端与服务端通过传统的HTTP协议(即HTTP/1.1)进行交互而实现的,因此无需扩充HTTP协议,也无需对现有的服务器端进行升级改造;本技术方案中客户端只从服务端请求了媒体资源(即片段的主资源)的头字节、映射所需的少量字节、以及片段字节范围,因此比下载完整媒体资源的技术方案大大节省了网络带宽、缩短了通信延时;由于本技术方案可获得时间片段文件,因此可支持各式各样的客户端应用对所获时间片段的复用,包括媒体片段的播放、标注或置书签、重新合成、以及媒体资源改编等。
下面以Ogg容器格式(其格式标准参见:S.Pfeiffer.The Ogg EncapsulationFormat Version 0.RFC 3533,The Internet Society,May 2003.http://www.ietf.org/rfc/rfc3533.txt以及I.Goncalves,S.Pfeiffer,C.Montgomery.Ogg Media Types.RFC5334,The Internet Society,September 2008.http://www.ietf.org/rfc/rfc5334.txt)的一个具体媒体资源的时间片段URI(其语法标准参见: Troncy,Erik Mannens,Silvia Pfeiffer,Davy Van Deursen(Editors).Media Fragments URI 1.0(basic).W3CRecommendation,25September 2012.http://www.w3.org/TR/media-frags/)为例,来进一步说明本发明技术方案的具体实施方式。其中,HTTP协议采用国际标准RFC-2616HTTP/1.1(参见:R.Fielding,J.Gettys,J.Mogul,H.Frystyk,L.Masinter,P.Leach,T.Berners-Lee.Hypertext Transfer Protocol--HTTP/1.1.RFC 2616,The Internet Society,June1999.http://www.ietf.org/rfc/rfc2616.txt)。
一个Ogg容器格式媒体资源文件concert.ogg(2014年维也纳新年音乐会音频专辑)存储于传统的Apache Web服务器,该媒体资源(即片段的主资源)的总字节数为172,525KB(约168.48MB,此即下载整个主资源文件的总带宽代价),其总时长为9,181秒(约153分钟)。一个媒体片段URI为:http://dbws.hhu.edu.cn/oamm/fragments/concert.ogg#t=npt:10,910,该片段时间间隔为[10,910),时长为900秒(约15分钟)。
如图1、图2所示,URI标识的Ogg格式时间片段的客户端HTTP检索方法,包括如下步骤:
步骤S1,解析片段URI,获得该片段的主资源URI及片段的时间间隔,如图3所示,具体包括:
步骤S1-1,以片段URI中的“#”为分割点获取主资源URI部分和片段定址部分,具体包括:
主资源URI部分为:http://dbws.hhu.edu.cn/oamm/fragments/concert.ogg
片段定址部分为:t=npt:10,910。
步骤S1-2,判断主资源URI部分是否符合RFC-3986URI语法,若否,则报错并终止。判断结果为:主资源URI部分符合RFC-3986URI语法。
步骤S1-3,判断片段定址部分是否符合媒体片段URI 1.0语法,若否,则报错并终止。判断结果为:片段定址部分符合媒体片段URI 1.0语法。处理继续。
步骤S1-4,根据时间单位计算出以秒为计的片段开始时间与结束时间,具体包括:计算出的以秒为计的开始时间为10(秒),结束时间为910(秒)。
步骤S1-5,判断开始时间是否小于结束时间,若否,则报错并终止。
判断结果为:开始时间小于结束时间。处理继续。
步骤S1-6,根据以秒为计的开始时间与结束时间计算出片段时间间隔。
计算出的时间间隔为[10,910)。
步骤S2,向服务端请求并获得主资源的头字节,具体包括:
步骤S2-1,向服务端请求包含了主资源头字节的估计字节范围,具体包括:
估计字节范围为[0,32768]。客户端向服务端请求字节范围[0,32768],具体方法如下:其中,客户端的HTTP字节范围请求指令如下:
GET/oamm/fragments/concert.ogg HTTP/1.1
Host:dbws.hhu.edu.cn
Accept:video/*
Range:bytes=0-32768
其中,服务端从主资源文件中抽取相应字节范围,并返回给客户端的HTTP 206部分内容响应如下:
HTTP/1.1206Partial Content
Accept-Ranges:bytes
Content-Length:32769
Content-Type:video/ogg
Content-Range:bytes 0-32768/176665892
判断请求到的字节范围是否包含全部头字节的方法为:在字节范围[0,32768]中找到存储了十六进制数“4F676753”的最后两个首字节位置分别为29738和32768;提取字节范围[29738,32768],得到Ogg页oggPage;读取oggPage的“granule position”字段值为116800,于是断定字节范围[0,32768]中包含了全部头字节,执行步骤S2-2。
步骤S2-2,在主资源头字节的估计字节范围中确定主资源头字节的最后字节位置,并读取主资源的头字节,具体包括:
从主资源头字节的估计字节范围[0,32768]中依次读取数个Ogg页,当读取到一个字节范围为[3843,8163]的非头页的Ogg页时停止读取(该Ogg页的“granule position”字段值为46912),则该Ogg页的首字节位置(为3843)就是主资源头字节的最后字节位置headerLastByte的值;从估计字节范围[0,32768]中截取字节范围[0,3843]得到头字节。
步骤S3,运用折半搜索法向服务端请求,以将片段的时间间隔映射为片段的字节范围,具体包括:
步骤S3-1,向服务端请求并获取主资源的总字节数,具体如下:
其中,客户端的HTTP头方法请求指令如下:
HEAD/oamm/fragments/concert.ogg HTTP/1.1
Host:dbws.hhu.edu.cn
Accept:video/*
其中,服务端用实体头域来响应,其HTTP 200OK响应如下:
HTTP/1.1200OK
Accept-Ranges:bytes
Content-Length:176665892
Content-Type:video/ogg
读取以上响应消息中Content-Length字段的值,得到主资源的总字节数totalBytes为176665892。
步骤S3-2,在主资源的总字节范围内以片段开始时间为搜索键进行递归式折半搜索,确定片段开始时间所对应的数据页,具体如下:
这里,折半搜索的搜索键为片段开始时间10(秒)。设搜索区间为[start,end],第一次递归时,令start=0,end=176665892-1=176665891,执行的步骤如下:
首先,根据公式(1)计算出搜索区间的中点的字节位置midPoint的值为88332945。
其次,向服务端请求字节范围[88324753,88341137],方法如下:其中,客户端的HTTP字节范围请求指令如下:
GET/oamm/fragments/concert.ogg HTTP/1.1
Host:dbws.hhu.edu.cn
Accept:video/*
Range:bytes=88324753-88341137
其中,服务端从主资源文件中抽取相应字节范围,并返回给客户端的HTTP 206部分内容响应如下:
HTTP/1.1206Partial Content
Accept-Ranges:bytes
Content-Length:16385
Content-Type:video/ogg
Content-Range:bytes 88324753-88341137/176665892
{binary data}(注:字节范围的二进制数据)
再次,从字节范围[88324753,88341137]中读取中点数据页,方法为:找到字节范围[88324753,88332945]中存储了十六进制数“4F676753”的最后一个首字节位置为88329454;找到字节范围[88332945,88341137]中存储了十六进制数“4F676753”的第一个首字节位置为88333765;提取字节范围[88329454,88333765]得到中点数据页。
最后,将片段开始时间10(秒)与中点数据页的时间戳进行比较,确定下一次递归的搜索区间,方法如下:
计算中点数据页的时间戳,方法为:读取中点数据页的“granule position”字段值为8978600,找到头字节中“4F676753”的第二个首字节位置为57,提取字节范围[0,57]得到中点数据页所在的逻辑流的流起始页,从该流起始页中读取采样率为44100(由于这是一个音频流);根据公式(3)计算出中点数据页的时间戳timeStamp的值为2036(秒)。
将片段开始时间10(秒)与中点数据页的时间戳2036(秒)进行比较。由于片段开始时间小于中点数据页的时间戳,因此确定下一次递归搜索区间为[0,88329454]。
以上折半搜索的递归过程反复进行,直到进行到第15次递归时,中点数据页为字节范围[163544,167817],它的时间戳为10(秒),与搜索键(即片段开始时间)的值相等,本步骤结束。
步骤S3-3,在主资源的总字节范围内以片段结束时间为搜索键进行递归式折半搜索,确定片段结束时间所对应的数据页,具体包括:
使用与步骤S3-2相同的方法在主资源的总字节范围内进行递归式折半搜索,以确定片段结束时间所对应的数据页,唯一的区别是这里的搜索键为片段结束时间。
当进行到第16次递归时,中点数据页为字节范围[17196658,17200881],它的时间戳为910(秒),与搜索键(即片段结束时间)的值相等,本步骤结束。
步骤S3-4,确定片段的时间间隔所对应的片段字节范围,具体包括:
读取片段开始时间所对应的数据页的起始字节位置为163544;读取片段结束时间所对应的数据页的终止字节位置为17200881;于是,片段的字节范围即为[163544,17200881]。
步骤S4,向服务端请求并获得已映射出的片段字节范围,具体包括:
步骤S4-1,向服务端发送HTTP字节范围请求,以请求片段字节范围,具体包括:
客户端向服务端发送的HTTP字节范围请求的指令如下:
GET/oamm/fragments/concert.ogg HTTP/1.1
Host:dbws.hhu.edu.cn
Accept:video/*
Range:bytes=163544-17200881
步骤S4-2,从服务端返回的HTTP 206部分内容响应消息中读取片段字节范围,具体包括:
服务端从主资源文件中抽取相应字节范围后,返回的HTTP 206部分内容响应的消息如下:
HTTP/1.1206Partial Content
Accept-Ranges:bytes
Content-Length:17037338
Content-Type:video/ogg
Content-Range:bytes 163544-17200881/176665892
{binary data}(注:字节范围的二进制数据)
客户端从以上响应消息中抽取最后{binary data}部分,即得到片段字节范围。
步骤S5,修改片段字节范围中每个数据页的位置信息,并与头字节合成为片段资源文件,具体包括:
步骤S5-1,根据头字节来统计出主资源文件的逻辑流的个数、每个逻辑流的序列号、以及每个逻辑流的头页个数,具体包括:
首先,从主资源头字节中依次重复读取头页,当读取到一个字节范围为[58,3842]的头页(它的“header type”字段值为0,因此,该头页不是流起始页)时就停止读取,此时,读取到的全部流起始页的个数为1,也就是逻辑流的个数为1;然后,针对1个流起始页,读取这个流起始页的“serial number”字段值,得到该流起始页所对应的逻辑流的序列号1704092486;最后,逐一遍历头字节中的全部头页,每遍历到一个头页就将headerAccount1值加1(headerAccount1的初始值为0),这样就统计出这个序列号为1704092486的逻辑流的头页个数为2。
步骤S5-2,向服务端请求并获取用于修改片段字节范围的位置信息,具体如下:
首先,客户端向服务端请求字节范围[155352,163544],方法如下:其中,客户端的HTTP字节范围请求指令如下:
GET/oamm/fragments/concert.ogg HTTP/1.1
Host:dbws.hhu.edu.cn
Accept:video/*
Range:bytes=155352-163544
其中,服务端从主资源文件中抽取相应字节范围,并返回给客户端的HTTP 206部分内容响应如下:
HTTP/1.1206Partial Content
Accept-Ranges:bytes
Content-Length:8193
Content-Type:video/ogg
Content-Range:bytes 155352-163544/176665892
{binary data}(注:字节范围的二进制数据)
其次,从请求到的字节范围中读取最后1个数据页得到字节范围[159219,163543]。
最后,读取这个数据页的“granule position”字段值,得到相应的位置信息(即preGranulePos1)为470592,并读取这个数据页的“page sequence”字段值,得到相应的位置信息(即prePageSequence1)为38。
步骤S5-3,修改片段字节范围中每个数据页的位置信息,具体如下:
逐一遍历片段字节范围中全部数据页,每遍历到一个数据页就根据前述两个步骤中已获得的有关信息来修改该数据页的“granule position”字段值和“page sequence”字段值,修改方法为:以片段字节范围中第1个数据页(字节范围[163544,167818])为例,首先根据这个数据页的序列号来确定该数据页所属的逻辑流(其序列号为1704092486),然后将该数据页的“granule position”字段值(为481856)减去所属逻辑流所对应的位置信息470592,得到新值11264;最后将该数据页的“page sequence”字段值(为39)减去所属逻辑流所对应的位置信息38,再加上所属逻辑流所对应的头页个数2,得到新值3。
步骤S5-4,将修改后的片段字节范围与所得的头字节合成为新的片段资源文件,具体如下:
将所得的头字节和片段字节合成为一个字节流,并作为一个Ogg文件保存到本地。
我们已用Java SE 7.0实现了本发明的技术方案,并已在以下特定的网络环境下运行了以上具体实施例,目的是表明本发明技术方案与传统技术方案(即下载完整主资源文件)相比,节省网络通信带宽和缩短通信延时的实际效果。具体网络环境配置如下:
服务端:计算机型号:DELL PowerEdge R710;主要硬件配置:Intel(R)Xeon(R)CPUE5640,2.66GHz,12M Cache;Memory 16GB(8×2GB),1066MHz;操作系统:Windows Server2008R2Enterprise 64-bit,Service Pack 1;Web服务器:Apache Tomcat/6.0.33。
客户端:主要硬件配置:Intel(R)Core(TM)i5-2430M,2.4GHz;Memory 4GB;操作系统:Windows 7Ultimate edition 64-bit。
网络配置:协议为HTTP/1.1;带宽约9Mbps;下载速度约970KB/s。
在这样的网络环境下,客户端完成检索以上具体实施例中Ogg容器格式时间片段的网络带宽代价为16.779MB,是下载完整主资源文件的总带宽代价168.48MB的9.96%;客户端检索时间片段的耗时为17.64秒,是下载完整主资源文件的耗时178秒的9.91%。这些表明,本发明的技术方案比下载完整媒体资源的传统技术方案大大节省了网络带宽和缩短了通信延时,而且,本发明的技术方案无需改造现有的媒体服务器和无需扩充当前的HTTP协议,避免了对当前Web基础设施的改造。
本技术领域技术人员可以理解,本发明中所述的“客户端”与“服务端”是指HTTP/1.1协议(或未来的升级版)的国际标准中所述的“客户端”与“服务端”。根据HTTP/1.1协议的国际标准,“客户端”是指为发送请求(requests)的目的而与服务端建立连接(connections)的计算机程序,无论该计算机程序以何种方式运行于何种类型的客户端设备;“服务端”是指为响应(respond)客户端请求(requests)的目的而接受连接(connections)或由第三方代理其接受连接的计算机程序,无论该计算机程序以何种方式运行于何种类型的服务端设备。
本技术领域技术人员可以理解,本发明中已经讨论过的各种操作、方法、流程中的步骤、措施、方案可以被交替、更改、组合或删除。进一步地,具有本发明中已经讨论过的各种操作、方法、流程中的其他步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。进一步地,现有技术中的具有与本发明中公开的各种操作、方法、流程中的步骤、措施、方案也可以被交替、更改、重排、分解、组合或删除。
以上所述仅是本发明的部分实施方式,应当指出,对于本技术领域的普通技术人员来说,在不脱离本发明原理的前提下,还可以做出若干改进和润饰,这些改进和润饰也应视为本发明的保护范围。

Claims (6)

1.一种URI标识的Ogg格式时间片段的客户端HTTP检索方法,其特征在于,包括:
步骤S1,解析片段URI,获得该片段的主资源URI及片段的时间间隔;
步骤S2,向服务端请求并获得主资源的头字节,具体包括:
步骤S2-1,向服务端请求包含了主资源头字节的估计字节范围;
步骤S2-2,在主资源头字节的估计字节范围中确定主资源头字节的最后字节位置,并读取主资源的头字节;
步骤S3,运用折半搜索法向服务端请求,以将片段的时间间隔映射为片段的字节范围,具体包括:
步骤S3-1,向服务端请求并获取主资源的总字节数;
步骤S3-2,在主资源的总字节范围内以片段开始时间为搜索键进行递归式折半搜索,确定片段开始时间所对应的数据页;
步骤S3-3,在主资源的总字节范围内以片段结束时间为搜索键进行递归式折半搜索,确定片段结束时间所对应的数据页;
步骤S3-4,确定片段的时间间隔所对应的片段字节范围;
步骤S4,向服务端请求并获得已映射出的片段字节范围;
步骤S5,修改片段字节范围中每个数据页的位置信息,并与头字节合成为片段资源文件。
2.如权利要求1所述的方法,其特征在于,所述步骤S1进一步包括:
步骤S1-1,以片段URI中的“#”为分割点获取主资源URI部分和片段定址部分;
步骤S1-2,判断主资源URI部分是否符合RFC-3986URI语法,若否,则报错并终止;
步骤S1-3,判断片段定址部分是否符合媒体片段URI 1.0语法,若否,则报错并终止;
步骤S1-4,根据时间单位计算出以秒为计的片段开始时间与结束时间;
步骤S1-5,判断开始时间是否小于结束时间,若否,则报错并终止;
步骤S1-6,根据以秒为计的开始时间与结束时间计算出片段时间间隔。
3.如权利要求1所述的方法,其特征在于,所述步骤S2-1进一步包括:
设估计字节范围表示为[0,lastBytePos];
令lastBytePos=32KB,其中,计量单位KB表示千字节,即1024个字节,客户端向服务端请求字节范围[0,lastBytePos];
判断请求到的字节范围是否包含全部头字节,若是,则执行步骤S2-2,否则重复执行如下步骤:每次以步长32KB来增加lastBytePos,即令lastBytePos=lastBytePos+32KB,由客户端向服务端重新请求字节范围[0,lastBytePos],直到请求到的字节范围包含全部头字节为止;
进一步地,以上处理步骤中,判断字节范围[0,lastBytePos]是否包含全部头字节的方法如下:
在字节范围[0,lastBytePos]中找到存储了十六进制数“4F676753”的最后两个首字节位置position1和position2;
提取字节范围[position1,position2],得到一个Ogg页oggPage;
若oggPage的“granule position”字段值为0,则字节范围[0,lastBytePos]不包含全部头字节,否则字节范围[0,lastBytePos]包含了全部头字节。
4.如权利要求1所述的方法,其特征在于,所述步骤S3-2进一步包括:
折半搜索的搜索键为片段开始时间fragStartTime;
设搜索区间表示为[start,end],第一次递归时,令start=0,end=totalBytes-1,其中totalBytes表示主资源的总字节数,以后每次递归时,将根据上一次递归中搜索区间的中点数据页的时间戳与搜索键的比较结果来确定start和end,即确定新的搜索区间;
每次递归的执行步骤如下:
首先,计算搜索区间的中点的字节位置midPoint;
其次,向服务端请求字节范围[midPoint-8*1024,midPoint+8*1024];
再次,从该字节范围中读取中点数据页midDataPage,该数据页的字节范围表示为[position3,position4];
最后,将片段开始时间fragStartTime与中点数据页midDataPage的时间戳进行比较,确定下一次递归的搜索区间,或因搜索成功而结束本步骤,具体方法如下:
计算中点数据页midDataPage的时间戳timeStamp,将片段开始时间fragStartTime与midDataPage的时间戳timeStamp进行比较,根据不同比较结果作如下相应处理:
若fragStartTime小于timeStamp,则下一次递归搜索区间为[start,position3];
若fragStartTime大于timeStamp,则下一次递归搜索区间为[position4,end];
若fragStartTime等于timeStamp,则搜索成功,即midDataPage就是片段开始时间所对应的数据页,本步骤结束。
5.如权利要求1所述的方法,其特征在于,所述步骤S4进一步包括:
步骤S4-1,向服务端发送HTTP字节范围请求,以请求片段字节范围;
步骤S4-2,从服务端返回的HTTP 206部分内容响应消息中读取片段字节范围。
6.如权利要求1所述的方法,其特征在于,所述步骤S5进一步包括:
步骤S5-1,根据头字节来统计出主资源文件的逻辑流的个数、每个逻辑流的序列号、以及每个逻辑流的头页个数;
步骤S5-2,向服务端请求并获取用于修改片段字节范围的位置信息;
步骤S5-3,修改片段字节范围中每个数据页的位置信息;
步骤S5-4,将修改后的片段字节范围与所得的头字节合成为新的片段资源文件。
CN201410791102.XA 2014-12-18 2014-12-18 URI标识的Ogg格式时间片段的客户端HTTP检索方法 Active CN104580389B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201410791102.XA CN104580389B (zh) 2014-12-18 2014-12-18 URI标识的Ogg格式时间片段的客户端HTTP检索方法

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201410791102.XA CN104580389B (zh) 2014-12-18 2014-12-18 URI标识的Ogg格式时间片段的客户端HTTP检索方法

Publications (2)

Publication Number Publication Date
CN104580389A CN104580389A (zh) 2015-04-29
CN104580389B true CN104580389B (zh) 2017-12-01

Family

ID=53095547

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201410791102.XA Active CN104580389B (zh) 2014-12-18 2014-12-18 URI标识的Ogg格式时间片段的客户端HTTP检索方法

Country Status (1)

Country Link
CN (1) CN104580389B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN105045834B (zh) * 2015-06-26 2019-09-10 河海大学 一种uri标识的csv片段的http检索方法
CN111131019B (zh) * 2019-12-12 2021-06-22 华为技术有限公司 一种多路http通道复用的方法及终端

Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101577627A (zh) * 2009-06-17 2009-11-11 腾讯科技(深圳)有限公司 多媒体文件的下载播放系统及方法
CN103051931A (zh) * 2011-10-11 2013-04-17 中兴通讯股份有限公司 回看节目录制、播放方法、服务器、客户端及系统
CN103081504A (zh) * 2010-09-06 2013-05-01 韩国电子通信研究院 提供串流内容的方法及装置
CN103747065A (zh) * 2013-12-27 2014-04-23 河海大学 客户端http检索全索引容器格式媒体资源时间片段的方法

Patent Citations (4)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101577627A (zh) * 2009-06-17 2009-11-11 腾讯科技(深圳)有限公司 多媒体文件的下载播放系统及方法
CN103081504A (zh) * 2010-09-06 2013-05-01 韩国电子通信研究院 提供串流内容的方法及装置
CN103051931A (zh) * 2011-10-11 2013-04-17 中兴通讯股份有限公司 回看节目录制、播放方法、服务器、客户端及系统
CN103747065A (zh) * 2013-12-27 2014-04-23 河海大学 客户端http检索全索引容器格式媒体资源时间片段的方法

Also Published As

Publication number Publication date
CN104580389A (zh) 2015-04-29

Similar Documents

Publication Publication Date Title
CN109842613B (zh) 用于提供和接收媒体数据的方法和装置以及存储介质
CN103181186B (zh) 提供串流内容的装置及方法
US8577889B2 (en) Searching for transient streaming multimedia resources
US8166076B2 (en) Digital media metadata management
CN103081504B (zh) 提供串流内容的方法及装置
AU2010314582B2 (en) Method, system and network equipment for implementing HTTP-based streaming media service
CN103747065B (zh) 客户端http检索全索引容器格式媒体资源时间片段的方法
TW201123795A (en) System, method and apparatus for dynamic media file streaming
CN111512635B (zh) 用于选择性跳过媒体内容的方法和系统
KR101909250B1 (ko) 단말의 음성 정보에 기초하여 서비스 타입을 결정하는 음성 인식 서버, 서비스 타입에 따라 단말로 컨텐츠를 제공하는 컨텐츠 서버, 단말 및 방법
CN105828096B (zh) 媒体流文件的处理方法和装置
CN100469140C (zh) 一种在线播放中快速跳转的方法、终端及服务器
US20200351320A1 (en) Retrieval and Playout of Media Content
CN104580389B (zh) URI标识的Ogg格式时间片段的客户端HTTP检索方法
CN102387121B (zh) 管理服务器、影像分发控制系统及影像分发控制方法
KR101666918B1 (ko) 스트리밍 서비스에서의 영상 스킵 및 검색 처리를 위한 방법 및 그 장치
Van Lancker et al. Implementation strategies for efficient media fragment retrieval
KR101875074B1 (ko) 스트리밍 컨텐츠 제공 장치 및 방법
Mannens et al. A URI-based approach for addressing fragments of media resources on the Web
WO2013190446A1 (en) Continuity of content
CN101945032B (zh) 点对点网络中的文件下载方法及装置
KR101792863B1 (ko) 컨텐츠 스트리밍 장치 및 방법
KR20180082988A (ko) 스트리밍 컨텐츠 제공 장치 및 방법
CN109348297B (zh) 一种数据获取方法及装置
Sangkhum et al. An Automatic Filtering Approach for News Video Feeds on TCP/IP-Based Mobile Devices

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
GR01 Patent grant
GR01 Patent grant