GB2470380A - Simultaneously streaming live data to peer nodes via a network of proxy nodes - Google Patents

Simultaneously streaming live data to peer nodes via a network of proxy nodes Download PDF

Info

Publication number
GB2470380A
GB2470380A GB0908696A GB0908696A GB2470380A GB 2470380 A GB2470380 A GB 2470380A GB 0908696 A GB0908696 A GB 0908696A GB 0908696 A GB0908696 A GB 0908696A GB 2470380 A GB2470380 A GB 2470380A
Authority
GB
United Kingdom
Prior art keywords
sub
data
stream
streams
peer
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Withdrawn
Application number
GB0908696A
Other versions
GB0908696D0 (en
Inventor
Chris Houghton
Jiri Fajtl
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
SKINKERS Ltd
Original Assignee
SKINKERS Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by SKINKERS Ltd filed Critical SKINKERS Ltd
Priority to GB0908696A priority Critical patent/GB2470380A/en
Publication of GB0908696D0 publication Critical patent/GB0908696D0/en
Publication of GB2470380A publication Critical patent/GB2470380A/en
Withdrawn legal-status Critical Current

Links

Classifications

    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L67/00Network arrangements or protocols for supporting network services or applications
    • H04L67/01Protocols
    • H04L67/10Protocols in which an application is distributed across nodes in the network
    • H04L67/104Peer-to-peer [P2P] networks
    • H04L29/08306
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L65/00Network arrangements, protocols or services for supporting real-time applications in data packet communication
    • H04L65/60Network streaming of media packets
    • H04L65/61Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio
    • H04L65/611Network streaming of media packets for supporting one-way streaming services, e.g. Internet radio for multicast or broadcast
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/21Server components or server architectures
    • H04N21/218Source of audio or video content, e.g. local disk arrays
    • H04N21/2181Source of audio or video content, e.g. local disk arrays comprising remotely distributed storage units, e.g. when movies are replicated over a plurality of video servers
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/238Interfacing the downstream path of the transmission network, e.g. adapting the transmission rate of a video stream to network bandwidth; Processing of multiplex streams
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04NPICTORIAL COMMUNICATION, e.g. TELEVISION
    • H04N21/00Selective content distribution, e.g. interactive television or video on demand [VOD]
    • H04N21/20Servers specifically adapted for the distribution of content, e.g. VOD servers; Operations thereof
    • H04N21/23Processing of content or additional data; Elementary server operations; Server middleware
    • H04N21/24Monitoring of processes or resources, e.g. monitoring of server load, available bandwidth, upstream requests
    • H04N21/2402Monitoring of the downstream path of the transmission network, e.g. bandwidth available
    • HELECTRICITY
    • H04ELECTRIC COMMUNICATION TECHNIQUE
    • H04LTRANSMISSION OF DIGITAL INFORMATION, e.g. TELEGRAPHIC COMMUNICATION
    • H04L12/00Data switching networks
    • H04L12/02Details
    • H04L12/16Arrangements for providing special services to substations
    • H04L12/18Arrangements for providing special services to substations for broadcast or conference, e.g. multicast
    • H04L12/1854Arrangements for providing special services to substations for broadcast or conference, e.g. multicast with non-centralised forwarding system, e.g. chaincast

Landscapes

  • Engineering & Computer Science (AREA)
  • Multimedia (AREA)
  • Signal Processing (AREA)
  • Computer Networks & Wireless Communication (AREA)
  • Databases & Information Systems (AREA)
  • Computer And Data Communications (AREA)

Abstract

A method of processing a plurality of sub-streams of data received over a plurality of data links, wherein each sub-stream of data in the plurality of sub-streams of data contains a portion of information relating to an original stream of data, comprises: selecting a first set of sub-streams and receiving each sub-stream of data in the first set of sub-streams over a plurality of different data links, wherein different ones of the sub-streams of data in said first set of sub-streams are received via different data links; decoding the first set of sub-streams; redistributing at least one of the first set of sub-streams to one or more recipient nodes; on the basis of one or more characteristics of the different data links, altering the selection of sub-streams by selecting a second set of sub-streams and receiving each sub-stream of data in the second set of sub-streams over a plurality of different data links, wherein at least one of the sub-streams of data in the second set of sub-streams is received via a different data link than a data link via which a corresponding sub-stream in the first set is received; and redistributing at least one of the second set of sub-streams to one or more of said recipient nodes. Particularly applicable to live video streams.

Description

Live Streaming Network
Field of the Invention
The present invention relates to a method, and apparatus, for providing a live stream of data simultaneously to a number of peer nodes via a network of proxy nodes, where the quantity of data distributed by the proxy nodes is reduced by reliably redistributing data between peer nodes.
Background of the Invention
Methods for distributing a stream of data from a server to a plurality of requesting nodes are known where the stream of data is transmitted to requesting nodes by first transmitting the stream of data to a number of proxy nodes that each receive the stream of data and then retransmit it, either to further proxy nodes or, eventually, to the plurality of requesting nodes. This allows the burden of transmitting the stream of data to be distributed between the proxy nodes and hence allows the number of requesting nodes that the stream of data can be redistributed to be controlled by the number of proxy nodes used to retransmit the stream of data, however the cost of providing and maintaining a sufficient number of proxy nodes in order to distribute the stream of data to a large number of requesting nodes could be high.
Additionally methods for distributing a data object between a number of peer nodes are known where the data object is partitioned into portions of data and peers co-operate with each other in order to obtain portions of data belonging to the data object which they do not yet have. Each peer transmits portions of data that the peer is in possession of to a first subset of peer nodes whilst receiving from a second subset of peer nodes portions of the data object that the peer node does not yet have. This allows all the peer nodes to eventually acquire the data object. Although this technique transfers the cost of distributing data to the peer nodes rather than by using a dedicated distribution system, peer nodes are inherently unreliable sources of data in this technique as for example they may lose their communication link or be directed by a controlling user to stop receiving and transmitting data that other peer nodes are receiving.
US patent publication number 2008/0034393 Al describes a video distribution system incorporating one or more infrastructure nodes, a client, and one or more overlay nodes i.e. other clients. The infrastructure nodes each comprise a video storage component and are able to access stored video sequences stored in the video storage component and stream it to the client.
When a client wishes to start viewing a video sequence it does so by receiving a first portion of video data from the start of the video sequence that is streamed from the infrastructure nodes in order to allow the client to begin rendering the video for display immediately. The client may simultaneously begin receiving further portions of video data from later parts of the video sequence from the infrastructure nodes or other clients that belong to the one or more overlay nodes, in order to continue rendering the video sequence for display. Further portions of video data need not be received by the client in the order that they need to be used in order to play back the video sequence, as long as the client always has sufficient video data to continue to play back the video sequence without interruptions. The client may be adapted to manage the priorities of the remaining subsection portions of the video using a least cost function for the prioritization. In one implementation, the algorithm may attempt to stream higher priority subsection portions of the video first from the overlay nodes to drive the cost of video streaming lower. Tf the client cannot find the higher priority remaining subsection portions of the video from the overlay nodes, then the client may utilize the infrastructure nodes to stream the remaining subsection portions of the video. The client can transmit portions of video data that it has received to other clients both during and after it has rendered the video sequence for display.
Although prior art provides methods for distributing data to a number of clients, these methods are not suitable for providing a live stream of data to a number of requesting nodes within the tight time constraints required for the distribution of live video streams, where every client should preferably be able to receive the newest data in the video stream within a very small fraction of time since the data was created. These time constraints mean that if any portion of the stream of data is not received by a requesting node due to for example congestion in the communications network or a part of the distribution system stopping distribution, there will not be sufficient time to re-request that portion of data. Hence it is essential that distribution systems for live streams of data such as video use reliable communications links, but are also resilient to data loss and able to distribute data cheaply and efficiently. The present invention aims to provide a system that is a scalable solution to the problem of distribution of a live stream of data.
Summary of the Tnvention
A method of processing a plurality of sub-streams of data received over a plurality of data links, wherein each sub-stream of data in the plurality of sub-streams of data contains a portion of information relating to an original stream of data, the method comprising: selecting a first set of sub-streams comprising two or more sub-streams of data, and receiving each sub-stream of data in said first set of sub-streams over a plurality of different data links, wherein different ones of the sub-streams of data in said first set of sub-streams are received via different data links; decoding said first set of sub-streams in order to recover information relating to said original stream of data; redistributing at least one of said first set of sub-streams to one or more of said recipient nodes; altering the selection of sub-streams by selecting a second set of sub- streams comprising two or more sub-streams of data, and receiving each sub-stream of data in said second set of sub-streams over a plurality of different data links, wherein at least one of the sub-streams of data in said second set of sub-streams is received via a different data link than a data link via which a corresponding sub-stream in said first set is received, said altering of the selection being performed on the basis of one or more characteristics of said different data links; and redistributing at least one of said second set of sub-streams to one or more of said recipient nodes.
Further features and advantages of the invention will become apparent from the following description of preferred embodiments of the invention, given by way of example only, which is made with reference to the accompanying drawings.
Brief Description of the Drawings
Figure 1 schematically illustrates the principle components and communication links of a system for providing a live stream of data to a number of peer nodes via a network of proxy nodes, where the quantity of data distributed by the proxy nodes is reduced by reliably redistributing data between peer nodes, according to different embodiments of the present invention.
Figure 2a shows schematically a peer node 122 and the components of which it is comprised according to different embodiments of the present invention.
Figure 2b, shows schematically a plurality of sub-streams of data 272, 274, 276, produced by the sub-stream producer 108 from a sequence of portions of data 250.
Figure 3a illustrates the steps carried out by a peer node's sub-stream control 212 in order to receive a number of sub-streams from the infrastructure and from other peer nodes whilst redistributing some of these sub-streams to other peer nodes.
Figure 3b shows an alternative set of steps carried out by a peer node's sub-stream control 212, where steps 300 to 316 remain the same as in Figure 3a.
Figure 3c shows an alternative set of steps carried out by a peer node's sub-stream control 212, where steps 300 to 316 remain the same as in Figure 3a.
Figure 4 illustrates an alternative set of steps carried out by a peer node's sub-stream control 212 in order to receive a number of sub-streams from the infrastructure 100 and from other peer nodes whilst redistributing some of these sub-streams to other peer nodes.
Detailed Description of the Invention
A detailed description of exemplary embodiments of the invention follows with reference to the figures provided.
Figure 1 schematically illustrates the principle components and communication links of a system for providing a live stream of data to a number of peer nodes via a network of proxy nodes, where the burden on the proxy nodes is reduced by reliably redistributing data between peer nodes, according to different embodiments of the present invention. A stream provider 102 such as a computer providing a live video stream sends data to a stream receiver 106 such as a network interface at a server 104 via a communications network. A sub-stream producer 108 at the server 104 processes the stream of data received by the stream receiver 106 and produces a plurality of sub-streams. Each of the sub-streams in said plurality of sub-streams is stored in a sub-stream store 110, which may be for example a non-volatile memory device such as a hard disk drive or a volatile memory device such as a Random Access Memory (RAM). A sub-stream distributor 112 distributes the sub-streams from the sub-stream store 110 to a number of proxy nodes 116, 118, 120 within a network of proxy nodes 114 via a communications network in response to requests for the sub-streams.
The network of proxy nodes 114 consists of a number of proxy nodes 116, 118, 120, each of which is connected either to other proxy nodes or to the server 104 via a communications network. Collectively the stream provider 102, server 104 and network of proxy nodes are referred to as the infrastructure 100.
Peer nodes 122, 124, 126 can communicate with a stream information service 130 at the server 104 via a communications network to obtain information about the server 104, and the sub-streams provided by the infrastructure 100 that relate to the stream of data provided by the stream provider 102. Additionally peer nodes 122, 124, 126 can connect to a resolver service 132 such as a DNS server to request that a Universal Resource Tdentifier (URI) that points to the server 104 be resolved to a pointer to the server, so that a request for data can then be sent to the server using this pointer. The resolver service 132 can resolve the URI to a pointer to proxy nodes 116, 118, 120 within the network of proxy nodes 114 so that requests for data sent by the requesting nodes 122, 124, 126 are senttotheproxynodes 116, 118, 120. Theproxynodes 116, 118, 120 are then able to receive requests for data from the requesting nodes 122, 124, 126, process these to provide a response to the requesting nodes, and, if necessary, send requests for data to the server and receive responses to these requests. In this way a peer node 122 can receive a sub-stream over a data link 134, where the source of the data link 134 is a proxy node 118.
The peer nodes 122, 124, 126 use a peer discovery mechanism such as a pool server 128 to locate other peer nodes and then connect to these other peers via a communications network. In this way a peer node 122 can receive a sub-stream over a data link 136, where the source of the data link is another peer node 126.
A data link 134, 136 is a logical connection over which a sub-stream is received by a peer node 122 from a source node 118, 126, and is defined by various parameters including the identity of the source node (for example its address on a computer network), the type of the source node (whether it is a proxy node in the network of proxy nodes 114 or whether it is a peer node), the type of protocol used for transmission of the sub-stream, and the port on the source node used to transmit the sub-stream.
Figure 2a shows schematically a peer node 122 and the components of which it is comprised according to different embodiments of the present invention. The peer node consists of a microprocessor 200 that processes instructions stored in a random access memory (RAM) 202 that implement a sub-stream receiver 204, peer data receiver 206, stream assembler 208, stream decoder 210, sub-stream control 212, stream consumer 214, sub-stream encoder 216, and peer data transmitter 218. The peer node also consists of a video output component 220 that is able to render graphics produced by programs running on the microprocessor and output these to a video display 226. Programs running on the microprocessor 200 can process user input received by means 222 for accepting user input from a user input device (not shown) such as a mouse or computer keyboard. A network interface 224 such as a network card or a broadband modem is provided that allows programs running on the microprocessor 200 to transmit and receive data via a communications network 228 such as the Internet.
The system as described above is designed in such a way as to provide from the stream provider 102 a live stream of data simultaneously to a number of peer nodes via a network of proxy nodes, where the burden on the proxy nodes is reduced by reliably redistributing data between peer nodes. In order to achieve this, the system proceeds as described below.
The stream provider 102 provides a stream of data to the server 104, for example by providing the stream of data in the form of a sequence of data packets over an Internet Protocol (IP) network. The stream of data may typically contain time-sequential data content, such as for example video data or audio data, and the stream of data may either be substantially live, for example it may contain data relating to a live video stream or television broadcast, or it may contain data that is not live but has been recorded prior to transmission of the stream of data.
The stream of data is received at the server 104 by the stream receiver 106, for example by assembling data packets as they are received in order to reconstruct the stream of data. The stream of data is then processed by a sub-stream producer 108 in order to produce a plurality of sub-streams of data from the stream of data. Preferably the sub-stream producer 108 may use a redundant encoding scheme such as Forward Error Correction (FEC) when allocating data to the plurality of sub-streams, such that the sub-streams of data contain redundant information relating to the stream of data. This redundant information can later be used by peer nodes 122, 124, 126 to recover the stream of data even if some data from the plurality of sub-streams is lost, or if some of the sub-streams of data are not received.
As shown schematically in Figure 2b, in order to produce the plurality of sub-streams of data 272, 274, 276, the sub-stream producer 108 first produces a sequence of pluralities of encoded portions of data 252 by taking a sequence of portions of data 250 from the stream of data, and encoding each of these portions of data to create one of the pluralities of encoded portions of data within the sequence of pluralities of encoded portions of data 252. Each encoded portion of data (e.g. 278, 280, 282) within each of the pluralities of encoded portions of data within the sequence of pluralities of encoded portions of data 252 is then concatenated to the end of one of a number of sequences of encoded portions of data 254, 256, 258, each of these sequences of encoded portions of data being one of the sub-streams of data produced by the sub-stream producer 108.
Each encoded portion of data is allocated a unique identifier according to both which sub-stream 254, 256, 258 it belongs to as well as its location within the sequence of encoded portions of data which form that sub-stream. Preferably all the encoded portions of data 278, 280, 282 that relate to a particular portion of data from the stream of data 250 are allocated to the same position within different sub-streams 254, 256, 258, and are assigned unique identifiers indicating this. For example an encoded portion of data 282 in one of the pluralities of encoded portions of data 284 is allocated a unique identifier that indicates it has the same position within the sequence of encoded portions of data 258 that it is concatenated to as the positions that are given to the other encoded portions of data 278, 280 in the plurality of encoded portions of data 252 when they are concatenated to their respective sequences of encoded portions of data 254, 256.
After encoded portions of data are allocated to a sub-stream of data 254, 256, 258, a number of sequential encoded portions of data in the sub-stream are grouped 260, 262, 264 to form a data object 266, 268, 270 which is then stored in a sub-stream store 110, such that each sub-stream is stored as a sequence of data objects 272, 274, 276 in the sub-stream store. The unique identifier of each encoded portion of data is included with that portion when it is concatenated with others in order to form a data object.
Each data object held in the sub-stream store 110 is also assigned a unique identifier according to which sub-stream it belongs as well as the data object's location within the sequence of data objects 272, 274, 276 which form that sub-stream, for example the first data object allocated to sub-stream "A" may be given the unique identifier "Al", the third data object allocated to sub-stream "B" may be given the unique identifier "B3", and so on. A data object's unique identifier can be used to locate it and retrieve it from the data object store 110, for example if the data object store is a non-volatile memory device such as a hard drive the data object can be assigned a unique file name based on its unique identifier that can be used to identify the data object when retrieving it from the hard drive.
The sub-stream distributor 112 accesses the data objects held in the sub-stream store 110 and distributes them to a number of peer nodes 122, 124, 126, via the network of proxy nodes 114, in response to requests for the data objects.
For example, if the data object distributor 112 is an HTTP server then it will provide a data object stored as a file in the sub-stream store 110 in response to an HTTP GET' request for that file.
The proxy nodes 116, 118, 120 in the network of proxy nodes 114 are able to intercept requests for data made to the server 104 by a number of peer nodes 122, 124, 126, for example HTTP requests such as GET' commands from peer nodes to the server that request files stored in the sub-stream store on the server. For example, when a requesting node 122 makes an HTTP request for the file pointed to by the Uniform Resource Identifier (URI) "http:\\www.test.com\filel.dat", the requesting node 122 first requests a resolver service 132 such as a Domain Name System (DNS) server to resolve "www.test.com" to an Internet Protocol (IP) address that points to the server 104, and the requesting node then sends the HTTP request to the computer at this IP address. Instead of pointing the requesting node to the server 104, the resolver service 132 can point it to a proxy node 118 in the network of proxy nodes 114 that catches the HTTP request destined for the server 104 and distributes a local copy of the requested file rather than forwarding the request to the server, provided that a local copy of the requested file is available at the proxy node. If no local copy of the requested file is available at the proxy node, the proxy node will forward the HTTP request to either another proxy node or the server 104 (according to the proxy node's arrangement within the network of proxy nodes 114) and will cache the requested file when it is received in the corresponding response, whilst transmitting the requested file to the requesting node.
The network of proxy nodes 114 is thus able to reduce the number of requests that reach the server 104, and allows data to be distributed efficiently from the server to a large number of requesting nodes. The network of proxy nodes 114 can be scaled in order to accommodate for increasing numbers of requesting nodes. Tn one embodiment of the invention the network of proxy nodes 114 may be a Content Distribution Network (CDN) provided and maintained by a third party, such as Akamai's EdgeSuite or Limelight's LimelightDeliver, which provides the functionality outlined above.
The sub-stream control 212 at a peer node 122 can request from a stream information service 130 at the server 104 information relating to the stream of data provided by the infrastructure 100. For example the stream information service 130 may communicate in response to such a request from a peer node 122 a URI pointing to the server 104, the number of sub-streams that the sub-stream producer 108 at the server 104 is producing from the stream of data, the minimum number of sub-streams that are required in order to decode the stream of data, the unique identifiers of the most recently created data objects allocated to each sub-stream, the type of encoding scheme (such as for example the type of the redundant encoding scheme) used by the sub-stream producer 108 to encode each sub-stream, and the identifier (for example an IP address) of a suitable pooi server 128 which the peer node 122 may use to obtain information regarding other peer nodes that are receiving the stream of data.
The sub-stream receiver 204 at a peer node 122 can obtain a sub-stream of data from the server 104 by requesting and then receiving the sequence of data objects belonging to a desired sub-stream of data from the server 104 via the network of proxy nodes 114, for example by sending a sequence of HTTP GET' requests to the server 104 that contain each required data object's file name which is based on the data object's unique identifier. These HTTP GET' requests are caught by a proxy node 118 within the network of proxy nodes 114 as described above, and said proxy node 118 then responds to each request by transmitting a local copy of each requested data object to the peer node 122. The unique identifier of each data object required can be determined by a peer node 122 according to each data object's location within the sequence of data objects to which it belongs. Once a peer node 122 has received a data object for a particular sub-stream of data the sub-stream receiver 204 partitions the data object into the encoded portions of data of which it is comprised. It will be appreciated that obtaining a sub-stream of data by requesting and then receiving the sequence of data objects belonging to that sub-stream of data from the server 104 via the network of cache nodes 114 is equivalent to receiving a sub-stream of data via a data link.
The stream decoder 210 at the peer node 122 then constructs a sequence of groups of encoded portions of data from the encoded portions of data obtained by the sub-stream receiver. Each group of encoded portions of data within said sequence contains a number of encoded portions of data, where each encoded portion of data belongs to a different sub-stream of data, and all the encoded portions of data have the same location within the sequence of encoded portions of data which forms their respective sub-stream. For example, the encoded portions of data with unique identifiers "Al 0", "B 10" and "C 10" would be grouped together as they all belong to different sub-streams (A, B, and C), and are each located at position 10 within the sequence of encoded portions of data which forms their respective sub-stream. A sequence of groups of encoded portions of data is created such that a first group of encoded portions of data in said sequence contains encoded portions of data located at a first position within their respective sub-stream, the group of encoded portions of data immediately after the first group in the sequence of groups of encoded portions of data contains encoded portions of data located at the position after the first position within the group of encoded portions of data which forms their respective sub-stream, and so on.
To reconstruct a portion of data from the stream of data at a peer node 122, a stream decoder 210 decodes a group of encoded portions of data, using a decoding scheme determined according to the redundant encoding scheme used by the sub-stream producer 108 at the server 104. Information relating to the encoding scheme used to encode each sub-stream of data is received by a peer node following a request for information from the stream information service 130. By decoding each group of encoded portions of data in the sequence of groups of encoded portions of data in order, the stream decoder 210 is able to obtain a sequence of decoded portions of data that forms the stream of data provided by the stream provider 102. This sequence of decoded portions of data is assembled by a stream assembler 208 at the peer node 122, and then processed by a stream consumer 214, for example if the stream of data contains video data the stream consumer 214 may decode this video data and render it for display on a video display 226 such as a computer monitor via a video output device 220 such as a computer graphics card.
If a packet switched communications network is used to communicate portions of data between the infrastructure 100 and peer nodes 122, 124, 126, it is preferred that each data packet transmitted to a peer node consists of a only one encoded portion of data and its unique identifier. Provided that each group of encoded portions of data contains at least a minimum number of encoded portions of data, the redundant encoding of the encoded portions of data allows the sub-stream decoder to decode a group of encoded portions of data in order to reconstruct a portion of the stream of data. This allows the stream of data to be reconstructed at a peer node 122 even if packet loss in the communications network causes some transmitted data packets (and hence the encoded portions of data they contain) to not be received by a peer, or if the stream of data is live and delay or jitter in the communications network causes a transmitted data packet to be delayed beyond the time when it is needed by the stream decoder 210 to continue decoding the stream of data. The minimum number of encoded portions of data in a group of encoded portions of data needed to decode a group is determined by the number of sub-streams into which the stream of data is encoded by the sub-stream producer at the server, and the level of redundancy used when encoding these sub-streams.
Although a peer node 122 can obtain encoded portions of data belonging to each of the sub-streams needed to decode a stream of data by receiving them from the infrastructure 100, a large number of proxy nodes may need to be provided and maintained in order to distribute the stream of data to many peer nodes, which may be expensive to provide and maintain. Alternatively if the network of proxy nodes 114 is provided by a third party, data from the server 104 that is transferred to or from the network of proxy nodes by the server or peer nodes is charged to the owner of the server, according to the quantity of data transferred.
In order to minimise the number of proxy nodes required to distribute a stream of data, or minimise the cost of transferring data to and from the network of proxy nodes 114 if they are provided by a third party, the amount of data transferred can be reduced by allowing each peer node 122 to redistribute some of the sub-streams of data it receives from the infrastructure to other peer nodes.
A sub-stream 212 control at a first peer node 122 can request a second peer node that is known to be able to redistribute a first sub-stream to begin redistributing the first sub-stream to the first peer node. This request is received by the sub-stream control at the second peer node and provided that the second peer node is still able to redistribute the requested sub-stream the sub-stream control at the second peer node instructs it to begin redistributing the first sub-stream to the peer data receiver 206 at the first peer node 122. It will be appreciated that obtaining a sub-stream of data by requesting and then receiving that sub-stream of data from another peer node is equivalent to receiving a sub-stream of data via a data link.
In a preferred embodiment of the invention a peer data transmitter 218 at a peer node 122 redistributes the sequence of encoded data portions that belong to a sub-stream that is to be redistributed as each encoded data portion is received by either the sub-stream receiver 204 or the peer data receiver 206.
This allows a sub-stream to be redistributed by a peer node 112 even if the stream decoder 210 at the peer node is unable to decode the stream of data due to some of the encoded portions of data belonging to other sub-streams not being received by the peer node.
In an alternative embodiment of the invention a sub-stream encoder 216 at a peer node 122 prepares sub-streams for redistribution to other peer nodes via a peer data transmitter 218. The sub-stream encoder 216 at a peer node 122 takes the sequence of decoded portions of data that is reconstructed by the stream decoder 210 and encodes this sequence into the same plurality of sub-streams that is created by the sub-stream producer 108 at the server 104, by using the same redundant encoding scheme as used by the sub-stream producer 108. This allows a sub-stream to be redistributed by a peer node 112 even if some of the data objects belonging to the sub-stream are not received by the peer node. As with the sub-stream producer 108, each sub-stream created by the sub-stream encoder 216 is comprised of a sequence of encoded portions of data.
Sub-streams that are to be redistributed by the peer node are then transmitted by the peer data transmitter 218 as a sequence of data packets via a communications network.
A peer node's 122 sub-stream control 212 directs a peer data transmitter 218 to transmit the sub-streams that should be redistributed to other peer nodes.
The peer data transmitter 218 transmits each sub-stream as a sequence of encoded portions of data to a peer data receiver at another peer node. If a packet switched communications network is used to transmit encoded portions of data between peer nodes, it is preferred that each encoded portion of data in each sequence of encoded portions of data that corresponds to a sub-stream that is sent by a peer node is transmitted in a data packet which consists of only that encoded portion of data and its unique identifier. Thus sub-streams redistributed within peers remain redundantly encoded and their encoded portions of data can be identified by the peer nodes that receive them.
When a peer data receiver 206 at a peer node 122 receives encoded portions of data that have been redistributed by other peer nodes, these are made available to the stream decoder 210 at the peer node in conjunction with encoded portions of data received from the infrastructure 100 by the sub-stream receiver 204 to allow the stream decoder 210 to decode the stream of data.
Hence once the peer data receiver 206 at a first peer node 122 begins receiving a sub-stream from a second peer node in response to a request sent by the first peer node to the second peer node to begin transmitting the sub-stream, the sub-stream control 212 can instruct the sub-stream receiver 204 to stop requesting that sub-stream from the infrastructure 100, in order to reduce the amount of data that is being received from it and so reduce the cost of using the network of proxy nodes 114. The stream decoder 210 then constructs groups of encoded portions of data and then decodes these as explained above, but with some of the encoded portions of data received from the peer data receiver 206 and others from the sub-stream receiver 204.
This method of receiving a sub-stream from other peer nodes instead of from the infrastructure 100 can be applied to more than one sub-stream if necessary, such that a peer node 122 can receive each of the sub-streams it requires from either the infrastructure or another peer node 124, 126. As will be described below, the sub-stream control 212 at a peer node 122 decides which source should be used for each sub-stream it requires, in accordance with a preferred embodiment of the invention. It will be appreciated that this is equivalent to a sub-stream control 212 at a peer node 122 determining the data links that should be used to receive each sub-stream it requires on the basis of one or more characteristics of said data links.
Peer nodes 122, 124, 126 that have chosen to redistribute some of the sub-streams they are receiving will contact a pool server 128 to advertise that they have sub-streams available for redistribution. To do this, the sub-stream control 212 at an advertising peer node 122 will transmit advertisement data to the pooi server 128, via a communications network. The advertisement data contains a unique identifier for the advertising peer node such as the peer node's IP address on a communications network and supplementary information indicating the sub-streams of data that the advertising peer node is currently able to redistribute to other peer nodes, the target number of sub-streams that the advertising peer node aims to redistribute, the number of other peer nodes that the advertising peer node has capacity to redistribute sub-streams of data to, and the number of peers that have redistributed each sub-stream of data that the advertising peer node is currently able to redistribute before the sub-stream was received by the advertising peer node, which can be used to establish a redistribution distance' in terms of the number of peer nodes that a redistributed sub-stream has travelled since being distributed by the infrastructure 100.
The pool server 128 maintains a list containing the advertisement data received from each peer node and updates this list when a peer node sends new advertisement data to it. Additionally the pool server 128 will provide information from the list containing advertisement data to a peer node 122 in response to a query sent from a sub-stream control 212 at that peer node to the pool server. For example, a sub-stream control at a querying peer node may send a query to the pooi server requesting a list of peer nodes that are able to redistribute a particular sub-stream and have sufficient capacity to do so, or requesting a list of sub-streams that are available for redistribution, etc. Any of the supplementary information included in the advertisement data sent by peer nodes 122, 124, 126 to the pool server 128 discussed above such as the advertising peer nodes' IP addresses can also be included in the response to a query.
Once the sub-stream control 212 at a querying peer node 122 has received a response to queries it has made it can then communicate directly with the sub-stream controls of a selection of other peer nodes identified in the response to the query in order to determine or measure a number of connection quality metrics such as connection latency, jitter and packet loss for the connection between the selection of other peer nodes and this peer node. These connection quality metrics can be calculated as follows and can later be used to help the querying peer node determine which other peer nodes may be best to use as sources for some of the sub-streams of data the peer node requires as described below. Tt will be appreciated that determining or measuring these connection quality metrics between a querying peer node 122 and other peer nodes is equivalent to recording characteristics from measurements on the data links between the querying peer node 122 and other peer nodes, wherein said characteristics include connection quality measurements on the data links.
Connection latency in data sent from a second peer node to a first peer node could for example be measured by the first peer node sending a ping' request to the second peer node and measuring the time until receiving a response to this ping' request from the second peer.
Jitter in data sent from a second peer node to a first peer node could for example be measured by the first peer node requesting that the second peer node send to the first peer node a test stream of data in the form of a sequence of data packets via a communications network, where each packet is given a time stamp indicating when the data packet was transmitted from the second peer node. The first peer node can measure the time when each data packet is received and then calculate the variation in the differences in time between when each data packet was transmitted and when it was received; the larger the variation in these differences in time, the larger the jitter between the two peer nodes.
Packet loss for data sent from a second peer node to a first peer node could also be measured by the first peer node requesting that the second peer node send to the first peer node a test stream of data in the form of a sequence of data packets containing a first number of data packets via a communications network. The first peer node can compare the number of data packets received to the first number of data packets in order to determine the level of packet loss between the two peer nodes.
As described above, it is undesirable for all peer nodes to receive all the sub-streams they require from the infrastructure 100, as there is a cost associated with communicating data to and from the network of proxy nodes 114 which is charged to the owner of the server 104. A peer node 122 may alternatively receive some sub-streams from other peer nodes, in order to reduce the quantity of data transferred via the network of proxy nodes 114, however other peer nodes are inherently less reliable sources for sub-streams, as they may be directed by their controlling user or users to stop viewing a stream at any time, they may have a limited or unreliable connection to the communications network or to the peer node that is requesting a sub-stream, and they may choose to stop redistributing a particular sub-stream.
It is the role of a peer node's sub-stream control 212 to choose which sub-streams of data should be received from the infrastructure 114, and which sub-streams of data should be received from other peer nodes, in order to allow the peer node to receive and decode a stream of data, and it is also the role of a peer node's sub-stream control to choose which (if any) sub-streams should be redistributed to other peer nodes by the peer node. A peer node's sub-stream control 212 must perform these roles in such a way as to minimise the cost incuned by receiving data from the network of proxy nodes 114 whilst maximising the reliability of the sub-streams that the peer node 122 redistributes. By selecting to receive and redistribute reliable sub-streams, each peer node ensures that both it and other peer nodes will be able to decode a live stream of data provided by the infrastructure 100 efficiently, and reliably without incurring a high cost by using the network of proxy nodes 114.
Figure 3a illustrates the steps carried out by a peer node's sub-stream control 212 in order to receive a number of sub-streams from the infrastructure and from other peer nodes whilst redistributing some of these sub-streams to other peer nodes, whereby the sub-stream control aims to redistribute a target number of M sub-streams that are received from the infrastructure 100, as well as selecting remaining sub-streams that would be best for the peer node to receive from other peer nodes in order to minimise cost, according to a particular embodiment of this invention.
When a peer node is directed to access a particular stream of data by the user controlling the peer node, the sub-stream control 212 begins by requesting from the stream information service 130 at the server 104 information relating to the stream of data such as the number of sub-streams that the sub-stream producer 108 at the server 104 is producing, the minimum number of sub-streams that are required in order to decode the stream of data, the type of encoding scheme (such as for example the type of the redundant encoding scheme) used by the sub-stream producer 108 to encode each sub-stream, the unique identifiers of the most recently created data objects allocated to each sub-stream, and the identifier, such as for example the IP address, of a pool server providing information relating to other peer nodes that are receiving the stream of data. The sub-stream control then instructs the sub-stream receiver 204 at the peer node to start receiving from the infrastructure 100 all sub-streams produced by the server 104 for that stream, starting with the most recently created data objects allocated to each sub-stream, in order to begin accessing the stream of data as soon as possible (step 300).
Once the sub-stream receiver 204 begins receiving the sub-streams required from the infrastructure 100, the sub-stream control 212 advertises that the peer node is able to redistribute the sub-streams it is receiving from the infrastructure 100 to other peer nodes by sending advertisement data to a pool server 128 that indicates this (step 302). If the sub-stream control 212 subsequently receives requests from other peer nodes to redistribute a sub-stream that has been advertised as available for redistribution, the sub-stream control will instruct the peer data transmitter 216 to begin redistributing the requested sub-stream to the requesting peer nodes, provided that the peer node's network interface 224 still has sufficient bandwidth available to do so. If the number of requesting peer nodes that the peer node is redistributing sub-streams to increases or decreases, the peer node advertises the new number of peer nodes that the peer node still has capacity to redistribute sub-streams to by sending advertisement data to the pool server 128 indicating this.
The sub-stream control 212 sends queries to a pool server 128 in order to obtain information on which sub-streams are being redistributed by other peer nodes and the capacity these other peer nodes have for redistribution (step 304).
The sub-stream control 212 then makes connection quality measurements as described above to a selection of other peer nodes identified in the response to the queries that were made to the pooi server 128.
The sub-stream control 212 then uses the information it received in response to the queries to the pool server 128 as well as the information obtained from the connection quality measurements to determine which is the most suitable peer node to use as a source for each sub-stream that the peer node is currently obtaining from another peer node (step 306). The most suitable peer node to use as the source for a sub-stream may for example have lower jitter and packet loss than the other peer nodes that are known to redistribute that sub-stream, and will have sufficient bandwidth available to be able to redistribute the sub-stream.
Alternatively the most suitable peer node to use as the source for a sub-stream may have a higher reliability factor and lower connection latency than the other peers that are known to redistribute the sub-stream, where a peer node's reliability factor is high (i.e. denoting high reliability) when it is redistributing only the target number of M sub-streams from the infrastructure, but its reliability factor decreases as the number of sub-streams it is redistributing becomes larger than the target number M, as the peer node may stop forwarding some of these sub-streams at any time if it finds an appropriate peer node to receive them from, rather than the infrastructure 100. The reliability factor may for example be calculated as the target number M divided by the number of sub-streams the peer node is redistributing, so that the reliability factor is 1 when the peer node is redistributing the target number of M sub-streams, and smaller than 1 when the peer node is redistributing more than M sub-streams. It will be appreciated that the reliability factor of the source of a sub-stream is a characteristic of the data link over which that sub-stream is received.
If a peer node is determined to be a more suitable source than the current peer node used as the source for any sub-stream, the sub-stream control 212 will stop receiving that sub-stream from the current peer node and request that the best peer node begin redistributing the sub-stream to this peer node.
The sub-stream control 212 then determines if more than the target number of M sub-streams are being obtained from the infrastructure 100 (step 308) and if so uses the information it obtained in response to the queries and connection quality measurements it made in step 304 to find one sub-stream s that is currently being obtained from the infrastructure that could be instead provided by the most suitable peer node (step 310). The most suitable peer node may for example be able to provide a sub-stream s currently obtained from the infrastructure with lower jitter and packet loss than any of the other peer nodes that are known to redistribute sub-streams Sc, and will have sufficient bandwidth available to be able to redistribute sub-stream s.
Alternatively the most suitable peer node to use as the source for a sub-stream may have a higher reliability factor and lower connection latency than the other peers that are known to redistribute the sub-stream, where a peer node's reliability factor is determined using the same method used for this purpose in step 306.
Once the sub-stream 5c and the most suitable peer node to provide it have been determined, the sub-stream control 212 instructs the sub-stream receiver to stop receiving sub-stream s from the infrastructure 100, instructs the peer data transmitter 218 to stop redistributing the sub-stream to any other peer nodes, and sends advertisement data to a pool server 128 indicating that the peer node is no longer redistributing sub-stream Sc to other peer nodes (step 312). Additionally the sub-stream control 212 requests the most suitable peer node to begin redistributing sub-stream Sc to the peer node (step 314).
Following step 314 or if in step 308 the sub-stream control 212 determined that the target number of M or less sub-streams were being obtained from the infrastructure 100, the sub-stream control determines whether any peers being used as sources for sub-streams have been lost (step 316). A source peer node for a sub-stream may be lost if for example the source peer node chooses to stop redistributing a sub-stream that is being received by the peer node, or if the user controlling the source peer node has instructed it to stop accessing the stream of data provided by the infrastructure 100, or if a problem in the communications network has disconnected the source peer node from this peer node.
If no source peers have been lost the sub-stream control 212 returns to step 302, otherwise it instructs the sub-stream receiver 204 to begin receiving from the infrastructure 100 any sub-streams that were being obtained from source peers that have been lost (step 318) before returning to step 302.
By following the steps illustrated in Figure 3a a sub-stream control 212 can direct a peer node to accept the cost of receiving up to the target number of M sub-streams reliably from the infrastructure 100 so that these can be redistributed to other peers, whilst ensuring that the remaining sub-streams received by the peer node are received from reliable peer nodes.
An alternative set of steps carried out by a peer node's sub-stream control 212 is illustrated in Figure 3b, where steps 300 to 316 remain the same as in Figure 3a. In this alternative embodiment if it is determined in step 316 that some source peers have been lost the sub-stream control 212 proceeds to step 320, where it uses the information received in response to the queries to the pool server 128 as well as the information obtained from the connection quality measurements to attempt to locate a suitable peer node to use as a source for each sub-stream whose source has been lost. The location of suitable peer nodes is done using the same criteria as was used for choosing the most suitable peer node in step 310. Tf a suitable peer node is found for any of the sub-streams whose source has been lost, the sub-stream control 212 sends a request to the suitable peer node to begin redistributing the lost sub-stream to the peer node.
The sub-stream control then determines whether there are any remaining sub-streams that are being received whose source peer has been lost (step 322).
If there are no more sub-streams whose source peer has been lost the sub-stream control 212 returns to step 302, otherwise it instructs the sub-stream receiver 204 to begin receiving from the infrastructure 100 any sub-streams that were being obtained from the remaining source peers that have been lost (step 324) before returning to step 302.
An alternative set of steps carried out by a peer node's sub-stream control 212 is illustrated in Figure 3c, where steps 300 to 316 remain the same as in Figure 3a. In this alternative embodiment if it is determined in step 316 that some source peers have been lost the sub-stream control 212 proceeds to step 326, where the sub-stream control 212 determines whether the peer node is still receiving a total of more than Nr+B sub-streams relating to the stream of data provided by the infrastructure 100, where N1 is the minimum number of sub-streams that are needed to decode the stream of data, and B is a number of buffer sub-streams that should be received in addition to the minimum number of sub-streams Nr to allow the stream to be resilient to lost packets of data and lost source peers for sub-streams.
If the peer node is still receiving a total of more than N1+B sub-streams relating to the stream of data provided by the infrastructure 100, then the sub-stream control 212 uses the information received in response to the queries to the pool server 128 as well as the information obtained from the connection quality measurements to attempt to locate a suitable peer node to use as a source for each sub-stream whose source has been lost step (step 328). The location of suitable peer nodes is done using the same criteria as was used for choosing the most suitable peer node in step 310. If a suitable peer node is found for any of the sub-streams whose source has been lost, the sub-stream control 212 sends a request to the suitable peer node to begin redistributing the lost sub-stream to the peer node. The sub-stream control then returns to step 302.
If in step 326 it is determined that the peer node is no longer receiving a total of more than N1+B sub-streams relating to the stream of data provided by the infrastructure 100, then the sub-stream control 212 instructs the sub-stream receiver 204 to begin receiving from the infrastructure 100 a total of J more sub-streams that are not currently being received (step 330) before returning to step 302, where J is for example calculated as the difference between N1+B and the number of stripes being received R, i.e. Nr+B-R.
Figure 4 illustrates an alternative set of steps carried out by a peer node's sub-stream control 212 in order to receive a number of sub-streams from the infrastructure 100 and from other peer nodes whilst redistributing some of these sub-streams to other peer nodes, whereby the sub-stream control first determines the best sources for the sub-streams it requires in order to minimise cost whilst maximising the reliability of these sub-streams, and then determines which subset of these sub-streams received from the chosen sources would be best to redistribute to other peer nodes in order provide these reliably, according to a particular embodiment of this invention.
When a peer node is directed to access a particular stream of data by the user controlling the peer node, the sub-stream control 212 begins by requesting from the stream information service 130 at the server 104 information relating to the stream of data such as the number of sub-streams that the sub-stream producer 108 at the server 104 is producing, the minimum number of sub-streams that are required in order to decode the stream of data, the type of encoding scheme (such as for example the type of the redundant encoding scheme) used by the sub-stream producer 108 to encode each sub-stream, the unique identifiers of the most recently created data objects allocated to each sub-stream, and the identifier, such as for example the IP address, of a pool server providing information relating to other peer nodes that are receiving the stream of data. The sub-stream control then instructs the sub-stream receiver 204 at the peer node to start receiving from the infrastructure 100 all sub-streams produced by the server 104 for that stream, starting with the most recently created data objects allocated to each sub-stream, in order to begin accessing the stream of data as soon as possible (step 400).
The sub-stream control 212 sends queries to a pool server 128 in order to obtain information on which sub-streams are being redistributed by other peer nodes and the capacity these other peer nodes have for redistribution (step 402).
The sub-stream control 212 then makes connection quality measurements as described above to a selection of other peer nodes identified in the response to the queries that were made to the pooi server 128.
The sub-stream control 212 then uses the information it received in response to the queries to the pooi server 128 as well as the information obtained from the connection quality measurements to determine which is the most suitable peer node to use as a source for each sub-stream that the peer node is obtaining from another peer node (step 404). The most suitable peer node to use as the source for a sub-stream may for example have obtained the sub-stream from either the infrastructure or a peer node that obtained the sub-stream from a source closer to the infrastructure than other peer nodes known to redistribute that sub-stream, and the most suitable peer node may have lower connection latency, jitter and packet loss than the other peer nodes that are known to redistribute that sub-stream, as well as sufficient bandwidth available to be able to redistribute the sub-stream. This strategy allows a peer node to favour receiving reliable sub-streams with low latency since their distribution from the infrastructure 100.
If a peer node is determined to be a more suitable source than the current peer node used as the source used for any sub-stream, the sub-stream control 212 will stop receiving that sub-stream from the current peer node and request that the best peer node begin redistributing the sub-stream to this peer node.
Once the sub-stream receiver 204 begins receiving the sub-streams required, the sub-stream control 212 advertises that the peer node is able to redistribute to other peer nodes N of the sub-streams it is receiving by sending advertisement data to a pool server 128 that indicates this (step 406). The sub-stream control will allow the redistribution of sub-streams that are being received from other peer nodes as well as sub-streams received from the infrastructure, and will choose the N sub-streams that will be advertised for redistribution from all of the sub-streams received by the peer node. The N sub-streams that are advertised for redistribution are selected by choosing the N most suitable sub-streams from those being received by the peer node, where the infrastructure is always considered to provide more suitable sub-streams than those redistributed by other peers, and where the suitability of the sub-streams redistributed by other peers is determined according to the method used for selecting the most suitable peer node in step 404.
If the sub-stream control 212 subsequently receives requests from other peer nodes to redistribute a sub-stream that has been advertised as available for redistribution, the sub-stream control will instruct the peer data transmitter 216 to begin redistributing the requested sub-stream to the requesting peer nodes, provided that peer node's network interface 224 has sufficient bandwidth available to do so. If the number of requesting peer nodes that the peer node is redistributing sub-streams to increases or decreases, the peer node advertises the new number of peer nodes that the peer node stilt has capacity to redistribute sub-streams to by sending advertisement data to the pool server 128 indicating this.
The sub-stream control 212 then determines if any sub-streams are being obtained from the infrastructure 100 (step 408) and if so uses the information it obtained in response to the queries and connection quality measurements it made in step 402 to find the sub-stream s that is currently being obtained from the infrastructure that could be instead provided by the most suitable peer node (step 410), where the most suitable peer node may be determined using the method used for selecting the most suitable peer node in step 404.
Once the stream s and the most suitable peer node to provide it have been determined, the sub-stream control 212 instructs the sub-stream receiver to stop receiving sub-stream s from the infrastructure 100, and then requests the most suitable peer node to begin redistributing sub-stream 5c to the peer node (step 412).
Following step 412 or if in step 408 the sub-stream control 212 determined that no sub-streams were being obtained from the infrastructure 100, the sub-stream control determines whether any peers being used as sources for sub-streams have been lost (step 414).
If no source peers have been lost the sub-stream control 212 returns to step 402, otherwise it instructs the sub-stream receiver 204 to begin receiving from the infrastructure 100 any sub-streams that were being obtained from source peers that have been lost (step 416) before returning to step 402.
By following the steps illustrated in Figure 4 a sub-stream control 212 can direct a peer node to redistribute sub-streams received from reliable peer nodes, whilst only using the infrastructure when it first starts to receive the stream of data, when a peer node that was providing a sub-stream is lost, or when a suitable peer cannot be found to provide a required sub-stream.
The above embodiments are to be understood as illustrative examples of the invention. Further embodiments of the invention are envisaged as follows.
Embodiments of the invention are envisaged where some peer nodes 122, 124, 126 are set up as forwarding peer nodes that need not use a stream assembler 208 to assemble the sequence of decoded portions of data created by the stream decoder 210 and thus also need not decode this assembled sequence using the stream consumer 214. Additionally these forwarding peer nodes need not have a video output component 220 and corresponding video display device 226. A forwarding peer node is instead set up by a user to act as a peer that facilitates redistribution of sub-streams only, for example by using one of the methods for receiving a number of sub-streams from the infrastructure 100 and from other peer nodes whilst redistributing some of these sub-streams to other peer nodes, the steps of said methods being illustrated in Figures 3a, 3b, 3c, and 4 and explained in detail above.
Embodiments of the invention are envisaged where alternative peer discovery mechanisms can be used by peers in order to locate other peer nodes that are receiving the stream of data, instead of using a pool server 128 as the peer discovery mechanism. For example, a peer could locate other peers that are on the same subnet of the IP network the peer belongs to by broadcasting packets of data on the peer's subnet that identify the peer and/or request other peers on the same subnet to identify themselves to the peer by sending a packet of data to the peer in response to the broadcast. For example a peer with IP address 192.168.0.10 can broadcast to other peers on the same subnet (i.e. peers with IP addresses in the range 192.168.0.1 to 192.168.0.254) by sending packets of data to the TP address 192.168.0.255 which are forwarded to all devices on the subnet by the network components of which the subnet is constructed. Once peers have identified each other using a subnet broadcast they may transmit advertisement data to each other in order to advertise the sub-streams that they have available for redistribution, and may communicate directly with each other in order to determine or measure a number of connection quality metrics as described above. Alternatively peer nodes may broadcast advertisement data on their subnet without first identifying other peers on the same subnet. The sub-stream control 212 at a peer node can use the advertisement data received from other peers and the connection quality measurements made when running the methods for receiving a number of sub-streams from the infrastructure 100 and from other peer nodes whilst redistributing some of these sub-streams to other peer nodes, the steps of said methods being illustrated in Figures 3a, 3b, 3c, and 4 and explained in detail above.
Embodiments of the invention are envisaged where the stream information service 130 is not located at the server 104, but is located on a separate stream information server that communicates with the server 104 in order to obtain information relating to the stream of data provided by the infrastructure, said information being described above. The stream information service 130 may communicate said information to peer nodes in response to a request for said information as described above. Alternatively the stream information service may be split over several servers, with, for example, information relating to the number of sub-streams that the sub-stream producer 108 is producing communicated to peers from one of these several servers, whilst information relating to the unique identifiers of the most recently created data objects allocated to each sub-stream being communicated to peers from another of these several servers.
Embodiments of the invention are envisaged where portions of the sub-stream controls 212 from all of or a number of peer nodes 122, 124, 126 are located on a manager service running on a manager server or in one embodiment on the pool server 128 or in another embodiment on the server 104. Tn these embodiments of the invention a peer node is informed of a manager service to connect to by the stream information service 130. A peer node then connects to the manager service and communicates to the manager service information relating to the sub-streams the peer node wishes to acquire in order to receive a stream of data. The manager service then uses the methods for selecting to receive a number of sub-streams from the infrastructure 100 and from other peer nodes whilst redistributing some of these sub-streams to other peer nodes, the steps of said methods being illustrated in Figures 3a, 3b, 3c, and 4 and explained in detail above, to select for each peer node that is connected to the manager service which sub-streams the peer will receive from the infrastructure 100 and from other peer nodes, as well as which sub-streams will be redistributed by the peer node to other peer nodes. Peer nodes can communicate directly with each other in order to determine or measure a number of connection quality metrics as described above, and these connection quality metrics are communicated to the manager service in order to allow it to make appropriate decisions according to the methods whose steps are illustrated in Figures 3a, 3b, 3c and 4 and explained in detail above.
Embodiments of the invention are envisaged where the sub-stream distributor 112 at the server 104 is not an HTTP server that distributes a requested file from the sub-stream store, but instead forwards to requesting peer nodes or to proxy nodes the most recently created data belonging each sub-stream as that data is created. In these embodiments of the invention it may not be necessary for there to be a sub-stream store 110 at the server. Additionally the proxy nodes 116, 118, 120 in the network of proxy nodes 114 do not distribute a local copy of a requested file that has been requested by a peer node 122, 124, 126, but instead they forward to requesting peer nodes the most recently received data belonging to a particular sub-stream as that data is received from the server 104 or other proxy nodes (according to the proxy node's arrangement within the network of proxy nodes 114).
It is to be understood that any feature described in relation to any one embodiment may be used alone, or in combination with other features described, and may also be used in combination with one or more features of any other of the embodiments, or any combination of any other of the embodiments.
Furthermore, equivalents and modifications not described above may also be employed without departing from the scope of the invention, which is defined in the accompanying claims.

Claims (19)

  1. Claims 1. A method of processing a plurality of sub-streams of data received over a plurality of data links, wherein each sub-stream of data in the plurality of sub-streams of data contains a portion of information relating to an original stream of data, the method comprising: selecting a first set of sub-streams comprising two or more sub-streams of data, and receiving each sub-stream of data in said first set of sub-streams over a plurality of different data links, wherein different ones of the sub-streams of data in said first set of sub-streams are received via different data links; decoding said first set of sub-streams in order to recover information relating to said original stream of data; redistributing at least one of said first set of sub-streams to one or more of said recipient nodes; altering the selection of sub-streams by selecting a second set of sub- streams comprising two or more sub-streams of data, and receiving each sub-stream of data in said second set of sub-streams over a plurality of different data links, wherein at least one of the sub-streams of data in said second set of sub-streams is received via a different data link than a data link via which a corresponding sub-stream in said first set is received, said altering of the selection being performed on the basis of one or more characteristics of said different data links; and redistributing at least one of said second set of sub-streams to one or more of said recipient nodes.
  2. 2. A method according to claim 1, wherein said step of altering the selection of sub-streams comprises determining, for each sub-stream, a data link over which the sub-stream is received, wherein said data links are determined on the basis of one or more characteristics of said different data links.
  3. 3. A method according to claim 1 or 2, wherein said one or more characteristics of said different data links comprise one or more characteristics which are recorded from measurements made on said data links.
  4. 4. A method according to any preceding claim, wherein said step of altering the selection of sub-streams is achieved by recording said characteristics from measurements on said different data link.
  5. 5. A method according to claim 3 or 4, wherein measurements made on a data link include connection quality measurements on the data link.
  6. 6. A method according to claim 5, wherein connection quality measurements on a data link include a measurement of latency of data transmitted over the data link from the source of the data link.
  7. 7. A method according to claim 5 or 6, wherein connection quality measurements on a data link include a measurement of jitter of data transmitted over the data link from the source of the data link.
  8. 8. A method according to any of claims 5 to 7, wherein connection quality measurements on a data link include the packet loss of data transmitted over the data link from the source of the data link.
  9. 9. A method according to any preceding claim, wherein said one or more characteristics of said data links comprise one or more characteristics which denote whether the source of a data link is a peer node or a proxy node.
  10. 10. A method according to any of claims 2 to 4, wherein said one or more characteristics of said different data links comprise one or more characteristics relating to a reliability factor of the source of a data link.
  11. 11. A method according to claim 10, wherein the reliability factor of a source of a data link is dependent on a relationship between a target number of sub-streams the source of the data link may redistribute and the number of streams the source of the data link is currently redistributing.
  12. 12. A method according to any preceding claim, wherein said step of redistributing at least one of said second set of sub-streams to one or more recipient nodes consists of advertising a sub-stream of data in said second set as available for redistribution to peer nodes, and transmitting a requested sub-stream from said second set of sub-streams to a recipient node in response to a request from said recipient node to redistribute said requested sub-stream.
  13. 13. A method according to claim 12, wherein said step of advertising a sub-stream of data in said second set as available for redistribution to peer nodes is achieved by transmitting advertisement data to a pool server.
  14. 14. A method according to claim 12, wherein said step of advertising a sub-stream of data in said second set as available for redistribution to peer nodes is achieved by broadcasting advertisement data over a subnet.
  15. 15. A method according to any preceding claim, wherein the step of selecting a first set of sub-streams involves receiving a collection of advertisement data relating to a collection of source nodes and selecting for each sub-stream a data link over which the sub-stream is received, wherein the source node for each data link is selected from said collection of source nodes.
  16. 16. A method according to any preceding claim, wherein the step of selecting a first set of sub-streams involves receiving information from a stream information service relating to a collection of sub-streams of data available for recovering information relating to the original stream of data, and selecting the first set of sub-streams from said collection of sub-streams.
  17. 17. A method according to any preceding claim, wherein the step of selecting a first set of sub-streams involves receiving a server identifier from a stream information service, said server identifier identifiying a server that distributes the sub-streams of data.
  18. 18. Computer software adapted to implement the method of any preceding claim.
  19. 19. A data processing system adapted to implement the method of any of claims ito 17.
GB0908696A 2009-05-20 2009-05-20 Simultaneously streaming live data to peer nodes via a network of proxy nodes Withdrawn GB2470380A (en)

Priority Applications (1)

Application Number Priority Date Filing Date Title
GB0908696A GB2470380A (en) 2009-05-20 2009-05-20 Simultaneously streaming live data to peer nodes via a network of proxy nodes

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
GB0908696A GB2470380A (en) 2009-05-20 2009-05-20 Simultaneously streaming live data to peer nodes via a network of proxy nodes

Publications (2)

Publication Number Publication Date
GB0908696D0 GB0908696D0 (en) 2009-07-01
GB2470380A true GB2470380A (en) 2010-11-24

Family

ID=40862709

Family Applications (1)

Application Number Title Priority Date Filing Date
GB0908696A Withdrawn GB2470380A (en) 2009-05-20 2009-05-20 Simultaneously streaming live data to peer nodes via a network of proxy nodes

Country Status (1)

Country Link
GB (1) GB2470380A (en)

Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009018428A2 (en) * 2007-07-31 2009-02-05 Vudu, Inc. Live video broadcasting on distributed networks

Patent Citations (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
WO2009018428A2 (en) * 2007-07-31 2009-02-05 Vudu, Inc. Live video broadcasting on distributed networks

Non-Patent Citations (2)

* Cited by examiner, † Cited by third party
Title
Mol et al., "The Orchard Algorithm: Building Multicast Trees for P2P Video Multicasting Without Free-Riding", IEEE Transactions on Multimedia, Vol.9, No.8, December 2007 *
Xie et al., "Coolstreaming: Design, Theory and Practice", IEEE Transactions on Multimedia, Vol.9, No.8, December 2007 *

Also Published As

Publication number Publication date
GB0908696D0 (en) 2009-07-01

Similar Documents

Publication Publication Date Title
US11758013B2 (en) Methods and systems for caching data communications over computer networks
US8131971B2 (en) Methods and systems for push-to-storage
Yiu et al. VMesh: Distributed segment storage for peer-to-peer interactive video streaming
US8046432B2 (en) Network caching for multiple contemporaneous requests
US8819259B2 (en) Fast retrieval and progressive retransmission of content
US7925781B1 (en) Distributed storage to support user interactivity in peer-to-peer video streaming
US7991906B2 (en) Method of data request scheduling in peer-to-peer sharing networks
RU2647654C2 (en) System and method of delivering audio-visual content to client device
US20080037527A1 (en) Peer-to-Peer Interactive Media-on-Demand
US20110055420A1 (en) Peer-assisted fractional-storage streaming servers
US10666701B2 (en) Adaptation of content delivery network to incremental delivery of large, frequently updated data sets
Li PeerStreaming: A practical receiver-driven peer-to-peer media streaming system
US20090222515A1 (en) Methods and apparatus for transferring data
KR100912370B1 (en) System and method for distributing multimedia streaming service request based on wide area network
KR20100123659A (en) Method and system for storing and distributing electronic content
Yiu et al. Distributed storage to support user interactivity in peer-to-peer video streaming
GB2470380A (en) Simultaneously streaming live data to peer nodes via a network of proxy nodes
Meskovic et al. Content delivery architectures for live video streaming: hybrid cdn-p2p as the best option
CN111262886A (en) Peer-to-peer network self-adaptive streaming media on-demand system and service quality guarantee method
Yu et al. P2PVR: A playback offset aware multicast tree for on-demand video streaming with vcr functions
Kim et al. The Globally Scalable Architecture for Heterogeneous Video Servers without any Modification.
Liu et al. Content Delivery Network with Hot-video broadcasting and Peer-to-peer Approach
Iqbal et al. Online adaptation for video sharing applications
GB2469107A (en) Distribution and reception of plural offset data streams

Legal Events

Date Code Title Description
732E Amendments to the register in respect of changes of name or changes affecting rights (sect. 32/1977)

Free format text: REGISTERED BETWEEN 20110915 AND 20110921

WAP Application withdrawn, taken to be withdrawn or refused ** after publication under section 16(1)