Patent Description:
Existing systems for provision of media content from a server to one or more client devices generally takes place using a protocol for streaming such content from the server to a playback means (i.e., a video and/or audio player) on the client device, as long as such player is capable of receiving such content for display on the device. On typical client devices, a plurality of such application or players may be available to receive and use/play such content. In existing systems, it is not possible to ensure that a particular application or player is used for a particular media content. This may be because existing techniques rely on the settings of the players or applications that are available on the client device with no means to remotely check or validate that the content is provided to the player or application that is authorized to display or share such content.

<CIT> describes systems, methods and non-transitory computer-readable storage media for processing media requests in a secure way. A server configured to practice the request receives, from a media player client, a request for media content. The server requests a playback token from a playback service associated with the media content and generates a tag containing the playback token. Then the server transmits to the media player client a response to the request for media content based on the tag, wherein the media player client retrieves the media content by presenting the playback token to the playback service.

<CIT> describes a method in which a DRM server parses a request received from a client for a content identifier and client classification information. The content identifier identifies the requested content and client classification information describes the capabilities of the client. The DRM server determines a policy for the requested content. The policy specifies rules for determining access rights for the content responsive to the capabilities of the client. The DRM server determines access rights for the requested content responsive to the capabilities of the client and the policy. The DRM manager then provides the requested content and the determined access rights to the client.

<CIT> describes methods and systems for video resolution enforcement and optimization. A computing device may generate a digital rights management license for a content asset that includes one or more usage restriction rules. A usage restriction may limit the maximum display resolution for a content asset. Another device may then receive the license and process the one or more usage restrictions prior to presentation of the content asset to a user.

Aspects of the invention are set out in the independent claims.

The following is a simplified summary of the disclosure in order to provide a basic understanding of some aspects of the disclosure. This summary is not an extensive overview of the disclosure. It is intended to neither identify key or critical elements of the disclosure nor delineate any scope of the particular embodiments of the disclosure or any scope of the claims. Its sole purpose is to present some concepts of the disclosure in a simplified form as a prelude to the more detailed description that is presented later.

In one implementation, a method for optionally restricting content provided to a client device is disclosed. The method may include receiving a plurality of content rendering options supported by a client device, determining a content item to be rendered, the content item being associated with a restriction attribute, selecting a content rendering option from the plurality of content rendering options supported by the client device in view of the restriction attribute, generating a token comprising data associated with the selected content rendering option and the content item, receiving a client request from the client device, wherein the client request is associated with the content item and indicates a chosen content rendering option, comparing the data of the token with the chosen content rendering option indicated by the client request to determine a match, and granting the client device access to perform the chosen content rendering option on the content item based on the outcome of the determination of the match. In one example, the restriction attribute associated with the content item is provided by a creator of the content item and the restriction attribute indicates whether the content item corresponds to a content rendering option that supports digital rights management (DRM) or a rendering option that is free of DRM.

In another implementation, the method further includes querying the client device for the content rendering options supported by the client device and receiving the plurality of content rendering options from the client device. The selection of one of the content rendering option may involve identifying the content rendering option from the plurality of content rendering options based on a user experience of the content rendering option exceeding a predetermined threshold. The selected content rendering option may correspond to a sharing application on the client device or to a particular media player on the client device that performs the content rendering option. In one example, the selected content rendering option comprises remotely rendering the content item using one or more sharing services available to the client device. In another example, the selected content rendering option comprises playback or display of the content item.

In yet another implementation, the method may also involve transmitting the token to the client device and subsequently receiving the token with the client request. The token may be generated by encoding the data associated with the selected content rendering option and the content item using a binary-to-text function. The token and a specification may be transmitted to the client device prior to receiving the client request. The specification may indicate the content item and the selected content rendering option to the client device. The method may also involve authenticating the token received from the client device and validating the client request in view of the token received from the client device.

In another implementation, the method may also involve granting the client device access by providing the content item to a rendering component on the client device that implements the selected content rendering option, wherein the rendering component is at least one of a native media player, a browser media player, or a plugin media player. In one example, determining the content item may involve identifying a content item in view of a content identifier received from the client device. In another example, determining the content item may involve selecting the content item from a plurality of content items after filtering out one or more content items that are not supported by at least one of the plurality of content rendering options of the client device.

In additional implementations, computing devices for performing the operations of the above described implementations are also disclosed.

In some implementations, a computer readable storage media stores instructions for causing a processing device to perform the operations of the above described implementations.

The present disclosure is illustrated by way of example, and not by way of limitation, in the figures of the accompanying drawings.

These drawings may be better understood when observed in connection with the following Detailed Description.

Aspects of the present disclosure provide techniques for ensuring that special requirements relating to security of the content or otherwise are in the first instance identified by the server for a respective content that the server is to send to the client device. The applications or rendering options available at the respective client device is identified by the server system. The settings associated with restrictions or requirements for playback of the content are determined by the server. Once these requirements are available, the server then compares information relating to each of the various applications or rendering means with the settings associated with the content. Information relating to a suitable rendering means on the client device that meets the settings requirement of the content is encapsulated along with an identifier of such content in a token generated by the server. In one example, the content is then sent along with this token to the client device. Playback is then allowed on the client device if the player or application that has requested the content for playback is the same as a player or rendering means that is identified by the token. Accordingly, the present disclosure ensures that content with requirements such as the DRM capabilities are displayed by one or more applications or players on a client device that is specifically authorized to do so.

Accordingly, the present disclosure addresses the technical problem and drawbacks of existing systems by providing a method of customized authorization for enabling access to respective media content or playback on a client device. Thus, the disclosure includes an efficient, secure and scalable technique to confirm that any special limitations or requirements set by a content provider are met by the device or application it is being sent to for rendering. This technique can also function in a similar manner where no such requirements (relating to DRM or any other limitations) are set on the content. Thus, a present disclosure ensures that any and all media content is transmitted for playback in a secure reliable manner; ensuring authorization is applied respective to the content.

Frequently in this disclosure, examples directed to user-uploaded videos are presented. This is done for ease of explanation of some of the features described herein. However, embodiments with other content are also within the scope of this disclosure, regardless of whether specific examples of such are provided herein.

<FIG> illustrates an example system architecture <NUM> for optionally restricting particular content items against unauthorized presentation or reproduction, in accordance with an implementation of the disclosure. The system architecture <NUM> includes a network <NUM>, a server device <NUM>, one or more client devices 120A-Z, a content sharing platform <NUM>, and a sharing service <NUM>. In one implementation, network <NUM> may include a public network (e.g., the Internet), a private network (e.g., a local area network (LAN) or wide area network (WAN)), a wired network (e.g., Ethernet network), a wireless network (e.g., an <NUM> network or a Wi-Fi network), a cellular network (e.g., a Long Term Evolution (LTE) network), routers, hubs, switches, server computers, and/or a combination thereof.

Server device <NUM> may include one or more computing devices (e.g., a rackmount server, a server computer, etc.). In one implementation, server device <NUM> may be included within content sharing platform <NUM>, sharing service <NUM>, or other device not shown. As shown in <FIG>, server device <NUM> may include a content analysis component <NUM>, a token generation component <NUM>, and a client request validation component <NUM>.

Content analysis component <NUM> may analyze one or more content items <NUM> (e.g., media items) and one or more content rendering options 122A-Z (e.g., media player) and select a particular content item and a particular rendering option that satisfies one or more restriction attributes. The restriction attribute may be set by a content creator (e.g., author), a content distributor (e.g., advertiser, video host, social network), other entity associated with a content item, or a combination thereof. The restriction attribute may indicate the manner in which the content item may be presented to a user and may affect the way the content item is used, modified, reproduced, distributed, protected, controlled, processed, or combination thereof. Content analysis component <NUM> may analyze a restriction attribute associated with a content item and one or more rendering options available on one of the client devices 120A-Z and select a particular content item and rendering option for presentation by the client device to a user.

Token generation component <NUM> may analyze the selection of the content item and content rendering option and generate a token that indicates the particular content item and the particular content rendering option. The token may be received and stored by client device 120A and may be subsequently transmitted by the client before, during, or after sending a client request for the particular content item. The token and client request may be transmitted to server device <NUM>, content sharing platform <NUM>, sharing service <NUM>, other service, or a combination thereof. For example, client device 120A may receive the token and data identifying a particular content item (e.g., URL) from server device <NUM> and may use the data to form a client request and transmit the client request and token to content sharing platform <NUM> to obtain the particular content item.

Client request validation component <NUM> may analyze information associated with the client request in view of the token to ensure that the particular content item is being presented using the particular rendering option. Client request validation component <NUM> may authenticate the token and may compare data of the token, which indicates the selected rendering option and the content item, with the information associated with the client request. The information associated with the client request may indicate the particular content item being requested and the corresponding rendering option. When the content item and rendering option of the client request match the content item and rendering option indicated by the token, the client request may be validated. Client request validation component <NUM> may then grant the client device access to the content item. For example, client request validation component <NUM> may indicate to content sharing platform <NUM> that client device 120A may proceed with presenting (e.g., local rendering) or sharing (e.g., remote rendering) of the content item.

Further description of the content analysis component <NUM>, the token generation component <NUM>, and the client request validation component <NUM>, and their functions are described in more detail below with respect to <FIG>.

Client devices 120A-Z may each include computing devices such as mobile phones, smart phones, tablet computers, laptops, netbook computers, personal computers (PCs), etc. In some implementations, client device 120A-Z may also be referred to as "user devices" and may be configured to receive user input from one or more users. In one example, each of the client devices 120A-Z may support one or more content rendering options 122A-Z.

Content rendering options 122A-Z may be any software component or combination of software components that are capable of rendering a content item. The rendering may involve rendering image data, audio data, video data, other content, or a combination thereof. The rendering may be local rendering that occurs on a local client device or the rendering may be remote rendering where the client device provides information (e.g., content item, or link to content item) to a remote client device for rendering. In one example, the content rendering options 122A-Z may be, or may include, a media player that is installed or executing on the local client device and is capable of playing or presenting a content item to a user. In another example, the content rendering options 122A-Z may be an application or service that interacts (e.g., shares) with one or more local or remote media players to present the content item to a user.

Content rendering options 122A-Z may include native rendering components or non-native rendering components. A native rendering component may be any rendering component that is included as part of a client device when the client device is received from the manufacturer, designer, or other entity responsible for creating or configuring the client device. A native rendering component may also be referred to as a built-in rendering component, a stock rendering component, or other similar concept. The native rendering component may be packaged with the operating system as a driver, application, or other computer program. For example, the native rendering component may be a media player that comes packaged with the operating system of a client device.

A non-native rendering component may be similar to the native rendering component but may be provided by a third party. The third party may be a device (e.g., web server) or an individual (e.g., user, IT administrator) and may provide configuration data or executable data, such as executable instructions, code, commands, or other information that may be run on the client device. The executable data may be installed or loaded onto the client device permanently or temporarily (e.g., duration of a web session or log-in session). The executable information may be added to the client device at any portion in the software stack such as a kernel driver, operating system module, application, application plugin, other software component, or a combination thereof.

In one example, the non-native rendering component may be included within an application (e.g., web browser) as a browser based rendering component. The browser based rendering component may be a media player that utilizes a hypertext markup language (e.g., HTML5), Adobe® Flash®, other browser based media playing technology, or a combination thereof. The non-native rendering component may be provided to the client devices 120A-Z by the server <NUM>, content sharing platform <NUM>, sharing service <NUM>, other device, or a combination thereof. The browser based rendering component may present content as a standalone media player (e.g., full view) or an embedded media player (e.g., embedded in a web page).

In another example, the non-native rendering component may be an application that is installed on the client device and includes an integrated rendering component. For example, the application may be a media sharing application, such as a messaging application (e.g., instant message, text message, voice message, video message, email message), a social networking application, other media sharing application, or a combination thereof that is capable of providing a content item for presentation to the user.

Content sharing platform <NUM> may be one or more computing devices (such as a rackmount server, a router computer, a server computer, a personal computer, a mainframe computer, a laptop computer, a tablet computer, a desktop computer, etc.), data stores (e.g., hard disks, memories, databases), networks, software components, and/or hardware components that may be used to provide a user with access to content items and/or provide the content items to the user. For example, the content sharing platform <NUM> may allow a user to consume, upload, search for, approve ("like"), disapprove ("dislike"), and/or otherwise comment on content items. Content sharing platform <NUM> may also include a website (e.g., a webpage) that may be used to provide a user with access to the content items. In general, functions described in one implementation as being performed by the content sharing platform <NUM> can also be performed on the client devices 120A-Z in other implementations if appropriate. In addition, the functionality attributed to a particular component can be performed by different or multiple components operating together. The content sharing platform <NUM> can also be accessed as a service provided to other systems or devices through appropriate application programming interfaces, and thus is not limited to use in websites. In one implementation, content sharing platform <NUM> may store and distribute a plurality of content items <NUM>.

Content items <NUM> may be any content that can be consumed or experienced by a user via client device 120A-Z. Content items <NUM> may include images, sound, video, text, other media, or a combination thereof. For brevity and simplicity, an online video (also hereinafter referred to as a video) is used as an example of content item <NUM> in this document. As used herein "content item," "content," "media," "media item," "online media item," "digital media," and "digital media item," can include an electronic data (e.g., files, records, chunks) that can be executed or loaded using software, firmware, or hardware configured to present the content item to an entity (e.g., user, viewer, listener).

Content sharing platform <NUM> may include multiple channels (e.g., channels A through Z). A channel can be data content available from a common source or data content having a common topic or theme. The data content can be digital content chosen by a user, digital content made available by a user, digital content uploaded by a user, digital content chosen by a content provider, digital content chosen by a broadcaster, etc. For example, a channel X can include videos Y and Z. A channel can be associated with an owner, who is a user that can perform actions on the channel. Different activities can be associated with the channel based on the owner's actions, such as the owner making digital content available on the channel, the owner selecting (e.g., liking) digital content associated with another channel, the owner commenting on digital content associated with another channel, etc. The activities associated with the channel can be collected into an activity feed for the channel. Users, other than the owner of the channel, can subscribe to one or more channels in which they are interested. Once a user subscribes to a channel, the user can be presented with information from the channel's activity feed. If a user subscribes to multiple channels, the activity feed for each channel to which the user is subscribed can be combined into a syndicated activity feed. Information from the syndicated activity feed can be presented to the user.

Each channel may include one or more content items <NUM>. Examples of a content item <NUM> can include, and are not limited to, digital video, digital movies, digital photos, digital music, website content, social media updates, electronic books (ebooks), electronic magazines, digital newspapers, digital audio books, electronic journals, web blogs, real simple syndication (RSS) feeds, electronic comic books, software applications, etc. In some implementations, content item <NUM> is also referred to as a media item.

Sharing service <NUM> may include any service that is capable of sharing content item <NUM> with one or more other users or client devices. Sharing service <NUM> may provide messaging features (e.g., instant message, text message, voice message, video message, email message), social networking features (e.g., posting, commenting, news feeds, user interconnections), other media sharing features, or a combination thereof. Sharing service <NUM> may be integrated with one or more content rendering options 122A-Z and may receive content items from or transmit content items to content rendering options 122A-Z. Although implementations of the disclosure are discussed in terms of content sharing platforms, implementations may also be generally applied to any type of sharing service providing connections between users.

In situations in which the systems discussed herein collect personal information about users, or may make use of personal information, the users may be provided with an opportunity to control whether the devices can collect user information (e.g., information about a user's social network, social actions or activities, profession, a user's preferences, or a user's current location), or to control whether and/or how to receive content from the content server that may be more relevant to the user. In addition, certain data may be treated in one or more ways before it is stored or used, so that personally identifiable information is removed. For example, a user's identity may be treated so that no personally identifiable information can be determined for the user, or a user's geographic location may be generalized where location information is obtained (such as to a city, ZIP code, or state level), so that a particular location of a user cannot be determined. Thus, the user may have control over how information is collected about the user and used by the content sharing platform <NUM>.

<FIG> is a block diagram illustrating an exemplary server device <NUM> in accordance with one implementation of the disclosure. Server device <NUM> may be a part of content sharing platform, sharing service, other service, or a combination thereof. As discussed above, server device <NUM> may include content analysis component <NUM>, a token generation component <NUM>, a client request validation component <NUM>, and a data store <NUM>. Each of the components may include one or more modules and more or less components and/or module may be included in server device <NUM> without loss of generality. For example, two of the components or modules may be combined into a single component, or one of the components may be divided into two or more components. In one implementation, one or more of the components or modules may reside on different computing devices (e.g., different server devices or client devices). In one implementation, the data store <NUM> may be a memory (e.g., random access memory), a cache, a drive (e.g., a hard drive), a flash drive, a database system, or another type of component or device capable of storing data. The data store <NUM> may also include multiple storage components (e.g., multiple drives or multiple databases) that may also span multiple computing devices (e.g., multiple server computers).

Content analysis component <NUM> may analyze one or more content items and one or more content rendering options and select a particular content item and a particular rendering option that satisfies one or more restriction attributes. In the example shown in <FIG>, content analysis component <NUM> may include a rendering detection module <NUM>, a restriction analysis module <NUM>, a rendering selection module <NUM>, and a content item determination module <NUM>.

Rendering detection module <NUM> may detect a set of rendering options and the corresponding rendering components available on a client device. As discussed above, the rendering options may include different media players or different applications or services (e.g., messaging application, social network application) that interact with one or more local or remote media players. The set of rendering options available on the client device may depend on what the client device supports or what the user of the client device has indicated is available. For example, a device may support multiple rendering options but a user may indicate that one or more of the supported rendering options are not available for use or are preferred and therefore the set of available rendering options may be a subset of supported rendering options.

Rendering detection module <NUM> may retrieve the set of rendering options from the particular client device or from a data store that includes information that corresponds to the particular client device. In one example, rendering detection module <NUM> may query a particular client device for one or more rendering options supported by the client device, and the client device may respond with information corresponding to one or more rendering options. In another example, the rendering detection module <NUM> may access a data storage that is separate from the client device and includes information about the capabilities or configuration of the client device (e.g., the set of installed mobile applications). Rendering detection module <NUM> may then analyze the information to determine what rendering options are supported by the particular client device. In either example, the information corresponding to the rendering options may include information for identifying one or more native rendering components (e.g., native media player) or non-native rendering components (e.g., HTML <NUM> player) discussed above.

Restriction analysis module <NUM> may analyze one or more restriction attributes <NUM> associated with a content item to determine how the content item should be rendered. Restriction attribute <NUM> may be set by a content creator (e.g., author), a content distributor (e.g., advertiser, video host, social network), other entity associated with a content item, or a combination thereof. Restriction attribute <NUM> may be associated with a particular content item, a particular channel including one or more content items, a particular provider (e.g., author, distributor) of one or more content items, other item or entity, or a combination thereof. Restriction attribute <NUM> may indicate the manner in which the content item may be presented to a user and may affect the way the content item is used, modified, reproduced, distributed, protected, controlled, processed, or combination thereof.

Restriction attribute <NUM> may be any data structure for storing a setting, a flag, or other information that indicates whether a restriction scheme(s) should be used. In one example, restriction attribute <NUM> may be a binary element (e.g., true/false) that indicates whether a corresponding rendering option needs to support a restriction scheme. A restriction scheme may be an access control technology with rules or policies implemented in software, hardware, or a combination thereof that may be used to restrict usage of content items. The restriction scheme may restrict usage of content items by programmatically eliminating or reducing the ability of a rendering component to access, load, decode, decrypt, share, provide, present, display, or play a content item. In one example, the restriction scheme may be the same or similar to a digital rights management (DRM) scheme that control the user, modification, and distribution of proprietary or copyrighted content items.

Rendering selection module <NUM> and content item determination module <NUM> may interact with one another to select a particular rendering option and a particular content item for a client device to present to a user. In one example, the rendering selection module <NUM> may select a rendering option before the content item determination module <NUM> selects a content item. In another example, the rendering selection module <NUM> may select a rendering option after the content item determination module <NUM> selects a content item. In further examples, the rendering selection module <NUM> and content item determination module <NUM> may function in a different order.

Rendering selection module <NUM> may analyze one or more of the rendering options available on a client and may select a particular rendering option. The selection of a particular rendering option may be based on an evaluation of one or more rendering factors. A rendering factors may include numeric values or non-numeric values (e.g., true/false) that represent the capabilities of a rendering option. The rendering factors may be based on the restriction scheme supported (e.g., DRM, No-DRM), usability (e.g., auto playback), presentation quality (e.g., resolution, loading speed), digital container format (e.g., MP4), content codec (e.g., H. <NUM>), frame rate, bitrate, other factors, or a combination thereof.

Rendering selection module <NUM> may organize the set of rendering options available for the particular client device in view of one or more of the rendering factors. The organization may be based on a multiple parameter sort, a weighted sort, other sorting technique, or a combination thereof. The multiple parameter sort may sort on a first factor (e.g., restriction scheme) and then may sort on a second factor (e.g., presentation quality). The weighted sort may derive a weighted value for each rendering option (e.g., rendering technique, rendering method) and sort based on the weighted value. The weighted sort may involve identifying a weight (e.g., numeric coefficient) and a value (e.g., numeric score, alphabetical score) for each rendering factor and performing one or more mathematical operations (e.g., multiple, division, addition, subtraction) to derive a weighted value for each rendering option. Rendering selection module <NUM> may also filter (e.g., remove or add) one or more rendering options in view of information from restriction analysis module <NUM>. For example, if restriction analysis module <NUM> indicates a restriction scheme is required, the rendering selection module <NUM> may remove any rendering options that do not support the restriction scheme.

Rendering selection module <NUM> may then select a subset of rendering option from the organized set of rendering options. In one example, rendering selection module <NUM> may select a single rendering option, which may be the most optimal rendering option. The most optimal rendering option may be based on the rendering option with the highest/lowest weighted value or the first/last rendering option in the organized list of rendering options. In another example, rendering selection module <NUM> may select multiple rendering options to include in a subset that is transmitted to the particular client device and the client device may select a rendering option from the subset.

Content item determination module <NUM> may access information from restriction analysis module <NUM> and rendering selection module <NUM> and may select one or more particular content items to be rendered on a client device. In one example, server <NUM> may receive a request for a content item and the request may not identify a particular content item. For example, a client device may submit a request for a content item (e.g., advertisement, next video) but it may not specify a particular content item. Content item determination module <NUM> may analyze multiple content items and may organize, sort, or filter the content items in a manner similar to that discussed in regards to rendering selection module <NUM>. The selection of a particular content item may be based on an evaluation of one or more content selection factors. The content selection factors may be based on the restriction scheme (e.g., DRM, No-DRM), user demographics (e.g., age, gender, location), client device capability (e.g., bandwidth, screen resolution, processing power, memory), other factors or a combination thereof.

Content item determination module <NUM> may organize the set of content items available for the particular client device in view of one or more of the content selection factors. The organization may be based on a multiple parameter sort, a weighted sort, other sorting technique, or a combination thereof. The multiple parameter sort may sort on a primary factor (e.g., restriction scheme) and then may sort on one or more secondary factors (e.g., demographics). The weighted sort may derive a weighted value for each content item and sort based on the weighted value. The weighted sort may involve identifying a weight (e.g., numeric coefficient) and a value (e.g., numeric score, alphabetical score) for each factor and performing a mathematical operation (e.g., multiple, division, addition, subtraction) to derive a weighted value for each content item. Content item determination module <NUM> may also filter (e.g., remove or add) one or more content items in view of information from restriction analysis module <NUM> or rendering selection module <NUM>. For example, if restriction analysis module <NUM> indicates there are no rendering methods that support DRM, the content item determination module <NUM> may remove any content items associated that a restriction attribute that require the use of DRM.

Content item determination module <NUM> may then select a subset of content items from the organized set of content items. In one example, content item determination module <NUM> may select a single content item, which may be the most optimal content item. The most optimal content item may be based on the content item with the highest/lowest weighted value or the first/last content item in the organized set (e.g., list) of content items. In another example, rendering selection module <NUM> may select multiple content items to include in a subset that is transmitted to the particular client device and the client device may select one or more of the content items in the subset.

In one example, server device <NUM> may use information determined by rendering selection module <NUM> and content item determination module <NUM> to form specification data <NUM>. Specification data <NUM> may be transmitted to the client device and enable the device to present content to the user of the client device. As shown in <FIG>, specification data <NUM> may include a descriptor <NUM> and a token <NUM>. Both the descriptor <NUM> and token <NUM> may be generated in view of the selected rendering option. In one example, descriptor <NUM> may be in a format that can be interpreted by the client device and token <NUM> may be in a format that is not interpreted by the client device. Descriptor <NUM> may include content rendering identification data <NUM> and content item identification data <NUM>, which are discussed in more detail below.

Token generation component <NUM> may generate a token <NUM> that corresponds to the selected rendering option and content item provided by content analysis component <NUM>. Token <NUM> may be transmitted from server device <NUM> to a client device and may accompany a subsequent client request from the client device to the server device <NUM>, content sharing platform, sharing service, or other service. Token <NUM> may be transmitted as part of or within the client request or in a separate message before, during, or after the client request is transmitted. In the example shown in <FIG>, token generation component <NUM> may include a data gathering module <NUM> and a data combination module <NUM>.

Data gathering module <NUM> may retrieve content rendering identification data <NUM> and content item identification data <NUM> from data store <NUM>. Content rendering identification data <NUM> may include any information that can be used by the client or server to identify the selected rendering option(s). Content rendering identification data <NUM> may include a rendering identifier that can be used to identify the rendering component that implements the rendering option. In one example, the rendering identifier may identify a media player, which may be a native rendering component or a non-native rendering component. In another example, the rendering identifier may identify an application (e.g., mobile app ID) that provides support for content items and may include one or more embedded media players.

Content item identification data <NUM> may include any information that can be used by the client or server to identify a particular content item. Content item identification data <NUM> may include a content identifier that can be used to identify a particular content item. Content item identification data <NUM> may also include information that defines a location or can be used to identify a location where the particular content item resides (e.g., storage device, content sharing platform, server device, client device). In one example, the content item identification data <NUM> may include a link such as a Uniform Resource Locator (URL) or other similar linking mechanism for locating and identifying a particular content item on a remote device. In another example, the content item identification data <NUM> may include a device identifier (e.g., host name) and a storage object identifier (e.g., file name).

Data combination module <NUM> may access content rendering identification data <NUM> and content item identification data <NUM> and combine the data to generate a token. The combination of the data may involve an encoding scheme, an encryption scheme, a hashing scheme, other scheme, or a combination thereof. In one example, the combination scheme may involve one or more encoding schemes, such as a binary-to-text encoding scheme. The binary-to-text encoding scheme may involve the encoding of data (e.g., binary data) into plain text (e.g., sequence of characters). The plain text may include American Standard Code for Information Interchange (ASCII) characters, Unicode characters, other characters, or a combination thereof. The binary-to-text encoding scheme may be a base-<NUM> encoding scheme that transforms the content rendering identification data <NUM> and the content item identification data <NUM> into a subset of characters (e.g., radix-<NUM> representation). The subset of characters may comprise a particular set of <NUM> characters (e.g., A-Z, a-z, <NUM>-<NUM>) and may transform data <NUM> and <NUM> into a sequence of characters from the particular set. In one example, token <NUM> includes the sequence of characters or is represented by the sequence of characters.

Token <NUM> may be included within specification <NUM> and sent to the client device. The client device may analyze specification <NUM> to identify the rendering option and may forward some or all of the information within specification <NUM> to a rendering component associated with the rendering option. The rendering component may then generate a client request for the content item indicated by specification <NUM>. The client request may be sent to any content serving device that has access to the content item. In one example, the client request may be sent to a content serving device that is different from server device <NUM>. In another example, the client request may be sent to server device <NUM> which may fulfill the client request or forward it to a content serving device that can fulfill the client request. In either example, the client request may be analyzed by client request validation component <NUM> before providing the content item to the client device.

Client request validation component <NUM> may analyze the client request in view of the token to determine whether the rendering option and content item correspond to the rendering option and content item selected by server device <NUM>. Client request validation component <NUM> may include an authentication module <NUM>, a comparison module <NUM>, and an access granting module <NUM>.

Authentication module <NUM> may analyze the token received from the client device to verify the authenticity of the token. In one example, authentication module <NUM> may compare the token received from the client device to token <NUM> generated by the server (e.g., token <NUM>). Token <NUM> may retrieved from a local or remote data store (e.g., <NUM>). If both tokens match, the authentication module <NUM> may indicate that the token is authentic and has not been altered (e.g., tampered, spoofed, modified). In another example, the authentication module <NUM> may perform one or more mathematic operations on the token to determine whether the token is authentic. The mathematic operations may involve one or more pieces of information accessible to server device <NUM> (e.g., decoding function, public key, private key).

Comparison module <NUM> may compare the client request received from the client device with the token to validate the client request. The token used for the comparison may be the token received from the client device (e.g., within the client request) or the token generated by the server (e.g., token <NUM>). The token received from the client and the token generated by the server may be identical to one another or may be different from one another. In one example, the token received from the client may include more or less data, and the data added or removed may include timing data, version data, source/destination data, other data, or a combination thereof.

Comparison module <NUM> may interpret data from the client request and the token and compare the interpreted data. The client request may provide data that identifies a particular content item and data that identifies the rendering option. For example, the client request may include data that identifies a media player that originated the client request and a URL or portion of a URL that identifies the location or name of a particular content item. This information may be extracted from the client request and made accessible to server device <NUM> for subsequent processing. As discussed above, the token may include a combination of content rendering identification data <NUM> and content item identification data <NUM>. Although, data <NUM> and <NUM> may be combined (e.g., encoded, encrypted) in a manner that may be uninterpretable by the client device it may be subsequently interpreted by server device <NUM>. Server device may extract (e.g., decoded, decrypted) data <NUM> and <NUM> from the token. Comparison module <NUM> may then compare the data interpreted from the client request with the data interpreted from the token to identify any similarities and/or differences.

Access granting module <NUM> may analyze the results of the comparison between the data of the client request and the data of the token and determine whether to grant the client device access to the requested content item. In one example, access granting module <NUM> may determine whether the data of the token and the data of the client request match. If they do not match, that may indicate that either the content item or rendering option of the client request does not correspond to the selection of the server and the client request may not proceed. If they match, that may indicate that the particular content item and rendering option selected by server device <NUM> is being requested by the client device and the client request may proceed.

Access granting module <NUM> may enable the client request to proceed by validating the client request. The validation may be in the form of a signal that acknowledges that the client request conforms with the token and that the content item can be provided to the client device that transmitted the client request. The signal may be sent to another component on server device <NUM> or may be sent over a network to another device that is responsible for providing the content item to the client device, such as a content providing server (e.g., content streaming server of the content sharing platform).

<FIG> depicts a flow diagram for an illustrative example of method for optionally restricting a content item. Method <NUM> may be performed by processing devices that may comprise hardware (e.g., circuitry, dedicated logic, programmable logic, microcode, etc.), software (such as is run on a general purpose computer system or a dedicated machine), or a combination of both. Method <NUM> and each of its individual functions, routines, subroutines, or operations may be performed by one or more processors of a computing device executing the method.

For simplicity of explanation, the methods of this disclosure are depicted and described as a series of acts. However, acts in accordance with this disclosure can occur in various orders and/or concurrently, and with other acts not presented and described herein. Furthermore, not all illustrated acts may be required to implement the methods in accordance with the disclosed subject matter. In addition, those skilled in the art will understand and appreciate that the methods could alternatively be represented as a series of interrelated states via a state diagram or events. Additionally, it should be appreciated that the methods disclosed in this specification are capable of being stored on an article of manufacture to facilitate transporting and transferring such methods to computing devices. The term "article of manufacture," as used herein, is intended to encompass a computer program accessible from any computer-readable device or storage media. In one implementation, method <NUM> may be performed by server device <NUM> as shown in <FIG> and <FIG>.

Referring to <FIG>, method <NUM> may be performed by processing devices of a server device or a client device and may begin at block <NUM>. At block <NUM>, a processing device may receive a plurality of content rendering options supported by a client device. The plurality of rendering options received may indicate the rendering options supported by the client device. In one example, the method may involve the processing device querying the device for content rendering options that are supported by the device and receiving the plurality of content rendering options from the device. In another example, the processing device may receive the rendering options with a client request without querying the client device.

At block <NUM>, the processing device may determine a content item to be rendered, the content item being associated with a restriction attribute. In one example, determining the content item may involve identifying a content item in view of a content identifier received from the client device. In another example, determining the content item may involve selecting the content item from a plurality of content items after filtering out one or more content items that are not supported by at least one of the plurality of content rendering options of the client device. In other examples, the determination of the content item may be based on an organization of the one or more content items. The organization may be based on a multiple parameter sort, a weighted sort, other sorting technique, or a combination thereof. The multiple parameter sort may sort on a first factor (e.g., restriction scheme) and then may sort on a second factor (e.g., presentation quality). The weighted sort may derive a weighted value for each rendering method and sort based on the weighted value. The weighted sort may involve identifying a weight (e.g., numeric coefficient) and a value (e.g., numeric score, alphabetical score) for each factor and performing an arithmetic operation (e.g., multiple, division, addition, subtraction) to derive a weighted value for each rendering option. The processing device may also filter (e.g., remove or add) one or more rendering options. The processing device may then select a subset of rendering options from the organized set of rendering options. In one example, processing device may select a single rendering option, which may be the most optimal rendering option. The most optimal rendering option may be based on the rendering option with the highest/lowest weighted value or the first/last rendering option in the organized list of rendering options.

At block <NUM>, the processing device may select a content rendering option from the plurality of content rendering options supported by the client device in view of a restriction attribute. The restriction attribute may be associated with the content item and may be provided by a creator or distributor of the content item. In one example, the restriction attribute may indicate whether the content item corresponds to a rendering option that supports digital rights management (DRM) or a rendering option that is free of DRM (e.g., without DRM).

The selection of the rendering option may comprise identifying the rendering option from the plurality of rendering options based on a user experience of the rendering option. The user experience may be determined in view of an analysis and evaluation of one or more rendering factors. The rendering factors may be numeric values or non-numeric values (e.g., true/false) that represent the capabilities of a rendering option. The rendering factors may be based on the restriction scheme (e.g., DRM, No-DRM), usability (e.g., auto playback), presentation quality (e.g., resolution, loading speed), digital container format (e.g., MP4), content codec (e.g., H. <NUM>), frame rate, bitrate, other factors or a combination thereof. The numeric values and/or non-numeric values may be scored and weighted to produce a rendering score. The rendering score may be compared to a predetermined threshold to select or eliminate one or more of the rendering options. For example, the predetermined threshold may be a minimum threshold value and rendering options with scores below the minimum threshold value may be eliminated as available rendering options and rendering options with scores above the minimum threshold value may be available to be the selected rendering option.

At block <NUM>, the processing device may generate a token that includes data associated with the selected rendering option and the content item. Generating the token may involve encoding the data associated with the rendering option and the selected content item using a binary-to-text function. The generated token may then be transmitted to the client device as part of or in addition to a specification. In one example, the processing device may transmit the token and the specification to the client device prior to receiving the client request. The specification may indicate the selected content item and the selected rendering option to the client device. The generated token may be added (e.g., concatenated) to the descriptor (e.g., URL) prior to being transmitted to the client device.

At block <NUM>, the processing device may receive a client request from the client device, wherein the client request is associated with the content item and indicates a chosen content rendering option. The client request may be generated by the client device in view of user input and/or input received by the processing device (e.g., specification, descriptor). In one example, a user may provide user input identifying a primary content item (e.g., user generated video) and the processing device may identify a secondary content item (e.g., advertisement) and transmit a specification identifying the secondary content item. The client device may then generate a client request for the second content item in view of the specification.

At block <NUM>, the processing device may compare the data of the token with the chosen rendering option indicated by the client request to determine a match. The processing device may derive data from the token by performing a data extraction, decoding, decryption or other similar function. The token may include an identifier of the determined content item and an identifier of the selected rendering option. The identifier of the rendering option may correspond to a particular rendering component (e.g., media player, sharing application) on the client device that performs the rendering option. In one example, the processing device may authenticate the token received from the client device and then validate the client request received from the device in view of the token received from the client device.

At block <NUM>, the processing device may grant the client device access to perform the chosen content rendering option on the content item based on the outcome of the determination of the match. Granting the client device access to the content item may comprise providing the content item to a rendering component on the client device that implements the selected rendering option. The rendering component may be at least one of a native media player, a browser media player, or a plugin media player. Responsive to completing the operations described herein above with references to block <NUM>, the method may terminate.

As discussed throughout the specification, method <NUM> may be implemented with rendering options that are media players or may be implemented with rendering options that are based on applications or services that interact with local or remote media players. In the latter implementation, the rendering options may be associated with a sharing service that provides remote rendering on another client device. The details of the rendering options may be stored on the server device and may not need to be retrieved from the client device at runtime. Each of the remote rendering options (e.g., sharing options) may be determined in view of descriptors corresponding to each of the multiple applications available on the client device for sharing to a service (e.g., social networking service, messaging service). Each of the descriptors may be associated with rendering factors (e.g., DRM capability) and when a client device receives user input initiating a remote rendering request the client device may report it to the server device.

The server device may have access to a set of applications that the user has installed that can fulfill a remote rendering request (e.g., share request). For each of the rendering options the server may consult a device configuration on the server to determine the available rendering options. Typically, the rendering options will be listed in an optimal order based on the best user experience, and then filtered similarly to the description above. However, in some applications the sharing user may have control over which rendering options are available. For example, the user may select an option to explicitly render a video clip as a GIF instead of as a link. In this case, this user defined decision is passed to the server device as part of the remote rendering request, and the service responds with only a subset of the services that the client supports (the subset that can handle the DRM free sharing methods). In another application the both DRM and non-DRM sharing methods may be included in the same list of sharing services.

Once the server determines the list of appropriate rendering options they may be transmitted to the client device, which may initiate one of the remote rendering options. In the case that the client device selects a remote rendering option that is non-DRM the content may include a reference to a content item (as opposed to the actual content item). The receiving client device may then access (e.g., download, stream) this content and render it using the selected rendering option.

<FIG> illustrates a diagrammatic representation of a machine in the exemplary form of a computer system <NUM> within which a set of instructions or sets of instructions, for causing the machine to perform any one or more of the methodologies discussed herein, may be executed. In alternative embodiments, the machine may be connected (e.g., networked) to other machines in a LAN, an intranet, an extranet, or the Internet. The machine may operate in the capacity of a server or a client machine in client-server network environment, or as a peer machine in a peer-to-peer (or distributed) network environment. The machine may be a personal computer (PC), a tablet PC, a set-top box (STB), a Personal Digital Assistant (PDA), a smartphone, a web appliance, a server, a network router, switch or bridge, or any machine capable of executing a set of instructions (sequential or otherwise) that specify actions to be taken by that machine. Further, while only a single machine is illustrated, the term "machine" shall also be taken to include any collection of machines that individually or jointly execute a set (or multiple sets) of instructions to perform any one or more of the methodologies discussed herein.

The exemplary computer system <NUM> includes a processing device (processor) <NUM>, a main memory <NUM> (e.g., read-only memory (ROM), flash memory, dynamic random access memory (DRAM) such as synchronous DRAM (SDRAM) or Rambus DRAM (RDRAM), etc.), a static memory <NUM> (e.g., flash memory, static random access memory (SRAM), etc.), and a data storage device <NUM>, which communicate with each other via a bus <NUM>.

Processor <NUM> represents one or more general-purpose processing devices such as a microprocessor, central processing unit, or the like, having one or more cores. More particularly, the processor <NUM> may be a complex instruction set computing (CISC) microprocessor, reduced instruction set computing (RISC) microprocessor, very long instruction word (VLIW) microprocessor, or a processor implementing other instruction sets or processors implementing a combination of instruction sets. The processor <NUM> may also be one or more special-purpose processing devices such as an application specific integrated circuit (ASIC), a field programmable gate array (FPGA), a digital signal processor (DSP), network processor, or the like. The processor <NUM> is configured to execute instructions <NUM> for performing the operations and steps discussed herein. For example, the processor <NUM> may execute instructions <NUM> to perform method <NUM> as shown herein in <FIG>.

The computer system <NUM> may further include a network interface device <NUM>. The computer system <NUM> also may include a video display <NUM> (e.g., a liquid crystal display (LCD), a cathode ray tube (CRT), or a touch screen), an alphanumeric input device <NUM> (e.g., a physical keyboard or a virtual keyboard), a cursor control device <NUM> (e.g., a mouse), and a signal generation device <NUM> (e.g., a speaker).

The data storage device <NUM> may include a non-transitory computer-readable storage medium <NUM> on which is stored one or more sets of instructions <NUM> (e.g., software) embodying any one or more of the methodologies or functions described herein. The instructions <NUM> may also reside, completely or at least partially, within the main memory <NUM> and/or within the processor <NUM> during execution thereof by the computer system <NUM>, the main memory <NUM> and the processor <NUM> also constituting computer-readable storage media. The instructions <NUM> may further be transmitted or received over a network <NUM> via the network interface device <NUM>.

In one embodiment, the instructions <NUM> include instructions for providing client request validation component <NUM> or other features which may correspond, respectively, to identically-named counterparts described with respect to <FIG> and/or a software library containing methods for displaying content in between loops of a looping content item. While the computer-readable storage medium <NUM> is shown in an exemplary embodiment to be a single medium, the term "computer-readable storage medium" should be taken to include a single medium or multiple media (e.g., a centralized or distributed database, and/or associated caches and servers) that store the one or more sets of instructions. The term "computer-readable storage medium" shall also be taken to include any non-transitory medium that is capable of storing, encoding or carrying a set of instructions for execution by the machine and that cause the machine to perform any one or more of the methodologies of the present disclosure. The term "computer-readable storage medium" shall accordingly be taken to include, but not be limited to, solid-state memories, optical media, and magnetic media.

In the foregoing description, numerous details are set forth. It will be apparent, however, to one of ordinary skill in the art having the benefit of this disclosure, that the present disclosure may be practiced without these specific details. In some instances, well-known structures and devices are shown in block diagram form, rather than in detail, in order to avoid obscuring the present disclosure.

Some portions of the detailed description have been presented in terms of algorithms and symbolic representations of operations on data bits within a computer memory. An algorithm is here, and generally, conceived to be a self-consistent sequence of steps leading to a desired result. The steps are those requiring physical manipulations of physical quantities. Usually, though not necessarily, these quantities take the form of electrical or magnetic signals capable of being stored, transferred, combined, compared, and otherwise manipulated.

Unless specifically stated otherwise as apparent from the following discussion, it is appreciated that throughout the description, discussions utilizing terms such as "receiving", "identifying", "generating", "comparing" or the like, refer to the actions and processes of a computer system, or similar electronic computing device, that manipulates and transforms data represented as physical (e.g., electronic) quantities within the computer system's registers and memories into other data similarly represented as physical quantities within the computer system memories or registers or other such information storage, transmission or display devices.

The disclosure also relates to a system for performing the operations herein. This system may be specially constructed for the required purposes, or it may include a general purpose computer selectively activated or reconfigured by a computer program stored in the computer. Such a computer program may be stored in a computer readable storage medium, such as, but not limited to, any type of disk including floppy disks, optical disks, CD-ROMs, and magnetic-optical disks, read-only memories (ROMs), random access memories (RAMs), EPROMs, EEPROMs, magnetic or optical cards, or any type of media suitable for storing electronic instructions.

The words "example" or "exemplary" are used herein to mean serving as an example, instance, or illustration. Any aspect or design described herein as "example" or "exemplary" is not necessarily to be construed as preferred or advantageous over other aspects or designs. Rather, use of the words "example" or "exemplary" is intended to present concepts in a concrete fashion. As used in this application, the term "or" is intended to mean an inclusive "or" rather than an exclusive "or". That is, unless specified otherwise, or clear from context, "X includes A or B" is intended to mean any of the natural inclusive permutations. That is, if X includes A; X includes B; or X includes both A and B, then "X includes A or B" is satisfied under any of the foregoing instances. In addition, the articles "a" and "an" as used in this application and the appended claims should generally be construed to mean "one or more" unless specified otherwise or clear from context to be directed to a singular form. Moreover, use of the term "an embodiment" or "one embodiment" or "an embodiment" or "one embodiment" throughout is not intended to mean the same embodiment or embodiment unless described as such.

Reference throughout this specification to "one embodiment" or "an embodiment" means that a particular feature, structure, or characteristic described in connection with the embodiment is included in at least one embodiment. Thus, the appearances of the phrase "in some embodiments" or "in an embodiment" in various places throughout this specification are not necessarily all referring to the same embodiment.

Claim 1:
A method being implemented at a processing device associated with a source of content items comprising:
receiving a plurality of content rendering options supported by a client device, wherein each content rendering option comprises a software component or combination of software components that are capable of rendering a content item;
determining a content item to be rendered, the content item being associated with a restriction attribute;
selecting a content rendering option from the plurality of content rendering options supported by the client device in view of the restriction attribute;
generating a token comprising data associated with the selected content rendering option and the content item;
receiving a client request from the client device, wherein the client request is associated with the content item and indicates a chosen content rendering option;
comparing the data of the token with the chosen content rendering option indicated by the client request to determine a match; and
granting the client device access to perform the chosen content rendering option on the content item based on the outcome of the determination of the match.