Derivation and application of color accents for images in a video delivery system interface

In one embodiment, a method receives an image of video content for a video offered by a video delivery service. The method analyzes pixels in the image to determine color attributes of the pixels, the color attributes including a lightness attribute and a hue attribute. Lightness counts for the image based on the lightness attribute and hue group counts based on the hue attribute are generated for the pixels. The method selects a lightness classification from lightness classifications based on the lightness counts and selects a hue group from hue groups based on the hue group counts. The lightness classification and the hue group classification are sent to a client device to allow the client device to generate a color using the lightness classification, the hue group classification, and a saturation value, the color being applied to an interface on the client device that is displaying the image.

BACKGROUND

An application may display different images in a user interface. To provide a pleasing experience to the users, the application may use color accents to bridge the gap between the images and portions of the user interface. For example, depending on the image displayed, certain aspects of the user interface may be adjusted. In one example, for each image a client receives, the client can analyze the image and select which color accents to use for the user interface. This may be convenient because different clients may have different specifications for generating color. However, allowing the clients to perform the analysis when an image is received may provide different experiences for users of different devices. Further, having the client analyze the image when the image is received may be time-consuming and delay the display of the user interface.

DETAILED DESCRIPTION

Particular embodiments generate image metadata for images that are going to be displayed on a user interface. The image is analyzed to generate a lightness group classification and a hue group classification based on color attributes of pixels in the image. The lightness group and hue group classifications are then stored for the image as image metadata. When a client device receives a selection from a user in the user interface that causes display of the image, the application can use the image metadata to generate one or more colors (e.g., color accents) that are applied to the user interface. For example, a color is generated based on lightness value and saturation value that are determined based on the lightness group classification and a hue value that is determined based on the hue group classification. If multiple colors are desired, different lightness values and saturation values may be determined based on the lightness group classification and used with the same hue value to generate multiple colors. The generated colors can then be used to accent portions of the user interface when the image is displayed.

Overview

FIG. 1depicts a simplified system100for displaying images with color accents in a user interface106according to one embodiment. System100includes a video delivery system102and client devices104. Video delivery system102may deliver videos to client devices104via a video delivery service. Client devices104may display user interface106for an application that allows a user to browse and select videos to play. Because user interface106is for a video delivery service, the application may display images from content of the videos on user interface106. For example, when a user selects a video title, user interface106displays an image or a short video clip from the video (e.g., an image from a movie or a scene from the movie). As different images are displayed, the look and feel of user interface106may change based on the content of the different images being displayed. Particular embodiments change a color or more than one color that is applied in user interface106based on the image currently being displayed.

As a user browses, a display process108in client device104generates user interface106. User interface106may display different content, such as menus, images, and accent areas. At different times, display process108may display different images, such as different images from different videos. An image from the video may be a single image or a series of images (e.g., an animation of multiple images of five seconds, or a short period of video). The different images from the videos may be different in that they may have different color attributes, such as lightness, hue, or saturation. To provide a unified experience to users, display process108may generate colors that are used to accent user interface106. For example, portions of user interface106may be generated using colors that are based on the content of the image. These portions may include a selection indicator, a border area, a background area, or other portions of user interface106. The colors may be applied to user interface106in different ways, such as displayed as is on user interface106or may be used to generate different colors on user interface106. Accordingly, as different images are displayed, display process108may change the color that is used for portions of user interface106.

Before client device104can display the colors in user interface106, video delivery system102processes the images that will be displayed in user interface106to generate image metadata. Then, display process108uses that image metadata to generate the colors for the portions of user interface106when an image is displayed.

To generate the image metadata, an image processor110receives images that could be displayed in user interface106. For example, the images may be received from videos that are offered in the video delivery service by video delivery system102. Image processor110then analyzes the image to generate color attributes and generates the image metadata from the color attributes. In one embodiment, the image metadata may include a hue classification and a lightness classification for the image. A hue may be a degree representing the color hue to use when generating colors using a HSL (hue, saturation, and lightness or luminosity) representation or HSV (hue, saturation, and value) representation in a RGB (red, green, blue) color model. In one embodiment, a cylinder may represent the HSL or HSV representation. In each cylinder, the angle around a central vertical axis represents the hue, the distance from the axis corresponds to saturation, and the distance along the axis corresponds to lightness or value. For discussion purposes, particular embodiments will use lightness, but lightness could also be derived from the value in HSV. When lightness is used, a person of skill in the art will recognize, the attribute equivalently exists in HSL and HSV representations. In one embodiment, image processor110analyzes the pixels to generate the hue classification and the lightness classification, but not the saturation. In one embodiment, the saturation is defined with a lightness value for a lightness classification. The hue classification informs the pure color base that forms the actual visual color. The lightness classification provides an indicator to ensure that colors contrast properly with the images by informing the final saturation/lightness or saturation/value pairs that are used to generate actual colors. Image processor110then stores the image metadata in storage112for later use when a client device104generates user interface106.

After generating the image metadata, an interface generator114receives requests from client device104for generating user interface106. In response, interface generator114may send an image to client device104. Also, interface generator114sends the image metadata for the image. As discussed above, the image metadata may include a hue classification and a lightness classification. In one embodiment, only the hue classification and the lightness classification are sent as image metadata and not a saturation value. Further, the red, green, blue, and/or alpha components that make up an RGBA color are not sent to client device104in the image metadata. Although RGBA color is described, the alpha component may not be used, and only an RGB color is used. It is noted that the image and image metadata may be sent at different times. For example, the image and image metadata may be sent in real-time in response to a request. In another embodiment, the image metadata may be sent before the request. In other embodiments, the images and image metadata may be downloaded to client device104and stored at client device104.

Display process108receives the image and the image metadata and can then generate user interface106. In generating user interface106, display process108uses the hue classification and lightness classification to generate a color, such as an accent color, for portions of user interface106, a more detailed process of which will be described below. Display process108could generate a single color or multiple colors from the hue classification and lightness classification. Then, display process108generates user interface106, which includes the image and the portions accented with the color. In this case, display process108did not analyze the image to generate the red, green, blue, and alpha components of the RGBA color. Rather, display process108performed HSL and/or HSV color space transformations using the lightness classification and hue classification to generate the RGBA color to use for the portions.

Image Metadata Generation

FIG. 2depicts a simplified flowchart200of a method for generating the image metadata according to one embodiment. The process described inFIG. 2may be performed for every image that may be displayed by user interface106. At202, image processor110receives an image. For example, the image may be received when a new video is received by video delivery system102and video delivery system102selects an image from the video.

At204, image processor110analyzes a pixel of the image to determine color attributes for the pixel. Although a pixel is described, a group of pixels may be analyzed. Also, in some cases, every pixel of the image may be inspected or just a portion of the pixels. Optimizations of the process will be described in more detail below.

For the pixel, at206, image processor110updates a lightness group count based on the color attributes of the pixel. For example, there may be multiple lightness groups in which the pixel could be classified, such as a dark classification, a medium classification, and a light classification. For the hue group, degree slices of a certain size of hue definitions in the HSL and/or HSV color spaces may be defined, such as a slice size of five degrees. Using a slice size of five degrees means a hue group includes five degrees, such as hue group #10contains degrees 10 through 14 inclusive and hue group #15may include degrees 15-19 inclusive. Inclusive means hue group #10includes degrees 10, 11, 12, 13, and 14. It will be understood that other ranges may be used. In one embodiment, the hue groups may be from 0-360 degrees.

In one embodiment, the process to generate the lightness group and hue group counts may be as follows. First, image processor110determines the color attributes as the red, green, blue, and/or alpha components of the pixel that make up an RGBA color. Not all of the RGBA attributes may be determines or other color attributes may also be used. From the RGBA color, image processor110derives the hue, chroma, saturation, and/or lightness attributes. In one embodiment, the hue, chroma, saturation, and lightness attributes are as defined by HSL and/or HSV color space transformations. The hue attribute is an attribute of visual sensation where an area appears to be similar to one of red, yellow, green, and blue or to a combination of two of them. The chroma is a colorfulness relative to the brightness of a similarly-illuminated white color. A saturation is the colorfulness of a stimulus relative to its own brightness. The lightness is the brightness relative to the brightness of a similarly-illuminated light.

Image processor110may then define light and dark thresholds. For example, the light threshold and the dark threshold may be lightness values. Image processor110compares the lightness value to the dark threshold and the light threshold to determine the lightness group classification. For example, if the lightness value is less than or equal to the dark threshold, image processor110increments the dark classification for the lightness group. If the lightness value is greater than the dark threshold and less than the light threshold, then image processor110increments the medium classification. If the lightness value is greater than or equal to the light threshold, then image processor110increments a lightness classification. Although this process is described, other processes may be used to determine the lightness classification.

At208, image processor110then determines if the color should be considered in the hue classification. For example, in some cases, if all pixels were used in the hue classification, then the hue that is determined may not generate a desired color for the portions of user interface106. Image processor110removes pixels with colors that are not considered desirable to use to classify the hue. In one embodiment, image processor110determines whether the color should be used using configured color attribute thresholds. In one example, image processor110ensures that the chroma falls inclusively within a configured chroma range, ensures saturation falls inclusively within a configured saturation range, ensures lightness falls inclusively within a configured lightness range, and ensures the maximum distance between the R, G, and B components of the color exceeds a configured minimum neutral distance. The neutral distance is the distance a color is from a pure gray. This ensures the color is far enough from gray to not be perceived as one. If all of the thresholds are met for the color (or a portion of them), at210, then image processor110determines that the color should be considered for hue classification and increments the count of the hue group whose slice contains the color's hue value. For example, if the hue is 11°, then the count for hue group #10is incremented. If the color should not be considered for the hue classification, then image processor110does not increment any hue group counts.

Once the lightness group and hue group counts are updated, at212, image processor110determines if another pixel should be analyzed for the image. If so, the process reiterates to202where another pixel is inspected.

After all the pixels within the image are inspected, at214, image processor110analyzes the lightness group count and the hue group count to select the final classifications for the image. For example, the lightness count that is the largest is selected as the lightness classification for the image. In this case, the lightness classification for the image could be either light, medium, or dark. The hue classification of the image is the hue of the hue group which count is the largest. In one embodiment, image processor110may apply a biasing function to the hue group counts. The biasing function operates on the domain of all possible hue values and returns a multiplier that should be used to manipulate the hue group counts. This function allows for certain parts of the color spectrum to be favored over others to achieve desired results, such as design cohesion, and avoid jarring/displeasing colors. The biasing function may be determined based on the video delivery system's desires in providing the user interface.

At214, image processor110stores the selected lightness classification and hue classification for the image. The image metadata may be stored along with other metadata for later transmission to client devices104.

In one embodiment, swatch configurations may be used that define swatches. Each swatch may be a color that could be applied to a portion of user interface106. In one embodiment, each swatch configuration may define three swatches that produce three different colors for each lightness classification. Also, the hue value used may change for each different color. For example, for the light, medium, and dark lightness classifications, image processor110defines hue (H), lightness (L), and saturation (S) values. In one example, the values may be:Light lightness classification: H=X, S=30, L=20;Medium lightness classification: H=X, S=50, L=40; andDark lightness classification: H=X, S=70, L=60.

If multiple colors are generated for one image, then at least one of the hue, saturation, and/or lightness may be varied within a classification to create another color. For example, the medium lightness classification may have a second color of H=X+20, S=50, L=40 or H=X, S=60, L=50, and a third color of H=X+40, S=50, L=40. In one example, when an image is classified with a medium lightness and hue group #10, then three colors are generated as [H=10, S=50, L=40], [H=30, S=50, L=40], and [H=40, S=50, L=40].

In one embodiment, image processor110may generate the different hue, saturation, and lightness values for a lightness classification and hue group classification. These values may be generated based on a context, such as characteristics of client devices, or the values may be pre-defined. Video delivery system102then sends these values to client devices104. In another embodiment, client devices104may use the lightness classification and hue group classification to generate the different hue, saturation, and lightness values.

Image processor110may also use optimizations when analyzing an image. The optimizations may leverage the principle that the exact color of the pixel does not matter; only the hue group it belongs to matters. In content images, such as images from a video, pixels directly adjacent to each other are either the same or slight variations in the majority of cases. Hue group slices are generally large enough to encompass slight variations of adjacent pixels. Pixels adjacent to each other are unlikely to change enough and could be excluded if the previous pixel was excluded. Sudden changes in pixels caused by hard lines in images will contain new segments of similar adjacent pixels. Images composed solely of extreme pixel changes are very unlikely to be chosen as an image by the video delivery system for the application being displayed in user interface106. Using these observations, image processor110can increase performance by only analyzing a subset of pixels instead of every pixel in the image. Image processor110may determine the number of pixels that can be skipped based on a function of the size of the hue slice size used to define the hue groups. In one embodiment, every increase of five degrees in the hue groups allows another 100 pixels to be skipped per pixel analyzed. The performance increase from the optimization may produce between five and ten times the performance gain.

Client Processing of Image Metadata

The image metadata may be provided to client devices104in different ways. For example, image metadata may be sent to a client device when the client device logs on to the video delivery system. Also, the image metadata may be sent along with the image when requested by client device104. In one embodiment, the image metadata is sent via a channel from video delivery system102to client device104that is either used to send the image or is a separate channel.

FIG. 3depicts a simplified flowchart300of a method for determining colors to apply to user interface106in conjunction with displaying an image according to one embodiment. At302, display process108at a client device104receives a user input on user interface106that causes display of a new image. For example, a user navigation may select various items on user interface106. In one example, the items may be different video titles. When a video title is selected, display process108will display an image for that video.

At304, display process108sends a request for the image to video delivery system102. In another embodiment, display process108may have received the images already from video delivery system102and stored the images in storage on client device104. In this case, a request for each image does not need to be sent to video delivery system102.

At306, display process108receives the image and image metadata from video delivery system102. The image metadata may be received in real-time when the user input is received. Or, the image metadata may be retrieved from storage from client device104. Also, the image metadata may be automatically sent when an image is requested and client device104does not need to request the image metadata separately.

At308, display process108generates a color from the image metadata. A single color will be described, but it is recognized that multiple colors may be generated from the same image metadata. One advantage to providing lightness and hue classifications is that client device104can apply different saturation and lightness values to generate multiple colors. If an RGBA color was provided, client device104would not be able to directly use that color to generate other colors. Rather, client device104would need to convert to the HSV or HSL color space. The process to generate the color or colors will be described in more detail below.

At310, display process108generates user interface106using the color and the image. For example, the accent portions of user interface106may be colored using the color and the image may be displayed in user interface106. For example, if a movie is selected, a content image from the movie is displayed in the background of user interface106and the color is applied to certain portions of user interface106. In one embodiment, a selector used to perform the navigation is accented using the color. Other portions of user interface106, such as the border, may also be accented using the color. Further, the background portion of user interface106that is displaying the image may be blended using the color.

Different processes may be used to generate the color or colors. In one embodiment, display process108receives swatch configurations. The swatch configurations define different saturation values and lightness values to use for each lightness classification. The swatch configurations could be the same for all clients104, different for different types of clients104, or personalized per user. In one embodiment, the swatch configurations may be received and stored at client device104at different times. For example, before the request for the image is sent, client device104may have already received the swatch configurations via a configuration request or secondary server request. For each swatch configuration, the saturation and lightness values are defined for each lightness classification and are the same for all hues.

The saturation values and lightness values can be combined with the hue classifications for the image to generate one or more colors to be applied to user interface106. For example, the hue value used may be the base hue classification, such as if the hue classification is hue group #10for degrees 10-14, then the hue value of 10 is used, but other values could be used within the range (e.g., 11, 12, 13, or 14). Similarly, the hue value of 15 is used when hue group #15is used because hue group #15includes the degrees of 15-19 inclusive. Another hue value may also be used within the group if desired. When display process108loads an image that has related image metadata for color accenting of user interface106, display process108uses the hue and the swatch configuration appropriate for the lightness classification to create the colors that are applied to user interface106. In one embodiment, different variations of colors are used to accent user interface106, but are derived from the same hue classification assigned to the image. In one example, if the hue classification is170, three color swatches are generated by applying three different sets of saturation values and lightness values to the hue value of170to generate three HSL colors. The different colors are then applied to portions of user interface106. In one embodiment, a first color is used on a first portion of the border of the page and a second color is used on a second portion of the border of the page. A third color may be blended into a background and used to accent the image. The third color may mirror the tone of the image that is used as a background gradient.

Display process108may operate in the HSL and/or the HSV color space natively. In this case, RGBA values are not provided from video delivery system102to client device104for each image. If RGBA values were provided, then multiple RGBA values would have to be provided for each of the different colors used for user interface106. This may use a lot of bandwidth. Or, a conversion from the RGBA value to the HSL and/or HSV color space would have to be performed, then modifications applied in the HSL and/or HSV color space to create the different colors, and then a conversion back to RGBA would be needed. This conversion may be imprecise due to the nature of the conversions and could cause user interface106to look different across client devices106. Further, depending on how the client is displaying the image, the lightness of the image on the client may need to be analyzed, but clients may not be able to determine the lightness of the image. Accordingly, the only solution if the RGBA space is used might be to send all three RGBA values to client device104. However, working in the HSL and/or HSV space, only the hue classification and the lightness classification need to be sent using particular embodiments. The swatch configuration includes the lightness values and the saturation values that are needed to generate the colors.

When display process108needs to compute the colors to display on user interface106, display process108retrieves the image metadata that was generated by image processor110for the image. This includes the lightness classification and hue classification. Then, display process108selects the swatch configuration values that are associated with the image metadata. In one embodiment, client device104receives the swatch configuration from video delivery system102. In other embodiments, client device104may generate the swatch configuration itself, such as by applying a display context (e.g., a theme) of client device104to generate the swatch configuration. Display process108selects the saturation value and the lightness value for the lightness classification from the swatch configuration. Then, for each swatch, display process108generates a color using the saturation and lightness value and a hue value. In one embodiment, a hue adjustment may be used in one or more of the swatches to adjust the hue value. The hue adjustment changes the hue value used so that different swatches may have different base colors. It is noted that some swatches or none may use the hue adjustment. For example, some swatches may just use different lightness and saturation values with the same hue value. In another example, the same lightness and saturation values are used with different hue values, or all three of the lightness, saturation, and hue values may be different for the swatches. The hue adjustment is a value that may be added to the hue when constructing the HSL and/or HSV color. For example, if the hue adjustment is 80 and the hue value is 50, then the adjusted hue value is 130.

User Interface

FIG. 4depicts an example of user interface106according to one embodiment. On user interface106, a user may use a selector402to select different items displayed on user interface106. For example, items may include categories, such as category #1403-1and category #2403-2, and also specific items within each category, such as entity #1402-1, entity #2402-2, and entity #3402-3. The categories may categorize items and the entities may be videos that could be requested by the user for playback on user interface106. When selector402is navigated to different items, such as categories and/or videos, an image404is displayed on user interface106, which may be displayed in the background of user interface106. For example, selector402has been used to select entity #1and an image from the video associated with entity #1is displayed as the image.

In one embodiment, different portions of user interface106are accented with different colors that are generated as described above. As discussed above, a single hue classification is used to generate three different colors. In one example, a first portion406-1of user interface106, such as top left and bottom right border areas, may be accented with a first color #1. A second portion406-2, such as top right and bottom left border areas, may be accented using a second color #2. Further, a third portion406-3may be accented using a color #3. Color #3may be used to blend the background of the image. Also, selector402may be accented, such as color #1and color #2may be combined in selector402. It may be important to accent selector402because this is the selector that is used by the user to select different items in user interface106. Because a different image is being displayed in user interface106for different selections of the items, the change in accent color for selector402is important to provide a clear indication to the user which item has been selected. Although these portions are described as being accented with these colors, it will be understood that other portions may be highlighted. Also, different combinations of colors may be used in different portions.

Accordingly, particular embodiments provide a process that can select image metadata that can be used to accent user interface106that is displaying the image. The process for generating the image metadata may generate a hue classification and light classification that can be sent to client devices104. This allows client device104to not have to analyze the image. Further, the single hue classification and lightness classification for an image can be used by each client device104to generate the accent colors to be used in user interface106. Instead of having to send individual RGBA colors to client device104, client devices104can generate these colors themselves. This may make the display of page400to be uniform on multiple client devices104.

System

Features and aspects as disclosed herein may be implemented in conjunction with a video streaming system500in communication with multiple client devices via one or more communication networks as shown inFIG. 5. Aspects of the video streaming system500are described merely to provide an example of an application for enabling distribution and delivery of content prepared according to the present disclosure. It should be appreciated that the present technology is not limited to streaming video applications, and may be adapted for other applications and delivery mechanisms.

In one embodiment, a media program provider may include a library of media programs. For example, the media programs may be aggregated and provided through a site (e.g., Website), application, or browser. A user can access the media program provider's site or application and request media programs. The user may be limited to requesting only media programs offered by the media program provider.

In system500, video data may be obtained from one or more sources for example, from a video source510, for use as input to a video content server502. The input video data may comprise raw or edited frame-based video data in any suitable digital format, for example, Moving Pictures Experts Group (MPEG)-1, MPEG-2, MPEG-4, VC-1, H.264/Advanced Video Coding (AVC), High Efficiency Video Coding (HEVC), or other format. In an alternative, a video may be provided in a non-digital format and converted to digital format using a scanner and/or transcoder. The input video data may comprise video clips or programs of various types, for example, television episodes, motion pictures, and other content produced as primary content of interest to consumers. The video data may also include audio or only audio may be used.

The video streaming system500may include one or more computer servers or modules502,504, and/or507distributed over one or more computers. Each server502,504,507may include, or may be operatively coupled to, one or more data stores509, for example databases, indexes, files, or other data structures. A video content server502may access a data store (not shown) of various video segments. The video content server502may serve the video segments as directed by a user interface controller communicating with a client device. As used herein, a video segment refers to a definite portion of frame-based video data, such as may be used in a streaming video session to view a television episode, motion picture, recorded live performance, or other video content.

In some embodiments, a video advertising server504may access a data store of relatively short videos (e.g., 10 second, 30 second, or 50 second video advertisements) configured as advertising for a particular advertiser or message. The advertising may be provided for an advertiser in exchange for payment of some kind, or may comprise a promotional message for the system500, a public service message, or some other information. The video advertising server504may serve the video advertising segments as directed by a user interface controller (not shown).

The video streaming system500also may include image processor110.

The video streaming system500may further include an integration and streaming component507that integrates video content and video advertising into a streaming video segment. For example, streaming component507may be a content server or streaming media server. A controller (not shown) may determine the selection or configuration of advertising in the streaming video based on any suitable algorithm or process. The video streaming system500may include other modules or units not depicted inFIG. 5, for example administrative servers, commerce servers, network infrastructure, advertising selection engines, and so forth.

The video streaming system500may connect to a data communication network512. A data communication network512may comprise a local area network (LAN), a wide area network (WAN), for example, the Internet, a telephone network, a wireless cellular telecommunications network (WCS)514, or some combination of these or similar networks.

One or more client devices520may be in communication with the video streaming system500, via the data communication network512and/or other network514. Such client devices may include, for example, one or more laptop computers520-1, desktop computers520-2, “smart” mobile phones520-3, tablet devices520-4, network-enabled televisions520-5, or combinations thereof, via a router518for a LAN, via a base station517for a wireless telephony network514, or via some other connection. In operation, such client devices520may send and receive data or instructions to the system500, in response to user input received from user input devices or other input. In response, the system500may serve video segments and metadata from the data store509responsive to selection of media programs to the client devices520. Client devices520may output the video content from the streaming video segment in a media player using a display screen, projector, or other video output device, and receive user input for interacting with the video content.

Distribution of audio-video data may be implemented from streaming component507to remote client devices over computer networks, telecommunications networks, and combinations of such networks, using various methods, for example streaming. In streaming, a content server streams audio-video data continuously to a media player component operating at least partly on the client device, which may play the audio-video data concurrently with receiving the streaming data from the server. Although streaming is discussed, other methods of delivery may be used. The media player component may initiate play of the video data immediately after receiving an initial portion of the data from the content provider. Traditional streaming techniques use a single provider delivering a stream of data to a set of end users. High bandwidths and processing power may be required to deliver a single stream to a large audience, and the required bandwidth of the provider may increase as the number of end users increases.

Streaming media can be delivered on-demand or live. Streaming enables immediate playback at any point within the file. End-users may skip through the media file to start playback or change playback to any point in the media file. Hence, the end-user does not need to wait for the file to progressively download. Typically, streaming media is delivered from a few dedicated servers having high bandwidth capabilities via a specialized device that accepts requests for video files, and with information about the format, bandwidth and structure of those files, delivers just the amount of data necessary to play the video, at the rate needed to play it. Streaming media servers may also account for the transmission bandwidth and capabilities of the media player on the destination client. Streaming component507may communicate with client device520using control messages and data messages to adjust to changing network conditions as the video is played. These control messages can include commands for enabling control functions such as fast forward, fast reverse, pausing, or seeking to a particular part of the file at the client.

Since streaming component507transmits video data only as needed and at the rate that is needed, precise control over the number of streams served can be maintained. The viewer will not be able to view high data rate videos over a lower data rate transmission medium. However, streaming media servers (1) provide users random access to the video file, (2) allow monitoring of who is viewing what video programs and how long they are watched, (3) use transmission bandwidth more efficiently, since only the amount of data required to support the viewing experience is transmitted, and (4) the video file is not stored in the viewer's computer, but discarded by the media player, thus allowing more control over the content.

Streaming component507may use TCP-based protocols, such as HTTP and Real Time Messaging Protocol (RTMP). Streaming component507can also deliver live webcasts and can multicast, which allows more than one client to tune into a single stream, thus saving bandwidth. Streaming media players may not rely on buffering the whole video to provide random access to any point in the media program. Instead, this is accomplished through the use of control messages transmitted from the media player to the streaming media server. Another protocol used for streaming is hypertext transfer protocol (HTTP) live streaming (HLS) or Dynamic Adaptive Streaming over HTTP (DASH). The HLS or DASH protocol delivers video over HTTP via a playlist of small segments that are made available in a variety of bitrates typically from one or more content delivery networks (CDNs). This allows a media player to switch both bitrates and content sources on a segment-by-segment basis. The switching helps compensate for network bandwidth variances and also infrastructure failures that may occur during playback of the video.

The delivery of video content by streaming may be accomplished under a variety of models. In one model, the user pays for the viewing of video programs, for example, using a fee for access to the library of media programs or a portion of restricted media programs, or using a pay-per-view service. In another model widely adopted by broadcast television shortly after its inception, sponsors pay for the presentation of the media program in exchange for the right to present advertisements during or adjacent to the presentation of the program. In some models, advertisements are inserted at predetermined times in a video program, which times may be referred to as “ad slots” or “ad breaks.” With streaming video, the media player may be configured so that the client device cannot play the video without also playing predetermined advertisements during the designated ad slots.

Referring toFIG. 6, a diagrammatic view of an apparatus600for viewing video content and advertisements is illustrated. In selected embodiments, the apparatus600may include a processor (CPU)602operatively coupled to a processor memory604, which holds binary-coded functional modules for execution by the processor602. Such functional modules may include an operating system606for handling system functions such as input/output and memory access, a browser608to display web pages, and media player610for playing video. The modules may further include display process108. The memory604may hold additional modules not shown inFIG. 6, for example modules for performing other operations described elsewhere herein.

A bus614or other communication component may support communication of information within the apparatus600. The processor602may be a specialized or dedicated microprocessor configured to perform particular tasks in accordance with the features and aspects disclosed herein by executing machine-readable software code defining the particular tasks. Processor memory604(e.g., random access memory (RAM) or other dynamic storage device) may be connected to the bus614or directly to the processor602, and store information and instructions to be executed by a processor602. The memory604may also store temporary variables or other intermediate information during execution of such instructions.

A computer-readable medium (CRM) in a storage device624may be connected to the bus614and store static information and instructions for the processor602; for example, the storage device (CRM)624may store the modules606,608, and610when the apparatus600is powered off, from which the modules may be loaded into the processor memory604when the apparatus600is powered up. The storage device624may include a non-transitory computer-readable storage medium holding information, instructions, or some combination thereof, for example instructions that when executed by the processor602, cause the apparatus600to be configured to perform one or more operations of a method as described herein.

A communication interface616may also be connected to the bus614. The communication interface616may provide or support two-way data communication between the apparatus600and one or more external devices, e.g., the streaming system500, optionally via a router/modem626and a wired or wireless connection. In the alternative, or in addition, the apparatus600may include a transceiver618connected to an antenna629, through which the apparatus600may communicate wirelessly with a base station for a wireless communication system or with the router/modem626. In the alternative, the apparatus600may communicate with a video streaming system500via a local area network, virtual private network, or other network. In another alternative, the apparatus600may be incorporated as a module or component of the system500and communicate with other components via the bus614or by some other modality.

The apparatus600may be connected (e.g., via the bus614and graphics processing unit620) to a display unit628. A display628may include any suitable configuration for displaying information to an operator of the apparatus600. For example, a display628may include or utilize a liquid crystal display (LCD), touchscreen LCD (e.g., capacitive display), light emitting diode (LED) display, projector, or other display device to present information to a user of the apparatus600in a visual display.

One or more input devices630(e.g., an alphanumeric keyboard, microphone, keypad, remote controller, game controller, camera or camera array) may be connected to the bus614via a user input port622to communicate information and commands to the apparatus600. In selected embodiments, an input device630may provide or support control over the positioning of a cursor. Such a cursor control device, also called a pointing device, may be configured as a mouse, a trackball, a track pad, touch screen, cursor direction keys or other device for receiving or tracking physical movement and translating the movement into electrical signals indicating cursor movement. The cursor control device may be incorporated into the display unit628, for example using a touch sensitive screen. A cursor control device may communicate direction information and command selections to the processor602and control cursor movement on the display628. A cursor control device may have two or more degrees of freedom, for example allowing the device to specify cursor positions in a plane or three-dimensional space.

Particular embodiments may be implemented in a non-transitory computer-readable storage medium for use by or in connection with the instruction execution system, apparatus, system, or machine. The computer-readable storage medium contains instructions for controlling a computer system to perform a method described by particular embodiments. The computer system may include one or more computing devices. The instructions, when executed by one or more computer processors, may be configured to perform that which is described in particular embodiments.