Patent Description:
In general terms, this disclosure is directed to systems and methods for managing a group session for consuming media content across a plurality of devices. In some configurations and by non-limiting example, the group session operates to provide synchronize playback and control of media content at the plurality of devices.

One aspect is a method of simultaneously playing media content on a plurality of media playback devices for a group session, the method comprising: storing session state data for the group session at a cloud host server, the session state data including a media content identifier for a media content item of the group session, storing a list of members of the group session at the cloud host server, wherein each member is associated with one of the media playback devices, and, and generating and sending a session state data package including at least some of the session state data from the cloud host server to the media playback devices associated with the members of the group session, wherein the session state data package is usable by the media playback devices to play the media content item of the group session.

Another aspect is a non-transitory computer-readable storage device storing data instructions, which when executed by a processing device, cause the processing device to: store session state data for a group session, the session state data including a media content identifier for a media content item of the group session, store a list of members of the group session, wherein each member is associated with a media playback device, and generate and send a session state data package including at least some of the session state data to each media playback device associated with the members of the group session, wherein the session state data package is usable by the media playback devices to play the media content item of the group session.

In general terms, the present disclosure is directed to systems and methods for managing a group session for consuming media content across a plurality of devices. In some configurations and by non-limiting example, the group session operates to synchronize playback and control of media content at the plurality of devices. In other configurations and by non-limiting example, the group session operates to synchronize control of media content which is output at a single device or a configured set of devices.

In some embodiments, a group session consists of a list of members and a session state. Each member is associated with a media playback device. Each media playback device is able control the media content by sending commands to update the session state. In some examples, each media playback device outputs the same media content at generally the same time. For example, two users in different locations can listen to the same song at the same time with each media playback device generating the media content output. In other examples, one or more of the media playback devices is able to send commands to update the session state but does not generate media content output. For example, two users in the same room may wish to both control the media content from their personal devices while only one device generates the output. In some embodiments, the member selects whether to generate output when joining the group session.

Many of the examples herein are described in the context of audio content (e.g. songs albums, podcast, etc.). However, the methods and systems described herein operate similarly in the context of other media content (e.g. video content). The scope of this disclosure includes all types of media content.

<FIG> illustrates an example group session system <NUM>. The group session system <NUM> includes a media delivery system <NUM>, an administrator media playback device <NUM>, a participant media playback device <NUM>, and a network <NUM>. The media delivery system <NUM> operates with a cloud host application <NUM>. The administrator media playback device <NUM>, and the participant media playback device <NUM> are configured to output a media output <NUM>.

The group session system <NUM> operates to run a group session with a plurality of media playback devices, wherein each playback device is associated with a user account. The group session system <NUM> allows the group session to continue when a member media playback device experiences an interruption. For example, if one of the media playback devices receives a phone call and the group session will continue uninterrupted for the other members. The group session system <NUM> is further configured to not rely on any members media playback device as the group session is hosted by the cloud host application. The group session is also configured to operate with a variety of different members, including small groups and large groups. In these examples, a host or an administrator of the group session may set different levels of access for members so only a set of members are able to control the group session. In some embodiments, the group session supports promoting a member to a host role or adding multiple members to an administrator role.

The group session system <NUM> includes a media delivery system <NUM>. In the example shown, the media delivery system <NUM> operates to provide media content to the administrator media playback device <NUM> and the participant media playback device <NUM>. In some examples, the media delivery system <NUM> provides the media content items using the network <NUM>. A media content item is an item of media content, including audio, video, or other types of media content which may be stored in any format suitable for storing media content. Non-limiting examples of media content items include songs, albums, music videos movies, television episodes, podcasts, other types of audio or video content, and portions or combinations thereof. An example media delivery system <NUM> is described in <FIG>.

The media delivery system <NUM> operates a cloud host application <NUM>. The cloud host application <NUM> runs a group listening session. The cloud host application <NUM> tracks a session state which is propagated to each media playback device in the group session. In some examples, the cloud host application <NUM> also tracks a list of members which are part of the group session. Examples of the cloud host application are described below.

The administrator media playback device <NUM> operates to create, join, and participate in a group session. The administrator media playback device <NUM> can also operate to play media content items and produce media output <NUM>. The administrator media playback device <NUM> is a computing device with a communication interface that can connect to the network <NUM>. Examples of the administrator media playback device <NUM> include a computing device, gaming console, mobile computing device, tablet, smartphone, and a smart speaker. In some examples, the administrator media playback device <NUM> includes some or all of the components of the media playback device <NUM> illustrated in <FIG>.

The participant media playback device <NUM> operates to join and participate in a group session. In some examples, the participant media playback device <NUM> operates to play media content items and produce media output <NUM> received from the media delivery system <NUM>. The participant media playback device <NUM> is typically a computing device with a communication interface which can connect to the network <NUM>. Examples of the participant media playback device <NUM> include a computing device, gaming counsel, mobile computing device, tablet, smartphone, and a smart speaker. In some examples, the participant media playback device <NUM> includes some or all of the components of the media playback device <NUM> illustrated in <FIG>.

The system <NUM> includes a network <NUM>. The network <NUM> connects the media delivery system <NUM> to the administrator media playback device <NUM> and the participant media playback device <NUM>. In some examples, the network <NUM> is a public network, such as the Internet. In example embodiments, the network <NUM> may connect with media playback devices through a Wi-Fi® network or a cellular network.

<FIG> is a schematic illustration of an example group session system <NUM>. The system <NUM> includes a media playback device <NUM>, which communicates with the media delivery system <NUM> via the network <NUM>. Also shown is a user U.

The media playback device <NUM> is an example of the administrator media playback device <NUM> or the participant media playback device <NUM>, as shown in <FIG>. The media playback device <NUM> plays media content items. In some embodiments, the media playback device <NUM> plays media content items that are provided (e.g., streamed, transmitted, etc.) by a system external to the media playback device <NUM> such as the media delivery system <NUM>, another system, or a peer device. Alternatively, in some embodiments, the media playback device <NUM> plays media content items stored locally on the media playback device <NUM>. Further, in at least some embodiments, the media playback device <NUM> plays media content items that are stored locally as well as media content items provided by other systems.

In some embodiments, the media playback device <NUM> is a portable computing device. Such a portable computing device includes a handheld entertainment device, smartphone, tablet, watch, wearable device, or any other type of device capable of playing media content. In other embodiments, the media playback device <NUM> is a laptop computer, desktop computer, smart speaker, or other computing consoles.

In at least some embodiments, the media playback device <NUM> includes a touch screen <NUM>, a processing device <NUM>, a memory device <NUM>, a content output device <NUM>, and a data communication device <NUM>. Other embodiments may include additional, different, or fewer components.

The touch screen <NUM> operates to receive an input <NUM> from a selector (e.g., a finger, stylus etc.) controlled by the user U. In some embodiments, the touch screen <NUM> operates as both a display device and a user input device. In some embodiments, the touch screen <NUM> detects inputs based on one or both of touches and near-touches. In some embodiments, the touch screen <NUM> displays a user interface <NUM> for interacting with the media playback device <NUM>. As noted above, some embodiments do not include a touch screen <NUM>. Some embodiments include a display device and one or more separate user interface devices. Further, some embodiments do not include a display device.

In some embodiments, the processing device <NUM> comprises one or more central processing units (CPU). In other embodiments, the processing device <NUM> additionally or alternatively includes one or more digital signal processors, field-programmable gate arrays, or other electronic circuits.

The memory device <NUM> typically includes at least some form of computer-readable media. Computer-readable media includes any available media that can be accessed by the media playback device <NUM>. By way of example, computer-readable media include computer-readable storage media and computer-readable communication media.

Computer-readable storage media includes volatile and nonvolatile, removable and non-removable media implemented in any device configured to store information such as computer-readable instructions, data structures, program modules, or other data. Computer-readable storage media includes, but is not limited to, random access memory, read-only memory, electrically erasable programmable read-only memory, flash memory and other memory technology, compact disc read-only memory, blueray® discs, digital versatile discs or other optical storage, magnetic cassettes, magnetic tape, magnetic disk storage or other magnetic storage devices, or any other medium that can be used to store the desired information and that can be accessed by the media playback device <NUM>. In some embodiments, computer-readable storage media is non-transitory computer-readable storage media.

Computer-readable communication media typically embodies computer-readable instructions, data structures, program modules or other data in a modulated data signal such as a carrier wave or other transport mechanism and includes any information delivery media. The term "modulated data signal" refers to a signal that has one or more of its characteristics set or changed in such a manner as to encode information in the signal. By way of example, computer-readable communication media includes wired media such as a wired network or direct-wired connection, and wireless media such as acoustic, radio frequency, infrared, and other wireless media. Combinations of any of the above are also included within the scope of computer-readable media.

The memory device <NUM> operates to store data and instructions. In some embodiments, the memory device <NUM> stores instructions for a media playback application <NUM> and a media content cache <NUM>.

The memory device <NUM> includes a media playback application <NUM>. In some embodiments, the media playback application <NUM> comprises a media playback engine <NUM> and a group session engine <NUM>.

Some embodiments of the media playback application <NUM> include a media playback engine <NUM>. The media playback engine <NUM> operates to play media content to the user U. As described herein, the media playback engine <NUM> is configured to communicate with the media delivery system <NUM> to receive one or more tracks (for example, through the streaming media channel <NUM>). In other embodiments, the media playback engine <NUM> is configured to play media content that is locally stored in the media playback device <NUM>.

In some embodiments, the media playback engine <NUM> operates to retrieve one or more tracks that either locally stored in the media playback device <NUM> or remotely stored in the media delivery system <NUM>. In some embodiments, the media playback engine <NUM> is configured to send a request to the media delivery system <NUM> for tracks and receive information about such tracks for playback.

In some embodiments, the media playback application <NUM> includes a group session engine <NUM>. The group session engine <NUM> operates to receive a session state from the cloud host server <NUM>. The group session engine <NUM> uses the session state to instruct the media playback engine to receive one or more media content items and generate the media output <NUM> which is synchronized with the group session.

For example, the group session engine <NUM> may receive a session state which includes a current media content item and a playback time position of the current media content item. The group session engine <NUM> instructs the media playback engine <NUM> to retrieve the media content item, from either the media server <NUM> or the media content cache <NUM> and start media content item at the time specified in the session state, as determined by the cloud host application. In other embodiments the group session engine <NUM> may receive a timestamp for the start time of the current media content item. In these embodiments, the group session engine <NUM> uses this timestamp to determine the current playback time position of the current media content item (for example, subtracting a current time with the timestamp time).

In some examples, the group session engine <NUM> receives updated session state information when the session state is updated. In other examples, the group session engine <NUM> facilitates periodically requesting an updated session state from the cloud host server <NUM>. In other examples, scheduled events cause the group session engine <NUM> to request an updated session state.

In the examples, where the media playback device <NUM> is associated with a host user account for the group session, the group session engine may also transfer the current state on the host user's media-playback device to the cloud host server <NUM>.

Some embodiments of the memory device <NUM> also include a media content cache <NUM>. The media content cache <NUM> stores media content items, such as media content items that have been previously received from the media delivery system <NUM>. The media content items stored in the media content cache <NUM> can be stored in an encrypted or unencrypted format. The media content cache <NUM> can also store metadata about media-content items such as title, artist name, album name, length, genre, mood, era, etc. The media content cache <NUM> can also store playback information about the media content items, such as the number of times the user has requested to playback the media content item or the current location of playback (e.g., when the media content item is an audiobook, podcast, movie, or the like for which a user may wish to resume playback).

The content output device <NUM> operates to output media content. In some embodiments, the content output device <NUM> generates the media output <NUM> for the user(s). Examples of the content output device <NUM> include a speaker, an audio output jack, a Bluetooth® transmitter, a display panel, and a video output jack. Other embodiments are possible as well. For example, the content output device <NUM> may transmit a signal through the audio output jack or Bluethooth® transmitter that can be used to reproduce an audio signal by a connected or paired device such as headphone or a speaker.

The data communication device <NUM> operates to enable the media playback device <NUM> to communicate with one or more computing devices over one or more networks, such as the network <NUM>. For example, the data communication device <NUM> is configured to communicate with the media delivery system <NUM> and receive media content from the media delivery system <NUM> at least partially via the network <NUM>. The data communication device <NUM> can be a network interface of various types which connects the media playback device <NUM> to the network <NUM>. Examples of the data communication device <NUM> include wired network interfaces and wireless network interfaces. Wireless network interfaces can include or be implemented with technologies including infrared technology, Bluetooth® wireless technology, Bluetooth® low energy technology, <NUM>. 11a/b/g/n/ac technology, cellular technology, or radio frequency interface technology, among others. Examples of cellular network technologies include LTE, WIMAX, UMTS, CDMA2000, GSM, cellular digital packet data (CDPD), and MOBITEX.

The system <NUM> further includes a media delivery system <NUM>. The media delivery system <NUM> comprises one or more computing devices and provides media content items to the media playback device <NUM> and, in some embodiments, other media playback devices as well. The media delivery system <NUM> includes a media server <NUM> and a cloud host server <NUM>. Although <FIG> shows a single media server <NUM> and a single cloud host server <NUM>, some embodiments include multiple media servers and cloud host servers. In these embodiments, each of the multiple servers may be identical or similar and may provide similar functionality (e.g., to provide greater capacity and redundancy, or to provide services from multiple geographic locations). Alternatively, in these embodiments, some of the multiple servers may perform specialized functions to provide specialized services (e.g., services to enhance media content playback during travel, etc.). Various combinations thereof are possible as well.

The media server <NUM> transmits stream media to media playback devices such as the media playback device <NUM>. In some embodiments, the media server <NUM> includes a media server application <NUM>, a processing device <NUM>, a memory device <NUM>, and a data communication device <NUM>. The processing device <NUM>, memory device <NUM>, and the data communication device <NUM> may be similar to the processing device <NUM>, memory device <NUM>, and the data communication device <NUM> respectively, which have each been previously described.

In some embodiments, the media server application <NUM> streams music or other audio, video, or other forms of media content. The media server application <NUM> includes a media stream service <NUM>, a media data store <NUM>, and a media application interface <NUM>. The media stream service <NUM> operates to buffer media content such as media content items <NUM>, <NUM>, and <NUM>, for streaming to one or more streams <NUM>, <NUM>, and <NUM>. The streams are sent to one or more media playback devices over a stream media channel <NUM> over the network <NUM>.

The media application interface <NUM> can receive requests or other communication from media playback devices or other systems, to retrieve media content items from the media server <NUM>. In some examples, the media application interface <NUM> operates to establish a communication channel <NUM> with one or more media playback devices over the network <NUM>.

In some embodiments, the media data store <NUM> stores media content items <NUM>, media content metadata <NUM>, and playlists <NUM>. The media data store <NUM> may comprise one or more databases and file systems. Other embodiments are possible as well. As noted above, the media content items <NUM> may be audio, video, or any other type of media content, which may be stored in any format for storing media content.

The media content metadata <NUM> operates to provide various information associated with the media content items <NUM>. In some embodiments, the media content metadata <NUM> includes one or more of title, artist name, album name, length, genre, mood, era, etc. The playlists <NUM> operate to identify one or more of the media content items <NUM> and. In some embodiments, the playlists <NUM> identify a group of the media content items <NUM> in a particular order. In other embodiments, the playlists <NUM> merely identify a group of the media content items <NUM> without specifying a particular order. Some, but not necessarily all, of the media content items <NUM> included in a particular one of the playlists <NUM> are associated with a common characteristic such as a common genre, mood, or era. The playlists <NUM> may include user-created playlists, which may be available to a particular user, a group of users, or to the public.

The cloud host server <NUM> manages a group playback session including sending updated session state packages to the several media playback devices, such as the media playback device <NUM>. In some embodiments, the cloud host server <NUM> executes the cloud host application <NUM>, and includes a processing device <NUM>, a memory device <NUM>, and a data communication device <NUM>. The processing device <NUM>, memory device <NUM>, and the data communication device <NUM> may be similar to the processing device <NUM>, memory device <NUM>, and the data communication device <NUM> respectively, which have each been previously described.

In some embodiments, the cloud host application <NUM> includes an interface which receives requests and other communications from various media playback devices or other systems. For example, the interface can receive commands, requests to join, request to create a session, and player state information. The interface can also send session state information to a plurality of media-playback devices. In some examples, the interface operates to establish a communication channel <NUM> with one or more media playback devices over the network <NUM>.

The cloud host application <NUM> operates to manage a group session. The cloud host application <NUM> creates a group session, adds members to the group session, and tracks a group session state. Examples of the cloud host application <NUM> are illustrated and described in <FIG> and <FIG>.

<FIG> illustrates an example cloud host application <NUM>. The cloud host application <NUM> operates to manage a group session. The cloud host application <NUM> includes a cloud host service <NUM> a cloud host data store <NUM>, and a timer service <NUM>.

The cloud host service <NUM> operates to manage a group session and a session state. Examples of managing the group session include managing members of the group session, group session access settings, validation of commands, adding a user, removing a member from the group session, and deleting the group session. Examples of managing a session state include transferring an initial state from a host user, updating a state based on a command, scheduling an event to update the state with the timer service <NUM>, and propagating the current state to some or all of the media playback devices in the group session.

In some examples the cloud host service <NUM> receives a command from a media playback device. The cloud host service <NUM> validates the command by checking if the user account which sent the command has permission for the specific command. If the user has access to the command the cloud host service <NUM> will update the state based on the command.

The cloud host data store <NUM> stores group session data and session state data. Examples of group session data includes group session ID and user account ID for group members. Additional permissions for user accounts, host information, administrator information can also be stored in the cloud host data store <NUM>. Examples of session state data include, current song, next song, queue of songs, current playlist, current album, timestamp of last state, duration of current song etc..

In accordance with the present invention as defined by the appended claims, the timer service <NUM> manages scheduled time-based tasks. For example, the timer service may receive a task from the cloud host service <NUM> requesting a callback at the time a media content item is completed. In some examples, the callback is a scheduled "http" call back. In some examples, the timer service <NUM> also cancels scheduled callbacks.

Illustrates an example cloud host application <NUM>. The cloud host application <NUM> operates to manage a group session. The cloud host application <NUM> illustrated in <FIG> is another example of a cloud host application <NUM> illustrated in <FIG>. The cloud host application <NUM> includes a session control service <NUM>, a session data store <NUM>, a host management service <NUM>, a host management data store <NUM>, a timer service <NUM>, a player service <NUM>, a connect service <NUM>, and a connect data store <NUM>.

The session control service <NUM> operates to create a group session. The session control service <NUM> is responsible for keeping track of the user accounts in the session, and the access levels for each member user accounts. In some examples, the session control service <NUM> receives a request to create a group session from a host user account.

In some embodiments, the session control service <NUM> creates a group session with a group session ID. The group session ID and the host user account ID are stored in the session data store <NUM>. In some examples, the host user account ID is stored as the host of the group session. In other examples, the host user account ID is stored as an administrator for the group session. In these examples, an administrator user account may add other accounts as administrators. In some embodiments, the session control service <NUM> adds members to the group session and updates a stored list of members in the session data store <NUM>.

In some examples, the session control service <NUM> receives commands from one or more media playback devices, where each media playback device is associated with a user account. The session control service <NUM> validates the command by checking the user account in the session data store <NUM>. For example, the group session can be configured to only allow administrator group session members to change the current media content item. In this example, the session control service <NUM> checks if the user account is an administrator for the group session before validating a command to change a current media content item.

The host management service <NUM> operates to manage the session state for a group session. The host management service <NUM> is configured to track the current session state for the group session. some examples, the host management service <NUM> receives a create session request from the session control service <NUM>. The host management service <NUM> then creates an initial session state which may include a current media content item and an end time of the media content item. The host management service <NUM> will store the session state information in the host management data store <NUM>.

The session state includes the context of the group session. Typically, the session state includes information like current media content item for the group session, playback time position of the media content item, one or more timestamps for changes to the session state, next media content item in a queue, list of previous media content items played, and other group session context information. In a music streaming example, the session state may include whether the session is listening to an album and track the progress through the album or if the session is listening to a playlist and track the progress through a playlist. In some examples, user accounts may have different access levels. For example, some users may have a premium account and other users may have a free account. Users on the free account may have limited options for skipping media content items. The session state may store a tracker for the number skips allowed based on the user account level.

Additionally, in some examples, the session state includes a timestamp indicating when the last change to the state was made. The server uses the timestamp to determine the offset of the current media content item. For example, if a participant of the group session selects a song to play a timestamp is stored in the session state for this selection. This timestamp is used to calculate an offset indicating how far the playback of the song has progressed. In some examples, this offset is sent to a new participant joining the session. The new participant media playback device uses this offset to output the song at the correct time to participate in the group session.

Typically, the session state does not track information which is specific to a media playback device which is joined to the group session. For example, a media playback device may require the media content item is in a specific format to play the media content item. The session state can provide the state information to such a device which will request the media content item in the required format from the media delivery system.

The session state is stored in the host management data store <NUM>. In some examples, the session state is stored in a file. The session state can be stored as a data structure which is sent to various devices as a data packet.

In some examples, the player service <NUM> updates the session state when the cloud host application receives a command. The player service <NUM> updates the session state based on the received command. For example, if the command is to skip forward <NUM> seconds in a current media content item the player service will update the state to reflect the command. Other examples, include skipping to a next song, adding a song to a queue, and setting a song to repeat. Other group session commands are also possible.

In some examples, the host management service <NUM> schedules a media content item transition with the timer service <NUM>. The timer service <NUM> may receive a media content item end time. For example, if the media content item is a song that is two minutes, the host management service <NUM> sends a request to the timer service <NUM> to notify the host management service <NUM> when two minutes has passed. The timer service <NUM> will keep track of time and send a notification to the host management service <NUM>. When the host management service <NUM> receives this notification the host management service <NUM> updates the state with the next media content item. Another example of the timer service <NUM> is illustrated in <FIG>.

The connect service <NUM> operates to connect members of the group sessions playback devices. In some examples, a member of the group session may have a cluster of devices for playback. For example, a member may have a mobile phone device which is used to control the audio output and a Wi-Fi® enabled speaker for generating the audio output. The connect service <NUM> operates to store a connect state for that member which can be updated from any of the members devices. The connect service <NUM> also tracks which devices in a cluster are generating media output. The connect state information for various user accounts is stored in the connect data store <NUM>. Examples of devices which may be in a cluster include smart phone, laptop, desktop, gaming counsel, smart speaker, and smart TV. In many embodiments the connect service may run as a separate service from the cloud host application <NUM> and includes an interface with the cloud host application <NUM>.

In some embodiments, the connect service <NUM> receives a current state from a media playback device. In some examples, the connect service <NUM> receives a current state from a user account creating a group session. The connect service <NUM> can transfer ownership of the connect state to the host management service <NUM>. For example, the connect service <NUM> stores the playback state from the host device in the connect data store <NUM>. This state is transferred to the host management service <NUM> when the host member initiates a group session. This state acts as the initial state for the group session. Accordingly, in these examples, the group session will not start with a blank state. In other embodiments, the group session starts with a blank state or a predefined group session state which is not the connect state from the host member.

Once a group session is created the connect service <NUM> is used to propagate the session state information to a member's cluster of devices. In some examples, the connect service <NUM> propagates the session state information to active devices. For example, if one member is active on a smart phone for control and is listening to the audio output on a smart speaker the connect service <NUM> will send updated state information to the smart phone and smart speaker.

In some embodiments, the one or more devices associated with a member's account and playing the media content is not static and changes during the group session. In these embodiments, a member may start the playback session on one device but switch the playback to another device. For example, a member may start the session with playback on their smart phone and switches the playback to a smart speaker. In other examples, a user may add multiple devices performing the playback. In the pervious example, a user may have playback on their smart phone and add playback on a smart speaker. The connect service <NUM> manages a member's devices to facilitate sending updated session states to the active devices for each member.

illustrates an example method <NUM> for creating a group session. In some examples, the method <NUM> runs on the cloud host server <NUM> as shown in <FIG>. The method <NUM> can be implemented as part of the cloud host application <NUM>. The method <NUM> includes the operations <NUM>, <NUM>, <NUM>, and <NUM>.

The operation <NUM> receives a request to create a session. In some embodiments, the cloud host application will check if the user account is already a member of a group session. If the user account is a member of a group session the operation the operation <NUM> sends a message to the user's device asking if the user would like to join the current group session or create a new session. In other embodiments, the operation <NUM> may automatically send a session state to the user's device which will update the playback state on that device to the group session state. If the user account which sent the request to create a session is not a member of a group session the method <NUM> will continue to the operation <NUM>.

The operation <NUM> creates a group session. In some examples, creating a group session includes generating a group session ID which the user account can share with other users. The group session ID allows other users to discover and join the group session. In some embodiments, creating a group session further allows the user creating the session to make other rules, permissions, and configurations to the group session.

The operation <NUM> stores the user account as session administrator. In some embodiments, the user account creating the group session is added as a host member for the group session. The host member can promote other members to the host member role. For example, when the host member wants to leave the group session the host member can select another member to promote to the host role. In other embodiments, the user account creating the group session is added as administrator member to the session. The administrator member can add other users to have administrator member permissions.

In some embodiments creating a group session is complete after the operation <NUM> and the cloud host application will wait to receive a command from a group session member selecting and playing a media content item. For example, the group session starts with a blank group session state and a member of the session must make selections of one or more media content items to start playback. In other embodiments, creating a session state further includes transferring the initial group session state from the playback state from the media playback device which is creating the group session. In these embodiments, creating a croup session further includes the operation <NUM>.

The operation <NUM> stores the user account playback state, or connect state, as the session state. The playback state on the media content device which is creating the group session is received by the cloud host application. For example, the playback state on the media content device may include a current media content item and a timestamp of when the song started. The playback state may also include other state information like a queue of next songs, a current album, and a current playlist. Once the playback state is received it is stored as the group session state. Other members are then able to receive this group session state when they join the group session.

<FIG> is a schematic illustration of an example group session system <NUM>. As shown, the example group session system <NUM> illustrates the process for starting a group session. The system <NUM> includes an administrator media playback device <NUM>, a network <NUM>, a cloud host interface <NUM>, a session control service <NUM>, a session data store <NUM> a host management service <NUM>, a host management data store <NUM>, and a timer service <NUM>.

In this example, creating and starting a group session starts with the administrator media playback device <NUM> sending a create session request with an initial group session state to the cloud host server <NUM> via the network <NUM>. In some examples, the request and initial state are received by the cloud host interface <NUM> which directs the request and initial state to the session control service <NUM>.

The session control service <NUM> creates the session and adds the user account associated with the administrator media playback device <NUM> as an admin member of the session. The session control service <NUM> stores the session and the members of the session, including the admin member, in the session data store <NUM>. The session data store <NUM> keeps track of what user accounts are in specific sessions and access and control permissions for group sessions. In other embodiments the create session request is sent to the host management service <NUM>. However, in the typical embodiment, the create session request is directed to the session control service <NUM> and after the session is created communications with the cloud host server <NUM> are directed to the host management service <NUM>.

The session control service <NUM> sends a create session request to the host management service <NUM> with the initial group session state. The host management service stores the initial state in the host management data store <NUM>. The host management data store <NUM> stores the session state and connected devices.

In accordance with the present invention as defined by the appended claims, the host management service <NUM> schedules an end of media content event using the timer service <NUM>. The timer service <NUM> schedules a call back at the scheduled time. The callback is sent to the host management service <NUM> to update the group session state. In some examples, the timer service may schedule an event with a cloud task service. In other examples, the timer service, performs the timer task.

<FIG> illustrates an example method <NUM>, illustrated as a communication diagram, for creating a group session. The method <NUM> as illustrated includes an administrator account device <NUM>, a connect service <NUM>, a session control service <NUM>, a host management service <NUM>, a player service <NUM>, and a timer service <NUM>. The method <NUM> is another example of the method <NUM> illustrated in <FIG>. The connect service <NUM>, session control service <NUM>, host management service <NUM>, player service <NUM>, and timer service <NUM> operate as illustrated and described in <FIG>.

In the example shown, an administrator account sends a request to retrieve a current group session, if one exists, or create a new group session. The request is routed to the session control service <NUM> which checks if the session exists. In the example shown, a group session does not exist. Next, the session control service <NUM> gets a cluster from the connect service for the account associated with the administrator account device <NUM>. In some examples, the cluster is used to transfer the connect state for the account. The session control service <NUM> sends a request to create a session with an initial state to the host management service <NUM>. The host management service <NUM> sends the initial state to the player service <NUM> to transfer control of the state to the host management service <NUM>. The host management service <NUM> converts the player state associated with the administrator account to a session state and stores the session state. At this step a group session is created and the host management service <NUM> can schedule a next media content item event with the timer service <NUM>.

<FIG> illustrates an example method <NUM> for joining a group session. In some examples, the method <NUM> runs on the cloud host server <NUM> as shown in <FIG>. The method <NUM> can be implemented as part of the cloud host application <NUM>. The method <NUM> includes the operations <NUM>, <NUM>, <NUM>, and <NUM>.

The operation <NUM> receives a request to join a group session from a media playback device associated with a user account. In some examples, the operation <NUM> determines whether the user account is able to join the group session. In some examples, the group session may require some verification before the user is allowed to join the group session. Other examples, the service checks if the user account contains a relationship with an administrator members account. In other examples, users may only access the group session if they have access to the group session ID and no further verification is required.

In some examples, the operation <NUM> provides options to the user of different group session experiences. One experience includes listening to the group session on each of the member user's devices. For example, the user may want to join a group session with one or more other users located in different locations. Another experience includes listening to the group session with playback on the host device. For example, the user may be in the same location as a host who wants to share media content playback control with the joining user while the actual playback is only on the host device.

The operation <NUM> stores the requesting user account as a member of the session. Typically, the user account is stored with a list of members in a session data store. The operation <NUM> may store the user account in different roles. Examples of roles include host role, guest role, administrator role, etc. The different roles can have different levels of permission. For example, a group session can be configured to only allow administrator role users to modify the media content items.

The operation <NUM> connects the requesting device to the group session. In some examples, the operation <NUM> takes ownership of the device's playback state to the group session. In these examples, the devices state is updated by the group session state to match the sessions state. In some examples, a member uses a connect service to cluster devices. In these examples, the member has a connect state. When joining a group session, the connect state ownership is transferred to the group session. Accordingly, the connect state is updated when the session state is updated.

The operation <NUM> transfers the session state to the device joining the group session. Typically, the operation <NUM> includes transferring the group session state to the new user's device. In some examples, the device will modify its media content output and display to match the group session state. In other examples, based on a selected experience, the device will not output media content, but the display will match the group session state. The display matching the group session state allows the user to provide inputs which send commands for controlling the group session.

<FIG> is a schematic illustration of an example group session system <NUM>. As shown, the example group session system <NUM> illustrates the process for joining a group session. The system <NUM> includes a participant media playback device <NUM>, a network <NUM>, a cloud host server <NUM>. The example cloud host server <NUM> includes a cloud host interface <NUM>, a session control service <NUM>, a session data store <NUM>, a host management service <NUM>, a host management data store <NUM>, a connect service <NUM>, and a connect data store <NUM>.

In this example system <NUM>, the participant media playback device <NUM> sends a request to join a session to the cloud host server <NUM> over the network <NUM>. The request is routed to the session control service <NUM> via a cloud host interface <NUM>. The session control service <NUM> adds an account associated with the participant media playback device <NUM> to a list of members of the group session. The list of members is stored in the session data store <NUM>. The session control service <NUM> sends a request to join a group session to the host management service <NUM>. The host management service <NUM> sends a request to the connect service <NUM> to take ownership of the accounts connect state which is saved in the connect data store <NUM>. The host management service <NUM> requests the session state stored in the host management data store <NUM> and sends the session state to the participant media playback device <NUM> via the connect service <NUM> and the network <NUM>. In other examples, a host or administrator device joins a group session using the same process as the participant media playback device <NUM>.

<FIG> illustrates an example method <NUM>, illustrated as a communication diagram, for joining a group session. The method <NUM> as illustrated includes an administrator account device <NUM>, a connect service <NUM>, a session control service <NUM>, a host management service <NUM>, a player service <NUM>, and a timer service <NUM>. The method <NUM> is another example of the method <NUM> illustrated in <FIG>. In some examples, the method <NUM> is a continuation of the method <NUM> as the administrator account device <NUM> joins the session after creating the session.

In this example, session control service <NUM> notifies the host management service <NUM> to connect the user account as an administrator account for the group session. The session control service <NUM> stores the account as an administrator member. The host management service <NUM> fetches the current session state. Next, the host management service <NUM> sends a request to the connect service <NUM> to take ownership of the connect state for administrator account devices. In some examples, the host management service <NUM> will request a cluster of devices associated with the administrator account from the connect service <NUM>. This allows the host management service <NUM> to send session updates to the active playback devices for the different members in the session. The host management service <NUM> propagates session state information by sending a session state data package to the connect service <NUM> with will propagate the session state data package to devices in the administrator account's cluster.

<FIG> illustrates an example method <NUM>, illustrated as a communication diagram, for joining a group session. The method <NUM>, as illustrated, includes a participant account device <NUM>, a connect service <NUM>, a session control service <NUM>, a host management service <NUM>, a player service <NUM>, and a timer service <NUM>. The method <NUM> is another example of the method <NUM> illustrated in <FIG> and the method <NUM> illustrated in <FIG>.

In this example, the participant account device <NUM> sends a request to join a session to the session control service <NUM>. The session control service <NUM> requests the connect state, including active devices associated with the user account from the connect service <NUM>. The session control service <NUM> sends a join session command to the host management service <NUM>. The host management service <NUM> fetches the current session state (in some examples, from a host management data store) and sends the session state to the connect service <NUM> which updates the cluster of active devices by sending a session state data package.

<FIG> illustrates an example method <NUM> for updating a session state based on a command. In some examples, the method <NUM> runs on the cloud host server <NUM> as shown in <FIG>. The method <NUM> can be implemented as part of the cloud host application <NUM>. The method <NUM> includes the operations <NUM>, <NUM>, <NUM>, <NUM>, <NUM>, and <NUM>.

The operation <NUM> receives a command from a device associated with a member of the group session. Examples of commands include, skipping a media content item, selecting a new media content item, tracking forward to backwards in a media content item, adding a song to a queue, etc..

The operation <NUM> validates the member that sent the command. In some group session configurations only administrator members can update the session state. In these examples, the operation <NUM> looks up whether the member has permission to update the session with the command. Other levels and configurations of account access are also possible.

The operation <NUM> applies the command to the session state. For example, if a member skips a song the session state is updated to the next song in the queue. In another example, if a member skips <NUM> seconds ahead in a media content item, the session state is updated to reflect the updated time in the media content item.

The operation <NUM> cancels previously scheduled callbacks. In some examples, a command makes a previously scheduled callback invalid. For example, if a current song is two minutes then a callback is scheduled at the end of the song. When a command is received which skips the current song the callback is no longer valid, and the operation will cancel this callback. In other examples, callbacks are not canceled, and the host management service will contain logic to filter out callbacks receive which are not valid. Other commands do not invalidate a scheduled call back. For example, adding a song to a queue does not impact a scheduled callback.

The operation <NUM> schedules a new callback based on the session state. In the example where a user skips a song, the operation <NUM> will schedule a new end of song call back based on the duration of the new song. Some commands do not require scheduling a new call back, for example, adding a new song to a queue.

The operation <NUM> sends the update session state to each group session members devices. In some examples, a session state data package is constructed based on the updated session and this package is sent to all active devices in the group session.

<FIG> is a schematic illustration of an example group session system <NUM>. As shown, the example group session system <NUM> illustrates the process for sending a command to update a group session. The system <NUM> includes an administrator media playback device <NUM>, a network <NUM>, a cloud host interface <NUM>, a session control service <NUM>, a session data store <NUM>, a host management service <NUM>, a host management data store <NUM>, a connect service <NUM>, a connect data store <NUM>, a timer service <NUM>, and a player service <NUM>.

In this example the administrator media playback device <NUM> sends a command to the cloud host server <NUM> via the network <NUM>. The command is routed to the host management service <NUM> via the cloud host interface <NUM>. The host management service <NUM> asks the session control service <NUM> whether the member account associated with the device which sent the command has permission make the command. The session control service <NUM> checks the members permission stored in the session data store <NUM>. If the member account has permission the host management service sends the command to the player service <NUM> which updates the session state based on the command. The host management service <NUM> cancels previously scheduled callbacks (e.g. end of song event callbacks) and schedules new callbacks based on the updated session state with the timer service <NUM>. Next the host management service <NUM> sends the updated session state to all device via the connect service <NUM>. The connect service <NUM> operates with the connect data store <NUM> to manage the members connected devices and send the updated state to all active member devices via the network <NUM>.

<FIG> illustrates an example method <NUM>, illustrated as a communication diagram, for sending a command in a group session. The method <NUM>, as illustrated, includes an administrator account device <NUM>, a connect service <NUM>, a session control service <NUM>, a host management service <NUM>, a player service <NUM>, and a timer service <NUM>. The method <NUM> is another example of the method <NUM> illustrated in <FIG>.

In this example, the administrator account device <NUM> sends a command to skip to the next song. The command is sent to the host management service <NUM>. The host management service <NUM> checks if the command is valid with the session control service <NUM>. The session control service <NUM> checks if the account which sent the command has the correct permissions. Next, the host management service <NUM> fetches the current session state. The host management service sends the command and the current sessions state to the player service <NUM> which updates the session state based on the command. The host management service stores the updated state and schedules a next song event with the timer service <NUM>. In some examples, the next song event is scheduled based on the length of the song. The timer service <NUM> notifies the host management service <NUM> when the scheduled time correlating to the length of the song has passed. The host management service <NUM> sends the updated state to all active member devices (including the administrator account device <NUM>) using the connect service <NUM>.

<FIG> illustrates an example method <NUM>, illustrated as a communication diagram, for progressing to a next song in a group session. The method <NUM>, as illustrated, includes an participant account device <NUM>, a connect service <NUM>, a session control service <NUM>, a host management service <NUM>, a player service <NUM>, and a timer service <NUM>. The method <NUM> is another example of the method <NUM> illustrated in <FIG>.

In this example, the participant account device <NUM> progresses to a dummy track. In some examples, the dummy track is a blank track which does not produce audio output. In some examples, while the dummy track is active a message is presented to the user informing the user that the playback is waiting for the group session to progress. The dummy track is used to ensure that the various member devices remain synced. For example, if a media content item on one media playback device is completed before other devices in the social listening session, the dummy track is made active until the session state sends an update to play a next media content item. In some examples, the session state is implemented to always track a small amount of time behind the member devices. In this implementation, each member device will play a dummy track until the session state sends an update with the next media content item. The purpose of the session state tracking a small amount of time behind every member device is to ensure the session state does not progress to the next session state before a device has completed the current media content item. In some examples, the session state is updated in a manner that the dummy track isn't noticeable to a user. In further examples, a dummy track is not used, and each member device automatically plays a next media content item.

In this example, the timer service <NUM> sends a scheduled callback to the host management service <NUM> informing the host management service <NUM> that it is time to update the session state to the next song. In some examples, the host management service <NUM> checks if the scheduled call back is still valid. The host management service <NUM> sends a next song command to the player service <NUM>. The player service <NUM> returns an updated session state. The host management service <NUM> stores the updated state and sends the updated state to the connect service <NUM>. The connect service <NUM> propagates the updated state to all active member devices including participant account device <NUM>.

<FIG> illustrates an example method <NUM>, illustrated as a communication diagram, for leaving a group session. The method <NUM>, as illustrated, includes an participant account device, a connect service <NUM>, a session control service <NUM>, a host management service <NUM>, a player service <NUM>, and a timer service <NUM>.

In this example, the participant account device <NUM> sends a request to leave the group session to the session control service <NUM>, the session control service <NUM> sends the disconnect user command to the host management service <NUM>. The host management service <NUM> sends a command to the connect service <NUM> to return ownership of the connect service from the host management service <NUM> to the participant account device <NUM>.

The host management service <NUM> sends a user disconnected message to the session control service <NUM>. This notifies the session control service <NUM> that the participant account can be removed from the member list for the group session. After removing the participant account from the member list, the session control service <NUM> sends a message to the participant account device <NUM> that the participant has successfully left the group session.

In some examples, after or before a host member leaves a session a new member will be promoted to the host role. In some embodiments, the session control service <NUM> will manage the member roles to select a new host. In other examples, the current host will select the next host before leaving a session. In other examples, a member will request to become a host either before or after the current host leaves.

<FIG> illustrates an example method <NUM>, illustrated as a communication diagram, for sending a volume command in a group session. The method <NUM>, as illustrated, includes a participant account device <NUM>, an administrator account device <NUM>, a connect service <NUM>, a session control service <NUM>, and a host management service <NUM>.

In many embodiments, volume commands are not valid for a group session. For example, a group session is often configured to prevent members in different locations from changing the volume. Similarly, a group session can be configured to only allow a single host, or sometimes one or more administrator members, to change the volume for the group session.

In some embodiments, volume commands are handled differently because the volume commands do not necessarily require modifying the session state. In these examples a volume command modifies an audio output setting on one or more connected devices. Accordingly, the command is propagated to one or more target devices but does not update the session state. Typically, the session control service <NUM> is used to determine which devices are target devices based on the configuration of the group session.

In this example, the participant account device <NUM> sends a volume command to the connect service <NUM>. The connect service sends the command to the host management service <NUM> which validates the command with the session control service <NUM>. The host management service <NUM> sends the volume command to the administrator account device <NUM>. In other examples, it may send the command to multiple devices. The administrator account device <NUM> updates the volume based on the command. In some examples, the administrator account device <NUM> updates other active devices belonging to the administrator account cluster using the connect service <NUM>. Once the volume is updated, the host management service <NUM> propagates the new volume value to all active member devices via the connect service <NUM>.

As used herein, the term "engine" is applied to describe a specific structure for performing specific associated functions, such as a special purpose computer as programmed to perform algorithms (e.g., processes) disclosed herein. The engine can take any of a variety of structural forms, including: instructions executable to perform algorithms to achieve a desired result, one or more processors (e.g., virtual or physical processors) executing instructions to perform algorithms to achieve a desired result, or one or more devices operating to perform algorithms to achieve a desired result.

Claim 1:
A method of simultaneously playing media content (<NUM>) on a plurality of media playback devices (<NUM>) for a group session, the method comprising:
storing session state data for the group session at a cloud host server (<NUM>; <NUM>), the session state data including a media content identifier for a media content item (<NUM>) of the group session and a corresponding end time of the media content item;
storing a list of members (<NUM>) of the group session at the cloud host server (<NUM>; <NUM>), wherein each member is associated with one of the media playback devices (<NUM>); and
generating and sending a session state data package including at least some of the session state data from the cloud host server (<NUM>; <NUM>) to the media playback devices (<NUM>) associated with the members of the group session, wherein the session state data package is usable by the media playback devices to play the media content item (<NUM>) of the group session;
wherein the generating of the session state data package comprises:
a cloud host application (<NUM>) of the cloud host server (<NUM>; <NUM>) scheduling a callback at said end time of the media content item, including sending a callback from a timer service (<NUM>) of the cloud host application to a host management service (<NUM>) of the cloud host application to update the session state of the group session.