1. Field of the Invention
Aspects of the present invention relate generally to a media player, and more particularly, to an extensible media player.
2. Description of Related Art
Current media player solutions found on Internet web pages are designed and written like most computer applications. When a new feature is to be added to the media player, the feature must be written into the main media player application, essentially requiring a full product cycle. This increases the deployment time of the media player.
Current media player solutions also fail to provide a fully dynamic system to program the user experience on-the-fly. While solutions exist to render different visual items based on cue points within the media being played or based on pre-defined criteria, these items are fixed and must be pre-programmed with the media being played.
Thus, it would be desirable to provide a method and system for creating an extensible media player capable of being modified dynamically to provide a highly interactive experience for a user.
Embodiments of the present invention overcome the above-mentioned and various other shortcomings of conventional technology, providing a method and system for creating an extensible media player.
In accordance with one aspect, a media player application may be instantiated on a client system. A timeline to be played by the instantiated media player application may be transmitted to the client system. One or more modules and one or more layouts are dynamically selected and retrieved for the timeline. The modules may contain application logic to extend a functionality of the multimedia player application. The layouts may control an aspect of a presentation of the multimedia player application and the modules. The timeline, the modules, and the layouts may be loaded into the media player application. One of the loaded modules may identify and retrieve one or more multimedia files to be played or one or more applications to be executed by the media player application. The loaded modules are verified to determine if any module is blocking the timeline from initiating playback. If a module is blocking the timeline from playing, the blocking module may be executed and playback of the timeline may be prevented from starting until execution is complete. If no module is blocking the timeline, the timeline may begin playback. Each subsequent module and loaded layout are executed at predetermined times during playback of the timeline. As each module executes, the module may be checked to determine if the module is a blocking module. If the module is a blocking module, playback of the timeline may be stopped or paused, and the module may execute. Once the module has finished executing, playback of the timeline may resume until the timeline reaches its end.
The foregoing and other aspects of various embodiments of the present invention will be apparent through examination of the following detailed description thereof in conjunction with the accompanying drawing figures.
The system also may include a plurality of client devices capable of instantiating or executing a media player application to play a media file, such as a video file or an audio file. The devices may include but are not limited to personal computers, digital video recorders (DVRs) or personal video recorders (PVRs), set top boxes which may receive content through cable, satellite, or Internet Protocol via network infrastructure including but not limited to wireless media and fiber optic cable (e.g., IPTV or Internet television), and mobile devices, such as cell phones, personal digital assistants (PDAs), or other wireless devices capable of playing video files. Each device may include software to process and play media files. The software may comprise a standalone media player capable of playing media files and parsing the presentation data file to execute modules. Alternatively, the software may include an Internet browser or other software in which the media player application, in the form of, for example, a Java applet or Flash-based player, may be instantiated or embedded. A client device may be configured to send a request through a network to the server to access one of the media files presented in the presentation data file. In response to a request from a connected device, a server may stream or transfer the selected media file(s) and accompanying modules associated with the selected media file over a network to the requesting device.
The media files 215 may have any video or audio or mixed video/audio format, including but not limited to the types mentioned earlier. The particular format of the media files 215 stored in the server 205 is immaterial for the purposes of the present discussion, unless otherwise noted. The media files need not be stored in only one server, and may be stored in multiple servers. The one or more modules may provide additional player functionality or presentation features for the media player application. Examples of modules may include but are not limited to a player controls module, a playlist module to display available media files, a pre-timeline curtain module to display an advertisement prior to a media file, a banner to display a presentation aspect during playing of a media file, a post-roll curtain to display a presentation aspect subsequent to the playing of a media file, and a container to display third party content. Generally, modules may be designed and stored to interface with the media player application prior to, during, or subsequent to the playback of a media file. The modules may control an aspect of the playback of media files or may affect an aspect of the presentation of the media player application to a user.
The modules related to presentation aspects of the media player application may either transparently overlay or fully obscure part or all of the media file being played. Each module may have a default aspect ratio of 4:3, but may have logic necessary to conform to other aspect ratios, such as 16:9. Each module also may be resizable to any size. The modules may be configured to retrieve additional data from remote sources, such as the server, if needed, or to record and transmit usage information to the remote source. For example, if a closed captioning module is associated with a media file, the closed captioning module may retrieve the closed captioning data from a remote source to present to a user. The modules 220 also may be interactive, thereby enabling the user to control presentation of the media file or to access additional related content presented to the user before, during, or after presentation of the media file. In one embodiment, the media player application 240 and the modules 220 may be Flash-based components conforming to a specific version of Flash, including but not limited to, Flash 9. The container module may enable non-Flash third party content or third party content not conforming to a specific version of Flash to be displayed in conjunction with the media file being played in the media player application.
The presentation data files, either stored in the server 205 or generated by the presentation data file generator 225, may define a set of available media files to be played (i.e., a playlist) as well as media player application components 220 (i.e., modules) to be executed or displayed for each media item of the playlist. The presentation data file may further define the modules 220 by defining the ordering and timing of the modules 220 for a given media file (i.e., when a module is active and inactive). The timing of the modules 220 may be expressed as a function of time, events, or elapsed frames of the media file with which the module is associated. For modules 220 relating to the presentation of the media file to a user, the presentation data file also may specify the location and placement of the module within the media player application. The presentation data file may be a XML-based file such as a Media RSS (MRSS) file. Alternatively, the presentation data file may be a binary file. As a binary file may have a smaller file size than other file formats, the length of time to download a binary presentation data file may decrease, thereby improving performance of the system. A sample presentation data file is shown below:
The presentation data file may enable presentation aspects and application logic to be dynamically changed for a media file. For instance, the above sample presentation data file includes a player controls module, a start frame module, and a post-roll module. However, different modules may be substituted on-the-fly by modifying the presentation data file to call other modules. The placement or timing of the modules may be dynamically modified by changing the specifications for the various modules listed in the presentation data file, such as the “height,” “width,” and “module start” parameters.
The client device may execute a standalone media player application 240 or instantiate a media player application 240, within, for instance, an Internet browser. In one embodiment, the media player application 240 may be a Flash-based application. In one embodiment, the media player application 240 may be created as a Microsoft Silverlight™ application capable of playing WMV and WMA media files. The media player application 240 may serve as a platform for the extensible media player, and may include an Application Programming Interface (API) 245 which communicates with the various modules. In this respect, the API 245 may enable the modules 220 to interface with the player application 240 and control the presentation and playback aspects of the player application 240. In one embodiment, the player application API 245 may be public, thereby enabling distributed development of modules.
The presentation data file may be passed to the media player application from within a web page as a parameter or programmatically via JavaScript if the media player application is embedded on a web page. Alternatively, the presentation data file may be retrieved from the network by the media player application if the media player application is given or has knowledge of the source address of the presentation data file. A presentation data file parser 250 may parse the presentation data file 230 to reveal a playlist of media files available for playback. In one embodiment, the presentation data file parser 250 may be integrated into the media player application 240. In one embodiment, the playlist may list a set of FLV videos. An instance of the playlist may be passed to the instantiated or executed media player application, which may further parse the playlist to identify playlist items corresponding to available media files. Each playlist item may have a presentation instance that identifies the modules associated with the playlist item. The playlist items on the playlist may each include an address or link to the location where a corresponding media file 215 is stored. In response to the selection of a playlist item from the playlist, the player application 240 may transmit a request to the server 205 to download or stream the selected media file 215. While the embodiment discussed herein may identify a single server storing media files and modules, it is contemplated that multiple servers may be employed to store modules, media files, and, if the application is instantiated on a client device, an application SWF file. The present invention is not intended to be limited with respect to the number of servers employed, and it is conceivable that each component or aspect of the extensible media player may originate from or be located in a different location. Modules 220 associated with the selected media file also may be downloaded. In one embodiment, the modules 220 may be downloaded separately. Alternatively, the modules 220 may be packaged as one file at the server and downloaded to the client, thereby minimizing network traffic. Packaging the modules as one file may also reduce the load time of the modules, thereby improving the user viewing experience. The media player application 240 may load the selected media file 215 and the downloaded modules 245 for playback and presentation to the user.
In the event one or more of the modules fail to download or load properly, the instantiated or executed media player application 300 may nevertheless continue to operate without the failed module(s). As the modules provide additional functionality or presentation to the media player application, at a basic minimum, the extensible media player 300 may play the selected media file absent any of the modules, should the modules fail to download or load properly.
In block 715, the presentation data file may be parsed, and an instance of a playlist document may be passed to the media player application. The playlist instance may include a playlist items corresponding to media files available for playback. Each playlist item listed in the playlist may include an address or location from which a corresponding media file may be retrieved. A presentation instance may be created for playlist item listed in the playlist instance. The presentation instance may specify which modules and module-specific parameters are to be used by the media player application for a specific media file. In block 720, in response to a user selection of a playlist item, the media player application may request that a server transmit the requested media file corresponding to the playlist item to the client device. The server may transfer or stream the requested media file. In block 725, the media player application may load the downloaded or streamed media file and specified modules associated with the selected media file. The modules may be downloaded from URLs specified in the presentation data file. Version checking for each module may be performed using the module URL.
In block 730, pre-timeline modules, defined to be executed and/or displayed prior to the playing of the selected media file, may be executed. Examples of pre-timeline modules may include but are not limited to a pre-roll curtain displaying an advertisement, and a container module to house third party content which may conflict or be non-conforming with the media player application. In block 735, the media player application may load and play the selected media file. The media player application also may execute and/or display modules chosen to concurrently run with the playing of the media file. Such modules may include but are not limited to a banner module to display an advertisement during playing of the media file, a player controls module to display a set of user controls for controlling the playing of the media file, a closed captioning module to display closed captioning, and a clip list module to offer additional available media files for playback. In block 740, subsequent to the playing of the media file, the media player application may execute and/or display post-timeline modules. Post-timeline modules may include but are not limited to the clip list module and a post-roll curtain module to display an advertisement subsequent to the playing of the media file. In block 745, the media player application may process the next playlist item selected by a user. Processing may include downloading or streaming the media file, downloading associated modules, and loading the media file for the next playlist item and associated modules.
The data file may describe and configure a media player application. The data file is structured in a hierarchical format, such that the data file may describe a playlist of timelines and associated media files or applications, and within the playlist, one or more layouts, modules, timelines, and timeline templates that are associated with one or more media files in the playlist. The modules 810 may interface with layouts 815, timelines 820, playlists 825, and the extensible media player platform generally via one or more APIs. In this respect, the platform offers to media player and module developers a standard base upon which to consistently process and interact with code or programs written for the extensible media player.
Each module 810 operates to extend a functionality or presentation aspect of the media player or to enhance the media player experience, such as through user interactivity. Each module may be decoupled from other modules such that each module operates independently of other modules. Because each module operates independently of other modules, a developer may create his or her own modules that may be injected or loaded into the platform to operate with the media player. However, even though modules are decoupled from each other, the modules may communicate and transfer data between and among themselves. A sample portion of a presentation data file with respect to modules is shown below:
The modules associated with a particular media file also may be selected programmatically via the platform. Modules may run on an application level, a playlist level, or a timeline level. If a module is running on an application level, the module may always be active, and does not need to be defined for each timeline (corresponding to a media file or application) or playlist (corresponding to multiple media files or applications). If a module is running on a playlist level, the module will be active for each timeline located in the playlist. If a module is running on a timeline level, the module is running only when it is activated during the course of a specific timeline and associated media file or application.
A container-based layout approach may be used to organize the location of modules and media files within the media player application. Using this approach, one or more modules 810 may be placed within a layout container by the platform, with multiple containers capable of being used together to control the display of various modules when the media player is executed. Modules may be placed within a particular layout container by specifying a layout ID corresponding to the layout container in which the module is to be inserted. Use of containers to define the location of modules may eliminate the need to place modules directly on the display, and consequently logic or code previously used to define the size and placement of the modules on the display is unnecessary.
One supported module is a playback controls module that governs the execution or playback of media files in the player application. The playback controls module may include functionality for displaying the duration of a media file and controlling the play back of a media file, such as media player controls for playing, pausing, or stopping a media file, adjusting the volume of a media file and so forth. The playback controls module may provide additional functionality for interacting with a user if an application, such as a game, is presented to the user in place of a media file. For an application, the playback controls module may specify a duration in relation to some aspect of the application. For instance, if the application is a game, a game module may give a user 10 seconds to respond to a question. The playback controls module may display this 10 second duration to the user. A playlist 825 may store or maintain a list of timelines to be played. As described in more detail below, each timeline may specify a set of modules and timing information, such as activation points (e.g., start and stop points), for each of the modules associated with the timeline. The modules associated with the timeline may playback one or more files of a media type (e.g., a multimedia file, an audio file) or may run one or more applications, such as a game. These media files and applications may be played back or executed at the same time if desired. The media file(s) or application(s) to be rendered may be determined by the modules associated with the timeline. The playlist 825 may maintain templates or common elements for one or more timelines. If a presentation data file is used to specify timelines to be loaded and modules and layouts to accompany the timeline to render media files or applications, the presentation data file may reference or call templates to be loaded for the media files or applications. The templates or common elements may define which modules 810 are to be used during the playback of the timelines and media files, with the advantage being that modules 810 commonly used by one or more media file may be retrieved once and reused, thereby eliminating a need to call and retrieve the modules from the servers for each media file. Additionally, templates may eliminate the need to redefine common elements multiple times, in the presentation date file for example, thereby improving the speed at which the modules load and allowing modifications to be made easier. If templates are not used, the playlist 825 may store a list of timelines to be played, along with associated modules 810 and layouts 815 to be retrieved and used in the presentation and play back of each timeline.
In one embodiment, instead of using pre-roll, concurrent, and post-roll modules (relative to the playback of a timeline) to control the timing of activation or execution of modules, a module 810 may serve as a time source, or a timing reference to synchronize the activation or execution of other modules relative to the playback of the timeline and the media file. The timeline 820 may start playing modules and may activate and playback a media file or execute an application. As contemplated herein, a timeline may be a combination of modules, UI and data that is used to display one or more clips of media or one or more applications. The modules may execute or otherwise remain active for the duration of the timeline. Because the module 810 serves as a timing reference, other modules may be activated or called using the timing parameters maintained by the module 810. The timing references provided by the module 810 may be expressed in, for example, seconds elapsed or remaining, frames elapsed or remaining, percentage of media file played back or completed, percentage of the media file remaining, or any other way by which a media file or application may be measured. Sample code from a sample presentation data file with respect to the timeline is shown below:
The platform 805 and the modules 810 may support the use of blocking modules that prevent or halt the execution or playback of the timeline until some predetermined event occurs. A blocking module also may pause a timeline. Any other module 810 may act as a blocking module through the assertion of a blocking flag or other indicator that identifies to the time source module 810 and the platform 805 that the execution of the timeline is to be stopped until the blocking module gives permission for execution or playback to be resumed. Permission may be given by activating or otherwise interacting with the functionality of the blocking module causing execution of the timeline to be blocked.
The media files or applications associated with the modules may further include code that handles scenarios involving seeking of a media file. For instance, if a timeline and associated media file are being played, and a user chooses to fast forward or seek ahead to a different part of the media file, the timeline and media file may run into or cross paths with a blocking module that is set to activate prior to the seek ahead location. In this case, the blocking module may or may not permit seeking, such that if the blocking module does not permit seeking ahead, the blocking module will activate and halt the seek at the moment when the blocking module is set to activate. The user is then required to experience or interact with the presentation of the blocking module's content before being permitted to seek ahead. While the blocking module blocks the media file from seeking ahead, the blocking module or the platform may track and remember the desired seek ahead location, such that when the blocking module de-asserts its blocking flag, the timeline and media file are transported ahead to the desired seek ahead location. Similar functionality may be effected for scenarios where a user desires to seek backwards in a timeline and associated media file. For those situations where a user has already viewed or otherwise executed a blocking module, the blocking module may include code that may prevent a blocking module from re-activating or triggering if a user seeks backwards and crosses paths with the blocking module again. Alternatively, there may be instances in which a blocking module will always activate regardless of whether a seek forward or backward triggers the blocking module.
In one embodiment, a timeline may be synchronized to a specific module rather than a central clock maintained by the media player platform. In this case, a module may be activated at a reference point of another module. In one embodiment, a specific module may act as a timing reference if the parameter “timesource=true” is set.
Three layout containers may be used to define the visual structure of the display. A Hbox layout container may stack items and modules 1005, 1010, 1015 next to each other horizontally (e.g., in the x-axis). The items and modules in two Hbox containers located adjacently may overlap. A Vbox layout container may stack items 1020, 1025, 1030 on top of each other vertically (e.g., in the y-axis). Vbox layout containers may overlap. Alternatively, a Hbox, Vbox, or any other layout container may clip or mask any children (e.g., modules) that attempt to render outside the container. To render outside a container, a module may request that it be pulled out of the container temporarily if the module is to be on top of or overlap other elements. A Canvas layout container may permit modules or items 1035, 1040, 1045 to overlap each other in a z-axis. Canvas containers may permit layering of modules and other items, or the superimposing of one module over another on the display. In
Layout containers may be used in conjunction with a timeline and associated modules to switch between different layouts and modules during the playback of a timeline and associated media file. For instance, a media player display screen may occupy the majority of a screen with a playback controls module placed in a layout container for display with the display screen. The act of a play button being selected may trigger a transition from one layout to another, with the platform laying out the new layout. Generally, any event may trigger a new layout to be displayed, along with new modules being activated. Additional exemplary embodiments that may trigger new layouts may include the resizing of a video window and clicking an info button that triggers a layout change and activation of an information module.
The extensible media player platform may support custom panels. A custom panel may be appropriate where a custom multimedia presentation or additional presentation aspects or features beyond playback of a media file are desired. A custom panel can have a standard layout, such as a video display portion and a set of playback controls. However, a custom panel may enable transitions and animations between layouts. For instance,
The extensible media player platform may support timing references, or time sources, beyond the timeline previously disclosed herein. A central clock may be maintained, by the timeline module, the platform, or one of the servers supporting the platform, and one or more media files or modules may serve as time sources. In one embodiment, only one media file or module may be a time source at one time. However, the extensible media player platform may support switching between time sources. By allowing media files to act as time sources, modules, layouts, and other items may synchronize their actions and functionality directly to the media file, rather than relying on a timeline to provide a timing reference.
Additional aspects of the extensible media player platform may support the use of a data store for modules. The data store is a centralized repository from which modules can read and share data. Data contained in a presentation data file may be placed in the data source for retrieval and use. The presentation data file may reference the data store as the location from which to retrieve certain data such that the modules defined in the presentation data file and associated with various media files may understand to retrieve that data from the data store.
Additional aspects of the extensible media player platform may support a transfer manager for prioritizing data downloads among multiple modules. The platform may provide a unified model for retrieving data from the network. The platform may support multiple modules that interact with the platform via one or more APIs. This interaction may include retrieval and downloading of data from one or more servers supporting the platform. A transfer manager is employed as an interface in the platform to handle data transfers. The transfer manager may manage all scheduled transfers to and from modules and may support priority-based queues. The transfer manager may throttle the amount of concurrent network calls made at a time by the modules and other components of the platform and may queue all requests based on a requested priority. The transfer manager may recognize that certain items or data that must be available for playback of a timeline and associated media file to start should have a higher priority than items that can be filled dynamically later, such as additional metadata or information.
The platform may support the notion of callbacks as well. As a transfer request may be specified in terms of data to be downloaded from a URL or other resource locator address, if callback functionality is enabled, the requested data may be loaded from URL-cached content, memory, or an already-loaded module. Any asset may be retrieved using the callback functionality, including modules, layouts, multimedia files, and applications. A separate callback module may handle the callback functionality in order to optimize the number of network calls made by modules. Alternatively, the transfer manager may handle callbacks. Callbacks enable resource transfer requests made by the platform and modules to be fulfilled locally if possible before making a network call for retrieval of such resources.
The platform may support the use of predetermined packages of modules. Use of a package of modules simplifies the calling of modules as modules are bundled together into a file such that only one file needs to be called and retrieved rather than individual modules. The package or any of its modules may be located using a URL as the source ID for the package such that when the package is called by either the dynamically passed or loaded presentation data file or programmatically, the package can be retrieved from the address specified by the URL. The platform further supports the use of callbacks with module packages. If callbacks are enabled for module packages, any time a particular module or a version of the module is desired, the source ID of the package containing the module may be used to register a callback with the particular module or package. If a particular version of the module is desired, a version number may be included in the URL specified as the source ID. Use of the callback for a particular module or version of a module may avoid the need to download the module from the network. If the media player has already loaded a package, and a newer version of a module contained in the package is desired, the URL in the presentation data file can be changed to point to the new version of the module. The media player may start using the newer version of the module, even though the older version of the module is already loaded. Newer module versions may thus be deployed without having to necessarily update the deployed player package immediately.
If one of the loaded modules has asserted a blocking indicator, the media player application may execute the blocking module first, as shown in block 1330. An example of a blocking module that may prevent a timeline from beginning playback may be a start screen module that requires a user to select a play button associated with a playback controls module to initiate playback. In this respect, the timeline will not begin playing automatically after being loaded. Another example of a blocking module that may prevent a timeline from beginning playback may be an advertisement that is shown before the timeline begins playing. If no module blocks the initial playback of the timeline, the timeline may begin playing, as shown in block 1335. As the timeline plays, one or more modules may execute at predetermined times relative to the timeline playback, as shown in block 1340. The predetermined times may be determined by a module that maintains a timing reference relative to the playback of an associated multimedia file or by a central clock or timing reference maintained by the media player platform. Alternatively, the predetermined times may be determined relative to the multimedia file itself, in that the modules may synchronize to the multimedia file itself if the file is a timesource, as previously described herein. In block 1345, as each module executes during playback of the timeline, the media player application or the platform may verify whether any of the executing modules act as blocking modules. If so, playback of the timeline is stopped, and the blocking module may complete execution before playback resumes, as shown in block 1350. An example of a blocking module that may stop playback of the timeline is an advertisement or commercial. A user clicking on a banner advertisement or other interactive feature associated with the timeline being played also may stop playback as the user is directed to additional content or advertisements. If no blocking modules are executed during playback of the timeline, the timeline may play until it reaches its end. The method ends at block 1355.
Those of skill in the art will appreciate that an extensible media player may be enabled to facilitate the deployment of a multi-layered dynamic media player system. Such a system may be implemented and deployed without the delay of a traditional product cycle. The dynamic nature of the extensible media player allows for the media player application to be modified based on changing business needs and on a per view or per user basis. The present disclosure is not intended to be limited with respect to the type of device capable of implementing the extensible media player. Moreover, the present disclosure is not intended to be limited with respect to the modules and layouts disclosed herein. Additional modules and layouts may be employed to add functionality to the media player application or to control an aspect of the presentation of a media file played in the media player application.
Several features and aspects of the present invention have been illustrated and described in detail with reference to particular embodiments by way of example only, and not by way of limitation. Those of skill in the art will appreciate that alternative implementations and various modifications to the disclosed embodiments are within the scope and contemplation of the present disclosure. Therefore, it is intended that the invention be considered as limited only by the scope of the appended claims.
The present application is a continuation-in-part of application Ser. No. 12/185,040, filed Aug. 1, 2008, entitled, “System and Method for Implementing an Ad Management System for an Extensible Media Player”, which is a continuation-in-part of application Ser. No. 12/165,290, filed Jun. 30, 2008, entitled, “Extensions for System and Method for an Extensible Media Player”, which is a continuation-in-part of application Ser. No. 11/874,171, filed Oct. 17, 2007, entitled, “System and Method for an Extensible Media Player”. The present application incorporates these earlier-filed applications by reference.
Number | Date | Country | |
---|---|---|---|
Parent | 12185040 | Aug 2008 | US |
Child | 12355661 | US | |
Parent | 12165290 | Jun 2008 | US |
Child | 12185040 | US | |
Parent | 11874171 | Oct 2007 | US |
Child | 12165290 | US |