IP Library Granted Patent US 10,757,452
Granted Patent B2
US 10,757,452 · App. 16/215,816 · Granted Aug 25, 2020

Prefetcher with adaptive stream segment prefetch window based on different demand at different times

Inventor: Ravikiran Patil (Los Angeles, CA)
Assignee: Verizon Digital Media Services Inc.
H04N21/23106G06F12/0862H04N21/2183H04N21/2393H04N21/2408H04N21/8456G06F2212/1021G06F2212/6026H04L67/2847
View Patent ↗
Loading inventors, assignments & file history…
Monitor This Case
Get email alerts when status or documents change.
Order Certified Copies
Most orders are placed with the USPTO same day — all within 24 business hours.
Order via The Patent Place →
Pre-filled with this patent's details
Quick Facts
Patent No.
US 10,757,452
App. No.
16/215,816
Granted
Aug 25, 2020
Kind
B2
Abstract

An adaptive stream segment prefetcher changes the number of segments it prefetches following a client requested segment of the same stream based on conditions associated with that stream at prefetch time. The adaptive prefetcher increases or decreases the number of segments to prefetch for a particular stream based on the number of active or concurrent clients requesting that particular stream, based on the playback duration of the particular stream by one or more clients, or some combination of both. The adaptive prefetcher continuously monitors the conditions associated with the stream such that number of segments prefetched at a first time are greater or less than the number of segments prefetched at a later second time.

Claims (75)

1. A device comprising:

a non-transitory computer-readable medium storing a set of processor-executable instructions; and

one or more processors configured to execute the set of processor-executable instructions, wherein executing the set of processor-executable instructions causes the one or more processors to:

receive, at a first time, a request, that is directed to a first segment of a particular stream from a client, wherein the particular stream is encoded as a plurality of segments;

determine demand for the particular stream at the first time exceeds a first threshold and not a second threshold;

prefetch a first set of segments immediately following the first segment in the particular stream in response to the demand exceeding the first threshold and not the second threshold, wherein prefetching the first set of segments comprises initiating retrieval of the first set of segments from remote storage before receiving a client request for a segment within the first set of segments;

receive, at a second time, a request directed to a second segment of the particular stream that is after the first set of segments;

determine demand for the particular stream at the second time exceeds the first threshold and the second threshold; and

prefetch a second set of segments immediately following the second segment in the particular stream in response to the demand at the second time exceeding the first threshold and the second threshold, wherein the second set of segments comprises at least one more segment than the first set of segments.

2. The device of claim 1 , wherein the processor-executable instructions further include processor-executable instructions to:

compute the demand at the first time based on a first set of requests that are received before the first time and that are directed to segments of the particular stream; and

compute the demand at the second time based on a second set of requests that are received before the second time and that are directed to segments of the particular stream, wherein the second set of requests is greater than the first set of requests.

3. The device of claim 1 , wherein the processor-executable instructions further include processor-executable instructions to:

determine the demand for the particular stream at the first time based on a first number of clients concurrently requesting the particular stream at the first time; and

determine the demand for the particular stream at the second time based on a different second number of clients concurrently requesting the particular stream at the second time, wherein the second number of clients is greater than the first number of clients.

4. The device of claim 1 , wherein the processor-executable instructions further include processor-executable instructions to:

receive, at a third time, a request directed to a third segment of the particular stream that is after the second set of segments;

determine demand for the particular stream at the third time does not exceed the first threshold or the second threshold;

retrieve the third segment without prefetching any additional segments of the particular stream in response to the demand at the third time not exceeding the first threshold or the second threshold.

5. The device of claim 1 , wherein the processor-executable instructions further include processor-executable instructions to:

detect additional clients requesting the particular stream at the second time than at the first time, and wherein the additional clients increase the demand for the particular stream from the first time to the second time.

6. The device of claim 1 , wherein the processor-executable instructions further include processor-executable instructions to:

detect playback time for the particular stream increases from the first time to the second time, and wherein the increase in the playback time increases the demand for the particular stream from the first time to the second time.

7. The device of claim 1 , wherein the processor-executable instructions to prefetch the first set of segments further include processor-executable instructions to:

isolate an identifier identifying the first segment from a Uniform Resource Locator (URL) of the request directed to the first segment;

identify a segment iterator from the identifier; and

generate a set of prefetch requests for the first set of segments, the set of prefetch requests comprising the identifier with the segment iterator incremented by a different amount.

8. The device of claim 1 , wherein the processor-executable instructions further include processor-executable instructions to:

cache, in the non-transitory computer-readable medium, the first set of segments retrieved from the remote storage in response to the prefetching of the first set of segments.

9. The device of claim 1 , wherein the processor-executable instructions further include processor-executable instructions to:

receive, after said prefetching of the first set of segments, a request directed to a prefetched segment in the first set of segments; and

respond to the request directed to the prefetched segment by serving the prefetched segment from the non-transitory computer-readable medium without initiating a retrieval of the prefetched segment from the remote storage.

10. A device comprising:

a non-transitory computer-readable medium storing a set of processor-executable instructions; and

one or more processors configured to execute the set of processor-executable instructions, wherein executing the set of processor-executable instructions causes the one or more processors to:

receive a request, that is directed to a particular segment of a particular stream from a client, wherein the particular stream is encoded as a plurality of segments;

determine demand for the particular stream based on prior requests for the particular stream from other clients; and

prefetch a set of segments immediately following the particular segment in the particular stream in response to the demand exceeding a threshold, wherein prefetching the set of segments comprises initiating retrieval of the set of segments from remote storage before receiving a client request for a segment within the first set of segments.

11. The device of claim 10 , wherein the processor-executable instructions further include processor-executable instructions to:

disable prefetching in response to the demand not exceeding the threshold; and

retrieve the particular segment without prefetching any additional segments of the particular stream in response to disabling the prefetching.

12. The device of claim 10 , wherein the processor-executable instructions further include processor-executable instructions to:

receive, after prefetching the set of segments, a request directed to a segment of the particular stream that is after the set of segments;

determine that the demand does not exceed the threshold;

retrieve the segment that is after the set of segments without prefetching any additional segments of the particular stream in response to the demand not exceeding the threshold.

13. The device of claim 10 , wherein the processor-executable instructions to determine the demand further include processor-executable instructions to:

track a number of clients that concurrently request segments of the particular stream;

determine that the demand exceeds the threshold in response to tracking a first number of clients that concurrently request the segments of the particular stream; and

determine that the demand does not exceed the threshold in response to tracking a different second number of clients that concurrently request the segments of the particular stream, wherein the second number of clients is less than the first number of clients.

14. The device of claim 10 , wherein the processor-executable instructions to determine the demand further include processor-executable instructions to:

track a playback duration of the particular stream by one or more of the client and the other clients;

determine that the demand exceeds the threshold in response to tracking a first playback duration that is greater than a threshold duration; and

determine that the demand does not exceed the threshold in response to tracking a second playback duration that is less than the threshold duration.

15. The device of claim 14 , wherein the processor-executable instructions to track the playback duration further include processor-executable instructions to:

monitor (i) a time spent by one or more of the client and the other clients requesting the particular stream, or (ii) a number of prior segments of the particular stream requested by one or more of the client and the other clients.

16. The device of claim 10 , wherein the processor-executable instructions to determine the demand further include processor-executable instructions to:

adjust the set of segments for the prefetching to a first number of segments in response to the demand exceeding the threshold and not exceeding a second threshold; and

adjust the set of segments for the prefetching to a different second number of segments in response to the demand exceeding the threshold and the second threshold, wherein the second number of segments is greater than the first number of segments.

17. A device comprising:

a non-transitory computer-readable medium storing a set of processor-executable instructions; and

one or more processors configured to execute the set of processor-executable instructions, wherein executing the set of processor-executable instructions causes the one or more processors to:

receive a first set of conditions from a first slave device serving segments of a particular stream to a first set of clients;

receive a second set of conditions from a second slave device serving segments of the particular stream to a different second set of clients;

derive distributed demand for the particular stream based on the first set of conditions received from the first slave device and the second set of conditions received from the second slave device;

configure a first prefetch window for the particular stream in response to the distributed demand exceeding a first threshold and not a second threshold; and

configure a second prefetch window for the particular stream in response to the distributed demand exceeding the first threshold and the second threshold, and wherein configuring the first prefetch window or the second prefetch window adjusts a number of segments of the particular stream that each of the first slave device and the second slave device prefetch after receiving a first request for a segment of the particular stream.

18. The device of claim 17 , wherein the processor-executable instructions further include processor-executable instructions to:

receive a request for the particular stream directly from a client;

modify the distributed demand based on the request that is directly received from the client, the first set of conditions received from the first slave device, and the second set of conditions received from the second slave device.

19. The device of claim 17 , wherein the processor-executable instructions further include processor-executable instructions to:

receive a first request directed to a particular segment of the particular stream directly from a client;

prefetch a first set of segments that immediately follows the particular segment in response to the first request and further in response to configuring the first prefetch window based on the distributed demand derived from the first slave device and the second slave device; and

prefetch a second set of segments that immediately follows the particular segment in response to the first request and further in response to configuring the second prefetch window based on the distributed demand derived from the first slave device and the second slave device, and wherein the second set of segments comprises at least one more segment than the first set of segments.

20. The device of claim 17 , wherein the processor-executable instructions further include processor-executable instructions to:

modify a number of segments from the particular stream that the first slave device and the second device prefetch by providing the first prefetch window to the first slave device and the second slave device at a first time, and by providing the second prefetch window to the first slave device and the second slave device at a later second time.

Assignments (10)
RELEASE OF PATENT SECURITY AGREEMENT [RECORDED AT REEL/FRAME 065597/0406] Recorded Jul 9, 2025
From: U.S. BANK TRUST COMPANY, NATIONAL ASSOCIATION
To: UPLYNK, INC. (F/K/A EDGIO, INC.)
Reel/Frame 071875/0105 →
RELEASE OF PATENT SECURITY AGREEMENT [RECORDED AT REEL/FRAME 065597/0212] Recorded Jul 3, 2025
From: LYNROCK LAKE MASTER FUND LP
To: UPLYNK, INC. (F/K/A EDGIO, INC.); MOJO MERGER SUB, LLC
Reel/Frame 071817/0877 →
RELEASE OF PATENT SECURITY AGREEMENT [RECORDED AT REEL/FRAME 068763/0276] Recorded Jul 3, 2025
From: LYNROCK LAKE MASTER FUND LP
To: UPLYNK, INC. (F/K/A EDGIO, INC.); MOJO MERGER SUB, LLC
Reel/Frame 071818/0022 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Jan 30, 2025
From: EDGIO, INC.
To: DRNC HOLDINGS, INC.
Reel/Frame 070071/0327 →
PATENT SECURITY AGREEMENT Recorded Aug 23, 2024
From: EDGIO, INC.; MOJO MERGER SUB, LLC
To: LYNROCK LAKE MASTER FUND LP [LYNROCK LAKE PARTNERS LLC, ITS GENERAL PARTNER]
Reel/Frame 068763/0276 →
PATENT SECURITY AGREEMENT Recorded Nov 15, 2023
From: EDGIO, INC.; MOJO MERGER SUB, LLC
To: LYNROCK LAKE MASTER FUND LP [LYNROCK LAKE PARTNERS LLC, ITS GENERAL PARTNER]
Reel/Frame 065597/0212 →
PATENT SECURITY AGREEMENT Recorded Nov 15, 2023
From: EDGIO, INC.; MOJO MERGER SUB, LLC
To: U.S. BANK TRUST COMPANY, NATIONAL ASSOCIATION
Reel/Frame 065597/0406 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Oct 21, 2022
From: EDGECAST INC.
To: EDGIO, INC.
Reel/Frame 061738/0972 →
CHANGE OF NAME Recorded Mar 15, 2022
From: VERIZON DIGITAL MEDIA SERVICES INC.
To: EDGECAST INC.
Reel/Frame 059367/0990 →
ASSIGNMENT OF ASSIGNOR'S INTEREST Recorded Dec 11, 2018
From: PATIL, RAVIKIRAN
To: VERIZON DIGITAL MEDIA SERVICES INC.
Reel/Frame 047736/0686 →