具有可扩展媒体格式的托管应用程序平台的制作方法

文档序号:6348676阅读:220来源:国知局
专利名称:具有可扩展媒体格式的托管应用程序平台的制作方法
具有可扩展媒体格式的托管应用程序平台背景当代的浏览器和其它应用程序允许插件,所述插件一般包括与主存浏览器/应用程序交互以提供另外的功能的托管软件代码。使用插件的一个原因是提高安全,因为主存浏览器限制托管代码(通常是不可信的)能够执行的动作。因特网已经变得非常危险,有恶意网站经常示图导致用户下载和运行可以损害用户的计算机系统或者摧毁用户的数据的有害代码。因此,网页浏览器通常包括对能够运行的代码以及被允许在用户计算机系统上执行动作的插件的限制。插件增加了由浏览器提供的沙箱的大小,因为它们在减少安装的不可信应用程序的数量的同时允许网页上更多的功能。一个这样的插件是微软 的 Silverlight ,它提供了允许应用程序开发者创建在浏览器中主存的丰富的网页应用程序的平台,所述浏览器一般包括动画、矢量图形和/或媒体(例如音频/视频)内容回放。另一个示例插件是Adobe 的Flash 。一般地,为了播放媒体,平台提供托管应用程序代码调用的应用程序编程接口(APIs)以指定存储特定媒体内容的位置,例如通过指定标识出在打包媒体内容的服务器上的文件或其它容器的统一资源定位符(URL)。平台然后产生网络请求以开始下载媒体。平台通过解包媒体内容来解析媒体内容,以提取媒体内容流来将其提供给用于回放的媒体流水线。像其它平台一样,微软⑧的Silverlight 通过允许应用程序下载或流动包含所支持格式的组合的文件来提供回放各种格式(WMV、WMA, MP3、H. 264、 AAC)的视频和音频的功能。允许的音频和视频类型是不可扩展的,并且执行到所支持格式之一的转换是资源密集的。不幸的是,如上文所述,这样的平台一般限于播放由平台设计者预期的一种或多种已知格式的媒体内容。例如,平台可以包括诸如运动图像专家组第4版(MPEG4或MP4)、 DIVX或其它格式等特定媒体类型的压缩机和解压缩机(编解码器)。随着用于进一步压缩媒体内容的新算法的发现以及用于传递与媒体内容相关的附加信息的新场景的标识,快速进化是编解码器所常见的。因此,随着时间推移平台可以支持过时的或者不再流行或最有效的媒体格式。平台更新一般是添加新的媒体格式支持的唯一途径。此外,平台设计者必须执行额外的工作以实现对每种媒体格式的支持,这会造成平台实现的庞大并且减缓将新的媒体类型支持添加至平台的进程。一些编解码器是专有的,因此如果有的话,平台设计者无法添加对使用编解码器而不通过编解码器提供者授权编解码器的媒体类型的支持。平台经常施加控制于哪些编解码器应用程序可以使用平台的原因是为了确保安全。编解码器经常与计算机系统硬件密切地互动以显示视频和回放音频,并且可以执行对用户计算机系统有害的动作。现在的系统交换更广发的媒体类型安全支持。此外,下载速度是通常检查的插件度量,并且随着平台尺寸的增加,下载速度将降低。 因此,平台设计者有动机支持更少的媒体格式以保持小的平台尺寸。概述此处描述了媒体交互系统,所述媒体交互系统允许托管应用程序独立于媒体内容的格式消费和/或产生丰富的媒体内容,同时仍然维护主机的安全。所述媒体交互系统接受来自托管应用程序的原始、未压缩的媒体数据,并且允许托管应用程序通过沙箱API来提供其自己的编解码器,所述沙箱API将编解码器能够执行的动作限于可信动作集。媒体交互系统调用提供给系统的应用程序。应用程序运行和下载来自服务器的压缩的媒体内容,或者可以在运行中创建媒体数据。媒体交互系统提供其中应用程序可以安全地运行解压缩代码的沙箱,并且应用程序提供代码以将压缩的媒体数据转化为用于回放的未压缩的数据。然后,应用程序将未压缩的数据提供给用于回放的系统。因此,媒体交互系统提供应用程序开发者支持的任意格式的丰富的媒体内容,并且维护用户的计算机系统的安全。提供本概述以便以简化形式介绍将在以下详细描述中进一步描述的一些概念。本概述并不旨在标识出所要求保护的主题的关键或必要特征,也不旨在用于限定所要求保护的主题的范围。附图简述

图1是示出在一个实施例中的媒体交互系统的组件的框图。图2是示出在一个实施例中的系统在平台级播放媒体的处理的流程图。图3是示出在一个实施例中的系统在应用级播放媒体的处理的流程图。图4是示出在一个实施例中的媒体交互系统的操作环境的框图。图5是示出在一个实施例中的其中应用级代码来自抽象类型的更具体示例的框图。图6是示出在一个实施例中的与图5的示例对应的回放步骤的流程图。图7是示出在一个实施例中的处理自定义容器格式的媒体流源 (MediaStreamSource)的子类划分的数据流图。详细描述此处描述了媒体交互系统,所述媒体交互系统允许托管应用程序独立于媒体内容的格式消费和/或产生丰富的媒体内容,同时仍然维护主机的安全。所述媒体交互系统接受来自托管应用程序的原始、未压缩的媒体数据,并且允许托管应用程序通过沙箱API来提供其自己的编解码器,所述沙箱API将编解码器能够执行的动作限于可信动作集。媒体交互系统调用提供给系统的应用程序。例如,网页可以包括对系统的嵌入式参考以及指定应用程序的参数。应用程序运行和下载来自服务器的压缩的媒体内容,或者可以在运行中创建媒体内容。例如,应用程序可以从基于因特网的内容服务器处下载视频,或者基于本地信息来合成新的视频(例如基于音频文件中的节拍的音频可视化)。媒体交互系统提供其中应用程序可以安全地运行解压缩代码的沙箱,并且应用程序提供代码以将压缩的媒体数据转化为用于回放的未压缩的数据。然后,应用程序将未压缩的数据提供给用于回放的系统。因此,媒体交互系统提供应用程序开发者支持的任意格式的丰富的媒体内容,并且维护用户的计算机系统的安全。原始媒体数据可以指一般是由媒体流水线准备播放而不需要进一步解压缩或类似处理的未压缩的常见格式的多种类型的媒体数据。例如,视频解码器可以输出原始的 YV12帧,或者音频解码器可以输出PCM样本。媒体内容可以以各种压缩的或者其它编码格式(例如MP4或DIVX)到达托管应用程序,由托管应用程序解压缩,并且然后以准备就绪用于播放的常见格式提供给媒体交互系统。通过更新应用程序而不更新平台,可以进行对新媒体类型的更新。应用程序还可以通过直接合成或者通过处理现有的音频和视频数据(例如应用效果)来产生音频和视频数据以产生原始媒体数据。例如,游戏可以“在运行中”产生声音效果以避免在因特网上发送和接收声音数据。作为另一个示例,应用程序可以接收在绿屏前拍摄的视频,并且处理视频以删除绿色背景和动态地插入不同的背景。在一些应用中,平台可以接收平台支持的格式的压缩的视频数据和未压缩的音频数据,反之亦然。这些类型的场景在现有平台上是困难或者不可能的,但是可以由媒体交互系统轻松地支持。图1是示出一个实施例中的媒体交互系统的组件的框图。媒体交互系统100包括调用应用程序组件110、执行沙箱组件120、原始媒体接口组件130、请求媒体数据组件140、 媒体回放组件150以及硬件接口组件160。调用应用程序组件110加载和调用平台中的应用程序代码。例如,网页可以参考代表平台的对象,或者可以包括指定平台将调用的应用程序的一个或多个参数。调用应用程序组件可以例如通过诸如因特网的网络从服务器处下载与其它基于web的内容一样的应用程序。例如,微软 的Silverlight 接收具有用于运行应用程序的其它数据(例如从属模块、媒体文件、应用程序参数等)的包(例如XAP文件)中的应用程序代码。诸如微软⑧的hternet Explorer 的网页浏览器调用微软⑧的Silverlight ,并且微软⑧的 Silverlight 调用应用程序。执行沙箱组件120为应用程序代码提供限制应用程序能够执行的动作的执行环境。例如,环境可以限制应用程序可以访问的硬件资源、用户数据或者其它信息。由于执行沙箱组件120在安全的沙箱中运行应用程序代码,因此用户可以信任代码无法做到不在沙箱中运行的任意代码可以做的恶意的事情。使用执行沙箱组件120,应用程序可以实现或调用用于处理应用程序平台本机不支持的媒体类型的编解码器。不同于使用本机代码运行的编解码器,由应用程序调用的沙箱编解码器无法危害用户计算机系统。执行沙箱可以包括应用程序代码可以执行的有限的指令集或库,并且可以包括应用程序代码到可执行对象代码的即时(JIT)编译以便系统100能够管理应用程序可以执行的动作。执行沙箱还可以为应用程序提供调用操作系统APIs以执行各种功能(例如访问文件、连接至远程服务器、访问配置设置等)的安全的方式。原始媒体接口组件130提供API,通过该API应用程序可以向应用程序平台提供平台可以播放的原始、未压缩的媒体内容。不同于从应用程序处接收压缩的媒体内容并且然后使用平台内部的编解码器来将媒体内容解压缩为未压缩格式的以前的平台,媒体交互系统100允许应用程序在将未压缩的媒体内容传递给用于回放的应用程序平台之前,任意数量的格式中解压缩媒体内容。采用这种方式,应用程序平台不限制对新的媒体格式的支持, 反而可以支持应用程序可以解压缩和提供给平台的任意格式。此外,解压缩仅进行一次,而不是像以前平台的潜在解决方案,其中应用程序可以解压缩一种媒体格式并且然后将媒体内容压缩为平台支持的第二媒体格式。注意到这一解决方案在平台中添加了进一步的解压缩步骤以便回放媒体内容。请求媒体数据组件140选择性地调入接收媒体数据的应用程序。本领域的技术人员将意识到软件设计者频繁地在其中组件由数据定期提供的推模型以及其中组件为新数据投票的拉模型之间做出选择。媒体交互系统100可以从应用程序处周期性地接收用于通过媒体流水线回放的数据,或者系统100可以控制回放并且周期性地向应用程序询问用于回放的媒体数据的下一个片段(例如视频帧或音频样本)。在系统100控制回放和从应用程序处请求媒体数据(例如见此处进一步描述的GetSampleAsync (获取样本异步)API)时,系统100使用请求媒体数据组件140。媒体回放组件150使用硬件接口组件160和接收到的未压缩的媒体内容来呈现媒体。媒体回放组件150可以包括用于准备和回放媒体内容的多个步骤,有时被称为媒体流水线。例如,媒体回放组件150可以包括用于在视听显示中回放音频样本并将其与相关联的视频帧对齐的同步逻辑。媒体回放组件150还可以包括捕捉新的媒体数据(例如通过诸如话筒或其它源等硬件)的能力,并且可以通过原始媒体接口组件130向应用程序提供未压缩的媒体数据,以便应用程序可以将媒体数据压缩为特定应用程序支持的格式。硬件接口组件160与计算机硬件交互以回放和/或捕捉媒体数据。硬件接口组件 160还可以提供用于控制系统100的用户界面控件。例如,硬件接口可以提供对一个或多个扬声器、显示器、输入设备等的访问。硬件接口组件160可以允许用户通过一个或多个用户界面控件(例如屏幕上的按键或键盘快捷方式)来暂停、搜索和回放媒体数据。通过将应用程序与计算机系统硬件隔离,系统100阻止了应用程序执行未授权的动作和危害计算机系统。其上实现系统的计算设备可包括中央处理单元、存储器、输入设备(例如键盘和定点设备)、输出设备(例如显示设备)和存储设备(例如磁盘驱动器或其它非易失性存储介质)。存储器和存储设备是可以用实现或允许系统的计算机可执行指令(例如软件)来编码的计算机可读存储介质。此外,数据结构和消息结构可以被存储或通过诸如通信链路上的信号之类的数据传输介质传输。可以使用各种通信链路,诸如因特网、局域网、广域网、 点对点拨号连接、蜂窝电话网络等等。系统的各实施例可以在各种操作环境中实现,所述操作环境包括个人计算机、服务器计算机、手持式或膝上型设备、多处理器系统、基于微处理器的系统、可编程消费电子产品、数码相机、网络PCs、小型计算机、大型计算机、包括任意上述系统或设备的分布式计算机环境等。计算机系统可以是蜂窝电话、个人数字助理、智能电话、个人计算机、可编程消费电子产品、数码相机等等。可以在由一个或多个计算机或其它设备执行的诸如程序模块之类的计算机可执行的指令的一般上下文中来描述本系统。一般而言,程序模块包括执行特定任务或实现特定抽象数据类型的例程、程序、对象、组件、数据结构等等。通常,程序模块的功能可以按需在各个实施例中进行组合或分布。图2是示出在一个实施例中的系统在平台级播放媒体的处理的流程图。在方框 210处,平台下载应用程序。例如,应用程序可以被包含在因特网上的服务器上存储的压缩的容器(例如XAP文件)中。平台在其被调用时接收指示在哪里找到应用程序的参考。例如,如果在网站上使用平台,则网页可以包含对指示由平台运行的应用程序的平台的参考。 在方框220处继续,平台调用下载的应用程序。例如,平台可以解压缩打包应用程序(例如软件模块)及其从属(例如其它模块)的任何一个容器,并且然后调用由应用程序提供的初始化功能。作为响应,应用程序可以做很多事情(见图3),诸如访问网络以检索媒体内容。在方框230处继续,平台向应用程序请求媒体。例如,平台周期性地调用商定的媒体检索接口以从应用程序处接收一组视频帧或音频样本以便回放。在一些实施例中,由于媒体是可用的,而不是平台提出媒体请求,应用程序相反可以调用平台。在方框240处继续,平台从应用程序处接收未压缩的媒体。应用程序可以用各种方式获取媒体,包括从网络中下载压缩的媒体并且使用应用程序提供的编解码器来解压缩媒体,使用常见的媒体合成技术来创建媒体,或者修改现有媒体(例如通过应用一个或多个后处理效果)。不管媒体的起源如何,应用程序向平台提供平台可以在不对媒体进行进一步解压缩的情况下回放的平台可理解格式的媒体。通过在应用程序上放置提取和解压缩媒体的职责,平台允许应用程序使用应用程序作者所需的任何容器和媒体压缩格式。在方框250处继续,平台使用可用的硬件通过用于回放的媒体回放流水线来发送未压缩的媒体。例如,媒体流水线可以使用操作系统API (例如微软⑧的DirectX )来使用扬声器回放音频样本或者向显示器呈现视频帧。在方框250之后,这些步骤结束。图3是示出在一个实施例中的系统在应用级播放媒体的处理的流程图。在方框 310处,应用程序从平台处接收媒体请求。例如,平台可以调用应用程序实现以提供媒体数据的预定接口。在方框320处继续,应用程序诸如从网络服务器处下载压缩的媒体。例如, 应用程序可以被配置为从提供诸如MP4之类压缩的格式的媒体内容的网络服务器处接收媒体内容。替代或另外地,应用程序可以诸如通过合成一系列的音符或拼接起独立的媒体文件来计划性地创建媒体内容。在方框330处继续,应用程序解压缩压缩的媒体。例如,应用程序可以调用为特定格式的压缩媒体解压缩媒体数据的编解码器。应用程序可以包括编解码器或者可以从网络服务器处下载编解码器。像应用程序一样,编解码器在由平台提供的限制该编解码器能够执行的动作以保护用户计算机系统免受恶意或缺陷代码的执行沙箱中运行。由于应用程序负责解压缩媒体,因此应用程序可以通过将编解码器包括在其自己的应用程序代码中来支持新的媒体类型,而不需平台更新。因此,应用程序可以快速支持新的格式,而不需等待平台开发者添加新的媒体支持。在方框340处继续,应用程序选择性地将后处理效果应用于解压缩的媒体。在其中平台执行解压缩的传统系统中,应用程序不可能将后处理效果应用于媒体。后处理效果可以包括一系列广泛的媒体修改,包括修改视频的背景、添加视频覆盖(例如封闭的标题文本)、添加音频回声等。因为应用程序可以用后处理来使用类似的资产而消除其它的资产,应用程序还能够包括更少的媒体资产来保存资源。例如,包括具有五个背景的视频的应用程序将传统地下载五个不同的视频并且向平台提供适当的视频用于解压缩。使用媒体交互系统,应用程序可以替代地包括具有可替换背景(例如绿屏)的一个视频,并且然后在后处理期间提供用于插入的较小图像作为五个背景中的每一个。应用程序还可以使用后处理以插入广告或其它信息到媒体流中。在方框350处继续,应用程序向平台提供用于回放的解压缩的媒体。应用程序可以基于平台请求按块提供媒体,或者可以为平台回放提供指向包含未压缩媒体的较大的流或文件的链接。在方框350之后,这些步骤结束。在一些实施例中,媒体交互系统提供硬件接口,通过该硬件接口应用程序可以直接呈现媒体而不需媒体流水线。例如,系统可以提供可写位图区域,通过该可写位图区域应用程序可以直接地将数据写到屏幕。媒体流水线提供音频和视频的同步。但是,对于仅呈现视频或执行其自身形式的同步的应用程序,这一类型的直接访问对于更有效地处理媒体内容是有用的。
在一些实施例中,媒体交互系统提供可扩展性接口,通过该可扩展性接口应用程序可以通过插件模型将对另外的编解码器的支持添加到平台中。有别于直接地解码/解压缩压缩的媒体数据,应用程序可以调用安装的编解码器插件并且将压缩的数据通过平台传递到编解码器,或者直接传送到编解码器。在一些实施例中,媒体交互系统提供具有对解压缩音频和视频数据的高级硬件支持的访问的应用程序。例如,许多现代的处理器支持用于执行矢量数学和其它常见的多媒体操作的指令。一个示例是SSE2指令集。SSE两级缩写,其中SSE代表流动SIMD扩展,并且SIMD代表单指令、多数据。采用产生使用这些指令的可执行代码的方式,执行沙箱可以明确地或者通过JIT编译应用程序代码来允许应用程序使用这些指令。作为另一个示例, 媒体交互系统通过允许应用程序提供着色逻辑或者JIT编译可执行着色代码,可以提供对由图形处理单元(GPU)提供的像素或顶点着色的访问。在一些实施例中,媒体交互系统以与解码类似的方式来支持编码。系统通过硬件或其它输入(例如软件模拟的设备)来捕捉媒体,并且向应用程序提供未压缩格式的媒体。 应用程序选择和使用其自己的编解码器来将媒体数据压缩为应用程序特定的格式。应用程序然后可以将媒体上载到服务器或者执行与应用程序有关的其它步骤。系统还可以使用此处描述的插件模型来允许应用程序注册系统能够用于提供具有由应用程序选择的格式的媒体内容的应用程序的新的编码编解码器。在一些实施例中,媒体交互系统允许应用程序在向系统提供用于回放的媒体内容之前后处理压缩的媒体内容。例如,应用程序可以将诸如回声之类的效果添加到音频中,或者通过改变回放速度、校正颜色、重叠标志等来修改视频。应用程序还可以使用后处理来向用户提供均衡器或音频可视化。此处描述的各方面一般被定向至通过媒体流处理和回放来解耦合媒体内容解压缩。一般地,托管应用程序代码替代平台执行下载、解包和解压缩操作。作为结果,应用程序可以支持诸如由第三方提供的、用平台在带外开发的等新的和/或专有的媒体格式,例如独立代码可以从其自己的、可能为自定义的容器格式中解包和解压缩WMV和WMA媒体流, 并且插入那些流用于回放。作为另一个结果,媒体数据可以通过任何协议和/或传输机制来自于任何源。同时,通过控制托管代码能够执行的动作的一组特定的平台APIs来维护安全。在一些实施例中,媒体交互系统向在浏览器插件中运行的应用程序环境提供接口以允许不可信的应用级代码提供基本视频、音频和脚本流形式的数据用于由应用程序环境回放。数据可以来自任意源,并且可以以包括以前的应用程序环境无法处理的格式的任意格式来打包。注意到如此处使用的,“应用级代码”指通过对至少一个低级别平台组件的API 调用来通信的代码,而不考虑任何实际的级别。尽管此处参考在浏览器/微软⑧的Silverlight 环境中播放的媒体内容描述了许多示例,但是应当理解这些仅是示例。可以容易地明白,其它托管程序和/或环境可以使用此处描述的技术。同样地,媒体交互系统不限于此处所描述的任何特定实施例、方面、概念、结构、功能或示例。相反,此处描述的任何一个实施例、方面、概念、结构、功能或示例都是非限制性的,可以以一般而言在计算和内容处理时提供帮助的各种方式来使用本系统。图4是示出在一个实施例中的媒体交互系统的操作环境的框图。示出媒体播放设备410,诸如用应用级412和平台级414安排的个人计算机系统。媒体播放设备的其它示例包括移动电话或其它数字设备。诸如网络应用程序或其它代码等的应用级代码416被主存在应用级412,并且如下文所述,处理(例如解包、提取、解压缩和传递)来自容器418的内容。如可用应用程序422组所代表的,应用级代码416可以是诸如通过例如因特网的网络420下载的浏览器插件的任何托管代码。应用程序422可以是任何类型的可执行代码, 包括解释的脚本或其它人类可读代码、或者可以直接执行或者另外执行(例如通过JIT编译)的编译的二进制或中间代码。关于容器,注意到一个容器选项是“无容器”或者仅有原始音频(例如PCM样本)或视频,在此情况下应用程序可以处理用于回放的内容,例如将其解密、将其分解成样本等。由于应用级代码416处理容器的内容,因此内容可以是应用级代码416理解的任何格式,这允许自定义应用程序和/或容器例如被托管并且使其内容以例如回放为媒体的某些方式使用。这包括已知容器/包/格式、专有格式、现有包/格式的扩展、以及还没有开发的未来容器包/格式。此外,应用级代码416可以跨例如Sockets/HTTP的任意合适的网络传输使用任意合适的协议来从一组容器4M中下载诸如容器418之类的容器。这允许了内容提供者显著的灵活性,例如包括为了冗余、负载平衡、安全等在服务器中分发内容。例如,单一片段的内容可以以不同的格式存在于不同的包中,被划分为不同的部分,具有不同的安全要求等。应用程序可以下载不同的包并且根据需要将其合并(或者基于条件选择一个)以用于提供回放的内容。容器可以包括许多不同类型的数据。尽管在通常的示例中数据可以对应于诸如音频、视频或图像媒体等不同的媒体,但是任何数据类型可以被存储在容器中。此外,容器可以具有诸如单独的音频、视频和静止图像数据组等的两组或更多不同组的数据,和/或使用不同的容器分发每一类型的支持数据。一些容器相对复杂并且可以包含多种类型的数据。注意到由于Silverlight 可以被分解成代码库,因此用于下载和解包不同格式的不同的库可以被创建、重新使用和共享。这提供了共享跨时间开发的任何不同的、新打包的以及容器格式的方式。诸如在应用级412中托管的示例应用级代码416之类的代码通过一组API430与平台级414通信。例如,应用级代码做出对应用程序环境432(与媒体元素对应)的API 调用以提供用于回放的媒体内容,并且以执行诸如搜索、暂停、停止等的其它媒体有关的操作。一般地,不考虑容器格式,平台级414保持不变并且与任意特定的应用程序无关。应用级代码416还可以由于其它原因与应用程序环境通信,诸如为了在需要用于解密保护的媒体(例如视频、音频和脚本流数据)的许可证时通知应用级代码,以及为了使应用级代码能够向应用程序环境提供许可证数据以例如用于解密流。采用这一方式,数字版权管理(DRM)可以不通过外部DRM提供者而被内部地处理,例如DRM许可证请求通过托管web请求或网络客户端APIs可以不向后冒泡。DRM初始化向量提供用于解密样本的与样本有关的数据。但是,注意到API的灵活性允许结合本系统一起使用其它的版权管理系统作为一个示例,内容可以在网络上被加密,并且然后在通过此处描述的媒体流源将其传递之前被解密。应用程序环境432可以是插件或者将浏览器用作用户界面的其它类型的环境。浏览器可以是例如操作系统组件的网页浏览器,并且可以充当用于结合应用程序环境执行的应用级代码(例如应用级代码416)的显示或人机接口机制。应用程序环境可以插入浏览器中。作为插件,浏览器可以在浏览器检测到诸如应用级代码416之类执行的应用程序时调用应用程序环境432.例如,可以在由浏览器显示的网页中创建视频元素。应用级代码416 可以执行各种动作以检索、处理、准备和导致平台显示视频内容。用户能够操纵用户界面中的控件以暂停视频、搜索视频至特定点、以及基于用户输入执行其它操作。图5是示出在一个实施例中的其中应用级代码来自抽象类型的更具体示例的框图。应用级代码416来自抽象数据类型媒体流源538,以获取具体的实现(对象实例),此处被称为自定义媒体流源(CustomMediaMreamSource) 540。在代表通常实现的这一示例中,在应用级代码416包括的独立的汇编中提供具体的自定义媒体流源M0,此处被示作动态链接库CustomMediaMreamSource. dll,或者简单地示作DLL542。如下文所述,具体的自定义媒体流源540接收对基本媒体流的请求以及来自媒体元素的诊断,并且DLL542提供包括基本媒体流和诊断的响应。对于那些响应,媒体元素采取适当的动作,包括提供媒体流至媒体流水线用于回放。图6是示出在一个实施例中的与图5的示例对应的回放步骤的流程图。方框602 表示应用级代码416将媒体流源与媒体元素相关联。例如,通过将源性质指向容器的URI, 应用程序可以调用设置源方法,并且传递对具体的自定义媒体流源540实现的参考。动作开始媒体元素与具体的自定义媒体流源540之间的对话。媒体元素检查其是否正在播放媒体,并且如果是的话,则如方框606所示停止该回放。在任何事件中,在方框608处媒体元素要求自定义媒体流源540打开其媒体。如果在方框610处有自定义媒体流源(MSQ遇到的错误,例如媒体没有打开、被破坏等,则在方框610处处理停止,并且例如自定义媒体流源540可以选择性地提供消息等以报告问题给媒体内容以及应用程序,诸如以通知用户该问题。在没有问题的事件中,在方框612处自定义媒体流源540通知媒体元素其表示什么类型的媒体,例如WMA、WMV, MP3或RAW。如方框616所示,媒体元素然后开始请求样本。 如果在方框618处媒体可用,并且没有错误(方框620),则在方框622处媒体元素播放媒体样本,例如将其插入到诸如流水线回放缓存之类的媒体流水线M4中。过程然后继续直到没有更多的媒体可用为止,也就是说到媒体被耗尽时为止,此时方框618将分支到其中媒体元素要求自定义媒体流源540关闭媒体的方框624。在样本回放循环期间产生错误的事件中,方框620用上述的选择性的消息(方框626)退出循环以便媒体处理停止。一般地由方框614所示,另一个可能是自定义媒体流源540请求另一个回放操作, 诸如搜索、暂停、停止等。如方框616所示,媒体元素通过请求自定义媒体流源540采取适当的动作来响应。注意到使用这一机制,平台级因此维持对回放操作的各方面的控制。应用级负责处理容器内容,包括解包、提取、解压缩、选择样本和提供内容给平台。示例 API以下示出适合于实现此处描述的处理的API。namespace System.Windows.Media {
public abstract class MediaStreamSource {
public MediaStreamSource() {}
protected abstract void OpenMediaAsync();
protected void ReportOpenMediaCompleted( IEnumerable<
MediaStreamDescription>availableMediaStreams,
IDictionary<
MediaSourceAttributesKeys, string> mediaSourceAttributes); protected abstract void SeekAsync(Int64 seekToTime); protected void ReportSeekCompleted(Int64 timeSeekedTo) { } protected abstract void GetSampleAsync( MediaStreamType
mediaStreamType); protected void ReportGetSampleCompleted( MediaStreamSample
mediaS ampleDescription) { } protected void ReportGetSampleProgress(double
bufferingProgress) { } protected abstract void SwitchMediaStreamAsync(
MediaStreamDescription mediaStreamDescription); protected void ReportSwitchMediaStreamCompleted(
MediaStreamDescription mediaStreamDescription) { } protected abstract void GetDiagnosticAsync(
MediaStreamSourceDiagnosticKind diagnosticKind); protected void ReportGetDiagnosticCompleted(
MediaStreamSourceDiagnosticKind diagnosticKind, doublediagnosticValue) { } protected abstract void CloseMedia(); protected void ErrorOccurred( string errorDescription) { }
}
public class MediaElement {
public int AudioStreamIndex { get; set;}
public void SetSource(MediaStreamSource mediaSource) { }
}
public enum MediaStreamSourceDiagnosticKind {
DownloadProgressAsPercent
public class MediaStreamDescription {
public MediaStreamDescription(MediaStreamType streamType, IDictionary<MediaStreamAttributeKeys, string〉 mediaStreamAttributes) { } public MediaStreamType MediaStreamType { get;} public IDictionary<MediaStreamAttributeKeys, string> MediaStreamAttributes { get; }
}
public class MediaStreamSample {
publicMediaStreamSample(Streamstream,MediaStreamDescription
mediaStreamDescription, Int64 offset, Int64 count,Int64 timestamp, IDictionary< MediaSampleAttributeKeys, string> MediaSampleAttributes) { } public Stream Stream { get; }
public MediaStreamDescription MediaStreamDescription { get; } public Int64 Offset { get; } public Int64 Count { get; }
public IDictionary< MediaSampleAttributeKeys, string>
MediaSampleAttributes { get; } public Int64 Timestamp { get; }
public enum MediaStreamType {
Audio, Video,
public enum MediaStreamAttributeKeys {
FourCC5 //接受YVl2和RGBA原始媒体类型
CodecPrivateDataj
Width,
Height
}
public enum MediaSampleAttributeKeys {
KeyFrameFlag,DRMInitialization Vector, BufferWidth5 //针对原始媒体类型 BufferHeight//针对原始媒体类型
public enum MediaSourceAttributesKeys {
CanSeek, Duration, DRMHeader
}
}以下是在提供原始媒体样本的应用程序内以上APIs的示例使用//在媒体流源中使用的代码
IDictionary<MediaStreamAttributeKeys, string〉sampleAttributes = new Dictionary<MediaStreamAttributeKeys, string>();
sampleAttributes.Add(MediaSampleAttributeKeys.BufferWidth," 10"); sampleAttributes.Add(MediaSampleAttributeKeys.BufferHeight, ” 10");
MediaStreamSample rawSample =
newMediaStreamSample(msd,rawVideoFrame,0,
rawVideoFrame.Length,
0, sampleAttributes);
this.ReportSampleCompleted (rawSample);MediaStreamAttributeKeys. FourCC (媒体流属性密钥.4CC)属性接受原始未压缩视频的类型YV12以及原始颜色信息(红、绿、蓝和阿尔法)的RGBA。 MediaSampleAttributeKeys (媒体样本属性密钥)接受缓存宽度和高度的值以向平台描述应用程序正在传递给平台以用于回放的样本缓存的实际宽度和高度。YV12结构可以被当作包含3色平面的阵列,其中每一平面内的样本大小为8比特, 具有大小(Χ,γ)的Y平面紧接着大小为(Χ/2,Υ/2)的U平面紧接着大小为(Χ/2,Υ/2)的V 平面。例如,假设10x10的图像byte[]yvl2Sample = new byte [150] ;//总大小byte[]yPlane = new byte [100] -J/ X*Ybyte[]uPlane = new byte [25] -J/ X/2*Y/2byte[]vPlane = new byte [25] -J/ X/2*Y/2// 复制(SourceArray, Sourcelndex, DestinationArray, Desintationlndex, Size)(源阵列、源索弓丨、目的地阵列、目的地索弓丨、大小)//平面是紧接的Array. Copy (yvl2Sample, 0, yPlane,0,100) ;// Y 0 到 100 字节Array. Copy (yvl2Sample, 100,uPlane,0,25) ; Il U 100 到 125 字节Array. Copy (yvl2Sample, 125,vPlane,0,25) ; Il V 125 到 150 字节//来自媒体流源API。样本实际上在流中,而不是阵列。MemoryStream yvl2SampleStream = new MemoryStrearn(yν12Samp1e);RGBA样本可以被当作包含4字节样本的阵列,其中每个样本包含按照Alpha、红、 绿、蓝顺序的四个1字节通道。对于以上的同一个10x10图像byte [JargbSample = new byte [400] ;//总大小//使用ARGB格式,通道是交织的(与其中Y、U和V独立的YV12对比)。
for (long i = 0; i < argbSample.Length; i++) {
switch (i % 4) {
case 0: Il阿尔法argbSample[i]; break; case 1:// 红
argbSample[i]; break; case 2: // 绿
argbSample[i]; break; case 3: // 蓝
argbSample[i]; break; default: break;
}
}原始音频(例如PCM样本)被表示为WaveR)rmatEX(波格式Ex)结构,使用以上定义的CodecPrivateData(编解码器私有数据)所述结构被序列化为十六进制字符串并且被传递给媒体流源。PCM音频样本被表示为字节流。在8比特样本的情况下运行时间将逐个取字节,或者在16比特样本的情况下按照字节对取字节。示例Wavei^ormatEx (波格式Ex) 值如下FormatTag 1Channels {1,2}SamplesPerSec {8k,11.025k,12k,16k,22. 05k,24k,32k,33. 075k, 40k, 44. Ik, 48k,55. 125k,56k,60k,64k,66. 15k,72k,77. 175k,80k,84k,88k,88. 2k. 96k}AverageBytesPerSec :SamplesPerSec*BlockAlignBlockAlign-Channels氺BitsPerSample/8BitsPerSample {8,16}Size 0 //如果非零,自定义波数据遵循结构示例基于API的实现如上文所述,提供了抽象基本类,媒体元素432与该抽象基本类协商以诸如获取基本媒体流(例如WMV、WMA、MP3和原始的)和诊断。应用程序开发者提供该抽象基本类的具体实现(例如自定义媒体流源540是媒体流源538抽象基本类的具体示例)。通过APIs430,应用级代码416以具体的自定义媒体流源为例并且通过调用媒体元素432上的方法将其与媒体元素432相关联,该媒体元素在这一示例中是MediaElement. SetSource (媒体元素.设置源)(媒体流源).在该调用之后,正常的媒体流水线请求被向外路由至具体的自定义媒体流源MO的基本媒体流。通过诸如以上阐述的暴露的APIs,自定义媒体流源MO向媒体流水线提供这些基本媒体流,以及媒体元素432使用的任何诊断 fn息ο在这一示例中,就具有其上设置的媒体流源的媒体元素432而言,当媒体元素432和自定义媒体流源MO已经被创建时,应用程序416调用具有新的媒体流源的MediaElement. SetSource (媒体元素.设置源)。媒体元素432然后导致媒体流源 OpenMediaAsync (打开媒体异步)事件被引发。诸如自定义媒体流源540之类的媒体流源被处理,并且在关闭之后按照需要被重新创建。如果媒体元素432将其源性质设置为新的源,如果媒体元素432具有在其上调用的SetSource (设置源)并且其源性质也为空,或者如果错误发生,则发生关闭。注意到在这一示例实现中,如果做出将媒体元素432设置为已经关闭的媒体流源的尝试,则发生溢出。当媒体元素432打开并且媒体流源表示广播时,媒体元素432导致媒体流源OpenMediaAsync (打开媒体异步)事件被引发。自定义媒体流源540收集其音频和视频流,为每一个流提供MeidMtreamDescriptions (媒体流描述)。自定义媒体流源540做出Duration (持续时间)设置为零(0),并且Car^eek (能够搜索)设置为假的新的mediaSourceAttributes (媒体源属性)收集。自定义媒体流源540调用 R印ortMediaCompletecK报告媒体完成)(媒体流、属性)。在示例实现中,当媒体元素432打开并且自定义媒体流源540表示“要求”的内容时,媒体元素432导致媒体流源OpenMediaAsync (打开媒体异步)事件被引发。自定义媒体流源540收集其音频和视频流,为每一个流做出MeidMtreamDesCripti0ns(媒体流描述)。自定义媒体流源540做出Duration设置为持续时间,并且Car^eek(能够搜索) 设置为真的新的mediaSourceAttributes (媒体源属性)收集。自定义媒体流源540调用 R印ortMediaCompletecK报告媒体完成)(媒体流、属性)。自定义媒体流源540可以对应于多个比特率的流。注意到在一个示例实现中,对于MultipleBitRate (多比特率)实现者,建议是仅暴露声明最高允许的比特率的一个音频和一个视频流(通过IteportMediaComp 1 eted (报告媒体完成)),并且按照 R印ortGetSampleCompleted(报告获取样本完成)中所需要的来传递不同比特率的样本。 例如,可以用不同的比特率多次编码内容,每个比特率对应于从文件到URI可定址的块的容器割。客户和/或服务器可以基于例如网络负载、客户负载、服务器负载等条件来改变其下载的块,诸如以基于负载条件来提供不同的视频质量/分辨率,而不是暂停回放。当自定义媒体流源540与多个音频流对应时,媒体元素432导致媒体流源 OpenMediaAsync (打开媒体异步)事件被引发。自定义媒体流源540收集其音频流和视频流,为每一个流做出MeidMtreamDescriptions (媒体流描述)。自定义媒体流源540调用 R印ortMediaCompletecK报告媒体完成)(音频流和视频MeidaStreamDescriptions (媒体流描述))。注意到媒体流源可以包含多个视频流,例如开发者可以尝试在多个视频流之间切换,尽管在一个实现中结果不被保证。为了有助脚本命令和标记,在一个实现中,开发者使用媒体元素432的TimelineMarkers (时间线标记)收集。在一个典型示例中,当媒体元素432具有在其上调用的Mop (停止)时,媒体元素 432停止引发媒体流源GetSampleAsynd获取样本异步)(媒体类型)事件。应用程序开发者结合自定义媒体流源540来使用媒体元素的CurrentStateChangecK当前状态改变)事件和CurrentState (当前状态)性质以实现这一目的。库开发者可以揭露应用程序开发者的方法以将媒体元素432的CurrentState (当前状态)的改变与应用程序的自定义媒体流源乂叩(停止)逻辑相挂钩。在一个典型示例中,当媒体元素432具有在其上调用的Pause (暂停)时,媒体元素432停止引发媒体流源GetSampleAsync (媒体类型)事件。为了获取状态改变的通知, 应用程序开发者结合自定义媒体流源来使用媒体元素的CurrentStateChangecK当前状态改变)事件和CurrentState (当前状态)性质。库开发者可以揭露应用程序开发者的方法以将媒体元素132的CurrentState (当前状态)的改变与其媒体流源Pause (暂停)逻辑相挂钩。当从暂停的状态重新开始时,通过调用媒体元素432上的Play(播放),例如视频播放器应用程序导致MediaElement.Play(媒体元素.播放)被调用,媒体元素 432开始引发媒体流源GetSampleAsync (媒体类型)事件。当从停止的状态重新开始时,视频播放器导致MediaElement.Play(媒体元素.播放)被调用,并且媒体元素432 引发媒体流源kekAsync (搜索异步)(流的开始)事件。自定义媒体流源540调用 R印ortkekCompletecK报告搜索完成)(非常靠近流的开始),并且媒体内容432开始引发媒体流源GetSampleAsync (媒体类型)事件。就搜索而言,视频播放器应用程序为正常的搜索设置MediaElement. Position (媒体类型.位置)。作为响应,媒体元素432导致MediaStreamSource. kekAsync (媒体流源.搜索异步)(新位置为IOOns记号)被引发。自定义媒体流源540调节其到最近样本的流至新的位置。自定义媒体流源540调用R印ortkekCompletecK报告搜索完成)(100ns 记号的最近样本的位置)。媒体元素432导致MediaStreamSource. GetSampleAsync (媒体流源.获取样本异步)(新位置为100ns记号)被引发。自定义媒体流源540返回 MediaStreamSource. R印ortGetSampleCompleted (媒体、流源. 艮告获取样本完成)中的请求的样本。视频播放器应用程序为对流的末端的搜索设置MediaElement. Position(媒体元素.位置),并且媒体元素432导致MediaStreamSource. SeekAsync (媒体流源.搜索异步)(新位置为IOOns记号)被引发。自定义媒体流源540调节其到最近样本的流至新的位置。自定义媒体流源540调用R印ortkekCompletecK报告搜索完成)(100ns记号的最近样本的位置)。媒体元素432导致MediaMreamSource. GetSampleAsync (媒体流源.获取样本异步)(新位置为100ns记号)被引发。自定义媒体流源540返回 R印ortGetSampleCompleted (报告获取样本完成)(空)。当媒体元素432进入错误状态时,例如媒体元素432遇到其无法恢复的错误时,媒体元素432导致MediaStreamSource.CloseAsync (媒体流源.关闭异步)被引发。自定义媒体流源540按照需要除去其内部状态,并且通过内部地设置其源为空来将其自身与自定义媒体流源540分离。自定义媒体流源540转换到关闭的状态。
19
当媒体元素432例如为诸如具有多个语言轨道的场景切换音频流时,媒体播放器导致MediaElement. AudioStrean^ndex (媒体元素.音频流索引)被设置。媒体元素432 导致MediaStreamSource. SwtichMediaStreamAsync (媒体流源.切换媒体流异步)(切换到的流)。自定义媒体流源540切换流,将新的流上的偏置调节为正确的时间,并且如果需要开始缓存。自定义媒体流源540调用R印ortSwitchMediaMreamCompleted (报告切换媒体流完成)(切换到的流)。每当自定义媒体流源540无法完成媒体元素请求或者具有其无法恢复的媒体元素请求之外的错误时,自定义媒体流源540进入错误状态并且通过调用ErrorOccured(错误发生)通知媒体元素432。如果自定义媒体流源540具有不可恢复的内部错误,则自定义媒体流源540调用ErrorOccured (错误发生)(错误的描述)。作为响应,媒体元素432 接收消息并且开始内部的关机,引发具有错误描述的MediaFailed(媒体失败),并且导致 CloseMediaAsyn(关闭媒体异步)被引发。媒体内容432进一步去除任意结构,清理,并且通过设置其内部源为空来将其自己与自定义媒体流源540分离。就媒体流源缓存而言,媒体元素432通过导致GetSamp 1 eAsync (获取样本异步)引发来请求样本。自定义媒体流源540不具有所需的样本并且进入缓存(假设缓存是完全空的)。自定义媒体流源540尝试从媒体文件处收集样本并且报告其正在用尺印0汁6讨3_ 1冲1~呢仪%(0)(报告获取样本过程(0))缓存。经过一段时间之后,媒体元素432进入缓存状态,凭借该状态自定义媒体流源540将最终填充其缓存的若干部分(例如一半)。假设填充了一半,自定义媒体流源540调用R印ortGetSampleProgressO). 5) ReportGetSampleProgress (0. 5)(报告获取样本过程(0. 5))0经过一段更长的时间之后, 自定义媒体流源540已经填充缓存至90%并且调用R印ortGetSampleProgressO). 9)(报告获取样本过程(0. 9))。经过一段另外的时间之后,自定义媒体流源MO已经完全填充缓存并且通过调用R印ortGetSampleCompleted(报告获取样本完成)(下一个样本)来返回样本。在接收样本之后的某一时刻,媒体元素432转换回播放状态。就典型的回放操作而言,媒体元素432导致GetSampleAsync (获取样本异步)(视频)被引发,自定义媒体流源540据此收集样本并且通过R印ortGetSampleCompleted(报告获取样本完成)(videoSample)(视频样本)返回。系统为每种类型的样本音频和/或视频来重复这一过程。媒体元素432和自定义媒体流源540之间的合约取决于媒体流源初始传递给媒体元素432的MediaMreamDescriptions (媒体流描述)组。从媒体元素432到自定义媒体流源MO以及从自定义媒体流源540到媒体元素432的通信与这组MediaMreamDescriptions (媒体流描述)对应。换句话说,对每个 MediaStreamDescriptions (媒体流描述)有约束为媒体元素可以传递给自定义媒体流源 540,即它等于自定义媒体流源540包含的至少一个MediaStreamDescriptions (媒体流描述)。在相反的方向,自定义媒体流源540可以知道相比其告知媒体元素432更多的额外的流,但是它不向媒体元素432询问那些额外的流的任意一个。避免这些合约问题的一种方式是为自定义媒体流源540保持在为期生存时间调用R印ortMediaCompleted (报告媒体完成)期间传递的同一集合的描述。图7是示出在一个实施例中的处理自定义容器格式的媒体流源的子类划分的数据流图。开发者可以将媒体流源子类划分以处理开发者自己的容器格式。大多数媒体流源 API成对地工作,并且遵循图7所示的调用模式。也就是说,当媒体元素432为信息做好准备时,它向自定义媒体流源540上的内部方法提出请求。自定义媒体流源内部方法直接调用保护的“异步”方法;自定义媒体流源540进行一些处理,并且自定义媒体流源540调用保护的“完成的”方法以标志其具有所请求的信息。“完成的”方法调用媒体元素432上的内部方法以标志其具有信息并且将该信息传递回媒体元素432。注意到虽然方法名为“异步”,但是代码可以与来自“异步”方法中对应的“完成的”调用同步地响应;“异步”命名更多是有关媒体元素432如何调用这一方法的提示。 此外,在一个示例实现中,响应于匹配“异步”方法调用,媒体流源子类仅能够调用“完成的”方法;其例外为GetSampleAsync (获取样本异步)和R印ortGetSampleCompleted(报告获取样本完成)。在这一例子中,自定义媒体流源540可以缓存并且可以响应一个或多个R印ortGetSampleProgress (报告获取样本过程)调用以及紧接着的 R印ortGetSampleCompleted (报告获取样本完成调用)。在这一示例中,如果“完成的”方法由自定义媒体流源540调用而媒体元素432没有首先调用匹配“异步”方法,则响应于来自“异步”的调用,引发具有“仅调用完成”的消息的IrwalidOperationExceptior^无效操作例外)。媒体元素432 —次仅进行一个“异步”调用并且在处理另一个请求之前将等待来自自定义媒体流源MO的“完成的”响应。其例外是CloseAsync (关闭异步),如果媒体元素432由于错误或者由于媒体元素432正在被关闭而想要关闭,则这可以在任何其它异步调用之后被引发。从上文将会明白,虽然此处已经出于说明目的描述了媒体交互系统的特定实施例,但是可以做出各种修改而不背离本发明的精神和范围。相应地,本发明不受限制,只受所附权利要求书的限制。
权利要求
1.一种用于在托管应用程序平台中处理可扩展媒体格式的计算机实现的方法,所述方法包括接收210托管应用程序,所述应用程序与所述托管应用程序平台交互以回放媒体; 调用220接收到的应用程序; 向所述应用程序请求230媒体;从所述应用程序处接收240未压缩的媒体,所述应用程序被配置为执行从所述应用程序接收所述媒体的格式到未压缩媒体的媒体解压缩,并且所述平台允许应用程序支持新的媒体格式而不更新平台;以及使用可用硬件通过用于回放的媒体回放流水线来发送250所述未压缩媒体。 其中所述以上步骤由至少一个处理器来执行。
2.如权利要求1所述的方法,其特征在于,所述向所述应用程序请求媒体包括周期性地调用由所述应用程序实现的商定的媒体检索接口。
3.如权利要求1所述的方法,其特征在于,所述向所述应用程序请求媒体包括提供应用程序调用以向所述平台提供媒体的平台功能。
4.如权利要求1所述的方法,其特征在于,所述接收未压缩媒体包括接收所述平台能够在不需要对媒体格式进行进一步处理的情况下回放的解码格式的媒体。
5.如权利要求1所述的方法,其特征在于,所述应用程序接收所述平台不理解的格式的媒体并且使用应用程序提供的编解码器来解压缩所述媒体以将所述媒体转化为所述平台能够回放的格式。
6.如权利要求1所述的方法,其特征在于,所述媒体流水线调用操作系统API来使用扬声器回放音频样本并向显示器呈现视频帧。
7.如权利要求1所述的方法,其特征在于,接收未压缩媒体包括接收选自由YV12、RGBA 和PCM组成的组的格式的媒体。
8.一种用于在应用程序和主存平台之间通信以回放或捕捉一种或多种压缩格式的媒体的计算机系统,所述系统包括被配置为执行软件指令的处理器和存储器;被配置为加载和调用所述平台中的应用程序代码的调用应用程序组件110 ; 被配置成为应用程序代码提供执行环境的执行沙箱组件120,所述执行环境将所述应用程序能够执行的动作限于不危害所述计算机系统的一组安全的动作;被配置为提供应用程序编程接口(API)的原始媒体接口组件130,应用程序可以通过所述API向所述主存平台提供原始、未压缩的媒体内容以供所述平台回放;被配置为基于接收到的未压缩媒体内容来呈现媒体的媒体回放组件150 ;以及被配置为与计算机硬件交互并且从所述媒体回放组件接收数据以便在所述计算机硬件上回放的硬件接口组件160,其中应用程序通过所述主存平台间接地访问所述计算机硬件。
9.如权利要求8所述的系统,其特征在于,所述调用应用程序组件还被配置为从网页处接收对应用程序的参考并基于所述参考启动所述应用程序。
10.如权利要求8所述的系统,其特征在于,所述调用应用程序组件从网络服务器处下载应用程序以及包括用于处理自定义格式的媒体数据的至少一个应用程序参考的编解码器的应用程序的从属。
11.如权利要求8所述的系统,其特征在于,所述执行沙箱组件还被配置为接收未编译的应用程序代码并且即时(JIT)编译所述应用程序代码以便在沙箱中执行。
12.如权利要求8所述的系统,其特征在于,所述执行沙箱还被配置为提供应用程序能够调用以解压缩媒体数据的一个或多个注册的编解码器,其中所述注册的编解码器能够在不更新所述平台的情况下更新以添加对媒体类型的支持。
13.如权利要求8所述的系统,其特征在于,所述原始媒体接口组件从应用程序处接收未压缩的媒体内容,所述应用程序接收压缩的媒体内容并且在所述应用程序中解压缩所述压缩的媒体内容。
14.如权利要求8所述的系统,其特征在于,所述原始媒体接口组件从合成媒体内容的应用程序处接收未压缩的媒体内容。
15.如权利要求8所述的系统,其特征在于,所述原始媒体接口组件从应用程序处接收未压缩的媒体内容,所述应用程序后处理媒体内容以修改所述媒体内容并且向所述主存平台提供经修改的媒体内容作为未压缩的媒体内容。
全文摘要
此处描述了媒体交互系统,所述媒体交互系统允许托管应用程序独立于媒体内容的格式消费和/或产生丰富的媒体内容,同时仍然维护主机的安全。所述媒体交互系统接受来自托管应用程序的原始、未压缩的媒体数据,并且允许托管应用程序通过沙箱API来提供其自己的编解码器,所述沙箱API将编解码器能够执行的动作限于可信动作集。然后,应用程序将未压缩的数据提供给用于回放的系统。因此,媒体交互系统提供应用程序开发者支持的任意格式的丰富的媒体内容,并且维护用户的计算机系统的安全。
文档编号G06F9/44GK102356380SQ201080012732
公开日2012年2月15日 申请日期2010年3月9日 优先权日2009年3月16日
发明者B·J·埃旺恰克, G·科扎姆, L·W·奥尔森, M·R·哈什, S·J·乔治 申请人:微软公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1