DYNAMIC MEDIA SERVING INFRASTRUCTURE

Abstract
Systems and methods provide for dynamic generation of media content at the point that content is served. The system and method work within the bounds of simple, existing, open protocols and the media files served are playable by standard media playback clients. The method is driven by a request for media content from a client specifying an edit list. The server opens one or more source files and selects portions of one or more files to transmit based on edit list instructions, and sequentially writes those portions to an output for serving to the client. The method allows for various modifications of the content before serving.
Description

BRIEF DESCRIPTION OF THE DRAWINGS


FIG. 1 is a block diagram illustrating a client server architecture according to one embodiment of the present invention.



FIG. 2 is a block diagram illustrating the server in greater detail according to one embodiment of the present invention.



FIG. 3 is a flowchart illustrating a method for serving media content according to one embodiment of the present invention.



FIGS. 4A-4C illustrate possible uniform resource locators according to various embodiments of the present invention.



FIG. 5A is an illustration of a file format according to one embodiment of the present invention.



FIG. 5B is an illustration of a sample AVI file according to one embodiment of the present invention.



FIG. 6 shows an example of a use case for the method described herein according to one embodiment.


One skilled in the art will readily recognize from the following discussion that alternative embodiments of the structures and methods illustrated herein may be employed without departing from the principles of the invention described herein.


Claims
  • 1. A method for serving media content, comprising: receiving at a server a request for media content specifying an edit list;opening at least one source file associated with the media content, the at least one source file stored in a plurality of separately indexed portions;selecting one of the plurality of separately indexed portions from the at least one source file to transmit based on an instruction within the edit list;writing the one of the plurality of separately indexed portions to an output; andserving the media content comprising the one of the plurality of separately indexed portions to the client.
  • 2. The method of claim 1, wherein the request further comprises a time range corresponding to the media content.
  • 3. The method of claim 1, wherein the request comprises a URL.
  • 4. The method of claim 1, further comprising: receiving one or more media files from the client; andtranscoding the one or more media files into a file serving format and storing the one or more media files as the at least one source file.
  • 5. The method of claim 4, wherein transcoding further comprises: indexing data corresponding to the one or more media files; andstoring the indexed data out-of-band from the at least one source file.
  • 6. The method of claim 1, wherein the edit list comprises instructions for modifying the media content, the instructions added by the client.
  • 7. The method of claim 1, wherein the edit list comprises instructions for modifying the media content, the instructions added by the server.
  • 8. The method of claim 1, wherein the edit list comprises instructions for modifying the media content, the instructions added by the client and the server.
  • 9. The method of claim 1, further comprising modifying the separately indexed portion before writing the separately indexed portion to output.
  • 10. The method of claim 9, wherein the modifying comprises an alteration of the separately indexed portion selected from the group consisting of a length modification, a rate modification, a stream quantity modification, and a file wrapper format modification
  • 11. The method of claim 1, wherein if the edit list comprises a subsequent instruction, selecting another separately indexed portion and writing the another separately indexed portion to the output.
  • 12. The method of claim 1, further comprising generating a header and a footer for the media content.
  • 13. The method of claim 1, further comprising: determining whether the output has data to be sent to the client;if the output has greater than a threshold amount of data, writing the data to the network; andif the output has less than a threshold amount of data, requesting additional data from a separate thread.
  • 14. A method for serving media content, comprising: receiving a request for media content, the content stored in separately indexed portions;selecting a separately indexed portion to transmit in response to the request;processing the separately indexed portion; andserving the separately indexed portion.
  • 15. The method of claim 14, wherein the request comprises a time range corresponding to the media content.
  • 16. The method of claim 14, further comprising: receiving one or more media files from the client; andtranscoding the one or more media files into a file serving format and storing the one or more media files as the at least one source file.
  • 17. The method of claim 14, further comprising modifying the next frame before writing the next frame to output.
  • 18. The method of claim 14, further comprising: determining whether the output has data to be sent to the client;if the output has greater than a threshold amount of data, writing the data to the network; andif the output has less than a threshold amount of data, requesting additional data.
  • 19. A method for serving media content, comprising: receiving at a server one or more media files from a client;transcoding the one or more media files into a file serving format and storing the one or more media files as at least one source file, wherein transcoding further comprises indexing data corresponding to the one or more media files and storing the indexed data out-of-band from the at least one source file;receiving at the server a request for media content specifying an edit list, the request comprising URL that comprises a resolution designation and a time range corresponding to the media content, and plurality of instructions;opening the at least one source file associated with the media content;generating a header and a footer for the media content;for each instruction associated with at least one frame of the media content modifying the frame according to the instruction; writing the frame to an output;determining whether the output has data to be sent to the client;responsive to the output having greater than a threshold amount of data, writing the data to the network; andresponsive to the output having less than a threshold amount of data, requesting additional data from a separate thread.
  • 20. A computer program product for serving media content, the computer program product comprising: a computer-readable medium; andcomputer program code, coded on the medium, for: receiving at a server a request for media content specifying an edit list;opening at least one source file associated with the media content, the at least one source file stored in a plurality of separately indexed portions;selecting one of the plurality of separately indexed portions from the at least one source file to transmit based on an instruction within the edit list;writing the one of the plurality of separately indexed portions to an output; andserving the media content comprising the one of the plurality of separately indexed portions to the client.
  • 21. The computer program product of claim 20, wherein the request comprises a time range corresponding to the media content.
  • 22. The computer program product of claim 20, further comprising computer program code, coded on the medium, for: receiving one or more media files from the client; andtranscoding the one or more media files into a file serving format and storing the one or more media files as the at least one source file.
  • 23. The computer program product of claim 20, further comprising computer program code, coded on the medium, for modifying the separately indexed portion before writing the separately indexed portion to output.
  • 24. The computer program product of claim 20, further comprising computer program code, coded on the medium, for: determining whether the output has data to be sent to the client;if the output has greater than a threshold amount of data, writing the data to the network; andif the output has less than a threshold amount of data, requesting additional data.
  • 25. A server for serving media content, comprising: a network interface for receiving a request for media content specifying an edit list; anda read thread for: opening at least one source file associated with the media content;selecting a separately indexed portion of the media content from the at least one source file to transmit based on an instruction within the edit list;writing the separately indexed portion to an output; andif the edit list comprises a subsequent instruction, selecting another separately indexed portion and writing the another separately indexed portion to the output.
  • 26. The server of claim 25, further comprising: a write thread for: determining whether the output has data to be sent to the client;if the output has greater than a threshold amount of data, writing the data to the network; andif the output has less than a threshold amount of data, requesting additional data.
  • 27. The server of claim 25, wherein the request comprises a time range corresponding to the media content.
Provisional Applications (1)
Number Date Country
60756787 Jan 2006 US