著录项信息
专利名称 | 动态改变播放列表 |
申请号 | CN200910168375.8 | 申请日期 | 2009-08-31 |
法律状态 | 授权 | 申报国家 | 中国 |
公开/公告日 | 2010-03-03 | 公开/公告号 | CN101661504 |
优先权 | 暂无 | 优先权号 | 暂无 |
主分类号 | G06F17/30 | IPC分类号 | G;0;6;F;1;7;/;3;0;;;H;0;4;L;2;9;/;0;6查看分类表>
|
申请人 | 奥多比公司 | 申请人地址 | 美国加利福尼亚州
变更
专利地址、主体等相关变化,请及时变更,防止失效 |
权利人 | 奥多比公司 | 当前权利人 | 奥多比公司 |
发明人 | A·卡普尔;K·斯特里特;A·惠尔罗克 |
代理机构 | 北京市金杜律师事务所 | 代理人 | 王茂华 |
摘要
本申请涉及用于动态改变播放列表的方法和设备。具体地,在一个方面,从服务器接收与播放列表相关联的流。该播放列表包括流的排序,这些流进行排队以便按照所述排序从服务器进行客户端侧回放。访问与至少一个流的接收和回放相关联的客户端侧回放状况。响应于所访问的客户端侧回放状况,客户端侧应用请求改变播放列表的流。该请求标识期望的播放列表改变,并且包括该控制播放列表改变的信息。按照响应于所述请求而进行的播放列表改变,来显示播放列表的流。
1.一种用于改变播放列表的计算机实现的方法,包括:
从服务器接收与所述播放列表相关联的流,所述播放列表包括流的排序,所述流进行排队以便按照所述排序从所述服务器进行客户端侧回放;
访问与至少一个所述流的接收和回放相关联的客户端侧回放状况;
响应于所述客户端侧回放状况,由客户端侧应用请求改变所述播放列表的流,所述请求标识期望的播放列表改变,并且包括控制所述播放列表改变的信息;以及按照响应于所述请求而进行的播放列表改变,来显示所述播放列表的流。
2.如权利要求1的方法,其中所述播放列表的流包括以下至少一个:音频流、视频流、具有音频和视频的混合流、基于文本的数据、静态图像数据以及用户定义的数据。
3.如权利要求2的方法,其中所述流包括即时流。
4.如权利要求1的方法,其中访问客户端侧回放状况包括访问以下至少一个:网络带宽可用性,客户端处理能力,以及用户阅览统计。
5.如权利要求1的方法,其中所述期望的播放列表改变包括以下至少一个:(i)对所述播放列表中的流进行重新排序;(ii)将流从所述播放列表中移除;以及(iii)在所述播放列表中的指定插入点处将新的流插入所述播放列表。
6.如权利要求1的方法,其中所述期望的播放列表改变包括:将所述播放列表中的流替换为该流的不同版本,所述不同版本与被替换的流需要不同的网络和处理资源。
7.如权利要求1的方法,其中所述期望的播放列表改变包括:将所述播放列表中的流替换为不同的流,所述不同的流与被替换的流具有不同的内容。
8.如权利要求1的方法,其中所述期望的播放列表改变包括:将当前播放的流替换为新的流,其中所述请求标识所述当前播放的流和所述新的流,并且包括控制信息,所述控制信息指定是否在中间位置替换所述当前播放的流。
9.如权利要求1的方法,其中所述播放列表由所述客户端侧应用创建。
10.一种用于改变播放列表的设备,包括:
接收装置,用于从服务器接收与所述播放列表相关联的流,所述播放列表包括流的排序,所述流进行排队以便按照所述排序从所述服务器进行客户端侧回放;
访问装置,用于访问与至少一个所述流的接收和回放相关联的客户端侧回放状况;
请求装置,用于响应于所述客户端侧回放状况,由客户端侧应用请求改变所述播放列表的流,所述请求标识期望的播放列表改变,并且包括控制所述播放列表改变的信息;以及显示装置,用于按照响应于所述请求而进行的播放列表改变,来显示所述播放列表的流。
11.如权利要求10的设备,其中所述播放列表的流包括以下至少一个:音频流、视频流、具有音频和视频的混合流、基于文本的数据、静态图像数据以及用户定义的数据。
12.如权利要求11的设备,其中所述流包括即时流。
13.如权利要求10的设备,其中所述访问装置用于访问以下至少一个:网络带宽可用性,客户端处理能力,以及用户阅览统计。
14.如权利要求10的设备,其中所述期望的播放列表改变包括以下至少一个:(i)对所述播放列表中的流进行重新排序;(ii)将流从所述播放列表中移除;以及(iii)在所述播放列表中的指定插入点处将新的流插入所述播放列表。
15.如权利要求10的设备,其中所述期望的播放列表改变包括:将所述播放列表中的流替换为该流的不同版本,所述不同版本与被替换的流需要不同的网络和处理资源。
16.如权利要求10的设备,其中所述期望的播放列表改变包括:将所述播放列表中的流替换为不同的流,所述不同的流与被替换的流具有不同的内容。
17.如权利要求10的设备,其中所述期望的播放列表改变包括:将当前播放的流替换为新的流,其中所述请求标识所述当前播放的流和所述新的流,并且包括控制信息,所述控制信息指定是否在中间位置替换所述当前播放的流。
18.如权利要求10的设备,其中所述播放列表由所述客户端侧应用创建。
19.一种用于改变播放列表的计算机实现的方法,包括:
向客户端流式传输与所述播放列表相关联的媒体流,所述播放列表包括流的排序,所述流进行排队以便按照所述排序进行客户端侧回放;
从客户端侧应用接收响应于检测到的客户端侧状况的、改变所述播放列表的请求,所述请求标识期望的播放列表改变,并且包括控制所述播放列表改变的信息;
基于接收到的所述请求来改变所述播放列表;以及
按照所述改变,流式传输与所述播放列表相关联的媒体流。
20.如权利要求19的方法,其中与所述播放列表相关联的流包括以下录制的或即时的内容的至少一个:音频流、视频流、具有音频和视频的混合流、基于文本的数据、静态图像数据以及用户定义的数据。
21.如权利要求19的方法,其中改变所述播放列表包括以下至少一个:(i)对所述播放列表中的流进行重新排序;(ii)将流从所述播放列表中移除;以及(iii)在所述播放列表中的指定插入点处将新的流插入所述播放列表。
22.如权利要求19的方法,其中改变所述播放列表包括:将所述播放列表中的流替换为该流的不同版本,所述不同版本与被替换的流需要不同的网络和处理资源。
23.如权利要求19的方法,其中改变所述播放列表包括:将所述播放列表中的流替换为不同的流,所述不同的流与被替换的流具有不同的内容。
24.如权利要求19的方法,其中改变所述播放列表包括:将当前流式传输的流替换为新流,在所述新流中的最早关键帧处替换所述当前流式传输的流,使得所述当前流式传输的流的回放看起来没有中断。
25.一种用于改变播放列表的设备,包括:
流式传输装置,用于向客户端流式传输与所述播放列表相关联的媒体流,所述播放列表包括流的排序,所述流进行排队以便按照所述排序进行客户端侧回放;
接收装置,用于从客户端侧应用接收响应于检测到的客户端侧状况的、改变所述播放列表的请求,所述请求标识期望的播放列表改变,并且包括控制所述播放列表改变的信息;
改变装置,用于基于接收到的所述请求来改变所述播放列表;
其中在所述改变装置改变所述播放列表之后,所述流式传输装置还用于:按照所述改变,流式传输与所述播放列表相关联的媒体流。
26.如权利要求25的设备,其中与所述播放列表相关联的流包括以下录制的或即时的内容的至少一个:音频流、视频流、具有音频和视频的混合流、基于文本的数据、静态图像数据以及用户定义的数据。
27.如权利要求25的设备,其中改变所述播放列表包括以下至少一个:(i)对所述播放列表中的流进行重新排序;(ii)将流从所述播放列表中移除;以及(iii)在所述播放列表中的指定插入点处将新的流插入所述播放列表。
28.如权利要求25的设备,其中改变所述播放列表包括:将所述播放列表中的流替换为该流的不同版本,所述不同版本与被替换的流需要不同的网络和处理资源。
29.如权利要求25的设备,其中改变所述播放列表包括:将所述播放列表中的流替换为不同的流,所述不同的流与被替换的流具有不同的内容。
30.如权利要求25的设备,其中改变所述播放列表包括:将当前流式传输的流替换为新流,在所述新流中的最早关键帧处替换所述当前流式传输的流,使得所述当前流式传输的流的回放看起来没有中断。
动态改变播放列表\n技术领域\n[0001] 本发明总体上涉及递送和呈现多媒体内容。\n背景技术\n[0002] 流式传输是一种用来将多媒体内容递送给最终用户的技术。流式传输包括在将媒体内容递送给用户的同时,连续地向用户显示该内容。流式传输可以用来向最终用户递送各种类型的数字媒体。流媒体例如可以包括录制的媒体内容(例如,录制的视频)和/或即时媒体内容(例如,来自用户网络摄像头的视频)。\n[0003] 发布者可以利用一个或多个编解码器来对内容进行编码,从而创建用于流式传输的内容(例如,音频和视频)。流媒体服务器继而可以通过网络(例如,因特网)接收所创建的流以及将流传送给客户端设备。客户端可以包括客户端侧播放器,其为最终用户解压缩和显示流。\n[0004] 流媒体环境可以使用虚拟机来向最终用户呈现流式传输内容。虚拟机是自包含的操作环境,其允许程序在虚拟机平台本身之中运行,如同虚拟机是单机计算机一样。虚拟机可以是程序本身,其嵌入在操作系统或者其他软件应用之中。虚拟机的一个示例是Player运行时(可从CA,San Jose的Adobe Systems公司获得),其可\n以用来运行包括ActionScript和Shockwave Flash(SWF)文件在内的 文件。\n[0005] 定制的图像阅览器和视频播放器可以在虚拟机上运行,并且向最终用户呈现流媒体。这些定制的应用可以用来协助web应用提供交互式富媒体内容。配置用于在平台上执行的应用可以包含在SWF文件中,而SWF文件可以由客户端\n侧SWF播放器软件来处理。媒体内容本身可以保持为与SWF文件分离,并且可以在运行时加载到SWF中以便回放。\n[0006] 在流式传输期间可以使用播放列表。播放列表可以包括排队等待播放的流的列表。播放列表中的流可以流式传输给用户,并且按照其排队的顺序一个接一个的从源(例如,流媒体服务器)进行播放。来自播放列表的流可以通过定制的图像阅览器、视频播放器和音频播放器(其可以与各种其他应用相关联)呈现给最终用户。\n发明内容\n[0007] 本说明书描述涉及动态改变包括流式传输内容的播放列表的技术。播放列表可以响应于客户端侧反馈而改变,所述反馈可以包括运行时性能信息和/或用户偏好。\n[0008] 总体上,在一个方面,提供一种计算机实现的方法。该方法包括:从服务器接收与播放列表相关联的流,该播放列表包括流的排序,这些流进行排队以便按照该排序从服务器进行客户端侧回放;访问与至少一个流的接收和回放相关联的客户端侧回放状况;响应于该客户端侧回放状况,由客户端侧应用请求改变该播放列表的流,该请求标识期望的播放列表改变,并且包括控制播放列表改变的信息;以及按照响应于该请求而进行的播放列表改变,来显示该播放列表的流。其他实施方式包括相应的系统、装置和计算机程序产品。\n[0009] 实现可以包括以下一个或多个特征。例如,在某些实现中,播放列表的流包括以下至少一个:音频流、视频流、具有音频和视频的混合流、基于文本的数据、静态图像数据以及用户定义的数据。流可以包括即时流。在某些实现中,播放列表由客户端侧应用创建。\n[0010] 访问客户端侧播放列表状况可以包括访问以下至少一个:网络带宽可用性,客户端处理能力,以及用户阅览统计。期望的播放列表改变可以包括以下至少一个:(i)播放列表中流的重新排序;(ii)将流从播放列表中移除;以及(iii)在播放列表中的指定插入点处插入新的流。期望的播放列表改变可以包括将播放列表中的流替换为该流的不同版本,该不同版本与被替换的流需要不同的网络和处理资源。期望的播放列表改变可以包括将播放列表中的流替换为不同的流,该不同的流具有与被替换的流不同的内容。期望的播放列表改变可以包括将当前播放的流替换为新的流,其中所述请求标识当前播放的流和新的流,并且包括指定是否在中间位置替换当前播放流的控制信息。\n[0011] 总体上,在另一方面,提供一种计算机实现的方法。该方法包括:向客户端流式传输与播放列表相关联的媒体流,该播放列表包括流的排序,这些流进行排队以便按照所述排序进行客户端侧回放;从客户端侧应用接收响应于检测到的客户端侧状况的、改变播放列表的请求,该请求标识期望的播放列表改变,并且包括控制播放列表改变的信息;基于接收到的请求来改变播放列表;以及按照所述改变,流式传输与播放列表相关联的媒体流。其他实施方式包括相应的系统、装置和计算机程序产品。\n[0012] 实现可以包括以下一个或多个特征。例如,在某些实现中,与播放列表相关联的流包括以下录制的或即时的内容的至少一个:音频流、视频流、具有音频和视频的混合流、基于文本的数据、静态图像数据以及用户定义的数据。\n[0013] 改变播放列表可以包括以下至少一个:(i)对播放列表中的流重新排序;(ii)将流从播放列表中移除;以及(iii)在播放列表中的指定插入点处将新的流插入播放列表。\n改变播放列表可以包括将播放列表中的流替换为该流的不同版本,该不同版本与被替换的流需要不同的网络和处理资源。改变播放列表可以包括将播放列表中的流替换为不同的流,该不同的流与被替换的流具有不同的内容。改变播放列表可以包括将当前流式传输的流替换为新的流,其中在新流中的最早关键帧处替换当前流式传输的流,使得当前流式传输的流的回放看起来没有中断。\n[0014] 总体上,在另一方面,提供一种系统。该系统包括一个或多个处理器用来执行操作,所述操作包括:向客户端流式传输与播放列表相关联的媒体流,该播放列表包括流的排序,这些流进行排队以便按照所述排序进行客户端侧回放;从客户端侧应用接收响应于检测到的客户端侧状况的、改变播放列表的请求,该请求标识期望的播放列表改变,并且包括控制播放列表改变的信息;基于接收到的请求来改变播放列表;以及按照所述改变,流式传输与播放列表相关联的媒体流。\n[0015] 实现可以包括以下一个或多个特征。例如,在某些实现中,与播放列表相关联的流包括以下录制的或即时的内容的至少一个:音频流、视频流、具有音频和视频的混合流、基于文本的数据、静态图像数据以及用户定义的数据。\n[0016] 在某些实现中,改变播放列表可以包括以下至少一个:(i)对播放列表中的流重新排序;(ii)将流从播放列表中移除;以及(iii)在播放列表中的指定插入点处将新的流插入所述播放列表。改变播放列表可以包括将播放列表中的流替换为该流的不同版本,该不同版本与被替换的流需要不同的网络和处理资源。改变播放列表可以包括将播放列表中的流替换为不同的流,该不同的流与被替换的流具有不同的内容。改变播放列表可以包括将当前播放的流替换为新的流,其中在新流中的最早关键帧处替换当前流式传输的流,使得当前流式传输的流的回放看起来没有中断。\n[0017] 在某些实现中,该系统还包括一个或多个处理器用来执行操作,所述操作包括:接收与播放列表相关联的流式传输的媒体流;检测与至少一个接收的流的接收和回放相关联的客户端侧回放状况;发送改变播放列表的请求;以及按照该改变来显示播放列表的流。\n[0018] 可以实现本说明书中所描述主题的方面,以实现以下一个或多个和/或其他优点。按照本公开的实现可以用来动态地将播放列表中的一个流替换为另一流,而不影响播放列表中的其他流。切换可以在适当的点自动地进行,使得回放看起来是无缝的并且没有干扰或停顿。而且,在有些示例中,可以在无需重置或者重新创建播放列表的情况下对播放列表的流重新排序。而且,按照本公开的实现可以提供对播放列表改变的应用控制。例如,如果服务器已经开始传输来自播放列表的内容,则应用可以决定服务器是否应当从当前流式传输的内容流切换为另一流。\n[0019] 在播放列表中流的回放期间,带宽可用性和/或系统资源可能变化(例如,由于系统上运行的其他应用)。在这种情况下,可能期望将播放列表中的一个或多个流替换为具有相同内容、但是以不同质量编码的流。按照本公开的实现可以利用不同的分辨率或者比特率版本来更新流式传输内容,以适应可用的带宽和系统资源。可以更新播放列表以包括这些不同版本,而无需重新创建播放列表,也无需在进行更新时中断回放体验。\n[0020] 作为示例,用户在播放列表中对500kbps的视频进行排队,以用于高带宽环境的介质。服务器继而开始流式传输该播放列表,但是在回放期间,网络仅提供300kbps的带宽。为了避免由于该降低的带宽而使视频断续,当前播放的视频应当切换为较低比特率的版本,诸如比特率小于300kbps的版本。而且,播放列表中排队等候的所有其他高比特率(在此例中,是高于300kbps)视频流同样应当切换为其较低比特率版本。按照本公开的实现可以将受带宽降低影响的相关流更新为其较低比特率版本,而不造成任何回放暂停。而且,如果需要切换的目标流已经在播放之中,则可以利用应用的API(应用编程接口)控制对其进行切换或者不进行切换。\n[0021] 在另一情况下,应用可能希望根据用户的阅览历史来切换播放列表中的流。例如,基于先前阅览器行为,应用可能希望在播放列表中应当保持不变的其他视频流之间的某点,将播放列表中的特定流替换为具有不同内容的完全不同的流(不仅仅是先前情况中相同内容的不同质量或者比特率的版本)。作为示例,应用可能希望将播放列表中的一个流式传输的商业广告替换为另一个商业广告,其中商业广告发生在应当保持不变的即时视频流之间。在这种情况下,可能不希望在任何中间位置(例如,在流的中间)切换流,因为这将在切换流时导致回放内容的突变。按照本公开的实现可以允许应用控制和指定切换的类型,以避免这类突变。\n[0022] 本说明书中所描述主题的一个或多个实施方式的细节在附图和下文描述中记载。\n根据描述、附图以及权利要求书,其他特征、方面和优点将变得易见。\n附图说明\n[0023] 图1是示出了示例数据流的图示。\n[0024] 图2是示出了播放列表的概念性概观的框图。\n[0025] 图3是示出了示例数据处理环境的框图。\n[0026] 图4是示出了示例播放列表改变过程的流程图。\n[0027] 图5是示出了另一示例播放列表改变过程的流程图。\n[0028] 图6是示出了示例流替换过程的流程图。\n[0029] 图7是示出了示例流替换过程的示例方面的流程图。\n[0030] 在各个附图中,类似的标号表示类似的元素。\n具体实施方式\n[0031] 图1示出了示例数据流100,其中播放列表120包括可以动态改变的一个或多个流\n122。数据流100是一个示例,而并非意在限制。因此,在不脱离本公开范围的情况下,可以对数据流100进行各种修改。\n[0032] 在此使用的“播放列表”可以表示一个或多个内容流的排序,这些内容流进行排队,以便按照其排队的顺序来进行流式传输和播放。在某些示例中,播放列表可以通过XML(可扩展标记语言)实现,并且可以包括标识播放列表中内容流的各种信息。在此使用的“内容流”或者“流”可以表示能够呈现给用户的任何媒体或者数据项。例如,流可以包括视频内容、音频内容和/或音频和视频内容的组合。在某些实现中,与播放列表相关联的流还可以包括各种其他数据,诸如基于文本的数据、静态图像数据和/或用户定义的数据。\n[0033] 可以按照各种格式来创建和存储流,其可以使用各种压缩方案(例如,有损压缩和/或无损压缩)以及各种数据结构(例如,光栅图形和/或矢量图形)。可以按照支持同步音频和视频的格式来创建和存储流。在某些示例中,流可以表示为MPEG-4(移动图像专家组)格式、SWF格式、FLV(Flash视频文件)格式和/或F4V格式。各种其他格式也是可能的,包括波形音频(WAV)、音频互换文件格式(AIFF)、自由无损音频编解码器(FLAC)、Apple无损、WindowsMedia Audio(WMA)、MP3、高级音频编码(AAC)、GIF(图像互换格式)、PNG(便携式网络图形)以及HTTP(超文本传输协议)。其他格式也是可能的。\n[0034] 在数据流100的流式传输105阶段期间,与播放列表120相关联的流122可以从源110流式传输到播放器150。在此使用的“流式”(或者用作动词时的术语“流式传输”)表示递送流的比特,使得在将该流递送给用户的同时连续地向用户显示该流。在将内容流式传输到目的地时,在递送比特的同时在目的地显示该内容,继而丢弃该内容,而不将其持久地本地保存在目的地。\n[0035] 流源110例如可以包括媒体服务器或者网络中心,其配置用于通过网络(诸如,互联网)流式传输内容。在某些实现中,流源110可以包括可从CA,San Jose的Adobe Systems公司获得的 媒体服务器(FMS)系统。流源110可以维护播放列表120。\n在某些示例中,播放列表120中的每个流122可以与存储在流源110中或流源110可访问的相应文件相关联。例如,每个流122可以与流源110维护的或者可访问的FLV或者其他类型的文件相关联。播放列表120可以包括指向与内容流122对应的文件的指针。\n[0036] 播放器150可以包括为最终用户处理和显示流的任何机制。播放器150例如可以包括客户端侧虚拟机,其配置作为单机播放器或者浏览器(诸如,Mozilla Firefox、Opera、Safari以及Internet Explorer)的插件。在某些示例中,播放器150可以包括播放器运行时(可以从CA,San Jose的Adobe Systems公司获得),其\n例如可以运行SWF文件、FLV文件和/或F4V文件。\n[0037] 在流式传输105期间,可以在流源110与播放器150之间建立持久连接。该连接可以促进从源110到播放器150的流式传输105。在某些实现中,可以使用TCP(传输控制协议)、UDP(用户数据报协议)和/或其他协议来创建该连接。例如,播放器150可以使用RTMP(实时消息收发协议)和/或RTMFP(实时媒体流协议)来连接至流源110。\n[0038] 播放列表120可以按照各种方式来创建。在某些示例中,播放列表120可以由流源110创建。在某些示例中,在播放器150上运行的客户端侧应用160可以参与播放列表\n120的创建。例如,应用160可以对流源110进行一个或多个调用124,以便将各个内容流(例如,流122)添加到播放列表120中。这些流可以一个接一个的附加,以便按照同样的顺序在列表中播放。在某些示例中,如下所述,可以在指定的插入点和删除点处在播放列表中插入流或者删除流。流源110维护播放列表120,并且在流式传输105阶段期间将这些流的比特递送至播放器150。\n[0039] 在此使用的术语“应用”表示具有用户可感知的某些已定义目的的任何计算机程序。应用可以包括各种计算机程序(也称为程序、软件、软件应用、软件模块或者代码),其包含可由处理器执行和/或解释的指令。应用可以包括一个或多个文件,这些文件包含各种信息,诸如源代码、机器代码、库、数据、文档、配置信息、图标或者应用以及用于该应用的安装过程可以使用的任何其他资源。应用(或者其部分)可以是依赖于平台的或者平台无关的。在某些实现中,应用160可以表示使用各种应用开发框架和/或web开TM\n发工具创建的应用,诸如 BUILDER 软件、 软件和\n软件,这些软件可以从CA,San Jose的Adobe Systems公司\n获得。\n[0040] 在某些示例中,一个或多个发布者190(其在地理上可以是分散的)可以向流源\n110提供内容流(例如,流122),以便包含到播放列表120中。发布者可以包括创建、更新、分发、拥有或者以其他方式控制或管理多媒体内容的任何实体。发布者190例如可以包括软件开发者。备选地,发布者190例如可以包括最终用户。在某些示例中,发布者190可以向流源110提供录制的或者即时的内容(例如,来自网络摄像头),以便流式传输给其他用户。在某些实现中,发布者190可以与应用160或者其他应用相关联。\n[0041] 在应用160正在运行并且开始显示流(例如,流122)的同时,可以开始进行多个运行时以及动态行为。例如,应用160可以部署到具有多样化的网络和系统可用性程度的各种异构环境中。相同的应用可以在具有高带宽可用性的环境处运行,或是在带宽不足的端点处运行,所述端点不能足够快地接收流从而按照视频被编码的速率来显示它们。系统处理资源也可能变化,这例如是由其他应用的需求引起的。\n[0042] 为了考虑到这些运行时和动态行为以及其他客户端侧状况,数据流100包括事件监测170阶段。事件监测170可以在贯穿数据流100中各个时间点进行(包括流式传输\n150期间)。基于可修改的设置,事件监测170可以是周期性的(例如,每秒、每30秒、每5分钟等)。事件监测170对于最终用户而言可以是透明的,并且其可以在最终用户的控制和指示下执行。\n[0043] 在事件监测170期间,播放器150可以监测和/或访问各种客户端侧状况,这些状况可以用作动态改变180播放列表120的基础。例如,事件监测170可以包括检测和/或访问运行时性能信息172和/或关于用户偏好174的信息。运行时性能信息172例如可以包括:网络带宽、客户端侧处理资源(例如,处理器利用率)、功率状况(例如,电池电量低、节能操作模式等)、客户端侧音频绘制能力(例如,扬声器能力、声道属性(多声道、立体声、单声道)、支持的频率、高清能力等)、客户端侧视频绘制能力(例如,支持的分辨率、屏幕大小、高清能力等)以及与流122的客户端侧回放相关联的各种其他性能状况。关于用户偏好174的信息例如可以包括:用户活动、阅览历史和/或影响用户活动和偏好的各种其他状况。该信息可以包括如下指示:用户点击或者以其他方式选择特定的流(例如,商业广告)和/或用户阅览特定内容(例如,播放列表中的流)所花费的时间量。在某些实现中,用户偏好可以实现在应用160中。运行时性能信息172和/或用户偏好174可以用来构建用于播放列表改变180的启发。\n[0044] 在数据流100期间的各个时刻,播放器150可以向应用160提供事件监测170的结果。可以利用控制逻辑165来配置应用160,该控制逻辑165允许应用进行关于改变180播放列表120的决策。在某些示例中,该控制165可以使用API来实现。播放器150可以在播放列表120的回放期间向应用160提供事件监测结果,而应用160可以(使用控制165)进行关于动态改变180播放列表120中一个或多个流(包括播放器150当前正在播放的流)的动态决策。尽管将控制165示出为应用160的一部分,但是控制165可以包括在应用160、播放器150或者应用和播放器之中。在某些示例中,控制165的一个或多个方面可以在应用160和播放器150之间分布,作为用于其他应用的可分布式库,以便将其他应用嵌入在内。\n[0045] 应用160例如可以通过向流源110提供适当的反馈175,来实现对播放列表的动态改变180。反馈175可以包括针对基于事件监测170的动态改变180的请求。动态改变\n180可以包括对播放列表120中的一个或多个流的任何类型的改动。示例改变包括但不限于:在开始流式传输之前或者甚至在流式传输之中(此时原始项已经在进行流式传输),将播放列表中的项替换为另一项;对播放列表中的流进行重新排序;以及从播放列表中移除一个或多个流;向播放列表中插入新的流。替换流可以包括:将播放列表中的特定流切换为该流的不同版本(例如,从500kbps视频切换为300kbps视频)。替换流还可以包括:将播放列表中的流切换为另一流,此另一流的内容与所替换流的内容无关和/或不同。\n[0046] 在某些示例中,反馈175可以实现响应于降级状况的改变180,其中降级状况诸如降低的网络带宽、降低的功率、降低的处理能力等。在这些情况下,改变180可以包括将播放列表120的流替换为相同内容的降档或者降级版本。例如,为了避免由于检测到的网络带宽下降而使视频断续,应用160可以请求流源110将播放列表120中的一个或多个流替换为较低比特率版本。作为另一示例,应用160可以请求流源110将播放列表120的一个或多个流替换为较低清晰度版本(例如,从高清晰度到标准清晰度)。其他示例改变180可以包括:从全屏版本切换为部分屏幕版本(例如,在浏览器中)、从混合音频/视频切换为纯音频(或者纯视频)、从高分辨率切换为低分辨率,等等。\n[0047] 反之,为了利用客户端侧环境的全部能力,反馈175可以实现响应于改进状况的改变180,其中改进状况例如提高的网络带宽、提高的功率、提高的处理能力等。在这些情况下,改变180可以包括将播放列表120的流替换为相同内容的升级版本。例如,应用160可以请求流源110将播放列表120的一个或多个流替换为较高比特率版本。作为另一示例,应用160可以请求流源110将播放列表120的一个或多个流替换为较高清晰度版本(例如,从标准清晰度到高清晰度)。其他示例替换180包括从部分屏幕版本(例如,在浏览器中)切换为全屏版本、从纯音频(或者纯视频)切换为混合的音频/视频、从立体声版本切换为多声道版本、从低分辨率切换为高分辨率等。\n[0048] 除了实现涉及流的升级和降级版本的替换之外,反馈175可以实现以下改变,这些改变将播放列表中的流替换为具有无关和/或不同内容的无关流或者不同流。这些类型的改变180可以响应于检测到的用户偏好,诸如阅览历史。例如,基于阅览历史,应用160可以确定:播放列表120中的第一流应当替换为与第一流无关和/或不同的第二流(其可以不在播放列表中)。第一流和第二流例如可以是面向不同受众的不同商业广告。\n[0049] 为了实现改变180,反馈175可以包括一个或多个请求,所述请求包含标识期望的改动的适当信息。例如,为了实现流替换,反馈175可以包括如下请求,该请求包括当前在播放列表120中的流的名称,以及替换流的名称。在接收到该请求之后,流源110可以在播放列表中查找旧流名称,并将其替换为新流。如果流源110已经在流式传输旧流的比特,则其可以计算不会在回放期间在播放器150上造成任何干扰或者赝像的情况下,切换为新流的最近时帧。\n[0050] 不论是请求流的升级/降级版本还是具有无关和/或不同内容的流,应用160可以在反馈175中包括控制信息,该控制信息指定期望的切换类型以及期望的切换行为。此控制信息可以基于根据事件监测170构建的各种启发。对于将流替换为具有无关或者不同内容的其他流而言,控制信息可能尤其有用。例如,当新流和旧流彼此完全无关时,如果流源110已经开始流式传输旧流,则应用160和/或播放器150可能不希望切换流,因为这样做将导致回放期间的内容突变。由此,应用160和/或播放器150具有用来指定播放列表流是否应当整体或者部分切换的控制。播放器150和流源110还可以具有指定播放列表\n120的插入或者删除模式的控制能力,从而使新流可以插入在旧流之前或者之后,或者可以从播放列表中删除旧流。流源110和播放器150还可以具有指定应当替换旧流的新流的开始点或者偏移以及长度的能力。\n[0051] 在某些实现中,播放列表(例如,播放列表120)可以在客户端创建(例如,由客户端侧应用创建),而在通过网络流式传输内容的服务器(例如,流源110)处改变。各种其他实现同样位于本公开的范围之内。例如,播放列表最初可以在媒体服务器处创建,并继而下载到客户端,并在客户端处改变。作为另一示例,播放列表最初可以在服务器处创建,并继而下载到客户端。播放列表继而在服务器处改变,并且可以将改变后的版本提供给客户端。\n在另一实现中,播放列表可以由执行流式传输以外的服务器来主控。例如,一个服务器可以执行流式传输,而另一服务器可以主控播放列表和改变逻辑。\n[0052] 图2示出了按照至少某些实现的示例播放列表200。图2仅仅是示例性的,其他播放列表实现也在本公开的范围之内。如图所示,播放列表200可以包括一个或多个流\n210(1)-210(N)。每个流210可以包括音频内容、视频内容或者二者。流210可以包括利用一个或多个编解码器(例如,H.264、On2VP6和/或Sorenson Spark视频编解码器)编码的内容。播放列表200可以通过XML、ActionScript或者任何其他适当的语言来实现。播放列表200可以由流媒体服务器(例如, 媒体服务器系统,可以从CA,\nSan Jose的Adobe Systems公司获得)来维护,并且播放列表210中的每个流210可以对应于该媒体服务器维护或者可访问的文件(例如,SWF文件、FLV文件和/或F4V文件)。响应于来自播放器应用的命令,可以在一个或多个数据结构(例如,FMS数据结构)中内部维护播放列表。\n[0053] 在某些实现中,流210可以包括利用一个或多个关键帧220编码的一个或多个流,以及用于改变关键帧以重现关键帧之间的中间帧或者增量帧225的中间信息。在流的回放期间,可以对已编码的流进行解压缩和解码。关键帧220可以包括内容的部分,并且可以提供解压缩期间所需的信息,以适当地更新显示(例如,以反映内容的变动,诸如图像移动)。流中所包括中间信息可以提供更新,该更新能够渐进式地重现内容。只要流(例如,视频)的内容无法使用中间信息根据先前的关键帧进行重现时,流210便可以包括新的关键帧220。\n[0054] 在某些实现中,播放列表200可以与时间线相关联。时间线可以将播放列表200的总计运行时间划分为分段或者帧。播放列表200的每个流210可以在时间线上的指定位置处放置在时间线上。在某些示例中,播放列表200可以在服务器上存储的列表类数据结构中实现。播放列表200中的每个流210可以具有开始时间和结束时间。播放列表的流可以首尾相接地设置,以构建组合时间线。\n[0055] 在某些实现中,改变播放列表可以包括改变与播放列表相关联内容和时间线。例如,在将新流包含到播放列表中时,可以按照新流对原始时间线重新排序。由此,如果特定流切换为较短的流,则相应的时间线可以缩短。\n[0056] 图3示出了示例数据处理环境300,其中,播放列表可以动态改变。独立的计算平台310和315每个都包括硬件和软件。计算平台310可以配置为流媒体服务器,而平台315可以配置为回放客户端(例如,最终用户计算机)。客户端315例如可以包括个人计算机或者工作站、膝上型计算机、移动电话、机顶盒、手持设备或者可以提供回放功能的任何其他适当的设备。\n[0057] 计算机平台310和315在地理上可以是分散的,并且经由网络375可操作地耦合。\n网络375可以包括一个或多个电信网络,诸如计算机网络、电话或者通信网络、因特网等。\n网络375可以包括共享的、公共的或者专用的数据网络,包括广域网(例如,WAN)或者局域网(例如,LAN)。\n[0058] 在图3所示的示例配置中,计算机平台310和/或315上的硬件可以包括以下一个或多个:网络接口352,处理器354,输出设备356,输入设备358,存储设备360以及其他设备362。一个或多个系统总线可以将这些组件互连。这些元件的数目、标识和布置并不限于所示情况,而是可以包括附加的和/或不同的元件或者将其与所示元件耦合。此外,平台\n310和315可以包括少于所示的组件。尽管利用类似的组件来描绘,但是平台310和315可以不同地配置,每个平台具有与附图中所示相比较多、较少或者不同的元件。例如,客户端平台315可以是移动设备,其具有少于或者不同于服务器310中包括的组件。\n[0059] 网络接口352辅助与网络(诸如,网络375)的连通性。网络接口352可以是用于辅助计算机平台与网络375之间的单向或者双向数据传输的任何适当的有线机制(例如,IEEE(国际电子电气工程师协会)1394、通用串行总线(USB)等)或者无线机制(例如,TM\nIEEE802.11 , 等)。网络接口352可以包括一个或多个网络卡和/或\n数据和通信端口。\n[0060] 处理器354可以执行来自存储设备的指令,在计算机平台的组件之间路由信息,和/或执行对数据的各种操作。每个平台310和315可以包括任何数目的通用处理器和/或专用处理器,其协同操作或者独立操作。在某些示例中,处理器354可以包括一个或多个专用集成电路(ASIC)和/或各种其他电路。处理器354可以包括各种逻辑元件和架构(例如,冯诺依曼架构、平行架构等),并且可以执行各种类型的计算操作,诸如串行计算和并行计算。\n[0061] 输出设备356可以呈现文本、图像、视频、音频或者任何其他类型的信息。输出设备356的示例包括:视频显示设备、音频显示设备、打印机等。输出设备356可以显示用于在计算机平台上运行的各种软件应用和工具、以及操作系统所需的操作系统程序的用户接口信息。输出设备356可以借助于阴极射线管、液晶、硅上液晶、发光二极管、气体等离子、激光或者其他类型的显示机制来呈现信息。输出设备356还可以配置用于接收、生成和/或呈现全息或者其他可视表示。输出设备356可以配置用于听觉式呈现信息,并且其可以包括用于接收和呈现音频信号的适当组件。每个平台310和315可以包括任意数目的类似或者不同的输出设备。\n[0062] 输入设备358可以包括诸如键盘、鼠标、触笔、指点设备、操纵杆和/或触屏的组件。输入设备358还可以包括音频或者视频捕获设备(例如,摄像机、麦克风等)和/或用于捕获和处理发射(例如,热量、运动、声音等)的各种传感器。其还可以包括一个或多个信息读取设备(例如,扫描仪、硬盘驱动等)和/或输入端口。每个平台310和315可以包括任意数目的相似或者不同的输入设备。同样可以使用其他类型的设备来提供与用户的交互;例如,提供给用户的反馈可以是任意形式的感官反馈(例如,视觉反馈、听觉反馈或者触觉反馈);并且来自用户的输入可以按照任意形式来接收,包括声音输入、语音输入或者触觉输入。\n[0063] 存储设备360可以为系统提供大容量存储、工作(例如,高速缓存)存储器和/或缓冲区空间。存储设备360可以使用各种适当的存储器元件来实现。存储器元件例如可以包括:固态元件、光学元件、聚合体元件、磁性元件和/有机物元件(例如,晶体)。存储器元件可以是易失性的或者非易失性的,并且可以随机访问或者顺序访问。存储设备360可以包括随机访问存储器(RAM)、闪速RAM、只读存储器(ROM)、可擦写可编程只读存储器(EPROM)、以及电可擦写可编程只读存储器(EEPROM)。存储设备360可以包括一个或多个固定硬盘驱动(例如,硬盘驱动、RAID存储设备等)以及一个或多个可移动盘驱动(例如,CD-ROM驱动、DVD驱动等)。存储设备360还可以包括一个或多个数据存储库(例如,关系数据库、分布式数据库和/或面向对象的数据库),其对于平台而言可以是本地的和/或远程的。在某些示例中,存储设备360可以包括一个或多个本地的和/或远程的基于网络的存储架构,诸如存储区域网络(SAN)。每个平台310和315可以包括任意数目的、独立配置的存储设备元件360或者与之交互。\n[0064] 存储设备360可以存储用于各种应用的程序代码、操作系统320、应用编程接口、应用例程、中间件组件和/或其他可执行指令。存储设备360可以包括用于通信(例如,TCP/IP通信)的程序代码和信息、中间件组件、内核和设备驱动、不可变低层系统代码、用于基本输入和输出的数据、以及各种配置信息。\n[0065] 在某些实现中,存储设备360包括至少一个计算机可读介质,其有形地包含一个或多个计算机程序。计算机程序可以包含指令,当这些指令由处理器执行时,其实现各种方法(例如,下文描述的方法)和/或系统。计算机可读介质一般地表示用来为处理器提供机器指令和/或数据的任何类型的计算机程序、装置和/或设备(例如,磁盘、光盘、存储器、可编程逻辑器件(PLD))。适于存储计算机程序和数据的计算机可读介质可以包括以下形式:非易失性存储器、介质和存储器设备,作为示例,包括半导体存储器设备,例如EPROM、EEPROM和闪存设备;磁盘,例如内部硬盘或者可移动盘;磁光盘;以及CD ROM和DVD-ROM盘。\n[0066] 其他设备362例如可以包括用于视频和影片编辑的各种设备。示例包括:视频控制器、视频录制器、音频录制系统、备用电源等。而且,其他设备362可以包括任何数字打印引擎或者标记引擎、显示监视器或者能够在纸张、胶片、显示器屏幕或者其他输出介质上重现彩色或者灰度像素的其他光栅输出设备。\n[0067] 如 图 3所 示,服 务 器 平 台 310包 括 操 作 系 统 320和 流 式 传 输模 块330,其 可 以 包 括 和 /或 利 用 改 变 模 块 335。 操 作 系 统320 可 以包括用于管理计算 资源和主控应用的任何 适当的操作系统(OS),例如\n等。\n[0068] 流式传输模块330可以包括用于构建播放列表以及通过网络375流式传输播放列表的关联内容的任何适当组件。流式传输模块330可以实现在服务器模块或者应用340中或者实现为其一部分,其可以配置用于与客户端平台315的服务组件(例如,播放器370)交互。流式传输模块330可以配置用于接收数字媒体,并且按照各种协议通过网络375将接收到的媒体流式传输给客户端平台315。流式传输模块330可以配置用于存储和/或访问一个或多个播放列表(例如,播放列表200),并将这些播放列表中的内容流(例如,流\n210(1)-210(n))流式传输给客户端平台315。在某些示例中,播放列表和相关联的内容流可以本地存储在服务器平台310上(例如,存储在存储设备360中)。播放列表也可以在不同的机器间分布,如服务器的边(edge)/源配置中一样。\n[0069] 在某些示例中,应用可以进行对服务器平台310的调用,以便将个体内容流添加到特定的播放列表(例如,播放列表120)中。应用可以随同请求提供内容流,或者可以提供标识流的位置的信息。流式传输模块330可以获得这些流,并且将其一个接一个的附加到播放列表中。在流式传输内容时,流式传输模块330继而可以将这些流的比特递送给客户端平台315。\n[0070] 在某些示例中,流式传输模块330可以接收已经使用一个或多个编解码器进行了格式化的流。在某些示例中,流式传输模块300可以接收未格式化(例如,未压缩)的媒体(例如,从用户的网络摄像头馈送的即时视频),并且可以配置用于使用一个或多个编解码器将接收到的媒体格式化到内容流中。由此,在某些实现中,流式传输模块330可以包括和/或利用一个或多个编解码器(诸如,H.264编解码器、On2VP6编解码器、Sorenson Spark编解码器等)来压缩接收到的流,以便流式传输给客户端平台315。在某些实现中,流式传输模块330可以接收已经在特定编解码器中进行了编码的即时视频馈送,并且在将该馈送流式传输给客户端时,流式传输模块330可以改动该编解码器类型。\n[0071] 流式传输模块330可以通过一个或多个接口来接收媒体,并且可以经由一个或多个其他接口来传送内容流。流式传输模块330可以配置用于按照各种传送速率、分辨率、格式等来传送内容流(例如,即时视频或者其他即时流)。流式传输内容流的特定方式可以取决于改变模块335。\n[0072] 改变模块335可以处理通过网络375从客户端平台315接收到的、针对动态改变的请求。改变模块335可以配置用于接收这些请求,并且采取适当动作来实现播放列表的改动,其中播放列表可以本地存储在服务器平台310上(例如,存储在存储设备360中)。\n例如,改变模块315可以在播放列表中查找所标识的流,并且将该流替换为其他流。改变模块335例如还可以配置用于重新布置播放列表中的流、向播放列表添加流和/或从播放列表移除流。在某些示例中,改变模块335可以包括如下功能:计算在不会在回放中造成干扰或者赝像的情况下切换流的适当时帧。而且,在某些示例中,改变模块335可以包括如下功能:指定播放列表的插入和删除模式,使得新流插入在旧流之前或者之后,或者将旧流从播放列表中删除。改变模块335还可以指定新流的开始点或者偏移以及长度。\n[0073] 在某些实现中,改变模块335(或者服务器平台310的其他组件)可以包括和/或访问一个或多个缓冲区。在某些示例中,改变模块335可以配置用于发起或者触发对流的缓冲,以便辅助播放列表改变。例如,当在即时流之间切换时,改变模块335可以在切换发起时开始对流进行缓冲,并继而计算切换流的适当点。\n[0074] 流式传输模块330和改变模块335可以包括和/或使用一个或多个数据结构以及可以对各种数据进行操作的一个或多个计算算法。这些模块可以包括用于执行各种任务的指令集,并且这些模块可以输出信息以供用户或者其他系统使用。在某些实现中,这些模块可以包括一个或多个引擎,其可以输出代码,充当对其他系统、引擎或者过程的输入。这些模块可以包括和/或使用各种硬件和固件元件。\n[0075] 客户端平台315可以包括适当的操作系统320、播放器370以及一个或多个应用\n380。播放器370可以包括基于客户端的软件,其运行 和/或其他应用,并且支持矢量图形和光栅图形、音频和视频的双向流式传输,以及一个或多个脚本或者其他语言(例如,JavaScript、ActionScript等)。在某些示例中,应用380(例如,基于 的应用)在操作期间可能依赖于播放器370。此外,播放器370可以将 以及其他应用与操作系统320集成,以便向客户端平台315提供各种功能和特征。在某些示例中,播放器370可以实现为虚拟机。播放器370例如可以包括 Player运行时。\n[0076] 播放器370和应用380不限于 平台或者基于 的应用。在不脱离\n本公开范围的情况下,播放器370可以在各种其他平台和环境中实现和运行,和/或配置用于运行和/或支持利用各种其他平台和环境创建的应用。\n[0077] 在某些示例中,播放器370可以实现为在客户端平台315上运行的独立组件和/或实现为嵌入式组件。在某些实现中,播放器370可以配置用于与Web应用结合运行。在某些示例中,播放器370可以实现为“插件”型组件,其向一个或多个主机应用(例如,应用\n380)提供各种功能或者扩展一个或多个主机应用的功能集。此类主机应用可以向插件提供服务,以允许插件与主机应用交互。主机应用和/或OS可以包括允许添加插件以及插件与主机应用交互的API。\n[0078] 这些应用380可以包括各种计算机程序,其包含可以由一个或多个处理器(例如,处理器354)执行的指令。按照本公开的计算机程序可以通过各种编程语言来实现,诸如高级或者中级的面向过程或者面向对象的编程语言(例如,C、C++、Java、JavaScript、PHP、Visual Basic等)、低级汇编语言(Intel 80x86、ARM等)和/或各种其他语言。\n[0079] 在某些实现中,客户端平台可以包括运行时环境,其提供各种实用服务以供应用\n380使用。这些实用服务可以包括文件系统访问、窗口和菜单控制、与OS外壳(shell)(例如, OS Explorer或者 0S Finder)的集成、文件扩展注册、文档处理\n支持(例如,超文本标记语言(HTML)和便携式文档格式(PDF)引擎)、字符串操作、图形、联网、通知工具、寻址外设或者可以使用运行时库提供的其他类型的功能。而且,运行时环境可以包括API,其向应用提供服务,并且对运行时环境配置为在其上运行的各种硬件和OS平台的细节进行抽象。\n[0080] 在此使用图3中所示的分立模块(例如,模块330、335和370)仅仅出于说明目的,各种其他布置也在本公开的范围之内。例如,这些模块的各种功能可以在比图示模块更多或者更少的模块间分布或者存在于其中。各模块的特定配置、布置和特征集通常将取决于特定的操作环境。\n[0081] 图4是示出了按照本公开的示例应用更新分发过程400的流程图。过程400可以由数据处理环境300中的一个或多个元件执行。过程400可以由执行来自存储设备的一个或多个指令的一个或多个处理器(例如,客户端平台315中的处理器354)来执行。过程400可以包括:接收与播放列表相关联的流(410);访问客户端侧回放信息(420);请求改变播放列表(430);以及按照响应于该请求的播放列表改变,来显示播放列表的流(440)。\n[0082] 过程400可以接收与播放列表相关联的流(410)。这可以包括:客户端(例如,客户端平台315)从服务器(例如,服务器310)接收播放列表(例如,播放列表220)的流(例如,流210)。在某些示例中,所接收的播放列表可以由客户端侧应用创建。客户端侧应用可以与服务器交互并且向服务器发送请求,以建立播放列表。播放列表可以包括流的排序,这些流进行排队以便按照所述排序从服务器进行客户端侧回放。在某些实现中,播放列表可以本地存储在服务器侧。\n[0083] 与播放列表相关联的流例如可以包括音频流、视频流以及具有音频和视频二者的混合流。在某些实现中,播放列表的流可以包括即时流。例如,流可以包括来自正在录制现场足球比赛的信息捕获设备(例如,摄像机)的流。播放列表可以包括即时流和录制流的混合。作为示例,播放列表可以包括正在录制的足球比赛的即时流,并混合有预先录制的对应于商业广告或者广告的流。在某些示例中,与播放列表关联的流可以包括各种数据内容,诸如文本数据、静态图像数据和/或其他用户定义的经配置(例如,经过串行化以便传输)的数据格式。\n[0084] 过程400可以访问客户端侧回放信息(420)。这例如可以包括:访问与播放列表的至少一个关联流的接收和回放相关联的客户端侧状况。访问客户端侧回放状况(420)可以包括访问运行时性能信息和/或用户偏好。如上所述,运行时性能信息例如可以包括:网络带宽、客户端侧处理资源、功率状况、客户端侧音频绘制能力、客户端侧视频绘制能力以及与接收到的流的客户端侧回放相关联的各种其他性能状况。用户偏好信息例如可以包括:\n用户活动、阅览历史和/或反映用户活动或者偏好的各种其他状况。该信息例如可以包括如下指示:用户点击或者以其他方式选择了特定的流和/或用户阅览特定内容所花费的时间量。\n[0085] 在某些示例中,访问客户端侧回放信息(420)可以包括监测(例如,通过客户端平台315上的播放器370)客户端侧状况。监测可以周期性地进行,其或者独立于客户端设备的用户进行,或者在用户的指示之下进行。例如,播放器370可以跟踪客户端侧状况,并向客户端侧应用提供信息,客户端侧应用可以基于已建立的启发来进行关于改变播放列表的决策。\n[0086] 响应于所访问的客户端侧回放信息,过程400可以请求改变播放列表(430)。这例如可以包括:客户端侧应用向服务器发送改变播放列表的流的请求。在某些示例中,该请求可以标识期望的播放列表改变,并且可以包括控制播放列表改变的信息。\n[0087] 可以请求各种类型的改变。例如,过程400可以请求对播放列表中的多媒体流重新排序,从播放列表中移除流,和/或向播放列表中插入新的流。请求可以包括指定改变应当如何进行的各种信息。例如,对于重新排序,请求可以包括指示旧排序和新排序的信息。\n在某些示例中,重新排序请求可以包括指定流的名称以及在播放列表排序中流的期望移动的信息。对于移除和插入,请求可以包括要移除或者插入的流的标识。对于插入,请求还可以标识新流应当放置在播放列表中的期望位置。\n[0088] 播放列表改变可以包括:将播放列表中的一个或多个流替换为与该被替换的流需要不同资源和能力的、这些流的不同版本(但是具有相同内容)。例如,播放列表的改变可以包括将流替换为该流的升级或者降级版本。播放列表改变还可以包括:将播放列表中的流替换为无关的或者不同的流,其具有与被替换的流的内容无关的或者不同的内容。在这种情况下,改变请求可以包括旧流和新流的名称,以及流是否可以在中间点切换的有关信息。\n[0089] 在某些示例中,播放列表改变可能影响当前正在回放的流。在这种情况下,可以使用来自改变请求的控制信息来适当地执行改变。例如,请求改变的客户端侧应用可以在请求中指定如何对待当前播放的流(例如,是否在中间位置替换当前播放的流)。流式传输源(例如,服务器平台310)可以使用该信息来实现改变。在某些示例中,在操纵(例如,切换)当前播放的流时,流式传输源可以执行改变,使得当前播放的流的回放看起来没有中断。此功能的其他细节将在下文结合图5-图7加以讨论。\n[0090] 在某些实现中,响应于所访问的客户端侧回放状况而请求改变播放列表(430)可以包括:标识播放列表中将潜在受到该状况影响的所有相关流。例如,如果网络正在提供\n300kbps带宽,请求(430)可以包括:标识具有高于300kbps的比特率的所有流。过程400可以请求(430)将播放列表中排队的高比特率视频流切换为较低比特率版本。请求(430)也可以包括:标识播放列表中可能由于提高的网络带宽或者其他资源改善而升级的流。例如,如果网络正在提供500kbps带宽,则请求(430)可以包括:标识播放列表中具有低于\n500kbps的比特率的所有流。过程400继而可以请求(430)将低比特率版本切换为其较高比特率版本。\n[0091] 过程400可以显示按照响应于请求的播放列表改变的、接收到的播放列表的流(440)。这可以包括:客户端按照所请求的改变向最终用户(例如,经由显示设备)呈现播放列表的流。例如,如果请求降级,则显示(440)可以包括显示降级的流(例如,以较低的比特率或者分辨率)。如果请求升级,则显示(440)可以包括显示升级的流。\n[0092] 图5是示出了可以表示客户端侧操作的另一示例播放列表改变过程500的流程图。过程500可以由数据处理环境300中的一个或多个元件执行。过程500可以由执行来自存储设备的一个或多个指令的一个或多个处理器(例如,服务器平台310中的处理器354)来执行。过程500可以包括:流式传输播放列表(510);接收播放列表改变的请求(520);\n基于接收到的请求来改变播放列表(530);以及按照改变来流式传输播放列表(540)。\n[0093] 过程500可以流式传输播放列表(510)。这可以包括:服务器(例如,服务器平台\n310)向客户端(例如,客户端平台315)流式传输与播放列表(例如,播放列表200)相关联的媒体/内容流(例如,流210)。播放列表可以由客户端侧应用创建,并且可以包括流的排序,这些流进行排队以便按照所述排序进行客户端侧回放。播放列表可以在服务器侧本地维护。\n[0094] 过程500可以接收针对播放列表改变的请求(520)。这例如可以包括:响应于检测到的客户端侧状况,从客户端侧应用接收针对播放列表改变的请求。接收(520)例如可以包括:接收在上文讨论的过程400的阶段430处生成的请求。如上文结合过程400所说明的,请求可以标识期望的播放列表改变,并且包括控制播放列表改变的信息。\n[0095] 过程500继而可以基于接收到的请求来改变播放列表(530)。这可以包括:服务器(例如,服务器平台315)基于请求中提供的控制信息来改变播放列表。例如,改变530可以包括确定是否可以在流中的中间位置处切换当前播放的流。改变(530)可以包括查找请求中标识的流名称,以及执行请求中指定的改变。例如,改变(530)可以包括:查找旧流和新流,继而将旧流替换为新流。过程500继而可以按照改变来流式传输与播放列表相关联的内容流(540)。例如,过程500可以流式传输(540)播放列表中流的升级版本或者降级版本。过程500可以流式传输(540)添加到播放列表的新流,停止流式传输从播放列表中移除的特定流,和/或按照不同于播放列表中先前顺序的顺序来流式传输播放列表中的流。\n[0096] 在某些示例中,改变(530)可以包括标识应当切换的所有相关流。例如,如果改变请求包括由于下降的网络带宽或者其他资源降级而引起的、针对流的降级版本的请求,则改变(530)可以包括:对播放列表进行解析,以标识播放列表中潜在受到这些状况影响的所有其他流。例如,如果网络正在提供300kbps带宽,则改变(530)可以解析播放列表,并且标识与高于300kbps的比特率相关联的所有流。过程500可以将播放列表中排队的已标识高比特率视频流切换为其较低比特率版本。反之,改变(530)可以包括:标识播放列表中由于提高的网络带宽或者其他资源改善而可以升级的流。例如,如果网络正在提供500kbps带宽,则改变(530)可以包括:标识播放列表中与低于500kbps的比特率相关联的所有流。\n过程500继而可以将这些低比特率版本切换为其较高比特率版本。\n[0097] 在某些实现中,过程500可以包括对流进行缓冲并在其中引入延迟(例如,在改变(530)期间)。例如,当在两个即时流之间切换时,过程500可以在切换发起时开始缓冲这两个流。在缓冲期间,过程500可以标识切换流的适当点。缓冲可以允许在不会在回放中导致任何干扰或者赝像的情况下进行流切换。\n[0098] 图6是示出了示例流替换过程600的流程图。过程600可以表示作为上文讨论的过程500的改变阶段530的一部分而执行的操作。过程600可以由数据处理环境300中的一个或多个元件来执行。过程600可以由执行来自存储设备的一个或多个指令的一个或多个处理器(例如,服务器平台310中的处理器354)来执行。\n[0099] 过程600可以接收旧流的标识以及新流的标识(610)。这些标识可以包括在从客户端平台315发送给服务器平台310的播放列表改变请求中。该请求可以包括将播放列表中的旧流切换为新流的请求。\n[0100] 过程600可以使用来自改变请求的信息来标识播放列表中的旧流(620)。过程600继而可以确定目前是否正在回放旧流(例如,旧流是当前正在流式传输的流)。例如,过程\n600可以确定播放器370是否正在呈现标识为旧流的流(例如,服务器当前正在向客户端流式传输标识为旧流的流)。如果旧流不是当前流式传输的流,则过程600可以在播放列表中的选定点处将该旧流整个替换为另一流。该选定点可以在发送自客户端侧的改变请求中指定,或者其可以在服务器侧确定。\n[0101] 如果所标识的旧流是当前流式传输的流,则过程600可以确定是否允许在中间点处进行流替换(640)。换言之,过程600可以确定其是否在当前流式传输的流完成播放之前中断它,以便将该流切换为新流。该确定可以基于改变请求中指定的控制信息来进行。如果不允许中间替换,则过程600可以维持当前流式传输的流直到完成(645)。\n[0102] 如果允许中间替换,则过程600可以标识用于切换流的适当点。过程600可以标识适当的点(650),使得切换不会在回放中导致任何干扰或者赝像。过程600继而可以在所标识的切换点处将旧流切换为新流(660)。这可以包括:将旧流从播放列表中移除,并将新流插入播放列表中旧流的位置。\n[0103] 图7是示出了用于标识适当切换点的示例过程700的流程图。过程700可以表示作为上文讨论的过程600的标识阶段(650)的一部分而执行的操作。与过程600相同,过程700可以由数据处理环境300中的一个或多个元件来执行。过程700可以由执行来自存储设备的一个或多个指令的一个或多个处理器(例如,服务器平台310中的处理器354)来执行。\n[0104] 过程700可以标识旧流(其是当前播放的流)中用于流切换的最早时刻(710)。\n这可以包括:在当前播放流中标识最早的关键帧。最早的关键帧例如可以是尚未传输给客户端的最早关键帧。在某些示例中,服务器平台310中的改变模块335可以标识最早关键帧。过程700继而可以标识用于进行切换点的新流中的点(720)。这可以包括:标识新流中的关键帧。在某些示例中,过程700可以在新流中标识(720)标识关键帧,该关键帧出现在当前播放流中所标识的最早关键帧之后。过程700继而可以标识旧流(当前播放流)中与新流中所标识的切换点相对应的点。这可以包括:在旧流中标识与新流中所标识的关键帧相对应的关键帧或者中间帧。\n[0105] 在某些实施方式中,为了实现流切换,过程700可以对流的时间线进行匹配(740)。例如,过程700可以对音频和视频时间线进行匹配,以确保切换对于最终用户而言平滑地进行。在某些实现中,在改变播放列表时可以使用各种切换策略。例如,如果两组内容之间的音频和视频时间线不匹配,则可以优选使用音频时间线,以避免音频时间线中的干扰。如果音频在期望的切换点附近不可用,则可以仅使用视频时间线。该特定切换策略并非意在限制,在不脱离本公开范围的情况下,可以使用各种其他切换策略。\n[0106] 图4-图7中示出的事件序列是示例性的,并非意在限制。因此可以使用其他过程,即使是对于图4到图7中描绘的过程400、500、600和700,事件可以进行重新排序、添加和/或移除。此外,过程的元素可以重叠和/或可以存在于少于附图所示数目的阶段中。在某些示例中,过程可以重新布置和配置,以适应和/或利用多任务和并行处理技术和/或各种系统架构的其他方面。\n[0107] 尽管上文描述参考了流式传输,但是本公开的方面可以应用于其他媒体递送技术。例如,本公开的方面可以用来改变渐进式递送(例如,渐进式下载)的播放列表。在这些实现中,播放列表可以包括排队以供消费(流式传输,或者渐进式递送的)的内容的排序。在渐进式递送实现中,与播放列表相关联的内容(例如,SWF文件、FLV文件、F4V文件等)可以从服务器(例如,服务器平台310)下载到客户端(例如,客户端平台315),其中客户端包括用于进行播放列表改变决策以及改变播放列表的适当逻辑。\n[0108] 本说明书中描述的主题和功能性操作的实施方式可以在数字电子电路中实现,或者在计算机软件、固件或硬件中实现,该计算机软件、固件或硬件包括本说明书中公开的结构及其等同结构、或是它们的一个或多个的组合。本说明书中描述的主题的实施方式可以实现为一个或多个计算机程序产品,也即,在计算机可读介质上编码的、以便由数据处理装置执行或控制数据处理装置操作的一个或多个计算机程序指令模块。有形程序载体可以是传播的信号或者计算机可读介质。传播信号是人工产生的信号,例如,机器产生的电信号、光信号或者电磁信号,生成该信号以对信息进行编码,以便传输到适当的接收器装置。计算机可读介质可以是机器可读的存储设备、机器可读的存储衬底、存储设备、实现计算机可读的传播信号的组合、或者它们中的一个或多个的结合。术语“数据处理装置”包括用于处理数据的所有装置、设备和机器,例如包括可编程处理器、计算机,或者多个处理器或计算机。\n除了硬件之外,该装置可以包括为考虑中的计算机程序创建执行环境的代码,例如,构成处理器固件、协议栈、数据库管理系统、操作系统、跨平台运行时环境,或者它们中一个或多个的结合的代码。\n[0109] 计算机程序(也公知为程序、软件、软件应用、脚本或代码)可以由任意形式的编程语言编写,包括编译语言或解释语言,说明性语言或过程语言,并且该计算机程序可以任意形式部署,包括部署为单独的程序或模块、组件、子例程,或者适于在计算环境中使用的其他单元。计算机程序无需对应于文件系统中的文件。程序可以存储在保存其他程序或数据(例如,存储在标记语言文档中的一个或多个脚本)的文件的一部分中、可以存储在专门用于考虑中的程序的单个文件中,或者存储在多个协同文件中(例如,存储一个或多个模块、子程序,或代码部分的文件)。可以将计算机程序部署为在一个计算机上执行,或者将其部署为在位于一个地点的多个计算机上执行或跨过多个地点分布且通过通信网络互连的多个计算机上执行。\n[0110] 本说明书中描述的处理和逻辑流程可以由执行一个或多个计算机程序的一个或多个可编程处理器执行,用于通过对输入数据进行操作以及产生输出来执行功能。该处理和逻辑流程还可以由例如FPGA(现场可编程门阵列)或ASIC(专用集成电路)的专用逻辑电路执行,并且也可以将装置实现为所述专用逻辑电路。\n[0111] 适于计算机程序执行的处理器例如包括通用和专用处理器两者、以及任意类型的数字计算机的任意一个或多个处理器。通常,处理器将从只读存储器或随机访问存储器或两者处接收指令和数据。计算机的基本元件是用于执行指令的处理器以及用于存储指令和数据的一个或多个存储器设备。通常,计算机还将包括用于存储数据的一个或多个海量存储设备,或被操作性地耦合为从所述用于存储数据的一个或多个海量存储设备接收数据、向其传送数据、或者进行两者,该海量存储设备例如磁盘、磁光盘、或光盘。然而,计算机不必一定具有这样的设备。而且,计算机可以嵌入在其他设备中,例如移动电话、个人数字助理(PDA)、移动音频或视频播放器、全球定位系统(GPS)接收器、或者便携式存储设备(例如,通用串行总线(USB)闪存驱动),这仅是几例。适于存储计算机程序指令和数据的计算机可读介质包括所有形式的非易失性存储器、介质和存储设备,例如包括:半导体存储设备,如EPROM、EEPROM和闪存设备;磁盘,如内部硬盘或可移动硬盘;磁光盘;以及CD-ROM和DVD-ROM盘。处理器和存储器可以由专用逻辑电路补充或是包括在专用逻辑电路中。\n[0112] 为了提供与用户的交互,本说明书中描述的主题的实施方式可以在具有用于向用户显示信息的显示设备以及用户可以通过其向计算机提供输入的键盘和指点设备的计算机上实现,其中显示设备例如CRT(阴极射线管)或者LCD(液晶显示器)监视器,指点设备例如鼠标或者轨迹球。也可以使用其他类型的设备来提供与用户的交互;例如,提供给用户的反馈可以是任何形式的感观反馈,例如视觉反馈、声觉反馈、或者触觉反馈;并且可以接收来自用户的任意形式的输入,包括声音、语音或触觉输入。\n[0113] 本说明书中描述的主题的实施方式可以实现在包括后端组件的计算系统中,例如数据服务器;或实现在包括中间件组件的计算系统中,例如应用服务器;或实现在包括前端组件的计算系统中,例如具有图形用户界面或者Web浏览器的客户端计算机,用户通过该图形用户界面或Web浏览器可以与本说明书中描述的主题的实现进行交互;或实现在一个或多个这样的后端、中间件、或前端组件的任意结合中。系统组件可以与任意形式或介质的数字数据通信(例如,通信网络)互连。通信网络的示例包括局域网(“LAN”),广域网(“WAN”),网际网(例如,互联网)以及端对端网络(例如,ad hoc端对端网络)。\n[0114] 计算系统可以包括客户端和服务器。客户端和服务器一般相互远离,并且通常通过通信网络进行交互。客户端和服务器的关系是借助于在各自计算机上运行的、彼此具有客户端-服务器关系的计算机程序得到的。\n[0115] 尽管本说明书包含多种特定细节,但是不应将其理解为是对本发明的范围或者所要求保护内容的限制,而应当理解为是本发明具体实施方式的特定特征的描述。本说明书中描述的在各个实施方式的上下文中的某些特征也可以在单个实施方式中结合实现。相反,在单个实施方式上下文中描述的各种特征也可以分别实现在多个实施方式中或者任意适当的子组合中。而且,尽管上文可能将特征描述为在特定的组合中操作,甚至初始也是这样要求保护的,但是来自所要求保护的组合的一个或多个特征在一些情况下可以从该组合中去除,并且所要求保护的组合可以针对子组合或组合的变形。\n[0116] 类似地,尽管在附图中以特定的顺序描述操作,但是不应将其理解为要求按照所示的特定顺序或是串行顺序来执行这些操作,或是要求执行全部所示的操作以得到期望的结果。在特定环境中,多任务和并行处理可能是有利的。而且,在上述实施方式中多个系统组件的分离不应被理解为在所有实施方式中需要这些操作,应当将其理解为所描述的程序组件和系统通常可以在单个软件产品中集成在一起,或是被打包到多个软件产品中[0117] 由此,已经描述了本发明的特定实施方式。其他实施方式也在所附权利要求书的范围之内。例如,权利要求书中记载的动作可以按照不同顺序执行并仍然能够实现期望的结果。在某些示例中,在不脱离本公开范围的情况下,可以使用不同系列的API来实现某些结果。例如,可以使用用于操纵播放列表的API的富集。作为另一示例,基于对播放器的不同量度,或者用来在内容流之间切换的不同技术,可以使用不同的算法来控制如何切换内容。
法律信息
- 2012-08-22
- 2010-04-28
实质审查的生效
IPC(主分类): G06F 17/30
专利申请号: 200910168375.8
申请日: 2009.08.31
- 2010-03-03
引用专利(该专利引用了哪些专利)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 |
1
| |
2004-12-01
|
2004-03-08
| | |
被引用专利(该专利被哪些专利引用)
序号 | 公开(公告)号 | 公开(公告)日 | 申请日 | 专利名称 | 申请人 | 该专利没有被任何外部专利所引用! |