U.S. patent application number 10/538100 was filed with the patent office on 2006-03-30 for system and method using a circular buffer for detecting packet loss in streaming applications.
This patent application is currently assigned to Koninklijke Philips Electronics N.V.. Invention is credited to Qiong Li, Mihaela Van Der Schaar.
Application Number | 20060069793 10/538100 |
Document ID | / |
Family ID | 32508007 |
Filed Date | 2006-03-30 |
United States Patent
Application |
20060069793 |
Kind Code |
A1 |
Li; Qiong ; et al. |
March 30, 2006 |
System and method using a circular buffer for detecting packet loss
in streaming applications
Abstract
A circular buffer, i.e., a chain of buffers forming a circle, is
provided for managing packet loss detection in Internet streaming.
The detection latency is determined by the size of the buffer
chain, which can be dynamically adapted to network conditions and
application requirements. The present invention can achieve
reasonable detection accuracy.
Inventors: |
Li; Qiong; (Tappan, NY)
; Van Der Schaar; Mihaela; (Martinez, CA) |
Correspondence
Address: |
PHILIPS INTELLECTUAL PROPERTY & STANDARDS
P.O. BOX 3001
BRIARCLIFF MANOR
NY
10510
US
|
Assignee: |
Koninklijke Philips Electronics
N.V.
|
Family ID: |
32508007 |
Appl. No.: |
10/538100 |
Filed: |
December 10, 2003 |
PCT Filed: |
December 10, 2003 |
PCT NO: |
PCT/IB03/05879 |
371 Date: |
June 8, 2005 |
Related U.S. Patent Documents
|
|
|
|
|
|
Application
Number |
Filing Date |
Patent Number |
|
|
60432892 |
Dec 12, 2002 |
|
|
|
Current U.S.
Class: |
709/231 |
Current CPC
Class: |
G01J 3/51 20130101; H04L
69/40 20130101; H04L 69/10 20130101; G01J 2003/467 20130101; H04L
69/28 20130101; H04N 1/48 20130101; G01J 3/465 20130101; G01J 3/501
20130101; G01J 3/46 20130101; H04L 65/80 20130101 |
Class at
Publication: |
709/231 |
International
Class: |
G06F 15/16 20060101
G06F015/16 |
Claims
1. A system for adaptive detection of streamed packet loss by a
receiver of a plurality of streamed packets transmitted over a
network from a given sender to the receiver, comprising: a circular
buffer (10) of size m>1 entries (13), each entry (13) having at
most one sequence number (15) of a streamed packet that has not
been received and is possibly lost; a packet loss detection module
(33) that uses the circular buffer (10) to detect and store therein
a sequence number (15) of a non-received and possibly lost packet,
to detect therein and remove therefrom a sequence number (15) of a
lost packet and declare the packet lost, and to remove therefrom a
sequence number (15) of a possibly lost packet that is received
from the given sender; an adaptation module (37) that adapts the
system to a network condition, wherein a loss detection latency is
determined by the size m of the circular buffer (10) and the loss
declaration is possibly false.
2. The system of claim 1, wherein m is initially set to 4.
3. The system of claim 1, further comprising: a variable s having
an initial value of 1 and being adapted to store a highest sequence
number of a streamed packet transmitted over the network from the
given sender and received by the receiver; a pointer P (12) having
an initial position pointing at a pre-determined location in the
circular chain and being adapted to circulate sequentially through
the m entries of said circular buffer (10) beginning at an entry
(13) in the circular buffer (10) that is next in sequence to the
entry (13) corresponding to the variable s; wherein, for a streamed
packet received from the given sender, the packet loss detection
module (33) checks the sequence number of the received packet
against the variable s and performs one of the following-- a. if a
hole in the sequence of received packets is observed beginning at
the location pointed at by the pointer P (12), each entry (13) of
the circular buffer (10) that is in the hole is checked for a
sequence number (15) of a possibly lost packet and the
corresponding packet is declared lost, a total of declared losses
declared_losses is increased by one, each sequence number in the
hole is stored in ascending order in a sequential entry (13)
beginning at the location pointed at by the pointer P (12), P (12)
is updated to point to the entry (13) in the circular buffer (10)
following hole, and s is set equal to the sequence number of the
received pkt, b. if a hole in the sequence of received packets in
not observed the entry (13) pointed at by the pointer P (12) is
checked for a sequence number (15) of a possibly lost packet and
the corresponding packet is declared lost, a total of declared
losses declared_losses is increased by one, the entry (13) is
cleared, P (12) is updated to point to the next entry (14) in the
circular buffer (10), and s is set equal to the sequence number of
the received pkt, c. if an out of order packet is observed, the
entries of the circular buffer (10) are searched to find one that
contains a sequence number (15) equal to the sequence number of the
received packet and if found the entry (13) is cleared, if not
found a false declaration rate false_declared_losses is increased
by one.
4. The system of claim 3, wherein: the network condition is at
least one of a success rate of transmission (success_rate) and the
false declaration rate (false_rate) wherein the success_rate is
initially set to a predetermined expected rate (EXPECT_RATE); and
the adaptation module (37) adjusts the size m of the circular
buffer (10) according to the network condition as follows a. m is
increased if false_rate>TOLERABLE_RATE where TOLERABLE_RATE is a
predetermined threshold and an entry (13) is added to the circular
buffer (10), or b. m is decreased if success_rate EXPECT_RATE =
declared_losses - falsely_declared .times. _losses EXPECT_RATE >
##EQU2## and an entry (13) is removed from the circular buffer
(10).
5. The system of claim 4, wherein the circular buffer (10) is a
circular buffer (10) chain Bi for i=1, . . . , m of a plurality of
m>1 buffers such that each of said plurality of buffers is an
entry (13) comprising a pointer to the next buffer (14) in the
chain and a value for storing a sequence number (15) of a
non-received buffer and the pointer P (12) point to a buffer in the
chain.
6. A system for adaptive detection of streamed packet loss by a
receiver of a plurality of streamed packets transmitted over a
network from a given sender to the receiver, comprising: a circular
buffer (10) of size m>1 entries, each entry (13) having at most
one sequence number (15) of a streamed packet that has not been
received and is possibly lost; a packet loss detection module (33)
that uses the circular buffer (10) to detect and store therein a
sequence number (15) of a non-received and possibly lost packet, to
detect therein and remove therefrom a sequence number (15) of a
lost packet and declare the packet lost, and to remove therefrom a
sequence number (15) of a possibly lost packet that is received
from the given sender; means for adapting the system to a network
condition (37), wherein a loss detection latency is determined by
the size m of the circular buffer (10) and the loss declaration is
possibly false.
7. The system of claim 6, further comprising: a variable s having
an initial value of 1 and being adapted to store a highest sequence
number of a streamed packet transmitted over the network from the
given sender and received by the receiver; a pointer P (12) having
an initial position pointing at a pre-determined location in the
circular chain and being adapted to circulate sequentially through
the m entries of said circular buffer (10) beginning at an entry
(13) in the circular buffer (10) that is next in sequence to the
entry (13) corresponding to the variable s; wherein, for a streamed
packet received from the given sender, the packet loss detection
module (33) checks the sequence number of the received packet
against the variable s and performs one of the following-- a. if a
hole in the sequence of received packets is observed beginning at
the location pointed at by the pointer P (12), each entry (13) of
the circular buffer (10) that is in the hole is checked for a
sequence number (15) of a possibly lost packet and the
corresponding packet is declared lost, a total of declared losses
declared_losses is increased by one, each sequence number in the
hole is stored in ascending order in a sequential entry (13)
beginning at the location pointed at by the pointer P (12), P (12)
is updated to point to the entry (13) in the circular buffer (10)
following hole, and s is set equal to the sequence number of the
received pkt, b. if a hole in the sequence of received packets in
not observed the entry (13) pointed at by the pointer P (12) is
checked for a sequence number (15) of a possibly lost packet and
the corresponding packet is declared lost, a total of declared
losses declared_losses is increased by one, the entry (13) is
cleared, P (12) is updated to point to the next entry (14) in the
circular buffer (10), and s is set equal to the sequence number of
the received pkt, c. if an out of order packet is observed, the
entries (13) of the circular buffer (10) are searched to find one
that contains a sequence number (15) equal to the sequence number
of the received packet and if found the entry (13) is cleared, if
not found a false declaration rate false_declared_losses is
increased by one.
8. A method for adaptive detection of streamed packet loss by a
receiver of a plurality of streamed packets transmitted over a
network from a given sender to the receiver, comprising the steps
of: providing a circular buffer (10) of size m>1 entries, each
entry (13) having at most one sequence number (15) of a streamed
packet that has not been received and is possibly lost; receiving
from the given sender a streamed packet having a sequence number;
using the circular buffer (10) and the sequence number of the
received packed to perform one of the steps of: a. detecting and
storing in the circular buffer (10) a sequence number (15) of a
non-received and possibly lost packet, b. detecting in the circular
buffer (10) and removing therefrom a sequence number (15) of a lost
packet and declaring the packet lost such that the loss declaration
is possibly false, and c. removing from the circular buffer (10) a
sequence number (15) of a possibly lost packet that corresponds to
the sequence number of the received packet; adapting the method to
a network condition such that a loss detection latency is
determined by the size m of the circular buffer (10).
9. The method of claim 8, further comprising the steps of:
providing a variable s having an initial value of 1; setting the
provided variable s=max(s, sequence number of the received streamed
packet); providing a pointer P (12) having an initial position
pointing at a pre-determined location in the circular buffer (10)
that is adapted to circulate sequentially through the m entries of
the provided circular buffer (10) beginning at an entry (13) in the
circular buffer (10) that is next in sequence to the entry (13)
corresponding to the variable s; for a streamed packet received
from the given sender, checking the sequence number of the received
packet against the variable s and performing one of the following
steps-- a. if a hole in the sequence of received packets is
observed beginning at the location pointed at by the pointer P
(12), a.1 checking each entry (13) of the circular buffer (10) that
is in the hole for a sequence number (15) of a possibly lost packet
and declaring the corresponding packet lost, a.2 if a packet is
declared lost, increasing a total of declared losses
declared_losses by one, a.3 storing each sequence number in the
hole in ascending order in a sequential entry (13) beginning at the
location pointed at by the pointer P (12), a.4 updating the pointer
P (12) to point to the entry (13) in the circular buffer (10)
following hole, and a.5 setting s equal to the sequence number of
the received pkt; b. if a hole in the sequence of received packets
in not observed b.1 checking the entry (13) pointed at by the
pointer P (12) for a sequence number (15) of a possibly lost packet
and declaring the corresponding packet lost, b2. if a packet is
declared lost, increasing a total declared losses declared_losses
by one, b.3 clearing the entry (13) pointed at by P (12), b.4
updating P (12) to point to the next entry (14) in the circular
buffer (10), and b.5 setting s equal to the sequence number of the
received pkt; c. if an out of order packet is observed c.1
searching the entries (13) of the circular buffer (10) to find one
that contains a sequence number (15) equal to the sequence number
of the received packet, c.2 if found, clearing the entry (13), c.3
if not found, increasing a false declaration rate
falsely_declared_losses by one.
10. The method of claim 9, wherein: the network condition is at
least one of a success rate of transmission (success_rate) and the
false declaration rate (false_rate)) wherein the success_rate is
initially set to a pre-determined expected rate (EXPECT_RATE); and
the adaptation step adjusts the size m of the circular buffer (10)
according to the network condition by performing one of the
following steps: d. if false_rate>TOLERABLE_RATE where
TOLERABLE_RATE is a predetermined threshold performing the
following steps d.1 increasing m by 1, and d.2 adding an entry (13)
to the circular buffer (10), or e. if success_rate>EXPECT_RATE
e.1 decreasing m by 1, e.2 removing an entry (13) from the circular
buffer (10),
11. The method of claim 9, wherein m is initially set to 4.
12. A computer program product for use in conjunction with a
processor to adapt detection of streamed packet loss by a receiver
of a plurality of streamed packets transmitted over a network from
a given sender to the receiver, the computer program product
comprising a computer readable storage medium and a computer
program mechanism embedded therein, the computer program mechanism
comprising: a circular buffer (10) of size m>1 entries, each
entry (13) having at most one sequence number (15) of a streamed
packet that has not been received and is possibly lost; a packet
loss detection routine (33) including instructions for using the
circular buffer (10) to detect and store therein a sequence number
(15) of a non-received and possibly lost packet, detect therein and
remove therefrom a sequence number (15) of a lost packet and
declare the packet lost, and remove therefrom a sequence number
(15) of a possibly lost packet that is received from the given
sender; an adaptation routine (37) including instructions that
adapt the system to a network condition, wherein a loss detection
latency is determined by the size m of the circular buffer (10) and
the loss declaration is possibly false.
13. The computer program product of claim 12, further comprising: a
variable s having an initial value of 1 and being adapted to store
a highest sequence number of a streamed packet transmitted over the
network from the given sender and received by the receiver; a
pointer P (12) having an initial position pointing at a
pre-determined location in the circular chain and being adapted to
circulate sequentially through the m entries of said circular
buffer (10) beginning at an entry (13) in the circular buffer (10)
that is next in sequence to the entry (13) corresponding to the
variable s; wherein, for a streamed packet received from the given
sender, the instructions of the packet loss detection routine (33)
check the sequence number of the received packet against the
variable s and perform one of the following-- a. if a hole in the
sequence of received packets is observed beginning at the location
pointed at by the pointer P (12), each entry (13) of the circular
buffer (10) that is in the hole is checked for a sequence number
(15) of a possibly lost packet and the corresponding packet is
declared lost, total of declared losses declared_losses is
increased by one, each sequence number in the hole is stored in
ascending order in a sequential entry (13) beginning at the
location pointed at by the pointer P (12), P (12) is updated to
point to the entry (13) in the circular buffer (10) following hole,
and s is set equal to the sequence number of the received pkt, b.
if a hole in the sequence of received packets in not observed the
entry (13) pointed at by the pointer P (12) is checked for a
sequence number (15) of a possibly lost packet and the
corresponding packet is declared lost, a total of declared losses
declared_losses is increased by one, the entry (13) is cleared, P
(12) is updated to point to the next entry (14) in the circular
buffer (10), and s is set equal to the sequence number of the
received pkt, c. if an out of order packet is observed, the entries
(13) of the circular buffer (10) are searched to find one that
contains a sequence number (15) equal to the sequence number of the
received packet and if found the entry (13) is cleared, if not
found a false declaration rate falsely_declared_losses is increased
by one and the total of declared losses declared_losses is
decreased by one.
14. The computer program product of claim 13, wherein: the network
condition is at least one of a success rate of transmission
(success_rate) and a false declaration rate (false)rate) wherein
the success_rate is initially set to a pre-determined expected rate
(EXPECT_RATE); and the adaptation routine (37) adjusts the size m
of the circular buffer (10) according to the network condition as
follows a. m is increased if false_rate>TOLERABLE_RATE where
TOLERABLE_RATE is a predetermined threshold and an entry (13) is
added to the circular buffer (10), or b. m is decreased if
success_rate = declared_losses - falsely_declared .times. _losses
EXPECT_RATE > EXPECT_RATE .times. .times. and .times. .times. an
.times. .times. ##EQU3## entry (13) is removed from the circular
buffer (10).
Description
[0001] This invention relates to the detection of packet loss in
Internet streaming. More particularly, this invention relates to a
system and method for using a circular buffer, implemented by a
chain of buffers forming a circle, for packet loss detection in
Internet streaming. Most particularly, this invention relates to a
system and method for dynamically adapting packet loss detection
latency, which is determined by the size of the chain, to network
conditions and application requirements that achieves reasonable
detection accuracy and is easy to implement.
[0002] In Internet streaming applications, when an important packet
gets lost, such as a packet belonging to an I-frame in video or the
base-layer in scalable coding, the receiver may ask the sender to
retransmit this lost packet. In order to send a retransmission
request promptly, the receiver must have means to timely detect
packet losses. Currently, packet loss detection is done using
either a timer or timing windows.
[0003] In the transmission control (TCP) protocol, a timer is used
for loss detection. When a packet is sent, a timer with a timeout
value is set by the sender for that packet. If the timer expires
before the acknowledgement of the packet is received, the packet is
declared as lost and resent by the sender.
[0004] In most streaming applications, loss detection is done by
using timing windows. A timing window (or more precisely a table)
has a fixed number of binary entries. Each entry indicates a
packet's status (0: lost, 1: received). At a certain point of time,
the first entry in this window is associated with a packet that is
identified by a sequence number (such as the sequence number of a
real-time transport protocol (RTP) packet). The subsequent window
entries are associated with packets having higher sequence numbers
in sequential order. Therefore, the space of packet sequence
numbers can be viewed as being divided into blocks, each block
being associated with a window at a certain point of time.
[0005] Presently, two such timing windows associated with two
consecutive blocks of packets are used for packet loss detection.
In the beginning, all entries are marked as "0". When a packet is
received, the corresponding window entry is marked as "1". When a
packet is received that has a sequence number that goes beyond the
first window, the corresponding second window entry is marked. As
soon as a packet is transmitted with a sequence number that goes
beyond even the second window, the first window is closed, and its
entries are checked. Packets associated with entries that remain
marked as "0", are declared as lost. A consecutive new window is
opened right after the second window and the detection process
resumes.
[0006] The timer method can be applied only to TCP-like protocols
that can measure packet round-trip time in order to properly set
the timeout value of the timer. In streaming applications, most of
the time only unidirectional media streams are generated. The timer
method is not applicable to these cases. Instead, timing window
methods are used. However, there are limitations with the timing
window methods: [0007] The window size is fixed--there is no
built-in mechanism for window size adaptation, which is desirable
when network conditions and application requirements (e.g. delay)
change. [0008] Non-uniform loss detection latency for different
losses occurs--the lost detection latency lies in a range between T
and .about.2T, where T is the average period of the timing window,
such that when a loss is associated with the first entry of the
window, the detection latency is 2T, while it is T if the loss is
associated with the last entry of the window.
[0009] Thus, there is a need for a loss detection method that
allows adaptive loss detection latency, as well as a uniform loss
detection latency. The system and method of the present invention
comprises: [0010] a circular chain of buffers having a chain size
that is adjustable according to network conditions and application
requirements, thereby providing adaptive loss detection latency;
and [0011] a circular chain of buffers having a fixed chain size,
thereby providing uniform detection latency when the chain size is
fixed.
[0012] Shortening the latency can increase the chance of recovering
a lost packet. Having a uniform latency may imply an equal recovery
chance for all losses. Therefore having an equal latency for all
loss detection may be desirable for many streaming
applications.
[0013] The implementation overhead of the circular buffer of the
present invention is low and can be less than the timing window
method.
[0014] FIG. 1a illustrates a preferred embodiment of the circular
buffer structure of the present invention.
[0015] FIG. 1b illustrates the structure of each of the buffers in
the circular buffer illustrated in FIG. 1a.
[0016] FIG. 2a illustrates an algorithm of a preferred that
implements the circular buffer structure illustrated in FIGS.
1a-b.
[0017] FIG. 2b illustrates a flow chart of the algorithm
illustrated in FIG. 2a.
[0018] FIG. 3 illustrates a preferred embodiment of an algorithm
for adapting the structure of the circular buffer chain based on
network characteristics.
[0019] Referring now to FIB. 1a, buffers 1 through m form a
circularly linked list of m buffers B.sub.i 10 where i=1, . . . , m
each of whose structure 12 is shown in FIG. 1b. As shown in FIG.
1a, m is the length of the circular chain that determines the loss
detection latency, and it can be adapted to network conditions and
application requirements. P 11 is a pointer that circulates through
the chain, pointing to each buffer in turn. Each buffer B.sub.i 10
in the chain comprises two fields, F.sub.1 13 and F.sub.2 14.
F.sub.1 13 stores a pointer to the next buffer. F.sub.2 14 stores a
sequence number s of a packet that may get lost.
[0020] In streaming applications, packets are supposed sent in the
order of packet sequence number. In a no-loss and ideal world, an
arriving packet always has a sequence number one higher than the
previous. If a packet arrives out of order, or is lost, then a hole
or gap is observed in the sequence numbers of the received
packets.
[0021] Whenever a hole (could be a hole that spans more than one
consecutive number) is observed, potentially, this hole may
indicate one or more lost packets. However, out-of-order packet
delivery is common to Internet because each packet can take a
different path through the network and an earlier numbered packet
may take longer to arrive than a later numbered packet. An
application cannot make a loss declaration immediately after
observing a hole in the sequence of arriving packets. The
application has to wait and see whether this hole is just an
incident of out-of-order delivery. The circular buffer method
provides a way to determine if a loss declaration can be made.
[0022] FIG. 2a illustrates C programming language code for a
preferred embodiment of an algorithm for accomplishing the method
of the present invention. FIG. 2b is a flow chart of the algorithm
illustrated in FIG. 2a. The pointer P 12 circulates through the
chain of buffers B.sub.i 11, the circulation being driven by
receipt of a packet at step 20. The sequence number of the received
packet is checked against that of the current maximum sequence
number already received s at step 21, and if it is less than the
current maximum sequence number received it is an out of order
packet.
[0023] If it is not an out of order packet, at step 22 a hole in
the sequence is checked for and when a hole in the sequence is
observed the following steps are performed:
[0024] a. If the buffer at which P is pointing contains a
non-received packet (P->F2 is not zero at step 24) then at step
25 the packet with the sequence number P->F2 is declared
lost.
[0025] b. Then, regardless of whether or not P was pointing at a
non-received packet, at step 26 the current maximum sequence number
is incremented by one and stored in the current buffer and P is
updated to point to the next buffer in sequence, i.e.,
P=P->F1.
[0026] c. The number of buffers that fall in the hole is
decremented by 1 at step 27 and steps a-c are repeated until the
remaining number of buffers is zero.
Thus, all the sequence numbers that fall in the hole are stored in
the circular buffer chain, with each number occupying one
buffer.
[0027] When a hole is not observed, the following steps are
performed:
[0028] d. At step 28 if the buffer at which P is pointing contains
a non-received packet (P->F2 is not zero) then at step 29 the
packet with the sequence number P->F2 is declared lost and the
sequence number stored in the buffer is set to zero
[0029] e. Whether or not P->F2 points at a non-received packet,
at step 30 P is updated to point to the next buffer in
sequence.
[0030] When all the processing associated with an in order packet
is completed:
[0031] f. At step 31 the current maximum sequence number is set to
that of the received packet.
[0032] If a packet arrives out of order (having a sequence number
that is earlier than the current received maximum sequence number
s):
[0033] g. the received packet number is compared with the numbers
stored in the circular buffer, and the corresponding record in the
buffer is cleaned, i.e., set to zero at step 32.
[0034] Thus, the detection latency is determined by the size of the
buffer chain m, because the loss declaration is only made when the
pointer re-visits a non-empty buffer, i.e., when F.sub.2 is
non-zero.
[0035] As illustrated in FIG. 3, the chain size m, that determines
the detection latency can be adapted. For example, in a preferred
embodiment, initially m=4. If the observed false declaration rate
is higher than a given threshold, i.e.,
false_rate>TOLERABLE_RATE
[0036] the length may be too short and may need to be lengthened by
inserting a new buffer and adjusting m correspondingly 36. The
greater the length of the network path, i.e., number of links
traversed, the larger the m that is needed, because when a packet
traverses a longer network path, there is a greater likelihood of
out-of-order delivery occurring. The larger value of m decreases
the likelihood of the pointer P encountering a delivered but
out-of-order packet in a buffer as P circulates through the buffer
chain B.sub.i 11.
[0037] The success_rate is initially declared to be a
pre-determined EXPECT_RATE and adjusted thereafter to be
success_rate = declared_losses - falsely_declared .times. .times.
losses declared_losses ##EQU1## false_rate = 1 - success_rate
##EQU1.2## and if the success_rate is too high, i.e., if
success_rate>EXPECT_RATE the length of the buffer chain may be
too long and may need to be shortened by deleting a buffer as
illustrated in FIG. 3.
[0038] This present invention can be used in the implementation of
multimedia players that play media from networked storage. Or it
can be used by any type of multimedia receiver that wants to use
retransmission as an error-recovery means, therefore need to
perform packet loss detection. Finally, it can be used by transport
control protocol implementations that the packet loss detection is
done at the receiver side.
[0039] The methods and systems of the present invention, as
described above and shown in the drawings, provide for a circular
buffer that allows an adaptive latency detection time or a fixed
latency detection time. It will be apparent to those skilled in the
art that various modifications and variations can be made in the
method and system of the present invention without departing from
the spirit or scope of the invention. Thus, it is intended that the
present invention includes modifications and variations that are
within the scope of the appended claims and their equivalents.
* * * * *