Delivery of streaming multimedia content typically requires the streaming content to be split into data blocks or segments. Each data segment may contain a group of video frames. Video data segments each containing one or more video frames are transmitted from a streaming source server to clients.
In a peer-to-peer network, data blocks may be transmitted from peer clients to other peer clients. By providing streaming content in a peer-to-peer network, a peer client may connect to several other peer clients and request video data segments. The requested video data segments are sometimes available only at a few nodes within the peer-to-peer network. Thus, the availability of streaming content within a peer-to-peer network is not satisfactorily reliable.
Aspects of the present disclosure are best understood from the following detailed description when read with the accompanying figures, in which:
It is to be understood that the following disclosure provides many different embodiments, or examples, for implementing different features of various embodiments. Specific examples of components and arrangements are described below to simplify the present disclosure. These are, of course, merely examples and are not intended to be limiting. In addition, the present disclosure may repeat reference numerals and/or letters in the various examples. This repetition is for the purpose of simplicity and clarity and does not in itself dictate a relationship between the various embodiments and/or configurations discussed.
Embodiments disclosed herein provide mechanisms for delivering encoded multimedia content in a peer-to-peer network from a source server to peer clients and from peer client to other peer clients. The source server divides streaming data into data blocks, or segments, of equal length, dynamically encodes some selected data blocks by a linear network coding method, and sends encoded data blocks to peer clients. A peer client, upon receipt of one or more of the encoded data blocks, may decode the received data blocks from representation vectors for the encoded data blocks and reconstruct the decoded data blocks into a native video format. The network coding method allows for several video data segments to be encoded into one or more encoded data blocks. The encoded data blocks may be delivered to different peer nodes. Thus, a peer client has a greater chance to obtain the encoded data blocks. In addition to increasing the likelihood of obtaining the desired streaming content, the downloading speed may be increased as well.
Each of content servers 30-32 may provide streaming service processing for a finite number of clients, and thus the client service capacity of cluster 50 is limited to the aggregate service capacity of content servers 30-32. If the demand placed on cluster 50 becomes too large, the streaming service quality provided to clients 20-24 may be degraded or one or more of clients 20-24 may be disconnected from cluster 50. Conventional solutions for addressing excessive loads placed on cluster 50 generally include expanding the processing capacity of cluster 50, for example by adding additional content servers to cluster 50, upgrading the capacity of existing content servers, or by other mechanisms. Such system reconfigurations are costly due to both hardware and labor expenses.
Control server 231 may facilitate connection of new clients within network 200 and organize clients 210-217 that have joined network 200. Clients 210-217 may be implemented as data processing systems, such as personal computers, wired or wireless laptop computers, personal digital assistants, or other computational devices capable of network communications.
Streaming source 232 may be implemented as a server that stores or accesses streaming content, such as video, audio, or the like, and streams the data to one or more clients in network 200. For example, the streaming content may be retrieved from a file that is accessed by streaming source 232 from a storage device 260. Alternatively, the streaming content may be produced from, for example, audio/video production equipment 261 that is interfaced with streaming source 232. The streaming content may comprise data encoded in a native streaming format, such as RealAudio formatted files, RealVideo formatted files, ASF, or another streaming format that may be processed by a streaming media application, such as RealPlayer, Windows Media Player, or another streaming media application. The native formatted streaming content may be encapsulated in a network transport format that facilitates transmission of data among peer clients of network 200. Streaming source 232 may divide streaming content into data segments that are distributed within network 200 as described more fully below. Various clients 210-217 may receive and store different data blocks of the streaming content.
Control server 231 maintains a peer list 270 that includes connectivity information, such as a network address and port number, of respective peer clients that are connected within peer-to-peer network 200. When control server 231 generates peer list 270, connectivity information of streaming source 232 may be the only connectivity information included in peer list 270. A client joins peer-to-peer network 200 by first connecting with control server 231 and submitting a request for peer list 270. The control server returns peer list 270 to the requesting client, and the client joins network 200 by selecting one or more nodes having connectivity information included in peer list 270 and connecting with the selected nodes.
When a new client joins peer-to-peer network 200, control server 232 may add connectivity information of the newly joining client to peer list 270. In this manner, as additional clients join peer-to-peer network 200, the availability of peer clients with which subsequently joining clients may connect is increased. Connectivity information of streaming source 232 may be removed from peer list 270, for example when the number of clients connected within peer-to-peer network 200 reaches a pre-defined threshold. In this manner, the streaming session load placed on streaming source 232 may be reduced. A client connected within peer-to-peer network 200 that desires streaming content originally provided by streaming source 232 may submit a query for the streaming content to peer clients with which the requesting client is connected. If no peer clients within network 200 have the requested streaming content (or no peer clients within network 200 are available for delivery of the streaming content to the requesting client), the requesting client may obtain the streaming content from streaming source 232.
A peer client that receives streaming content from streaming source 232 may be configured to cache or temporarily store the streaming content (or a portion thereof) for playback. Additionally, a client may distribute cached streaming content to other peer clients. Streaming content may be segmented by streaming source 232 into data blocks or segments that each have an associated sequence number. Playback of streaming content is performed by arranging data blocks into a proper sequence based on the data blocks' sequence numbers.
Network 200 may comprise a transient Internet network, and thus clients 210-217, control server 231, and streaming source 232 may use the Transmission Control Protocol/Internet Protocol (TCP/IP) suite of protocols to communicate with one another. Alternatively, network 200 may be implemented in any number of different types of networks, such as for example, an intranet, a local area network (LAN), or a wide area network (WAN). Additionally, control server 231 and streaming source 232 are shown as distinct entities within network 200. However, control server 231 and streaming source 232 may be collectively implemented in one or more common network nodes.
One method for segmenting streaming content into streaming content segments for distribution in a peer-to-peer network comprises segmenting the streaming content into segments comprising segments of equal length. In this implementation, streaming content in a data segment may not start at the beginning of a video frame. To facilitate playback of streaming content segmented in this manner, a first playable video frame may be skipped to accommodate a frame that is not aligned with the streaming content segment. For example, an offset of the first video frame with an encoded data block may be specified.
Another method for segmenting streaming content into streaming content segments for distribution in a peer-to-peer network comprising dividing the streaming content into segments of approximate equal lengths and supplying padding zeros to extend the data segment to a maximum length. In this manner, the padding zeros facilitate encoding of the streaming content into segments of the maximum and equal length.
In accordance with a preferred embodiment, a computing method for encoding streaming content comprises a linear network coding routine 302 for producing encoded data 303 to a finite field. As referred to herein, a field is an algebraic object with two operations: addition and multiplication (represented by + and *). The addition and multiplication may or may not be ordinary, or conventional, addition and multiplication operations. Using addition (+), all elements of the field form a commutative group, with identity denoted by 0 and the inverse of an element a denoted by −a. Using multiplication (*), all elements of the field except 0 form another commutative group with identity denoted 1 and inverse of an element a denoted by a−a. The element 0 has no inverse under multiplication. Moreover, the distributive identity must hold: a*(b+c)=(a*b)+(a*c), for all field elements a, b, and c.
There are a number of different infinite fields, including the rational numbers (fractions), the real numbers (all decimal expansions), and the complex numbers. Cryptography focuses on finite fields. For any prime integer p and any integer n greater than or equal to 1, there is a unique field with pn elements in it, denoted GF(pn) (“GF” standing for “Galois Field” named after the French mathematician who discovered them). Here “unique” means that any two fields with the same number of elements must be essentially the same, except perhaps for giving the elements of the field different names.
The case of p=2 and n=8, or p=2 and n=16, respectively denoted as GF(28) or GF(216) is sometimes used in processing encoding/decoding of data blocks.
Consider processing of symbols in a data block in the same position from the initial cycle of the processing method.
Let X=(x1, x2, xN);
where x1 to xn are the symbols to be processed.
A set of coefficients for the linear computing method are selected. For example, let the following set represent the coefficients:
By linear computation, the final symbol is obtained according to the following:
By selecting different coefficients N times, N symbols (y1 through yN) may be obtained:
That is,
The receiver may then decode Y by inverting matrix G according to the following:
X=G−1Y;
Note that in order to decode symbols X (x1 through xN), the matrix should be full rank. A pre-defined set of coefficients may be implemented to ensure that the matrix is full rank. In other implementations, a randomly generated set of coefficients may be implemented to provide the matrix at full rank with large probability although not guaranteed in each instance.
Software configuration 600 may include an operating system 610, such as a Windows operating system manufactured by Microsoft Corporation of Redmond, Wash., an OS/2 operating system manufactured by International Business Machines Corporation of Armonk, N.Y., or the like. Operating system 610 may include a network stack 620 for providing network communications. For example, network stack 620 may be implemented as a transmission control protocol/Internet protocol (TCP/IP) stack. Additionally, software configuration 600 may include a streaming data encoding module 631 and decoding module 632 that is adapted to format streaming content in a peer-to-peer transmission format for transmission across a peer-to-peer network by way of peer clients operating in conformity with the peer-to-peer transmission format.
Software configuration 600 may include a peer-to-peer transport module 640 that comprises logic for self-administration of the peer-to-peer network structure. For example, peer-to-peer transport module 640 may provide self-adjusting functions of the peer client location in the peer-to-peer network topology. Additionally, transport module 640 may provide network transmission functions for peer-to-peer transport of encoded data streams. For example, transport module 640 may supply peer-to-peer transport encoded packets to network stack 620 for transmission in the peer-to-peer network.
Software configuration 600 may include a cache 650 that may be used to facilitate the fluency or contiguity of stream playing. Cache 650 may included decoded data blocks or encoded data blocks.
The peer client then receives an encoded data block through peer network 200. The encoded data block includes the segment having an associated sequence number N and other segments included in the segment subset that was encoded into the data block. An evaluation may be made at the peer client to determine whether additional encoded data blocks remain that include the requested segment (step 808). If additional encoded data blocks remain that include the requested segment, the peer client processing routine may return to step 806 to request an additional encoded data block including the requested segment. When enough encoded data blocks have been received, the peer client attempts to decode the encoded data blocks (step 810). If the peer client is unable to decode the encoded data blocks, the peer client processing may return to request an additional encoded data block including the requested segment according to step 806. If the encoded data blocks are able to successfully be decoded (step 812), the vectors for the same subset of data blocks are full rank. The peer client may then continue by requesting a next segment (step 814). The next requested segment has an associated sequence number that is incremented as a factor of the number of segments included in an encoded data block. In the examples provided herein, five segments are encoded in an encoded data block, and thus the client will next request an encoded data block that includes a segment having a sequence number N+5 from the source.
The source server or peer client may also send the statically encoded data block to the requester. To ensure successful decoding of encoded data blocks, a peer client requesting content from a source may provide part of its vectors of coefficients to the source server or the source peer. The source server or the source peer may then select coefficients for encoding based on the requesting client's vectors of coefficients to make sure the rank of the vectors is increased.
The encoding method depicted in
Subsequently, the peer client may submit a request 8(2), indicating a request for a data segment 1001h having sequence number N=8 and a total of two data segments to be encoded. Because the first data segment is available (i.e., has previously been received by the peer client), the segment with sequence number N=6 should also be resolvable according to the following:
The peer client may submit subsequent requests of 9(3), 10(4), 11(5). In each of these instance, the data segments having respective sequence numbers of N=9, N=10, and N=11 should also be resolvable.
The peer client may then request a fixed number of segments to be encoded, e.g., by submitting requests of 12(5), 13(5), 14(5), etc. In each case, the requested data segments are able to be resolved for decoding based on the previously requested and available data segments.
The peer client then receives the encoded data block, and evaluates whether the data segment with sequence number N is able to be decoded from the received encoded data block (step 1108). If the peer client is unable to decode the data segment, another request for the data segment may be submitted to the source according to step 1106. If it is determined that the data segment may be decoded from the encoded data segments at step 1108, the encoded data block is then decoded (step 1110). The peer client may then proceed to submit a request for a next data segment (step 1112).
The various functions, processes, methods, and operations performed or executed by the system can be implemented as programs that are executable on various types of processors, controllers, central processing units, microprocessors, digital signal processors, state machines, programmable logic arrays, and the like. The programs may be stored on a computer-readable medium for use by or in connection with a computer system or method. A computer-readable medium may be implemented as, for example, an electronic, magnetic, optical, or other physical device or means that can store a computer program for use by or in connection with a computer system, method, process, or procedure. Programs may be embodied in a computer-readable medium for use by or in connection with an instruction execution system, device, component, element, or apparatus, such as a system based on a computer or processor, or other system that can fetch instructions from an instruction memory or storage of any one or more suitable types. A computer-readable medium may be implemented as any structure, device, component, product, or other means that can store, communicate, propagate, or transport the program for use by or in connection with the instruction execution system, apparatus, or device.
The flowcharts provided herein depict process serialization to facilitate an understanding of the invention and are not necessarily indicative of the serialization of the operations being performed. The illustrative block diagrams and flowcharts depict process steps or blocks that may represent modules, segments, or portions of code that include one or more executable instructions for implementing specific logical functions or steps in the process. Although the particular examples illustrate specific process steps or procedures, many alternative implementations are possible and may be made by simple design choice. Some process steps may be executed in different order from the specific description herein based on, for example, considerations of function, purpose, conformance to standard, legacy structure, and the like.
Although embodiments of the present disclosure have been described in detail, those skilled in the art should understand that they may make various changes, substitutions and alterations herein without departing from the spirit and scope of the present disclosure. Accordingly, all such changes, substitutions and alterations are intended to be included within the scope of the present disclosure as defined in the following claims.
This patent application claims the benefit of provisional U.S. Patent Application Ser. No. 60/662,131, filed Mar. 15, 2005.
Number | Date | Country | |
---|---|---|---|
60662131 | Mar 2005 | US |