1. Technical Field
This invention generally relates to Internet based personalized radio/music technology. More particularly, the invention relates to an apparatus and method allowing a user to skip one or more songs in a pre-selected play list without having an unintended delay between skips.
2. Description of the Related Art
Internet based personalized radio services, such as Radio@AOL and iSelect, provide users a high flexibility to choose programs and make their own play list using a graphical user interface which is part of the client application of the service. The client application sends a user's request to the server and the server responds to the user's request by returning the requested in compressed data. The client application along with the user's browser executes a decompression algorithm to decompress the compressed data in real time and sequentially plays the data as it is transferred from the server to the user's computer over the Internet. Using streaming technologies, the user's computer does not need to download the entire file first and then play it. Rather, after downloading a minimal section of data into a buffer, the user's computer reads from the buffer and plays the song or music represented by the data. The data already read by the computer is deleted from the buffer so as to ease the RAM requirements and maintain a balance between the write-in and the read-out data flows.
When the user's computer plays a play list or a preset, which is either created by the user or by the service provider, the server sends and the user's computer receives the data over the Internet in a programmed sequence so that there is no unintended delay between any two programs in the list. If the user does not interrupt, the computer plays the songs in the list one by one in an organized consecutive manner. However, when the user switches from one list or preset to another, the users actually interrupts the natural flow of the play list or the preset. In these circumstances, because the computer has to request that the server start to send the data for the target list or preset, several seconds of loading time is needed. Likewise, when the user wants to be actively be involved in the sequence of the play list or preset by skipping one or more songs, as it is illustrated in
Therefore, there is a need in the art to provide a solution to overcome the unintended delay or pause problem caused by a user's skipping from one song to the other while a pre-determined list of selections is playing in a programmed sequence.
In an Internet based personalized radio, where a user has a pre-selected list of songs to be played in a particular order, the invention provides an apparatus and method allowing the user to skip one or more songs without having a delay between skips. This is accomplished by downloading and pre-caching, i.e. pre-buffering the first small portion of each of the next several songs on the play list so that, should the user choose to skip to any of the next several songs, the pre-buffered small portion of the target song is already available to be played and therefore there is no unintended delay between two songs. The apparatus starts to play the pre-buffered small portion of the target song and starts to download the rest of the target song at the same time. Because the system is so configured that the time for playing the pre-buffered small portion is longer than the initial buffering time for the rest of the target song, the entire target song is played smoothly. In other words, there is no unintended delay between the first small portion and the rest portion either.
In the preferred embodiment of the invention, the first small portion is approximately the first ten seconds of the song. This solution is advantageous because ten seconds of pre-buffering complies with various royalty requirements such that if the user skips before the ten seconds pre-buffered portion is played, a royalty is not accessed for listening to the song. In addition, avoiding of downloading the entire next song conserves bandwidth and memory.
Referring to the drawings, in particular to
Using clip based data streaming technologies, the user's local computer 120 can play audio or video program in real time as it is being downloaded over the Internet as opposed to pre-storing the entire program in a local file. The Internet radio client application 109 coupled to the web browser 108 decompresses and plays the data as it is being transferred to the local computer 120 over the Internet. The piledriver is responsible for delivering, for example, an Ultravox formatted stream to the client application in a seamless fashion, in addition to raw data. Streaming audio or video avoids the unintended delay entailed in downloading an entire file and then playing it with a helper application. For the clip based streaming to work, the client side receiving the data must be able to collect the data and send it as a steady stream to the program that is processing the data and converting it to sound or pictures. This means that if the data does not come quickly enough, the presentation of the data will not be smooth. If the streaming client receives the data more quickly than required, it needs to save the excess data in a buffer, which is an area of memory in the write/read random access memory (RAM). Even when the write speed and the read speed are exactly same, to maintain a smooth data flow, a minimum amount of data in the buffer is necessary.
From a high level view, the piledriver receives a play list from an audio or video client application. It analyzes the play list and locally caches the first small portion (e.g. first ten seconds) for clip in the play list. The client can then connect to the piledriver data pump and retrieve the data stream using the HTTP or Ultravox 2.0 Protocols. The major functions of the piledriver include: (1) managing the retrieval and caching the pre-buffer for items in the play list; (2) managing the content in memory; (3) providing content to audio or video clients using raw data or the Ultravox 2.0 protocol from either a local cache or directly from a content-store; and (4) providing a stream of data to the audio or video client mimicking local disk functionality.
The piledriver takes a play list and attempts to present an uninterrupted stream of audio or video output to the client application. One of the primary features of the client application is that it allows the listener to abort a current song being played and request the start of the next clip in the play list.
In order to minimize the amount of time taken for skipping, the piledriver performs two operations in parallel. First, it requests the first URL in the play list from the UltraMODS/HTTP server. Once the pre-buffer data arrives, it waits for the audio or video client to start playing the clip, and also continues downloading the pre-buffer segments for each of the next clips in the play list, in order.
There are two reasons to request the pre-buffers in advance. First, it reduces the delay involved in requesting the clip and then obtaining the pre-buffer before being able to play the audio or video. Second, it causes UltraMODS/HTTP to obtain the media file from the content-store if it does not have it already, hopefully in advance of the new request by the client.
The functional components for the piledriver include a pre-buffer cache engine and a clip/stream retrial application program interface (API). The pre-buffer cache engine is responsible for caching clips in advance of playtime. The clip/retrial API contacts the Apache/UltraMODS/Cache engine for content. For illustration purpose, given below is an exemplary list of API calls and their functions:
pdInit
PILEDRIVERTYPE *pdInit(int cacheahead, int initringsize)
This is the first function called to initialize the piledriver. The number of clips to cache in advance and the size of the pre-buffer cache can be specified.
pdAddItem
PDFILEHANDLE pdAddItem(PILEDRIVERTYPE *piledriver, char *url, unsigned long start, unsigned long end)
Call to add a URL to the cache-ahead playlist. It can be configured to add the entire play list, or just enough to keep the cache-ahead system busy.
pdOpen
PDFILEHANDLE pdOpen(PILEDRIVERTYPE*piledriver, PDFILEHANDLE handle)
Call to open PFFILEHANDLE after the item has been added to the cache engine with pdAddItem. If the file is cached it returns the size of the pre-buffer, 0 if no pre-buffer, or −1 if there was an error related to the files availability.
pdReadRaw
int pdReadRaw(PILEDRIVERTYPE *piledriver, char *buffer, unsigned int toread, PDFILEHANDLE handle)
Call to an opened PFFILEHANDLE to retrieve data. The size of the data is returned, 0 if none, −1 if EOF (End of File) has been reached or the connection was broken.
pdReadCooked
int pdReadCooked(PILEDRIVERTYPE *piledriver, char *buffer, int toread, unsigned short *msgtype, PDFILEHANDLE handle)
Call to an opened PFFILEHANDLE to retrieve Ultravox messages. The size of the data is returned, and msgtype contains the clad and type of the Ultravox message. 0 is returned if no message is available, and −1 if EOF has been reached or the connection was broken.
pdClose
int pdClose(PILEDRIVERTYPE *piledriver, PDFILEHANDLE handle)
Call to close and remove the cache-ahead engine a PFFILEHANDLE. Always call this function even if the file failed to open.
pdDeInit
int pdDeInit(PILEDRIVERTYPE *piledriver)
Call to stop all cache-ahead transactions, close and remove all open PFFILEHANDLEs and free all used memory.
Error Notification
Call to make error notification. In the event of an error in any of the API functions, PILEDRIVERTYPE->error and PILEDRIVERTYPE->error-buffer contain the error code and the error string associated with the current error condition. Error codes are located in PDRIVER.H
However, when the user chooses to skip to a next song before the current song ends, the natural flow is interrupted because it takes time to send the skip command to the server which starts to transmit the data for the next song, and thus a new period of buffering time is required before the next song starts to play. For example, as illustrated in
Step 301: Start downloading the second song S_2 immediately after the initial buffering time 210 is over at the time t1. This step is called pre-buffering or pre-caching. The application is configured to download only the first few seconds of S_2. In the preferred embodiment, the application is configured to download the first ten seconds. After download the first ten seconds of the second song, start downloading the first ten seconds of the third song. The similar pre-buffering step goes so on and so forth. In the preferred embodiment, the application is configured to download and pre-buffer the first ten seconds of five songs subsequent to the current song which is being played. The total time required for pre-buffering five songs is about one minute. Usually a user would be able to decide whether or not to continue the song after listening to it for one minute. Therefore, although the application can be otherwise configured, pre-buffering five songs would be good enough for most of circumstances.
Step 302: Assuming the user decides to skip to a target song (for example S_5), the application first check whether there is a file characterized as the target song.
Step 303: If S_5 is identified in the buffer and because the first ten seconds of S_5 is already there, the system can start to read S_5 immediately. This means that there is no unintended delay between S_1 and S_5 unless the networking condition is abnormally bad or the user has exhausted the local cache. At the same time, the application asks the server to transmit the rest of S_5 to the buffer. Because the buffering time for the rest of S_5 is less than ten seconds, by the time the reader finishes reading the pre-buffered ten seconds of S_5, a sufficient part of the rest of S_5 is already there and is ready to be read. Therefore, there is no interruption between the first ten seconds of S_5 and the rest of S_5. In this way, the user experience is enhanced and waiting time is minimized.
Step 304: While the song (S_5) is being displayed, update Step 301 to keep five songs subsequent to the current one being pre-buffered.
Step 305: Play next song after S_5 is over.
Step 306: Repeat Step 302 if the user wants to skip while S_5 is being played.
Steps 301-306 represents the first loop in which the user's play list is played without interruption even he sometimes decides to skip one or more songs.
This invention also helps to bring the song playing back into the first loop when an interruption occurs.
Step 310: If the check result in Step 302 is no (i.e. the target song S_5 is not identified in the buffer), the system requests that the server stop transmitting the prior song (S_1 in the example) and start transmitting the target song.
Step 311: Start to download the target song. Because the target song is not pre-buffered, an initial buffering time is required before the target song can be played. During initial buffering time, typically 5-6 seconds, the system is silent.
Step 312: Start to play the target song. This step leads to step 305 or step 306, and step 301. Because the system always attempts to have five next songs pre-buffered, if the target song is one of the pre-buffered, the natural flow of the play list will not be interrupted by skipping.
When the user skips to the target song, the pre-buffered songs which are prior to the target in the play list (e.g. S_2-S_4 if the user skipped from S_1 to S_5) will be deleted from the memory just as they had already been played.
If the application is configured to keep the skipped pre-buffered data for a short period of time, for example for 10 seconds, the user could, though not very much meaningful for many people, come back to any of the songs before it is deleted from the buffer.
Referring to
In step 330A, assuming the user skips to a song (called target song) in the play list before the song in playing is over, the computer checks whether the target song belongs to one of these pre-cached in step 330 by checking whether a file characterized as the target song exists in the buffer. If yes, go on to step 330B in
Referring to
Note that as soon as the pre-cached portion of the target song starts playing, step 330 needs to be updated. In particular, if one or more songs subsequent to the target song are already pre-cached, skip them and download the subsequent ones, executively, to make up the pre-designated number (five, for example).
In step 337, when the playing of the pre-cached portion ends, immediately play the rest of the target song which is being downloaded from the server over the Internet.
In steps 338-339, if the user does not want to skip to another song while the target song is playing, then play the next song in the sequence, and at the same time, delete any pre-cached song which is prior to this song. As soon as this song starts playing, step 330 needs to be updated. Because all pre-cached files, which are prior to this song in the sequence, have been deleted from the buffer, the user's computer must send request to the server to transmit the first small portion (e.g. ten seconds) of a designated number of songs, one by one. Then, the user's computer downloads and pre-caches these files in the buffer.
If the user wants to skip to another song before the playing of the target song in steps 330B-337, the process continues on step 330A in
Now referring to
Then, start to download the new target song in step 332. Because the new target song is not pre-cached, it takes a short period of buffering time (about five seconds) before the computer can play the song. This buffering time causes the interruption of the natural flow of the user's play list. This invention helps minimize the occurrences of the interruption. If the user always skips to a pre-cached song, no interruption would occur at all unless the networking condition is abnormally bad or the user has exhausted the local cache.
In step 333, as soon as the buffer allows, play the new target song while it is being downloaded. At the same time, update step 300 by deleting outdated pre-cached files (i.e. the pre-cached portions of the songs prior to the new target song) and pre-buffering the subsequent songs. This step is important because it helps the user to return to the none-interruption loop.
Assuming the user does not to skip again while the new target song is playing, go to step 335 which includes the sub-steps of:
Then, in step 336, play the rest of the “next song” as soon as the pre-cached portion ends.
If the user wants to skip again, the loop starting at step 300A will be repeated.
The pre-caching (i.e. the pre-buffering) solution described above is possible because the total capacity of the communication channel can be shared between several independent data streams using some kind of multiplexing, in which, each stream's data rate may be limited to a fixed fraction of the total capacity. As it is illustrated in
The solution described above can also be used in Internet based video service and any other services where an initial buffering time is needed before the first section of the downloaded data can be read.
In the preferred embodiment of the invention, the first small portion is approximately the first ten seconds of the song. This solution is advantageous because ten seconds of pre-buffering complies with various royalty requirements such that if the user skips before the ten seconds pre-buffered portion is played, a royalty is not accessed for listening to the song. In addition, avoiding of downloading the entire next song conserves bandwidth and memory.
In view of the different possible embodiments to which the principle of this invention may be applied, it should be recognized that the preferred embodiment described herein with respect to the drawings is meant to the illustrative only and should not be taken as limiting the scope of the invention. One skilled in the art will readily appreciate that other applications may be substituted for those set forth herein without departing from the spirit and scope of the present invention.
Accordingly, the invention should only be limited by the claims included below.
This application claims priority to the U.S. provisional patent application Ser. No. 60/433,734, filed on Dec. 13, 2002, which application is incorporated herein in its entirety by this reference thereto.
Number | Name | Date | Kind |
---|---|---|---|
5168481 | Culbertson et al. | Dec 1992 | A |
5325238 | Stebbings et al. | Jun 1994 | A |
5517672 | Reussner et al. | May 1996 | A |
5528513 | Vaitzblit et al. | Jun 1996 | A |
5585866 | Miller et al. | Dec 1996 | A |
5616876 | Cluts | Apr 1997 | A |
5644715 | Baugher | Jul 1997 | A |
5671195 | Lee | Sep 1997 | A |
5715314 | Payne et al. | Feb 1998 | A |
5734119 | France et al. | Mar 1998 | A |
5761417 | Henley et al. | Jun 1998 | A |
5774672 | Funahashi et al. | Jun 1998 | A |
5784597 | Chiu et al. | Jul 1998 | A |
5787482 | Chen et al. | Jul 1998 | A |
5790174 | Richard, III et al. | Aug 1998 | A |
5792971 | Timis et al. | Aug 1998 | A |
5802502 | Gell et al. | Sep 1998 | A |
5819160 | Foladare et al. | Oct 1998 | A |
5892900 | Ginter et al. | Apr 1999 | A |
5907827 | Fang et al. | May 1999 | A |
5910987 | Ginter et al. | Jun 1999 | A |
5913039 | Nakamura et al. | Jun 1999 | A |
5915019 | Ginter et al. | Jun 1999 | A |
5917912 | Ginter et al. | Jun 1999 | A |
5920861 | Hall et al. | Jul 1999 | A |
5930765 | Martin | Jul 1999 | A |
5943422 | Van Wie et al. | Aug 1999 | A |
5944778 | Takeuchi et al. | Aug 1999 | A |
5949876 | Ginter et al. | Sep 1999 | A |
5956321 | Yao et al. | Sep 1999 | A |
5956491 | Marks | Sep 1999 | A |
5959945 | Kleiman | Sep 1999 | A |
5963914 | Skinner et al. | Oct 1999 | A |
5982891 | Ginter et al. | Nov 1999 | A |
5991867 | Fosmark | Nov 1999 | A |
5996015 | Day et al. | Nov 1999 | A |
6029257 | Palmer | Feb 2000 | A |
6031797 | Van Ryzin et al. | Feb 2000 | A |
6041354 | Biliris et al. | Mar 2000 | A |
6044398 | Marullo et al. | Mar 2000 | A |
6061722 | Lipa et al. | May 2000 | A |
6067562 | Goldman | May 2000 | A |
6088722 | Herz et al. | Jul 2000 | A |
6112023 | Dave et al. | Aug 2000 | A |
6112181 | Shear et al. | Aug 2000 | A |
6138119 | Hall et al. | Oct 2000 | A |
6157721 | Shear et al. | Dec 2000 | A |
6157940 | Marullo et al. | Dec 2000 | A |
6160812 | Bauman et al. | Dec 2000 | A |
6163683 | Dunn et al. | Dec 2000 | A |
6168481 | Mardikian | Jan 2001 | B1 |
6173325 | Kukreja | Jan 2001 | B1 |
6185683 | Ginter et al. | Feb 2001 | B1 |
6185701 | Marullo et al. | Feb 2001 | B1 |
6192340 | Abecassis | Feb 2001 | B1 |
6195701 | Kaiserswerth et al. | Feb 2001 | B1 |
6199076 | Logan et al. | Mar 2001 | B1 |
6222530 | Sequeira | Apr 2001 | B1 |
6226672 | DeMartin et al. | May 2001 | B1 |
6237786 | Ginter et al. | May 2001 | B1 |
6240185 | Van Wie et al. | May 2001 | B1 |
6243328 | Fenner et al. | Jun 2001 | B1 |
6243725 | Hempleman et al. | Jun 2001 | B1 |
6247061 | Douceur | Jun 2001 | B1 |
6248946 | Dwek | Jun 2001 | B1 |
6253193 | Ginter et al. | Jun 2001 | B1 |
6262569 | Carr et al. | Jul 2001 | B1 |
6263313 | Milsted et al. | Jul 2001 | B1 |
6263362 | Donoho et al. | Jul 2001 | B1 |
6266788 | Othmer et al. | Jul 2001 | B1 |
6300880 | Sitnik | Oct 2001 | B1 |
6314576 | Asamizuya et al. | Nov 2001 | B1 |
6332163 | Bowman-Amuah | Dec 2001 | B1 |
6356936 | Donoho et al. | Mar 2002 | B1 |
6363488 | Ginter et al. | Mar 2002 | B1 |
6366914 | Stern | Apr 2002 | B1 |
6389402 | Ginter et al. | May 2002 | B1 |
6421651 | Tedesco et al. | Jul 2002 | B1 |
6427140 | Ginter et al. | Jul 2002 | B1 |
6430537 | Tedesco et al. | Aug 2002 | B1 |
6434621 | Pezzillo et al. | Aug 2002 | B1 |
6434628 | Bowman-Amuah | Aug 2002 | B1 |
6438450 | DiLorenzo | Aug 2002 | B1 |
6438630 | DeMoney | Aug 2002 | B1 |
6441832 | Tao et al. | Aug 2002 | B1 |
6446080 | Van Ryzin et al. | Sep 2002 | B1 |
6446125 | Huang et al. | Sep 2002 | B1 |
6446126 | Huang et al. | Sep 2002 | B1 |
6449367 | Van Wie et al. | Sep 2002 | B2 |
6453316 | Karibe et al. | Sep 2002 | B1 |
6477541 | Korst et al. | Nov 2002 | B1 |
6477707 | King et al. | Nov 2002 | B1 |
6492469 | Willis et al. | Dec 2002 | B2 |
6496744 | Cook | Dec 2002 | B1 |
6502194 | Berman et al. | Dec 2002 | B1 |
6505160 | Levy et al. | Jan 2003 | B1 |
6519648 | Eyal | Feb 2003 | B1 |
6526411 | Ward | Feb 2003 | B1 |
6529586 | Elvins et al. | Mar 2003 | B1 |
6536037 | Guheen et al. | Mar 2003 | B1 |
6542445 | Ijichi et al. | Apr 2003 | B2 |
6546397 | Rempell | Apr 2003 | B1 |
6550057 | Bowman-Amuah | Apr 2003 | B1 |
6601041 | Brown et al. | Jul 2003 | B1 |
6609097 | Costello et al. | Aug 2003 | B2 |
6618424 | Yamada et al. | Sep 2003 | B1 |
6618484 | Weber et al. | Sep 2003 | B1 |
6658568 | Ginter et al. | Dec 2003 | B1 |
6668325 | Collberg et al. | Dec 2003 | B1 |
6725275 | Eyal | Apr 2004 | B2 |
6772340 | Peinado et al. | Aug 2004 | B1 |
6772435 | Thexton et al. | Aug 2004 | B1 |
6910220 | Hickey et al. | Jun 2005 | B2 |
6950623 | Brown et al. | Sep 2005 | B2 |
7020710 | Weber et al. | Mar 2006 | B2 |
7020893 | Connelly | Mar 2006 | B2 |
7024485 | Dunning et al. | Apr 2006 | B2 |
7136906 | Giacalone, Jr. | Nov 2006 | B2 |
7185352 | Halford et al. | Feb 2007 | B2 |
7412532 | Gondhalekar et al. | Aug 2008 | B2 |
7493289 | Verosub et al. | Feb 2009 | B2 |
20010003828 | Peterson et al. | Jun 2001 | A1 |
20010030660 | Zainoulline | Oct 2001 | A1 |
20020032907 | Daneils | Mar 2002 | A1 |
20020059237 | Kumagai et al. | May 2002 | A1 |
20020059624 | Machida et al. | May 2002 | A1 |
20020068525 | Brown et al. | Jun 2002 | A1 |
20020078056 | Hunt et al. | Jun 2002 | A1 |
20020082914 | Beyda et al. | Jun 2002 | A1 |
20020091761 | Lambert | Jul 2002 | A1 |
20020095510 | Sie et al. | Jul 2002 | A1 |
20020104099 | Novak | Aug 2002 | A1 |
20020107968 | Horn et al. | Aug 2002 | A1 |
20020108395 | Fujita et al. | Aug 2002 | A1 |
20020152876 | Hughes et al. | Oct 2002 | A1 |
20020152878 | Akashi | Oct 2002 | A1 |
20020158895 | Murase et al. | Oct 2002 | A1 |
20020198846 | Lao | Dec 2002 | A1 |
20030014436 | Spencer et al. | Jan 2003 | A1 |
20030018797 | Dunning et al. | Jan 2003 | A1 |
20030023973 | Monson et al. | Jan 2003 | A1 |
20030023975 | Schrader et al. | Jan 2003 | A1 |
20030028659 | Mesarina et al. | Feb 2003 | A1 |
20030028893 | H. Addington | Feb 2003 | A1 |
20030048418 | Hose et al. | Mar 2003 | A1 |
20030069768 | Hoffman et al. | Apr 2003 | A1 |
20030121050 | Kalva et al. | Jun 2003 | A1 |
20030126275 | Mungavan et al. | Jul 2003 | A1 |
20030135605 | Pendakur | Jul 2003 | A1 |
20030195974 | Ronning et al. | Oct 2003 | A1 |
20030236906 | Klemets et al. | Dec 2003 | A1 |
20040064507 | Sakata | Apr 2004 | A1 |
20040138948 | Loomis | Jul 2004 | A1 |
20040177115 | Hollander et al. | Sep 2004 | A1 |
20040222047 | DiFranza et al. | Nov 2004 | A1 |
20050056494 | Amo et al. | Mar 2005 | A1 |
20050114757 | Sahota et al. | May 2005 | A1 |
20050159104 | Valley et al. | Jul 2005 | A1 |
20060155400 | Loomis | Jul 2006 | A1 |
20090164794 | Verosub et al. | Jun 2009 | A1 |
20090175591 | Gondhalekar et al. | Jul 2009 | A1 |
Number | Date | Country |
---|---|---|
0 831 608 | Mar 1998 | EP |
0 875 846 | Nov 1998 | EP |
0 986 046 | Mar 2000 | EP |
1 113 605 | Jul 2001 | EP |
1178487 | Feb 2002 | EP |
1187423 | Mar 2002 | EP |
1229476 | Aug 2002 | EP |
1244021 | Sep 2002 | EP |
1267247 | Dec 2002 | EP |
1286351 | Feb 2003 | EP |
1 187 485 | Apr 2003 | EP |
2002108395 | Apr 2002 | JP |
2002318587 | Oct 2002 | JP |
2003068968 | Mar 2003 | JP |
2003069768 | Mar 2003 | JP |
497055 | Aug 2002 | TW |
WO 0110496 | Feb 2001 | WO |
WO 02063414 | Aug 2002 | WO |
Number | Date | Country | |
---|---|---|---|
20040138948 A1 | Jul 2004 | US |
Number | Date | Country | |
---|---|---|---|
60433734 | Dec 2002 | US |