Techniques for efficient communication during video collaboration sessions
By using incremental updates of collaborative state data and lightweight drawing instructions, the video collaboration service addresses bandwidth constraints, enabling efficient and cost-effective annotation communication and review in video collaboration sessions.
Patent Information
- Application Number
- JP2023552575
- Authority / Receiving Office
- JP · JP
- Patent Type
- Patents
- Current Assignee / Owner
- Priority Date
- 2021-06-30
- Filing Date
- 2022-02-11
- Publication Date
- 2025-04-14
- Estimated Expiration
- 2042-02-11
AI Technical Summary
Existing video collaboration services face challenges in efficiently communicating additional data, such as drawing annotations, between client devices without compromising the quality of shared video/audio data, due to bandwidth constraints.
The video collaboration service maintains collaborative state data and sends incremental updates to client devices, allowing for efficient communication of annotations by using lightweight drawing instructions instead of large image data, and persisting these instructions for future display.
This approach enables cost-effective and bandwidth-efficient communication of annotations between client devices, allowing for real-time collaboration without adversely affecting video quality, and facilitates review of session data by regenerating annotations from stored instructions.
Smart Images

Figure 0007661516000001 
Figure 0007661516000002 
Figure 0007661516000003
Abstract
Description
[Technical field]
[0001] The present disclosure relates to collaborative viewing of streaming video data, and more particularly, to a video collaboration service that facilitates communication between client devices participating in a video collaboration session via client interfaces displayed on the client devices. [Background technology]
[0002] Video production typically requires multiple collaborators on a given video project, e.g., directors, producers, cast, crew, lighting experts, artists, computer animators, etc. It would be very useful for multiple collaborators to collaboratively watch and comment on the same video at the same time.
[0003] One way to achieve collaborative video review is to gather all collaborators in the same location to view and discuss the video in person. However, given the current global nature of video production, not all teams are comprised of members who are easily accessible in the same geographic location. Furthermore, it can be difficult to record the details of such in-person meetings for future review, including all comment information from collaborators and the portions of the video to which the comments relate.
[0004] Another way to achieve collaborative video review that does not require collaborators to be in the same location is through networked computing systems that provide video collaboration services. Such video collaboration services allow users to collectively view video data and comment on the video data using client interfaces running on their individual client devices. Some video collaboration services allow users to share video data based on screen sharing, where one of the collaborators plays a video on a client device and shares the screen with other collaborators via the video collaboration service. Other video collaboration services stream video data to the various client devices that are part of the collaboration.
[0005] In a video collaboration service, there are various ways for collaborators to share information about the video data of interest. For example, some video collaboration services allow collaboration client devices to share communication streams that can be recorded, and also allow collaborators to record comments on the video data.
[0006] Because sharing video / audio data requires significant network bandwidth, it is difficult to communicate additional data between collaborating client devices without adversely affecting the quality of the shared video / audio data. For example, image data for rendering annotations generated for video data can be large and costly to transmit. The systems and methods disclosed herein address this and other challenges.
[0007] The approaches described in the sections above are approaches that could be pursued, but not necessarily approaches that have been previously conceived or pursued. Thus, unless expressly indicated, there should be no assumption that the approaches described in this section qualify as prior art, or that they are well understood, routine or conventional by virtue of their inclusion in this section. [Brief description of the drawings]
[0008] The drawings show:
[0009] [Figure 1] 1 illustrates an example network configuration for efficient communication between client devices during a video collaboration session.
[0010] [Diagram 2] 1 illustrates an exemplary graphical user interface for a client application of a video collaboration service.
[0011] [Diagram 3] 1 shows a flowchart for distributing information for drawing annotations to video collaboration session participants.
[0012] [Figure 4] 1 illustrates an example graphical user interface with example drawing annotations on a video data frame.
[0013] [Diagram 5] 1 illustrates an example graphical user interface having a coexistence indicator.
[0014] [Figure 6] 1 shows a flow chart for detecting and enforcing a freeze condition of a current video timestamp in collaborative state data maintained for a video collaboration session.
[0015] [Figure 7A] , [Figure 7B] 1 illustrates an example graphical user interface with an example drawing annotation and an example visual video freeze indicator.
[0016] [Figure 8] 1 illustrates an exemplary content management system.
[0017] [Figure 9] 1 illustrates an example computing device capable of implementing the techniques described herein.
[0018] [Figure 10] 1 illustrates an example visual annotation for a video frame. DETAILED DESCRIPTION OF THE PREFERRED EMBODIMENTS
[0019] In the following description, for purposes of explanation, numerous specific details are set forth in order to provide a thorough understanding of the technology described herein. It will be apparent, however, that the technology described herein may be practiced without these specific details. In other instances, well-known structures and devices are shown in block diagram form in order to avoid unnecessarily obscuring the described technology. 1. General Overview
[0020] Techniques are disclosed for enabling users of different client devices to participate in a collaborative video review for a video collaboration session maintained by a video collaboration service based on joint state data. Specifically, the video collaboration service maintains the joint state data for the video collaboration session and provides at least a portion of the joint state data to each client device participating in the session. The video collaboration service facilitates efficient communication between the client devices participating in the video collaboration session by sending incremental updates of the joint state data for the session to the client devices.
[0021] The joint state data for a video collaboration session may identify video data for that session, a current frame number or current video timestamp that identifies the synchronously viewed (or current) frame for the video data being jointly viewed for that session, and one or more types of annotations provided by client devices participating in the session, including information for one or more of general text comments, frame-specific text comments, frame-specific drawing annotations, and multi-frame drawing annotations.
[0022] Annotations related to the video data of a session generated by users participating in the session may be provided to the video collaboration service via a client application running on a participating client device. Specifically, the client application running on the client device causes the video data to be displayed on a display device, and a user of the client device may provide one or more annotations for the video data via the client application. For example, a user uses a drawing tool of the client application on a particular client device to generate a drawing annotation on a current frame displayed by the client application. The client application sends computer-readable instructions to the video collaboration service for regenerating the drawing annotation. The video collaboration service distributes the drawing instructions to other client devices participating in the video collaboration session. According to some embodiments, the client device stores the drawing instructions in a local version of the joint state data. Using the drawing instructions, the client application of the client device is configured to regenerate the drawing annotation on an associated video frame displayed on the client device.
[0023] The joint state data communicated to the client devices for a given session may further include copresence data that increases the efficiency of communication between participants in the session. This reduces the cognitive burden on the participants and improves the human-computer interface for collaborative video review systems. Some or all of this copresence data may also be persisted in the session data recorded for the session. Copresence data may include cursor positions of participating client devices, identification of "invisible" actions performed on participating client devices (e.g., mouse overs of Graphical User Interface (GUI) controls), information about actions that affect the joint state of the session (e.g., activation of video playback controls), and the like. The copresence data received by participating client devices may be rendered in the GUI of the client application in a number of ways, such as as an icon associated with a GUI control, as a visual indication associated with a GUI control, as a user identifier displayed in association with a GUI control, as a user identifier displayed in association with a video frame, and the like.
[0024] Information from the joint state data maintained for a given video collaboration session, including some or all of the participant annotations (including drawing indicators) received during the session, may be persisted in session data including information from the joint state data for that session. The persisted session data may be used to efficiently display the participant annotations along with the video data after the session is completed, such as during review of the session. The session data includes event timeline data for the session, and the saved participant annotations are associated with timestamps in the event timeline data.
[0025] Participant annotations stored in the session data may be reviewed in conjunction with the associated video data, independent of the stored event timeline. During review, drawing instructions contained in the session data are used to regenerate (replay) the drawing annotations made during the session.
[0026] The timing of the execution of drawing instructions can be implemented in a variety of ways. According to some embodiments, all relevant drawing instructions in the session data with a given video frame are automatically executed upon loading of the video frame. According to some embodiments, the drawing instructions associated with a given video frame are executed in the order of the instructions originally received during the session as indicated by the event timeline data stored in the session data. For example, during session review, each instruction is executed sequentially with a fixed delay between executing each instruction. According to another embodiment, the drawing instructions associated with a given video frame are executed at a relative time indicated by the event timeline data stored in the session data. Thus, the drawing timing of annotations executed during session review reflects the drawing timing of annotations executed during the original session. This embodiment facilitates the review of session data associated with video or audio data generated during the session.
[0027] Additionally, additional drawing annotations for video data associated with a completed session may be generated outside of the session. Such additional drawing annotations may be displayed along with the session drawing annotations without requiring additional processing of the session data. For example, drawing instructions for the additional drawing annotations may be added to persistent session data or may be (a) combined with the original session data upon review of the session, or (b) stored in auxiliary session data that is reviewed separately from the original session data. If drawing instructions for the additional drawing are included in the stored session data of a previous session, the additional drawing may be visually tagged as an out-of-session drawing.
[0028] Because the client devices store the participant annotations in a local joint state data store, the client devices are able to display the received participant annotations without using network bandwidth (other than receiving an initial joint state data update from the video collaboration service that indicates the participant annotations that did not originate from the client device). Furthermore, communication of drawing annotations between participating client devices is relatively inexpensive because the drawing annotations are regenerated (as needed) based on lightweight drawing instructions rather than using large image data. Also, the drawing instructions may be persisted for future display using much smaller storage space than would be required to store the image data that depicts the drawing annotation. Furthermore, adding drawing annotations after a session is completed is inexpensive because, like drawing annotations generated during a session, the additional drawing annotations are regenerated from drawing instructions that are very inexpensive to store and transmit over a network. 2. Example Client Application
[0029] FIG. 1 illustrates an example of a network arrangement 100 for efficient communication between client devices during a video collaboration session. According to some embodiments, a video collaboration service 112 executing on an exemplary server device 110 in the network arrangement 100 receives a request to set up a video collaboration session based on one or more videos, i.e., video data for the session. In response to the request, the VCS 112 establishes a video collaboration session based on joint state data identifying the video data for the session. Users can join the established session via client applications 132A-N on client devices 130A-N. (For ease of explanation, when the general functionality of the client devices is described, each client device is referred to as a client device 130, each client application is referred to as a client application 132, and each local joint state data store (described in more detail below) is referred to as joint state data 134.) According to some embodiments, the client application 132 is a standalone application executing on the client device 130. According to another embodiment, the client application 132 is executed via a browser of the client device 130.
[0030] According to some embodiments, the client application 132 is implemented by a client object that wraps a WebSocket connection and tracks the joint state data 134. For playback, the client application 132 keeps a local copy of the joint state data 134 that is initialized as undefined. When the client application 132 joins a particular session, the client application receives video playback messages from the VCS 112 and updates its local copy of the joint state data 134, as described in more detail below.
[0031] 2 illustrates an exemplary GUI 200 for a client application 132 displayed on a display device for a client device 130. The GUI 200 is used to illustrate, but not limit, the embodiments described herein. The exemplary GUI 200 includes a video viewing area 210, a participant area 220, a comment area 230, a post comment area 240, and a visual annotation area 250. 2.1. Video Viewing Area
[0032] According to some embodiments, the VCS 112 streams the video data of the session over the network 120 to each participating client device 130A-E. Each client device 130 displays the video via a client application 132. For example, a video viewing area 210 displays the video data being streamed in connection with the video collaboration session. The video viewing area 210 further includes video playback controls 212, including a play / pause control, a single frame rewind control, a single frame fast forward control, a 10 second rewind control, and a 10 second fast forward control. The video viewing area 210 also includes a progress timestamp 214 that displays the current timestamp of the viewed video data and the length of the video data. The video viewing area 210 further includes a progress bar 216 having a current timestamp control device 216A that can be moved (e.g., click and drag control 216A) along the progress bar 216 such that the timestamp of the displayed portion of the current video data corresponds to the position of the current timestamp control device 216A along the progress bar 216. 2.2. Participant Area
[0033] The participant area 220 of the GUI 200 includes an indicator 222 of the number of client devices participating in the video collaboration session (e.g., five client devices 130A-E). The participant area 220 further includes a toggle control 224 that controls whether the client application 132 is in a synchronous mode (as described in more detail below). For purposes of illustration, when the toggle control 224 is toggled to the “on” position, the client application 132 is in a synchronous mode, and when the toggle control 224 is toggled to the “off” position, the client application 132 is in an asynchronous mode.
[0034] Participant area 220 further includes a user identifier token 226 that identifies a user participating in the video collaboration session, for example, via client devices 130A-E. User identifier token 226 may include a user identifier or may show an image or icon associated with the identified user. In the example of FIG. 2, user AE is identified by token 226 as having been authenticated with VCS 112 via client applications 132A-E on client devices 130A-E and participating in the video collaboration session. A user may participate in the video collaboration session as an unauthenticated guest, in which case token 226 representing an unauthenticated user does not reflect a user identifier. 2.3. Comments Area
[0035] The comment area 230 includes a comment input text box 232 in which a user can type a comment annotation onto the video data. The comment area 230 further includes a post control 234 that, when activated, causes the text in the comment input text box 232, along with the current timestamp of the video displayed in the area 210 and the user's identifier (if available), to be saved in the local collaborative state data 134 and sent to the VCS 112 as an annotation on the video data. The VCS 112 includes the posted comment annotation in the collaborative state data maintained by the VCS 112 and causes the local version of the collaborative state data 134 to be updated to reflect the posted comment annotation. 2.4. Post Comment Area and Visual Annotation Area
[0036] The post comments area 240 displays comment annotations included in the joint state data 134 along with a video timestamp associated with the comment annotation. Similarly, the visual annotation area 250 displays visual annotations where instructions are included in the joint state data 134 along with a video timestamp associated with the visual annotation. The annotations may further be represented with a user identifier and / or an indication of the type of annotation (e.g., “text”, “freehand drawing”, “sticker”, “shape”, “emoji”, etc.). According to some embodiments, the type of annotation or other information included in the post comments area 240 and / or visual annotation area 250 for a particular annotation may be based on metadata for the annotation provided by the user (e.g., the title, type, or a portion of the comment text, etc.).
[0037] Thus, as the VCS 112 updates the collaborative state data 134 with additional comment annotations and drawing annotations from other participating devices, these annotations are automatically reflected in the posted comments area 240 and the visual annotation area 250. According to some embodiments, the posted comments area 240 and the visual annotation area 250 continue to be updated based on the collaborative state data 134 while the client application 132 is in either a synchronous or asynchronous mode. According to some embodiments, the representations of the annotations included in the posted comments area 240 and the visual annotation area 250 are video playback controls whose activation causes the video playback to jump to the timestamp associated with the activated annotation representation.
[0038] According to some embodiments, annotation displays displayed in the post comments area 240 and the visual annotation area 250 are hyperlinked such that clicking on the annotation display (or activating a control associated therewith) causes the VCS 112 to receive video playback instructions to move playback to the video frame associated with the annotation display. According to some embodiments, the video playback instructions further cause playback to automatically pause on the annotated frame. Additionally, the progress bar 216 may be associated with visual identifiers of the annotated frames. Each of these visual identifiers includes a control whose activation causes the VCS 112 to receive similar video playback instructions to skip to the associated annotated frame and pause playback. 3. Distribution of annotations and coexistence data
[0039] As described above, the VCS 112 enables video collaboration session participants to generate drawing annotations for the video data of the session, for example, to be displayed in the viewing area 210, and to share the drawing annotations with other participants in the session. The drawing annotations may be displayed to other session participants in real time, which allows other participants to view the drawing as it is being generated, or may be sent based on an explicit instruction from a user. Figure 3 illustrates a flowchart 300 for distributing information for drawing annotations to client applications for video collaboration session participants according to embodiments described herein. 3.1. Creating and Joining a Video Collaboration Session
[0040] Specifically, in step 302, video data is streamed to a plurality of client devices, where the video data represents a plurality of video frames. For example, the VCS 112 establishes a particular video collaboration session by initializing joint state data for the session with an identifier of the particular video data, e.g., a current video timestamp of 00:00:00. The client applications 132A-E of the client devices 130A-E join the particular session by downloading the joint state data for the session from the VCS 112. After the client applications 132A-E join the session, the VCS 112 causes the particular video data for the session to be streamed over the network 120 to each of the participating client devices 130A-E. Each client device 130 displays the video, e.g., in the viewing area 210 of the GUI 200, via the client application 132.
[0041] For example, the VCS 112 receives a request to create a video collaboration session for a particular video data. In response to receiving the request, the VCS 112 creates a new session as described above and provides a uniform resource locator (URL) associated with the new session in response to the request. Activation of the URL retrieves a web page from the VCS 112 over the network 120. Loading the web page into a browser application running on the client device 130 executes the client application 132, which downloads joint state data 134 for the session associated with the URL and causes the GUI 200 to be displayed as a user interface to the client application 132. In this example, the provided URL is activated on each client device 130A-E to retrieve and load the web page into the browser application running on each client device. Thus, each of the client devices 130A-E stores a local version of the joint state data 134A-E for the established session.
[0042] According to some embodiments, the joint state data 134 and / or session data (e.g., session data 142, 144, described in more detail below) are managed by a content management system. In such embodiments, the content management system facilitates communication of the joint state data 134 between the client devices 130, as described in more detail below. The VCS 112 may be implemented as part of or interface with the content management system for purposes of managing the joint state data 134 and / or session data. 3.2. Video playback message
[0043] Video playback messages are used to synchronize video playback between client applications that are part of a particular session. For example, a message containing a video playback command includes the current frame (e.g., the frame of the video data at which the playback command was initiated) and the playback speed (e.g., a positive speed for forward movement and a negative speed for backward movement, e.g., 1.0 for normal speed play, 10.0 for fast forward, 0.0 for pause, and -10.0 for rewind). According to some embodiments, such a message further includes a timestamp representing the current date / time recorded at the originating client device marking the time the action was initiated. Such a timestamp may be used to allow the receiving client application 132 to "skip" to account for the time it takes for messages to be communicated between client devices.
[0044] Client application 132 sends a video play message to VCS 112 whenever the playback state changes locally at the client application, such as while the client application is in a synchronous mode, as described in more detail below. Specifically, when the user takes an action that triggers a video playback event, such as play, pause, seek, or rate change, client application 132 calculates the current frame and playback speed and updates local joint state data 134. According to some embodiments, client application 132 sends a video play message to VCS 112 reflecting a video playback command if the current frame and playback speed values change or if the video has been played for longer than a single frame duration (if the command is to seek to the start position after the video has been played).
[0045] Upon receiving such a play video message from a client application 132, VCS 112 sends a corresponding play video message to all other client applications 132. According to some embodiments, VCS 112 also echoes the play video message back to the client application 132 that originally sent the message.
[0046] According to some embodiments, when sending a video play message for an action performed locally on a client application, the client application keeps a count of the pending changes sent. According to some embodiments, when receiving a video play message from the VCS 112 that originated on another client application, the client application 132 ignores the received video play message if the local count of pending changes is >0. However, if the video play message originates from a local client application (i.e., echo), the client application 132 decrements the pending changes count. If the pending changes count is already zero, the client application 132 updates the joint state data 134 and initiates the onPlayback protocol. Since the VCS 112 is guaranteed to send messages in the order in which they were received, it is safe to ignore remote video play messages after a client application has issued one or more video play messages. Thus, if the client application 132 receives a remote originated message before the local originated message is echoed back, the received remote originated message is stale and out of date.
[0047] Additionally, video play messages may be sent by VCS 112 to client application 132 when a client application newly joins a session, i.e., to inform the newly joined client application of the current video play operation for the session. To facilitate these initial video play instructions, the video play instructions received from client application 132 may be persisted, for example, in session data 142, which serves as a data store from which VCS 112 retrieves initial video play instructions as needed.
[0048] According to some embodiments, when client application 132 receives the initial video play message, client application 132 updates joint state data 134 to reflect the information in the initial message and initiates the onPlayback protocol, which is described in more detail below. ONPLAYBACK Protocol
[0049] Client application 132 implements the onPlayback protocol, which causes client application 132 to update the remotePlaybackState shared state variable in joint state data 134. Client application 132 uses this state to control the playback of the video data. Thus, whenever client application 132 sees a change in remotePlaybackState, client application 132 does the following: Disable the player event handler (so that remote changes do not trigger another broadcast). · Uses the frame number and frame rate of the video to calculate the correct player time. If the new state indicates a playback mode of video data, the client application 132 sets the currentTime of the local player and then plays the video. If the new state indicates a pause mode for the video data, the client application 132 pauses the local player and then sets the currentTime. The client application 132 then re-enables the player event handlers. 3.4. Synchronous and Asynchronous Modes
[0050] According to some embodiments, client application 132 may be in synchronous or asynchronous mode, for example, based on a user's preference or based on a mode assigned by a session master. When client application 132 is in synchronous mode, the application controls video playback in synchronization with the session data, i.e., based on collaboration state data 134 that synchronizes the video playback of the client application in a video collaboration session operating in synchronous mode. When client application 132 is in asynchronous mode, the application controls video playback based on activation of controls in GUI 200, regardless of collaboration state data 134, which allows control of video playback independent of the video collaboration session.
[0051] Thus, in general, when the client application 132 is in synchronous mode, activation of video playback controls, such as the playback control 212 and the current timestamp control 216A, causes the client application 132 to send video playback instructions to the VCS 112, which (generally) updates the local joint state data 134 stored in all participating client devices based on the video playback instructions. Video playback instructions are instructions that affect the playback of video data, such as instructions resulting from activation of the control 212, including play, rewind, fast forward, pause, and skip. There are some instances (e.g., when there is an active freeze condition, described in more detail below, or when the client application 132 does not have permission to control the collaborative video playback), in which case activation of a playback control does not cause the VCS 112 to update the joint state data in synchronous mode. When the client application 132 is in synchronous mode, the application plays streaming video data in the viewing area 210 based on the joint state data 134, e.g., the client application 132, and the streamed video is displayed at the current video timestamp indicated in the joint state data 134. Thus, while the video data is streamed to the participating client devices 130A-E individually, all participating client devices operating in synchronous mode display the same portion of the video data simultaneously.
[0052] According to some embodiments, a plurality of distinct video files are associated with a session, and the joint state data maintained for the session identifies all of the distinct video files. In this embodiment, the joint state data further identifies a particular one of the distinct video files as a current video file for the session. A client application in a synchronous display mode displays the video identified as the current video file for the session.
[0053] In the asynchronous mode, the client application 132 does not control video playback based on the joint state data 134, but instead controls video playback based on activation of a control in the client application's GUI 200. According to some embodiments, annotations generated while the client application 132 is in the asynchronous mode are sent to the VCS 112 according to an embodiment described in more detail below. However, drawing annotations generated while the client application 132 is in the asynchronous mode are not displayed in real time on other participating client devices (as described in more detail below). Furthermore, in the asynchronous mode, the client application 132 continues to update the joint state data 134 based on operations performed on the participating client devices that are communicated to the VCS 112. According to some embodiments, the GUI 200 includes a control that allows a user to switch between synchronous and asynchronous modes. When a user activates the control to enter the synchronous mode, video playback on the user's client device is controlled by the joint state, as described herein. When a user activates a control to enter asynchronous mode, client application 132 continues the current video playback operations (e.g., play, pause, rewind, fast forward, etc.) from the synchronous state. However, while client application 132 is in asynchronous mode, any video playback instructions generated at the client only affect that client's video playback, as described herein.
[0054] According to some embodiments, VCS 112 records play instructions received from client applications that are in synchronous mode in the joint state data for the session. These recorded play instructions can be associated with timestamps in an event timeline, which facilitates review of the session data, as described in more detail below. 3.5. Input Cursor Coexistence
[0055] According to some embodiments, VCS 112 displays, via GUI 200 of participating client devices 130A-E, position indicators of input cursors controlled by other participating client devices that are within an active coexistence area of GUI 200, including one or more of areas 210-250. According to some embodiments, the active area of GUI 200 includes at least area 210.
[0056] According to some embodiments, in addition to displaying a position indicator of an input cursor controlled by a particular client device, the VCS 112 also causes the client application 132 to display one or more auxiliary position indicators for one or more additional position-based activities performed at the particular client device. For example, in addition to the input cursor, a user at a particular client device 130 provides information for an auxiliary position input, such as a stylus position or touch screen activation position within an active area of the GUI 200. In this example, the VCS 112 causes the other client device 130 to display both a first position indicator of the input cursor of the particular client device 130 and a second position indicator of the auxiliary position input from the particular client device 130. The second position indicator can have one or more common visual elements to indicate that the first and second position indicators originate from the same client device. Any number of position indicators can originate from a particular client device 130. In such an embodiment, the cursor data further includes data for one or more auxiliary position inputs.
[0057] Returning to the description of the flowchart 300, at step 304, real-time cursor data is received from each of one or more of the multiple client devices. This real-time cursor data indicates the position of an input cursor controlled by each client device within a graphical user interface, which includes a viewing area of the video data. For example, the VCS 112 receives cursor data in real time from one or more of the client devices 130A-E indicating the position of an input cursor controlled by each client device within an active area of the GUI 200. According to some embodiments, the cursor data further includes one or more of pressure, speed, angle, tool type, etc., which may be used to adjust the depiction of the cursor. Furthermore, such cursor metadata may be used to convey a visual representation of an action being performed via the cursor, such as a drawing annotation being generated. For example, the pressure associated with a user's cursor generating a freehand drawing is used to select a line weight for the drawing, where light pressure generates thin lines and heavy pressure generates thick lines.
[0058] According to some embodiments, the cursor data includes XY coordinates indicating the position of the cursor within the active area. For example, if multiple areas of the GUI 200 are included in the active area, the specific cursor position data includes an area identifier and XY coordinates relative to the indicated area. As another example, if the active area of the GUI 200 is applicable to a single system of XY coordinates, the specific cursor position data includes XY coordinates without an area identifier. As yet another example, the specific cursor position data includes cursor movement data indicating direction and distance, which can be used to calculate the current position of the cursor based on a known position.
[0059] For example, point 260 in area 210 is considered to be at XY coordinate "0,0," and point 262 in area 210 is considered to be at XY coordinate "1,1." In this example, the position of an input cursor located within area 210 is determined relative to points 260 and 262.
[0060] To illustrate, user A of client device 130A, who has been authenticated with client application 132A, moves an input cursor into an active area (e.g., viewing area 210) of GUI 200. Accordingly, client application 132A sends cursor data to VCS 112 that identifies the current position of the input cursor as "0.26, 0.53," i.e., for points 260 and 262 in area 210. Similarly, VCS 112 receives cursor data from client application 132D, who has authenticated user D and identified the current cursor position as "0.83, 0.28," and VCS 112 receives further cursor data from client application 132E, who has authenticated user E, identifying the current cursor position as "0.79, 0.75."
[0061] At step 306 of the flowchart 300, the real-time cursor data received from the other client devices of the plurality of client devices is transmitted in real time to each client device of the plurality of client devices, and each client device is configured to display, within a graphical user interface displayed by each client device, a visual representation of an input cursor controlled by the other client devices at each position indicated in the real-time cursor data. For example, the VCS 112 transmits to each client device 130A-E, in real time, the cursor data not received from the client device, together with information identifying the source of each cursor position data (e.g., a user identifier, a cursor identifier, a client device identifier, etc.). Real-time data is data received within a specified (relatively short) generation time. According to some embodiments, cursor data is real-time data when the data is received by the VCS 112 and distributed to other participating client devices within a threshold time, e.g., 100 milliseconds.
[0062] Based on the received cursor data, each client device 130 displays a representation of the input cursor being controlled at the other participating client devices. For example, GUI 200 of FIG. 2 is displayed at client device 130B. Client application 132B receives the cursor data from VCS 112 and, according to some embodiments, updates joint state data 134B to reflect the cursor data. Based on the cursor data, client application 132B displays input cursor representations 218A, 218D, and 218E, which are position indicators that indicate the position indicated in the received cursor data.
[0063] In the example of FIG. 2, representations of the input cursors of users B and C (authenticated in client applications 132B and 132C, respectively) are not displayed in GUI 200 on any of the participating client devices 130A-E either because the client application 132 is in stealth mode or the input cursor is not within the active area of GUI 200.
[0064] According to some embodiments, an input cursor controlled by a particular user may not be visible to other client applications participating in the same session because the client application 132 is in stealth mode, whereby the input cursor is not visible to other participants in the video collaboration session, even if it is within the active area of the GUI 200. Stealth mode is selected by the user, for example, in an options menu of the GUI 200, or imposed on the user by the master of the session. For example, during stealth mode, no cursor data is sent to the VCS 112 by the client application 132, or coordinate data may be received at the VCS 112 from the client application 132 during stealth mode, and based on the application in stealth mode, the VCS 112 does not distribute the cursor data to other participating client applications (as described in more detail below).
[0065] According to some embodiments, one or more visual aspects of the representation of the cursor displayed in GUI 200 identify the source of the cursor data. For example, each cursor representation may be displayed with information identifying the source of the cursor, such as an avatar or other photo, a username, the user's initials, etc. As another example, each cursor may be depicted at least partially having a particular color that is unique among the displayed cursor representations, where the color may be in the entire cursor representation or in a portion of the cursor, or the color may be associated with data identifying the source of the cursor. For example, the identifying color may be behind the text associated with the cursor, the color of some or all of the text associated with the cursor, show an outline of the text associated with the cursor, show an outline of an image associated with the cursor. The color may be assigned by the session master, selected by the user, or automatically assigned by VCS 112. According to some embodiments, the user may change the assigned color via a menu in GUI 200, by middle or right clicking within GUI 200, or with keyboard input (such as a dedicated function button or a combination of buttons used to change the cursor color). According to some embodiments, the user can select a color from colors not used to identify other participants, or the user can be automatically assigned a different color not already used to identify other participants.
[0066] According to some embodiments, the active area of the GUI 200 includes areas other than the area 210, such as one or both of the post comment area 240 and / or the visual annotation area 250. In this example, the VCS 112 causes location indicators to be displayed for the input cursor and / or other location-based activity in these other areas that are part of the active area of the GUI 200. Additionally, the VCS 112 can propagate activities performed in one or more areas other than the area 210 between the client devices 130. For example, the VCS 112 can reflect in the joint state data 134 actions in these areas (e.g., expanding / collapsing a list, activating a control, highlighting a particular annotation expression, etc.) that are used to perform these actions in the GUI 200 displayed on the other client devices 130. 3.6. Creating Drawing Annotations
[0067] According to some embodiments, VCS 112 enables a user to create drawing annotations on frames of streamed video data and includes information for the drawing annotations in the joint state data recorded for the session. For example, when the video data is paused on a particular frame, the user can click and drag across area 210, which causes a line to be drawn on the displayed frame where the user drags the cursor.
[0068] Other drawing tools may also be utilized by the user. For example, FIG. 10 illustrates a GUI 200 with exemplary visual annotations for a video frame, according to some embodiments. Specifically, FIG. 10 illustrates a sticker 1002, an emoji 1004, and a shape 1010 applied to the current frame displayed in the GUI 200. FIG. 10 further illustrates an emoji / sticker / shape control bar 1006 with controls for applying emojis, shapes, and / or stickers to the current frame. The shapes may be any geometric shape, may be any size, color, or line weight, and may be filled in any manner. The emojis, stickers, and / or shapes may be generally associated with a given frame, or may be associated with a particular location on the frame, as described herein for drawing annotations. The exemplary visual annotations herein may be managed (e.g., with respect to communication between client devices, tracking, recording in joint session data 134 and / or session data 142 / 144, freezing conditions, etc.), as described herein for drawing annotations.
[0069] Additionally, the progress bar 216 includes an emoji / sticker / shape indicator 1008 that marks a timestamp at which an emoji, shape, and / or sticker was applied to a frame of the video data. The indicator 1008 may also mark a timestamp of one or more other types of annotations, such as comments and / or drawing annotations. According to some embodiments, the visual representation of each of the indicators 1008 reflects one or more characteristics of the represented annotation. In the example of FIG. 10, each indicator 1008 is an example of an emoji / sticker / shape applied to a frame. The emoji / sticker / shape used as the visual representation of the indicator 1008 may be selected in any manner, for example, based on the most applied emoji to a frame, the first applied emoji / sticker / shape to a frame, etc. Aspects of the distinct visual representation of the indicator 1008 may correspond to different types of annotation data. Additionally, the visual representation of the indicator may include an identifier of a user who generated the represented annotation, or a collection of users who generated annotations on the frame. According to some embodiments, selecting one of the indicators 1008 generates a video control command that causes the video data to jump to the timestamp marked by the selected indicator.
[0070] According to some embodiments, the look and feel of a drawing annotation is specific to the user who generated the annotation. For example, the color of the drawing may correspond to the color in which an input cursor for the user appears in GUI 200. As another example, one or more other aspects of the drawing may be specific to the user generating the drawing, such as line style (solid, dashed, halftone, dashed pattern, halftone pattern, double line, etc.), line weight, etc. As yet another example, a drawing annotation may be displayed in visual association with information identifying the origin of the annotation, such as a user name, a picture, a symbol, the user's initials, etc.
[0071] When operating in a synchronous mode, users can only generate drawing annotations when the video is paused according to the joint state data 134. However, when operating in an asynchronous mode, users can individually pause the video data and generate drawing annotations on the current video frame of each individual client application. According to some embodiments, information of the drawing annotations is sent to the VCS 112 and stored in the local joint state data 134 so that the drawing annotations can be deployed to other client devices. 3.7. Sharing Drawing Annotations
[0072] According to some embodiments, drawing annotations performed on a particular video frame are shared with other participating client devices. Sharing of drawing annotations may be performed explicitly or in real time, i.e., when a user generates the annotation. For example, as drawing annotations on a video frame are generated by a user at a particular client device 130A, one or more drawing instructions for regenerating the drawing annotations are provided from client application 132A to VCS 112. VCS 112 provides the drawing instructions to other participating client devices 130B-E. Client application 132 is configured to draw drawing annotations on the video frame based on the drawing instructions when it receives the instructions. Thus, when the instructions are issued in real time by VCS 112, all participants in the session can see the generated drawings. Furthermore, the transmission of drawing instructions requires very little bandwidth, which conserves resources of network arrangement 100.
[0073] Returning to the description of flowchart 300 of Figure 3, at step 308, one or more drawing instructions are received from a particular client device of the plurality of client devices, where the one or more drawing instructions are for regenerating a particular drawing annotation performed on a particular frame of the plurality of video frames at the particular client device. For example, VCS 112 receives a plurality of drawing instructions from client application 132A for regenerating drawing annotations generated by user A via GUI 200 displayed on client device 130A.
[0074] 4 illustrates GUI 200 with an example drawing annotation 402 on the current video frame being displayed in video viewing area 210. While drawing annotation 402 is being generated, client application 132A generates multiple drawing instructions to regenerate the drawing annotation. To illustrate in the context of a freeform line, when client application 132A detects a click-and-drag event across area 210 indicating a line creation, client application 132A periodically records the coordinates of the input cursor position until there is a button release event indicating the end of the current line creation. Client application 132A generates drawing instructions based on each recorded coordinate and sends each drawing instruction to VCS 112 in real time.
[0075] For example, VCS 112 receives an example drawing command "start_drawing(user_A, 0.36, 0.60)" from client application 132A at a first time during the illustrated session, where user_A identifies the source of the drawing command, such as an identifier for user A at client device 130A or an identifier for client device 130A. The command is generated by client application 132A in response to detecting the start of drawing at the indicated coordinates. Thus, the example drawing command indicates that a user of client device 130A has begun drawing annotation 402 on the current frame of video data displayed in area 210. Here, the starting position 402A of drawing annotation 402 is at coordinates 0.36, 0.60.
[0076] At a second time during the session (after the first time), the VCS 112 receives a second example drawing command from the client application 132A, "drawing_segment(user_A, 0.45, 0.54)." According to some embodiments, this command is generated by the client application 132A based on periodic identification of the position of the input cursor while the drawing annotation 402 is being generated. Periodic generation of drawing commands based on the current state of the drawing annotation allows other participants in the session to view the drawing being generated. The example drawing command communicates that a line is to be drawn between the last coordinate sent (position 402A) and coordinates 0.45, 0.54 (position 402B). This second example command is a non-terminal or intermediate drawing command, providing additional information about the drawing without signaling drawing completion.
[0077] At a third time during the session (after the second time), the VCS 112 receives a third example drawing command from the client application 132A, "end_drawing(user_A, 0.43, 0.29)." This drawing command is an end drawing command indicating completion of the current drawing. The client application 132A generates this end command in response to detecting the end of the drawing annotation 402, for example, based on the user releasing a click-and-drag action at location 402C when the input cursor representation 218A is at location 402C (coordinates 0.43, 0.29). Additionally, the command in this example communicates that a line should be drawn between the last coordinate sent (location 402B) and location 402C.
[0078] According to some embodiments, a user who creates a particular annotation, such as drawing annotation 402, can associate metadata with the annotation. FIG. 4 illustrates a metadata control 408 visually associated with drawing annotation 402. Activation of the metadata control 408 causes GUI 200 to include a form having one or more text entry fields that allow for entry of metadata for the annotation, which may include a title, a type, an importance level, a text comment, a tag (e.g., a hashtag), a user identifier, a workstream identifier, a team identifier, and the like. This metadata is associated with the visual annotation and disseminated with the information of the visual annotation. According to one embodiment, the metadata associated with an annotation may be shown in a representation of the associated annotation, such as in area 210, area 240, area 250, and the like.
[0079] At step 310 of flowchart 300, one or more drawing instructions are sent to each client device of the plurality of client devices other than the particular client device, where each of the client devices is configured to draw a particular drawing annotation on a particular frame displayed at the respective client device based on the one or more drawing instructions. For example, VCS 112 sends the drawing instructions received from client application 132A to each of the other participating client devices 130B-E over network 120. According to some embodiments, VCS 112 further communicates a frame identifier of the video frame for which the drawing was generated.
[0080] Each client device 130 is configured to execute drawing instructions on the indicated video frame. If the indicated video frame is currently being displayed by a client application 132 (e.g., client application 132A is in synchronous mode when the drawing annotation is generated and receiving client application 132 is also in synchronous mode), the receiving client application executes the drawing instructions in real time, i.e., within a threshold time of receiving the drawing instruction. According to some embodiments, the receiving client application identifies the look and feel of the drawing annotation generated using the received drawing instruction based on the source identifier. According to another embodiment, VCS 112 sends information of the look and feel of the drawing annotation to the receiving client application, e.g., as part of the drawing instruction. For display, VCS 112 includes in each drawing instruction a color code indicating a color for the drawing annotation generated based on the drawing instruction.
[0081] According to some embodiments, drawing instructions may be received at VCS 112 from multiple participating client devices within the same time frame. For example, after receiving a first example drawing instruction, VCS 112 receives drawing instructions from client application 132E before receiving a second example drawing instruction from client application 132A. VCS 112 delivers the drawing instructions from client application 132E in real time, as described above with respect to the example drawing instructions from client application 132A. Client application 132 is configured to generate drawings from different sources at the same time as drawing instructions from multiple sources are received from VCS 112. 3.8. Explicit Sharing of Drawing Annotations
[0082] According to some embodiments, client application 132 may automatically send drawing instructions to VCS 112 as the drawing instructions are identified, e.g., in real-time, or client application 132 may send drawing instructions in response to detecting an explicit instruction to share the drawing instructions. Specifically, according to some embodiments, client application 132 provides an option, e.g., a drawing suppression mode, to generate drawing annotations without automatically sharing the drawings with other session client applications. While client application 132 is in drawing suppression mode, drawing annotations generated by the application may be generated only using local collaborative state data 134 (e.g., a “local” tag indicating that the drawing was not shared) and / or may be deleted without sharing the annotations.
[0083] Additionally, drawing annotations generated while client application 132 is in a drawing suppression mode may be modified until the user is satisfied, and then sent to VCS 112 for delivery of drawing instructions in response to an explicit share command in the client application. When a drawing annotation is explicitly shared, client application 132 either (a) sends drawing instructions generated during the drawing annotation generation process to VCS 112, including instructions for portions of the drawing that will not be included in the final drawing annotation, or (b) generates a set of drawing instructions that reflect the final drawing annotation and sends the generated set of drawing instructions to VCS 112.
[0084] 4, while client application 132A is in synchronous mode and in drawing suppression mode, drawing annotation 402 is generated on the current video frame displayed in GUI 200 of client application 132A. When user A is ready to share drawing annotation 402, either because the drawing annotation is fully prepared or because a discussion is being prepared for the drawing, user A uses a menu in GUI 200 or a dedicated function key / key combination to send a drawing command for the annotation to VCS 112.
[0085] VCS 112 receives the instructions to draw annotations 402 from client application 132A as a set, and automatically transmits the set of instructions to each of client devices 130B-E within a threshold time of receiving the set of instructions. The client application 132 at each participant client device displaying the shown video frame automatically uses the set of drawing instructions to generate drawing annotations 402 on the video frame, thereby enabling participants to see the drawing annotations 402 in real time and share the annotations upon explicit instructions from user A. 4. Video playback with drawing annotations
[0086] According to some embodiments, each client application 132 stores the received drawing instructions in local joint state data 134. The client application 132 uses the drawing instructions associated with the video frames in the local joint state data 134 to regenerate the drawing annotations for the displayed video frames. During a session, playback of the video data may include displaying the drawing annotations or excluding the drawing annotations. Based on a user's preferences, the VCS 112 may cause the video playback to skip all annotations or display one or more drawing annotations according to a selected display mode, as described in more detail below.
[0087] According to some embodiments, a user may identify one or more annotated video frames that display the annotations during playback, and the selection data is delivered to joint state data 134 maintained by the participating client devices. Such selection information may also be persisted in session data 142 for later review.
[0088] For example, the drawing annotation area 450 in the GUI 200 shown in Figure 4 includes annotation inclusion controls 404A and 404B, which, when set to the ON position, display drawing annotations in the associated video frame during playback. In the example area 450, annotation inclusion control 404A is set to the OFF position, and playback of the video data excludes drawing annotations on the associated video frame at time 00:00:10:06. However, annotation inclusion control 404B is set to the ON position, and playback of the video data excludes drawing annotations on the associated video frame at time 00:00:18:11 (i.e., the currently viewed video frame).
[0089] 4, control 404B is set to the ON position such that an additional display mode control 406 is available for the associated video frame. In this example, display mode control 406 is a drop-down box with a (hidden) list of options, of which "PAUSE" is selected. The available display modes may include options to display annotations on the video frame during normal speed playback, slow down on the indicated frame with a drawing annotation (including slowing down zero or more frames before and after the annotated frame), or pause on the associated frame with a drawing annotation (e.g., "PAUSE" option selected).
[0090] For example, during video playback based on the example drawing annotations display option selected in drawing annotations area 450 of Figure 4, client application 132 displays the video frame at timestamp 00:00:10:06 without displaying any drawing annotations on the frame. Further, when playback reaches the video frame at timestamp 00:00:18:11, client application 132 pauses playback and re-generates drawing annotations 402 in area 210 based on the drawing instructions stored in joint state data 134 associated with the video frame. 5. Shared state data held as session data
[0091] According to some embodiments, the VCS 112 maintains the joint session data generated during a particular session for future review, for example, as session data 142 in data storage device 140 of FIG. 1. For example, the joint session data generated by the VCS 112 is persisted based on a retention policy, which may be established by the session master, described in further detail below. The retention policy indicates what types of data from the generated joint session data are persisted in the session data 142. As illustrated, the retention policy may indicate one or more types of data to be persisted, such as an event timeline, drawings of annotation data, annotation data, annotation data from one or more sources, co-presence data (e.g., cursor data), video playback instructions, etc. If the retention policy indicates that the event timeline should be persisted, the instructions recorded in the session data 142 are associated with a timestamp indicating the original timing of the instructions during the recorded session. 5.1. Reviewing Session Data
[0092] Based on the session data 142, the recorded video collaboration session may be reviewed after the session is completed. For example, after the completion of the session persisted in the session data 142, the VCS 112 receives a request to review the session data 142 from the client device 130F. Accordingly, the VCS 112 provides the session data 142 to the client device 130F, which stores the session data as collaborative state data 134F. The client application 132F running on the client device 130F reviews the session using the collaborative state data 134F. The client application 132F may provide controls for session review, such as control over which drawing annotations to display, which display mode to use to display the annotations, whether and how to use the event timeline, etc.
[0093] The client application 132F can use the stored event timeline to cause instructions (including drawing instructions and / or playback instructions) to be executed in the order in which they were received or with timing that mirrors the original timing during a session. For example, the event timeline data can be used to regenerate drawing annotations during a session review based on the order of drawing instructions received. The drawing timing of instruction execution during a session review can include a certain amount of delay between drawing instruction executions or can mirror the timing of the original instructions as indicated by associated event timeline timestamps.
[0094] As a further example, client application 132F can cause playback instructions in joint state data 134F to be executed based on a stored event timeline, which facilitates review of the session in conjunction with audio and / or video generated by participant users during the session. According to some embodiments, when playback instructions are executed based on a stored event timeline, representations of input cursors from one or more of the session participants may also be displayed; i.e., based on cursor data associated with event timeline timestamps stored in joint state data 134F. According to some embodiments, GUI 200 includes controls to show / hide input cursor displays during session review. These controls enable selective display of cursor representations associated with particular users. 5.2. Adding Annotations After a Session is Completed
[0095] According to some embodiments, video annotations recorded for video data in session data 142 may be adjusted. Such adjustments include adding annotations to the session data (a) during session review or (b) during another session. For example, during session review in client application 132F, a user generates a comment annotation or a drawing annotation for a particular video frame. Thus, client application 132F sends information for the annotation to VCS 112. This annotation may be associated with an “out-of-session” tag or an identifier of user F authenticated in client application 132F. In future reviews of session data 142, the out-of-session annotation may be available, for example, in post comments area 240 or visual annotation area 250, and associated with a visual out-of-session identifier.
[0096] The new annotations are configured by VCS 112 into session data 142, or into second session data 144 in data store 140, either as a separate session that can be reviewed independently from session data 142, or as ancillary data to session data 142 that can be reviewed in conjunction with session data 142. According to some embodiments, session data 142 is modified to include a reference to session data 144.
[0097] To illustrate review of session data with out-of-context annotations, after generation of session data 144 with one or more out-of-session annotations, VCS 112 receives a request to review session data 142 from client device 130G. Thus, based on a reference to session data 144 in session data 142, VCS 112 provides session data 142 and session data 144 to client device 130G, which stores the session data as joint state data 134G. Client application 132G running on client device 130G uses joint state data 134G to review the session with the out-of-session annotations stored in joint state data 134G. For example, a particular frame of video data is associated with both drawing annotations from the original session and drawing annotations outside the session. When displaying a particular frame within area 210, client application 132G reproduces both the drawing annotations from the original session and the out-of-session drawing annotations within area 210, e.g., along with a visual “out-of-session” indicator associated with the out-of-session drawing annotations. 6. Additional Coexistence Contexts
[0098] During a discussion of video data, it is useful to know that a particular user is about to perform or has performed an action that affects the joint state of the session, such as video playback or annotation generation. Collaborative video sessions can become disruptive when multiple people are trying to express different ideas simultaneously. Information about session participant actions helps other participants have context for their own actions, which facilitates communication and smooth transitions during a collaboration session. These benefits reduce the time and computing resources required to complete a collaboration session. In addition, face-to-face meetings provide contextual clues to a person's actions that are not available in an online setting. Session context information provided throughout a video collaboration session can help session participants connect and allows participants to work together more easily.
[0099] Thus, according to some embodiments, the VCS 112 receives and emits copresence information for contextual events occurring during a video collaboration session, where a contextual event is an action performed by one or more session participants, such as interacting with a video playback control, interacting with an annotation control, joining or leaving a session, entering or leaving a particular mode (i.e., stealth mode, drawing suppression mode, synchronous mode, asynchronous mode), etc. Interactions with controls consist of any kind of interaction, such as activating a control, rolling over a control, clicking a control, typing into a text box control, requesting activation of a set of controls (e.g., drawing controls), etc. Upon receiving the copresence information describing a particular contextual event, the client application 132 is configured to display a visual copresence notification in the GUI 200 having information about the particular contextual event. According to some embodiments, the copresence information is also stored in the co-state data maintained for the session.
[0100] For illustrative purposes, VCS 112 receives user interaction information from a particular one of the client devices participating in the video collaboration session that reflects a user interaction with a graphical user interface displayed by the particular client device. For example, user B of client device 130B rolls over or activates one of the controls 212 in GUI 200 displayed on the client device. Client application 132B of client device 130B sends copresence information to VCS 112 describing this contextual event.
[0101] According to some embodiments, in response to receiving the user interaction information, VCS 112 is configured to display the user interaction information in real time at each client device of the plurality of client devices other than the particular client device, in a visual representation of the user interaction information. For example, VCS 112 transmits the received coexistence information to client devices 130A and 130C-E together with an identifier of the source of the coexistence information.
[0102] Client application 132 is configured to display visual indications of the contextual events reflected in the coexistence information. For display, upon receiving the coexistence information from VCS 112, client device 130A displays visual indications within GUI 200 that describe the contextual events. For example, FIG. 5 illustrates GUI 200 with a context message 502 that includes visual indications of the contextual events described in the received coexistence information.
[0103] As another example, a visual indication of a contextual event is associated with a control in GUI 200 that corresponds to the contextual event. A visual indication associated with a control in GUI 200 can include any change in the look and feel of the control, such as a color change, a size change, a line weight change, an outline color change, animation (e.g., blinking), a visual association with an icon, a visual association with a user identifier, etc. As shown in FIG. 5, a highlight 504 is applied to the playback control, which the client application 132 displays in response to receiving copresence information describing a contextual event of a user (user B) rolling over the playback control. As another example, a user identifier 506 is visually associated with the playback control upon receiving copresence information describing a contextual event of a user (user B) rolling over the playback control. Although the playback control is the subject of this example, any control in GUI 200 can be associated with a visual contextual event indication.
[0104] According to some embodiments, a user can suppress visual contextual event indications, such as by suppressing all visual indications, by suppressing visual indications based on the type of contextual event, by suppressing visual indications based on the user that initiated the contextual event, etc.
[0105] According to some embodiments, VCS 112 includes copresence information in recorded session data 142 for a video collaboration session. The copresence information recorded in session data 142 can be associated with event timeline timestamps such that a review of the session data includes visual context event indications that were displayed during the original session. 7. Video progress freeze conditions
[0106] It can be very disruptive for a first user to cause VCS 112 to move the video away from a particular frame while another user is performing a frame-specific interaction with client application 132, such as generating drawing annotations on a particular frame of video data. To address this issue, VCS 112, according to some embodiments, freezes the current video timestamp indicated in the session's joint state data in response to detecting a freeze condition based on real-time drawing updates received by VCS 112.
[0107] FIG. 6 illustrates a flowchart 600 for detecting and enforcing a freeze condition of a current video timestamp in joint state data maintained for a video collaboration session. Specifically, at step 602 of flowchart 600, video data is streamed simultaneously to multiple client devices based, at least in part, on joint state data including a current frame value identifying a currently displayed frame of multiple video frames of the video data. For example, VCS 112 receives a request for client devices 130A-E to join a particular video collaboration session established by VCS 112 (as described in detail above). VCS 112 provides each of client devices 130A-E with joint state data 134 for the requested session and a current video timestamp identifying a synchronously displayed (or current) frame for the video data. VCS 112 streams video data to each of client devices 130A-E, which, when in a synchronous mode, display the streamed video at the current video timestamp indicated in joint state data 134.
[0108] At step 604 of flowchart 600, real-time drawing data updates for drawing annotations performed on particular frames of the video frames at a particular client device are received from a particular client device, the real-time drawing data updates being received in real time over a particular period of time. For example, as shown in FIG 7A, VCS 112 receives drawing instructions to re-generate drawing annotations 702 generated by client application 132A running on client device 130A.
[0109] During the illustrated session, VCS 112 receives an example drawing command at a first time, "start_drawing(user_A, 0.36, 0.60)," where user_A is an identifier for the source of the drawing command, and coordinates 0.36, 0.60 identify location 702A. At a second time during the session (after the first time), VCS 112 receives a second example drawing command, "drawing_segment(user_A, 0.45, 0.54)," where coordinates 0.45, 0.54 identify location 702B. At a third time during the session (after the second time), VCS 112 receives a third example drawing command, "drawing_segment(user_A, 0.43, 0.29)," where coordinates 0.43, 0.29 identify location 702C. Note that none of the received drawing commands have finished drawing.
[0110] In step 606 of the flowchart 600, during a particular time period, each of the plurality of real-time drawing data updates is sent to each of the plurality of client devices other than the particular client device, and each client device is configured to display an updated version of the drawing annotation on the particular frame displayed on each client device during the particular time period and based on each of the plurality of real-time drawing data updates. For example, the VCS 112 sends a first example drawing command ("start_drawing(user_A, 0.36, 0.60)") to each of the client devices 130B-E that are participating client devices participating in the session other than the client device from which the command was sent, for a first time during the session. Similarly, the VCS 112 sends a second example drawing command ("drawing_segment(user_A, 0.45, 0.54)") to each of the client devices 130B-E for a second time during the session. Additionally, VCS 112 sends a third example drawing instruction ("drawing_segment(user_A, 0.43, 0.29)") to each of client devices 130B-E for a third time during the session. Using these received instructions, client application 132 can re-generate drawing annotation 702 generated by client application 132A.
[0111] According to some embodiments, these drawing instructions received at VCS 112 are also stored (in explicit association with the identifier of the frame in which the drawing annotation was generated) in the joint state data for the session. Thus, a participant client application that joins a session (receives the joint state data for the session) receives the stored drawing times and then receives a persisted drawing time to perform on the indicated frame.
[0112] At step 608 of the flowchart 600, a freeze condition is detected based on the multiple real-time rendering updates. A freeze condition is a condition that causes the VCS 112 to freeze the current frame of the joint state data. The freeze condition is "active" until the freeze condition is "released" or the freeze upper limit is no longer in effect. Freezing the current frame of the joint state data includes maintaining the current value of the current frame number or current video timestamp of the joint state data, thereby causing session participants in a synchronous mode to continue displaying the current frame indicated in the joint state data even if a synchronous video play command is received to the contrary. Freezing the current frame of the joint state data allows session participants operating in a synchronous mode to complete frame-specific operations before the synchronized current frame moves away from the frame to which the frame-specific operations are applied.
[0113] According to some embodiments, detection of a freeze condition may be implicitly indicated by VCS 112 detecting that a synchronous frame specific operation is being performed or may be imminent, such as receiving coexistence data indicating a contextual event describing an interaction with an annotation tool (e.g., a drawing tool or a comment tool in area 230) by a client application in synchronous mode within a threshold time of the current time. As another example, an implicit detection of a freeze condition may be when VCS 112 receives, from a client application in synchronous mode, (a) a drawing command to draw an annotation on the current video frame within a threshold time of the current time, or (b) does not receive a terminating drawing command indicating completion of the current drawing. Additionally, detection of a freeze condition may be explicit, such as receiving a request from a client application to impose a freeze condition.
[0114] To illustrate step 608, VCS 112 detects a freeze condition based on receiving one or more drawing commands from client application 132A for the current frame indicated in the joint state data without receiving an end drawing command. In the context of drawing annotation 702, the last drawing command received by VCS 112 was a medium type drawing command ("drawing_segment(user_A, 0.43, 0.29)"). Thus, VCS 112 detects an active freeze condition for the current frame of the joint state data.
[0115] To illustrate an explicitly detected freeze condition, Figure 7A shows GUI 200 displayed on client device 130C including freeze control 704A. User C activates freeze control 704A on client device 130C, based on which VCS 112 detects a freeze state caused by client device 130C. This freeze condition may exist in parallel with other detected freeze conditions (e.g., an implicit freeze condition caused by client device 130A based on drawing instructions to draw annotation 702).
[0116] At step 610 of flowchart 600, a current frame value at a particular frame in the joint state data is frozen based on the detected freeze condition. For example, in response to detecting an active freeze condition, VCS 112 freezes a current video timestamp or a current frame value in the joint state data of the current session. According to some embodiments, freezing the current frame value in the joint state data includes disabling video playback controls displayed on one or more of the multiple client devices at the particular frame.
[0117] According to another embodiment, freezing the current frame value in the joint state data includes ignoring video playback commands from participating client devices participating in the session at the particular frame until the freeze condition is lifted. In this embodiment, VCS 112 receives a video playback command to change the current frame value in the joint state data from a second client device (e.g., client device 130A) of the plurality of client devices other than the client device that caused the freeze condition. After receiving the video playback command, based at least in part on the detected freeze condition, VCS 112 maintains the current frame value in the joint state data and identifies the particular current frame being displayed synchronously from the video data. 7.1. Resolving the video progress freeze condition
[0118] An active freeze condition may not be in effect to unfreeze the current frame of joint state data. According to some embodiments, the freeze condition may be implicitly or explicitly lifted. For example, VCS 112 may detect the implicit lifting of a previously detected freeze condition based on determining the lapse of a threshold time since detecting the freeze condition or based on receiving the end of a drawing command from a client device whose drawing command caused the freeze condition.
[0119] For example, as shown in FIG. 7B, VCS 112 receives a further drawing command for drawing annotation 702. Specifically, in this example, VCS 112 receives a fourth example drawing command "end_drawing(user_A, 0.46, 0.22)" from client device 130A at a fourth time during the illustrated session (after the third time referenced in the example drawing above). This drawing command is, for example, an end command resulting from releasing the drawing mechanism of GUI 200 that ends the third drawing segment of drawing annotation 702 at location 702D (coordinates 0.46, 0.22). Upon receiving the end drawing command from client device 130A, VCS 112 detects an implicit release to the previously detected frozen state by drawing commands from the same client device.
[0120] Multiple freeze conditions may be active during the same time period. For example, drawing commands may be received from multiple client devices during the same period, and VCS 112 may detect a separate freeze condition for each of the multiple client devices based on the drawing commands from each client device. When multiple freeze conditions are active simultaneously, VCS 112 maintains a freeze on the current frame of the joint state data until all freeze conditions are released.
[0121] Further, VCS 112 can detect an explicit release of a previously detected freeze condition, for example, based on receiving an instruction to release the freeze condition. More specifically, an explicitly requested freeze condition requested by a particular client device can be released by an instruction to release the frame from the same client device. For example, a particular freeze condition is caused by an explicit freeze request from client application 132C. As shown in FIG. 7B, GUI 200 of client application 132C displays unfreeze control 704B because activation of freeze control 704A (in FIG. 7A) of client application 132C causes a currently active freeze state. Unfreeze control 704B can be activated, for example, by user C at client application 132C to explicitly release the freeze state caused by that client device. 7.2. Visual Video Freeze Indication
[0122] According to some embodiments, based on an active freeze condition, VCS 112 causes a visual video freeze indication to be displayed by one or more of the client devices of the plurality of client devices. The visual video freeze indication may be associated with one or more of the video playback controls in client application 132 in the synchronous mode and may provide a look and feel for the control that is distinct from a non-frozen look and feel. For example, based on one or more active freeze conditions, VCS 112 causes a video playback control 712 (shown in FIGS. 7A-7B ) to be displayed with an exemplary video freeze indication, the video playback control having a different look and feel than the exemplary control 212 displayed without the visual video freeze indication.
[0123] As another example, a visual video freeze indication can identify the source of one or more active freeze conditions. FIG. 7A includes a minimized freeze info control 706A. According to some embodiments, the minimized freeze info control 706A is a visual video freeze indication that is displayed in the GUI 200 at participating client devices in synchronous mode when there is an active freeze condition. Upon activation, the minimized freeze info control 706A expands to a maximized freeze info control 706B, which contains information about the user or client device that caused the one or more active freeze conditions. In this example, user A is currently drawing and user C has explicitly requested a video freeze. Activation of the maximized freeze info control 706B returns control to the minimized freeze info control 706A.
[0124] According to another embodiment, the visual video freeze indication may not be visually associated with the video playback controls. For example, in Fig. 7B, a contextual message 708 indicates that user C has an activated freeze control 704A. In this example, the contextual message 708 is displayed by the client application 132C that caused the freeze condition that is the topic of the visual video freeze indication. However, according to some embodiments, such a contextual message is displayed in a client application that did not cause the freeze condition that is the topic of the visual video freeze indication. 8. Session Master
[0125] One or more session masters may perform management functions for the session, such as setting session options, mediating freeze conditions, controlling mode options for session participants, and / or controlling the mode in which client applications function. According to some embodiments, a client device 130A-E or one or more user identifiers are identified as the session master in the joint state data of an established session. For example, the master of a particular session is the client device from which a request to initiate a session originates. Alternatively, the master of a particular session is identified based on a user identifier included in the request to initiate a session, or the like.
[0126] The session master for a particular session can grant or revoke permission to other participants in the session to perform actions such as adding annotations, controlling video playback, etc. Additionally, the session master can determine which participant annotations are persisted to session data 142 based on, for example, a user identifier, a user role, etc. Specifically, in addition to the session master role, participants in a session may be assigned roles such as "principal collaborator," "secondary collaborator," "observer," etc.
[0127] Additionally, the session master can determine whether a particular participant operates in a particular mode, such as stealth mode, asynchronous mode, or suppressed drawing mode, etc. Additionally, the session master can determine what type of coexistence data is communicated and / or represented by client applications participating in the session, whether a user can opt out of coexistence notification, and what type of coexistence data can persist in session data 142.
[0128] Additionally, the session master can control the look and feel of the drawing annotations, such as assigning specific colors to identify a particular user for input cursor display and / or drawing annotations and / or assigning specific colors to draw annotations, whether the user can select colors for effects rather than identification, whether a user identifier is displayed in association with the drawing annotations, what drawing tools are available for the session, etc.
[0129] According to some embodiments, permission from the session master is required for a session participant to perform one or more operations, such as an operation that affects video playback, adding annotations to the video data, or entering or exiting a particular mode (i.e., stealth mode, suppressed drawing mode, synchronous mode, asynchronous mode). For example, VCS 112 receives notification of an operation that requires permission from the session master and, in response, requests permission from the session master to follow the instructions. VCS 112 performs the operation (and performs other tasks of the operation, such as storing instructions in session data, sending coexistence information describing the operation, etc.) in response to receiving permission from the session master. If permission is denied, VCS 112 does not perform the operation and notifies the requesting client application 132 that permission was denied. Client application 132 is configured to display this information in GUI 200.
[0130] Additionally, a session master can cause one or more freeze conditions to be removed based on an explicit removal of a freeze condition or an implicit removal of a freeze condition. For example, a session master may have access to a list of active freeze conditions associated with an option to explicitly remove any of the active freeze conditions. As another example, a session master may have a master unfreeze control in its GUI 200 that removes all active freeze conditions. As yet another example, a session master may implicitly indicate that all active freeze conditions should be removed by activating one or more video playback controls 212. 9. Implementation of Computing Systems
[0131] 1 is a block diagram illustrating an example network arrangement 100 for efficient communication between client devices during a video collaboration session. The network arrangement 100 includes a server device 110 and client devices 130A-N communicatively coupled via a network 120. Embodiments are described herein with respect to the example network arrangement 100, but are not limited thereto. For example, embodiments may be implemented with a peer-to-peer system, and the functionality of the VCS 112 described herein may be implemented at the peer level.
[0132] The client devices 130A-N may be realized by any type of computing device capable of communicating with the server device 110 over the network 120. Examples of the client devices 130A-N include, without limitation, workstations, personal computers, laptop computers, personal digital assistants, tablet computers, cellular telephony devices such as smartphones, and any other type of computing device. In the network arrangement 100, each of the client devices 130A-N (also commonly referred to as client devices 130) is configured with a client application 132. Each of the client applications 132A-N may be implemented in a number of ways, including as a standalone application running on the client device 130, a plug-in to a browser running on the client device 130, a web page loaded into a browser running on the client device 130, etc. The client devices 130A-N may be configured with other mechanisms, processes, and functions depending on the particular implementation.
[0133] Network 120 may be implemented by any type of medium and / or mechanism that facilitates the exchange of information between client devices 130A-N and server device 110. Additionally, network 120 may facilitate the use of any type of communication protocol and may be secure or non-secure, depending on the requirements of a particular implementation.
[0134] Server device 110 may be implemented by any type of computing device capable of communicating with client devices 130A-N over network 120. In network arrangement 100, server device 110 is comprised of VCS 112. Any of the functionality attributed to VCS 112 herein may, according to some embodiments, be performed by another entity operating on server device 110, or another entity on client device 130, or other device communicatively coupled to network 120 (not shown in FIG. 1 ). Server device 110 may be configured with other mechanisms, hardware, processes, and functionality, depending on the particular implementation.
[0135] Server device 110 is communicatively coupled to data storage device 140. Data store 140 holds information for session data 142 and session data 144. Data storage device 140 may reside (in whole or in part) on any type of storage device, including volatile and non-volatile storage devices (e.g., random access memory, removable or disk drives, main memory, etc.), and may be realized by one or more databases. The storage device on which data storage device 140 resides may be external or internal to server device 110. 10. Content Management System Examples
[0136] For implementing various embodiments of the disclosed technology, an exemplary system configuration 800 is shown in FIG. 8 in which electronic devices communicate over a network for the purpose of exchanging content and other data. The system may be configured for use on a wide area network such as that shown in FIG. 8. However, the present principles are applicable to a wide range of network configurations that facilitate intercommunication of electronic devices. For example, each component of the system 800 of FIG. 8 may be implemented in a localized or distributed manner in the network.
[0137] In system 800, end users can interact with a content management system 806 (e.g., an online synchronous content management system) via client devices 130A-N (collectively "130") connected to network 120 by direct and / or indirect communication. Content management system 806 can include a single computing device (e.g., a server) or multiple computing devices (e.g., multiple servers), which are configured to perform the functions and / or operations necessary to provide the services described herein.
[0138] The content management system 806 can support connections from a variety of different client devices, such as desktop computers, mobile computers, mobile communication devices, e.g., mobile phones, smartphones, tablets, smart televisions, set-top boxes, and / or any other network-enabled computing device.
[0139] Client devices 130 may be of various types, capabilities, operating systems, etc. Additionally, content management system 806 may accept connections from and interact with multiple client devices 130 simultaneously.
[0140] An end user can interact with the content management system 806 through a client-side application installed on the client device 130X, such as the client application 132. In some embodiments, the client-side application can include content management system specific configurations. For example, the components can be a standalone application, one or more application plug-ins, and / or a browser extension. However, the end user can also interact with the content management system 806 through a third party application, such as a web browser, that resides on the client device 130X and is configured to communicate with the content management system 806. In either case, the client-side application can present a user interface through which the end user interacts with the content management system 806. For example, the end user can interact with the content management system 806 through a client-side application integrated with a file system or through a web page displayed using a web browser application. Additionally, the client-side application can interact with the content management system 806 implicitly, as described above in connection with the joint state data 134.
[0141] The content management system 806 may enable applications or end users to store content items and perform various content management tasks such as searching, modifying, browsing, and / or sharing the content items. Additionally, the content management system 806 may enable end users or applications to access content from multiple client devices 130. For example, a client device 130X may upload content to the content management system 806 over the network 120 as described above. Later, the same client device 130X or some other client device 130Y may retrieve content from the content management system 806. For example, the retrieved content may be an update to the collaborative state data 134A.
[0142] To facilitate various content management services, end users may create accounts with the content management system 806. A user account database 850 may maintain the account information. The user account database 850 may store profile information for registered users. In some cases, the only personal information in a user profile may be a username and / or email address. However, the content management system 806 may also be configured to accept additional user information, such as birth date, address, billing information, etc.
[0143] The user account database 850 can include account management information such as account type (e.g., free or paid), usage information, (e.g., file editing history), maximum storage space allowed, storage space used, content storage location, security settings, personal configuration settings, content sharing data, etc. The account management module 824 can be configured to update and / or retrieve user account details in the user account database 850. The account management module 824 can be configured to interact with any number of other modules in the content management system 806.
[0144] An account can be used to store content items, such as digital data, documents, text files, audio files, video files, etc., from one or more client devices 130 authorized on the account. Content items can also include collections for grouping content items together with various behaviors, such as folders, playlists, albums, etc. For example, an account can include a public folder that any user can access. The public folder can be assigned a web-accessible address. The content of the public folder can be accessed using a link to the web-accessible address. In another example, an account can include a photo collection for photos, a photo collection that provides certain customized attributes and behaviors for photos, an audio collection that provides the ability to play audio files and perform other audio-related actions, or other special purpose collections. An account can also include shared or group collections that are linked to and available to multiple user accounts. Multiple users' permissions may differ in a shared collection.
[0145] The content items can be stored in a content storage device 860. The content storage device 860 can be a storage device, multiple storage devices, or a server. Alternatively, the content storage 860 can be a cloud storage provider or a network storage accessible via one or more communication networks. The content management system 806 can hide the complexities and details from the client device 130 so that the client device 130 does not need to know exactly where or how the content items are stored by the content management system 806. In an embodiment, the content management system 806 can store the content items in the same collection hierarchy as they appear on the client device 130X. However, the content management system 806 can store the content items in its own order, arrangement, or hierarchy. The content management system 806 can store the content items in a network accessible storage device, in a redundant array of independent disks, etc. The content storage device 860 can store the content items using one or more partition types, such as FAT, FAT32, NTFS, EXT2, EXT3, EXT4, HFS / HFS+, BTRFS, etc.
[0146] The content storage 860 may also store metadata describing the content item, the content item type, and the content item's relationships to various accounts, collections, or groups. The metadata for a content item may be stored as part of the content item or separately. In one variation, each content item stored on the content storage device 860 may be assigned a system-wide unique identifier.
[0147] The content storage device 860 can reduce the amount of storage space required by identifying duplicate content items or duplicate segments of content items. Instead of storing multiple copies, the content storage device 860 can store a single copy and then use pointers or other mechanisms to link the duplicates to the single copy. Similarly, the content storage device 860 can store content items more efficiently and provide the ability to undo actions by using content item version control to track changes to the content item, different versions of the content item (including branching version trees) and the change history. The change history can include a series of changes that, when applied to an original content item version, produce a modified content item version.
[0148] The content management system 806 can be configured to support automatic synchronization of content items from one or more client devices 130. The synchronization is platform independent; that is, content items can be synchronized across multiple client devices 130 of various types, capabilities, operating systems, etc. For example, a client device 130X can include client software that synchronizes content in the client device 130X's file system with content in an associated user account via a synchronization module 832 with the content management system 806. In some cases, the client software can synchronize any changes to the content of a specified collection and its subcollections, such as new, deleted, modified, copied, or moved content items or collections. The client software can be a separate software application, can integrate with an existing content management application in the operating system, or a combination thereof. In one example of client software that integrates with an existing content management application, an end user can directly manipulate content items in a local collection, while a background process monitors changes to the local collection and synchronizes those changes to the content management system 806. Conversely, a background process can identify content items that have been updated in the content management system 806 and synchronize those changes to the local collection. The client software can provide notification of synchronization operations and provide an indication of content status directly within the content management application. The client device 130X may not have an available network connection. In this scenario, the client software can monitor the linked collection for changes to content items and queue those changes for later synchronization to the content management system 806 when a network connection is available.Similarly, an end user can manually start, stop, pause, or resume synchronization with the content management system 806 .
[0149] An end user may view or manipulate content through a web interface generated and provided by the user interface module 822. For example, the end user may navigate in a web browser to a web address provided by the content management system 806. Changes or updates made to content in the content storage device 860 through the web interface, such as uploading a new version of a content item, may be propagated to other client devices 130 associated with the end user's account. For example, multiple client devices 130, each with its own client software, may be associated with a single account, and content items in the account may be synchronized among each of the multiple client devices 130.
[0150] The content management system 806 may include a communication interface 820 for interfacing with various client devices 130 and may interact with other content and / or service providers 809-1, 809-2, ..., 809-N (collectively "1009") via application program interfaces (APIs). Certain software applications may access the content storage device 860 on behalf of an end user via the API. For example, a software package such as an app running on a smartphone or tablet computing device may programmatically make calls directly to the content management system 806 when an end user provides credentials and reads, writes, creates, deletes, shares, or otherwise manipulates content. Similarly, the API may allow a user to access all or part of the content storage device 860 via a website.
[0151] The content management system 806 can also include an authentication module 826 that can validate user credentials, security tokens, API calls, specific client devices, etc. to ensure that only authorized clients and users can access content items. Additionally, the content management system 806 can include an analytics module 834 that can track and report aggregate file operations, user behavior, network usage, total storage space, and other technology, usage, or business metrics. Privacy and / or security policies can prevent unauthorized access to user data stored with the content management system 806.
[0152] The content management system 806 may include a sharing module 830 for managing the sharing of content publicly or privately. Sharing content publicly may include making a content item accessible from any computing device in network communication with the content management system 806. Sharing content privately may include linking a content item in the content storage device 860 with two or more user accounts such that each user account has access to the content item. Sharing may be performed in a platform-independent manner; that is, content may be shared across multiple client devices 130 of different types, capabilities, operating systems, etc. Content may also be shared between different types of user accounts.
[0153] In one embodiment, content management system 806 can be configured to maintain a content directory that identifies the location of each content item within content storage device 860. The content directory can include a unique content entry for each content item stored in the content storage.
[0154] A content entry can include a content path that can be used to identify the location of a content item within a content management system. For example, the content path can include the name of the content item and the folder hierarchy associated with the content item. For example, the content path can include the folder or folder path in which the content item is located and the name of the content item. The content management system 806 can use the content path to present the content item within the appropriate folder hierarchy.
[0155] A content item may also include a content pointer that identifies the location of the content item within content storage device 860. For example, the content pointer may include the exact storage address of the content item in memory. In some embodiments, the content pointer may point to multiple locations, each of which contains a portion of the content item.
[0156] In addition to the content path and content pointer, a content entry may also include a user account identifier that identifies a user account that has access to the content item. In some embodiments, multiple user account identifiers may be associated with a single content entry indicating that the content item has shared access by multiple user accounts.
[0157] To privately share a content item, the sharing module 830 can be configured to add a user account identifier to a content entry associated with the content item, thereby granting the added user account access to the content item. The sharing module 830 can also be configured to remove the user account identifier from the content item to restrict the user account's access to the content item.
[0158] To share content publicly, the sharing module 830 can be configured to generate a custom network address, such as a Uniform Resource Locator (URL), that allows any web browser to access the content in the content management system 806 without any authentication. To accomplish this, the sharing module 830 can be configured to include content identification data in the generated URL, which can later be used to properly identify and return the requested content item. For example, the sharing module 830 can be configured to include a user account identifier and a content path in the generated URL. Upon selection of the URL, the content identification data included in the URL can be sent to the content management system 806, and the received content identification data can be used to identify the appropriate content entry and return the content item associated with the content entry.
[0159] In addition to generating a URL, the sharing module 830 may also be configured to record that a URL to a content item has been generated. In some embodiments, the content item associated with the content item may include a URL flag that indicates whether a URL to the content item has been generated. For example, the URL flag may be a Boolean value that is initially set to 0 or false to indicate that a URL to the content item has not been generated. The sharing module 830 may be configured to change the value of the flag to 1 or true after generating a URL to the content item.
[0160] In an embodiment, the sharing module 830 can also be configured to deactivate the generated URL. For example, each content entry can also include a URL active flag that indicates whether the content should be returned in response to a request from the generated URL. For example, the sharing module 830 can be configured to only return the content item requested by the generated link if the URL active flag is set to 1 or true. In this manner, access to the content item for which the URL was generated can be restricted simply by changing the value of the URL active flag. This allows end users to restrict access to the shared content item without having to move the content item or delete the generated URL. Similarly, the sharing module 830 can reactivate the URL by changing the value of the URL active flag back to 1 or true. This allows end users to easily restore access to the content item without having to generate a new URL.
[0161] Although content management system 806 is shown with specific components, it should be understood by those skilled in the art that the architectural configuration of system 806 is merely one possible configuration and that other configurations having more or fewer components are possible. 11. Hardware Overview
[0162] A process, service, or application is comprised of a combination of software and an allocation of resources from a machine node. Specifically, a process, service, or application is a combination of an integrated software component and an allocation of computing resources, such as memory, a machine node (i.e., a computing device and / or memory accessible to a computing device), a sub-process on a machine node for executing the integrated software component on a processor, a combination of software and computing resources, e.g., dedicated to performing a specific function on behalf of one or more clients.
[0163] One or more of the functions attributed to any process described herein may be performed by any other logical entity, which may or may not be shown in Figure 1, according to one or more embodiments. In some embodiments, each of the techniques and / or functionality described herein may be performed automatically and implemented using one or more computer programs, other software elements, and / or digital logic in either a general-purpose or special-purpose computer, between memory, data retrieval, transformation, and storage operations, including interaction with and transformation of the physical state of a computer.
[0164] According to an embodiment, the techniques described herein are realized by one or more special-purpose computing devices. The special-purpose computing devices may be physically embedded to perform the techniques, or may include digital electronic devices such as one or more application-specific integrated circuits or field programmable gate arrays (FPGAs) that are permanently programmed to perform the techniques, or may include one or more general-purpose hardware processors that are programmed to perform the techniques according to program instructions in firmware, memory, other storage devices, or combinations. Such special-purpose computing devices may also combine custom hardwired logic, ASICs, or FPGAs with custom programming to achieve the techniques. The special-purpose computing devices may be desktop computer systems, portable computer systems, handheld devices, networking devices, or any other devices that are physically embedded and / or incorporate program logic to perform the techniques.
[0165] For example, Figure 9 is a block diagram illustrating a computer system 900 in which an embodiment of the invention may be implemented. Computer system 900 includes a bus 902 or other communication mechanism for communicating information, and a hardware processor 904 coupled with bus 902 for processing information. Hardware processor 904 may be, for example, a general-purpose microprocessor.
[0166] Computer system 900 also includes a main memory 906, such as a random access memory or other dynamic storage device, coupled to bus 902 for storing information and instructions executed by processor 904. Main memory 906 may also be used for storing temporary variables or other intermediate information during execution of instructions to be executed by processor 904. Such instructions, when stored in a non-transitory storage medium accessible to processor 904, render computer system 900 into a special-purpose machine customized to perform operations specified in the instructions.
[0167] Computer system 900 further includes a read-only memory 908 or other static storage device coupled to bus 902 for storing static information and instructions for processor 904. A storage device 910, such as a magnetic disk, optical disk, or solid state drive, is provided and coupled to bus 902 for storing information and instructions.
[0168] The computer system 900 may be coupled via bus 902 to a display 912, such as a cathode ray tube (CRT), for displaying information to a computer user. An input device 914, including alphanumeric and other keys, is coupled to bus 902 for communicating information and command selections to the processor 904. Another type of user input device is a cursor control device 916, such as a mouse, trackball, or cursor direction keys, for communicating directional information and command selections to the processor 904 and for controlling cursor movement on the display 912. This input device typically has two degrees of freedom, a first axis (e.g., x) and a second axis (e.g., y), which allows the device to specify a position in a plane.
[0169] The computer system 900 may implement the techniques described herein using customized hardwired logic, one or more ASICs or FPGAs, firmware and / or program logic that in combination with or in combination with the computer system to make the computer system 900 a special purpose machine. According to an embodiment, the techniques described herein are performed by the computer system 900 in response to the processor 904 executing one or more sequences of one or more instructions contained in the main memory 906. Such instructions may be read into the main memory 906 from another storage medium, such as the storage device 910. Execution of the sequences of instructions contained in the main memory 906 causes the processor 904 to perform the process steps described herein. In alternative embodiments, hardwired circuitry may be used in place of or in combination with software instructions.
[0170] The term "storage medium" as used herein means a non-transitory medium that stores data and / or instructions that cause a machine to operate in a particular manner. Such storage media can include non-volatile media and / or volatile media. Non-volatile media include, for example, optical disks, magnetic disks, or solid-state drives such as storage device 910. Volatile media include dynamic memory such as main memory 906. Common forms of storage media include, for example, floppy disks, flexible disks, hard disks, solid-state drives, magnetic tape or other magnetic data storage media, CD-ROMs, any other optical data storage media, any physical media with a pattern of holes, RAM, PROM, and EPROM, FLASH-EPROM, NVRAM, any other memory chip or cartridge.
[0171] Storage media is distinct from, but may be used in conjunction with, transmission media, which media involves transferring information between storage media. For example, transmission media include coaxial cables, copper wire and fiber optics, including the wires that comprise bus 902. Transmission media can also take the form of acoustic or light waves, such as those generated during radio wave or infrared data communications.
[0172] Various forms of media may be involved in carrying one or more sequences of one or more instructions to the processor 904 for execution. For example, the instructions may initially be carried on a magnetic disk or solid state drive of a remote computer. The remote computer can load the instructions into a dynamic memory and send the instructions over a telephone line using a modem. A modem local to the computer system 900 can receive the data on the telephone line and use an infrared transmitter to convert the data to an infrared signal. An infrared detector can receive the data carried in the infrared signal and appropriate circuitry can place the data on the bus 902. The bus 902 carries the data to the main memory 906, from which the processor 904 retrieves and executes the instructions. The instructions received by the main memory 906 may optionally be stored on a storage device 910 either before or after execution by the processor 904.
[0173] Computer system 900 also includes a communication interface 918 coupled to bus 902. The communication interface 918 provides a two-way data communication coupling to a network link 920 that is connected to a local network 922. For example, the communication interface 918 may be an integrated services digital network card, cable modem, satellite modem, or a modem to provide a data communication connection to a corresponding type of telephone line. As another example, the communication interface 918 may be a local area network card providing a data communication connection to a compatible LAN. A wireless link may also be implemented. In such an embodiment, the communication interface 918 sends and receives electrical, magnetic or optical signals that carry digital data streams representing various types of information.
[0174] The network link 920 typically provides data communication through one or more networks to other data devices. For example, the network link 920 may provide a connection through a local network 922 to a host computer 924 or to data equipment operated by an Internet Service Provider 926. The ISP 926 in turn provides data communication services through the worldwide packet data communication network now known as the "Internet" 928. Both the local network 922 and the Internet 928 use electrical, electromagnetic or optical signals that carry digital data streams. The signals through the various networks and on the network link 920 and through the communication interface 918, which carry the digital data to and from the computer system 900, are examples of transmission media.
[0175] Computer system 900 can send messages and receive data, including program code, through the network(s), network link 920 and communication interface 918. In the Internet example, a server 930 might transmit a requested code for an application program through Internet 928, ISP 926, local network 922 and communication interface 918.
[0176] The received code may be executed by processor 904 as it is received, and / or stored in storage device 910, or other non-volatile storage device for later execution. 12. Conclusion
[0177] Reference herein to "some embodiments" or "some embodiments" means that a particular feature, structure, or characteristic is described in association with and may be included in at least one embodiment of the invention. The appearances of the phrase "in some embodiments" in various places in the specification are not necessarily all referring to the same embodiment or embodiments, and are not necessarily mutually exclusive embodiments of separate or alternative embodiments of other embodiments.
[0178] Although some various figures show a number of logical steps in a particular order, steps that are not order dependent may be rearranged and other steps may be combined or divided. Although some rearrangements or other groupings are specifically mentioned, the order and groupings shown herein are not an exhaustive list of options.
[0179] In the foregoing detailed description and the appended claims, the terms first, second, etc. are some instances used herein to describe various elements, but these elements should not be limited by these terms. These terms are only used to distinguish one element from another element. For example, a first computing device is called a second computing device, and similarly, a second computing device is called a first computing device. Although the first computing device and the second computing device are both computing devices, they are not the same computing device.
[0180] As used in the foregoing detailed description and the appended claims, the singular forms "a," "an," and "the" are intended to include the plural forms as well, unless the context clearly indicates otherwise. As used in the foregoing detailed description and the appended claims, the term "and / or" means and includes any and all possible combinations of one or more of the associated listed items.
[0181] As used in the preceding detailed description in the appended claims, the words "based on," "according to," "include," "including," "comprise," and / or "comprising" specify the presence of stated features, integers, steps, operations, elements, and / or components, but do not preclude the presence or addition of one or more other features, integers, steps, operations, elements, components and / or groups thereof.
[0182] As used in the foregoing detailed description and the appended claims, the term "if" is interpreted to mean "when" or "upon determining" or "upon detecting" or "pursuant to a determination that," depending on the context. Similarly, the phrase "if determined" or "if [a specified condition or event] is detected" is interpreted to mean "upon determining" or "upon determining" or "upon detecting [a specified condition or event]" or "pursuant to detecting [a specified condition or event]" depending on the context.
[0183] The foregoing detailed description has been described with reference to specific implementations for purposes of illustration. However, the illustrative description above is not intended to be exhaustive or to limit the scope of the claims to the precise form disclosed. Many modifications and variations are possible in light of the above teachings. The examples have been selected to best explain the principles underlying the claims and their practical application, thereby enabling others skilled in the art to best utilize the examples with various modifications as appropriate for the particular use intended.
Claims
1. 1. A method comprising: Streaming video data to a plurality of client devices, the video data representing a plurality of video frames; receiving cursor data from a first client device of the plurality of client devices, the cursor data indicating a position of an input cursor controlled at the first client device of the plurality of client devices within a graphical user interface, the graphical user interface including a viewing area of the video data; transmitting real-time cursor data received from the first client device to one or more devices other than the first client device of the plurality of client devices, wherein in a synchronous mode, the one or more devices other than the first client device of the plurality of client devices are configured to display a visual representation of the input cursor indicated in the cursor data in the graphical user interface displayed by the one or more devices other than the first client device of the plurality of client devices and controlled at the first client device; In response to one of the plurality of client devices changing from the synchronous mode to the asynchronous mode, the method refrains from displaying a cursor indicative of the input cursor controlled at the first client device within the graphical user interface of each of the client devices in the asynchronous mode.
2. 10. The method of claim 1 further comprising: receiving one or more drawing instructions from a first client device of the plurality of client devices for regenerating a drawing annotation performed at a particular frame at the first client device of the plurality of client devices; and sending the one or more drawing instructions to the plurality of client devices other than the first client device, wherein in the synchronized mode, the one or more devices other than the first client device are configured to draw the drawing annotations of the particular frame displayed at the plurality of client devices other than the first client device based on the one or more drawing instructions.
3. The method of claim 1 , wherein the real-time cursor data is time-synchronized with the video data.
4. 3. The method of claim 2 further comprising: storing in session data associated with the video data a plurality of drawing instructions for one or more drawing annotations received while streaming the video data to the plurality of client devices; the plurality of drawing commands includes the one or more drawing commands, receiving a request from the first client device to review the session data; providing the session data to the first client device in response to the request, the first client device being configured to draw the one or more drawing annotations on one or more associated video frames displayed at the first client device based on the multiple drawing instructions in the session data.
5. The method of claim 4, further comprising: storing in the session data a number of timestamps associated with the one or more drawing commands, the number of timestamps reflecting timings of receipt of the one or more drawing commands of the number of drawing commands; The method of claim 1, wherein the first client device is configured to draw the one or more drawing annotations timed according to the plurality of timestamps.
6. The method of claim 5 further comprising: storing in the session data one or more video playback commands received from the plurality of client devices along with one or more respective timestamps reflecting timing of receipt of the one or more video playback commands; The method, wherein the first client device is further configured to execute the one or more video playback instructions timed according to the one or more respective timestamps.
7. 7. The method of claim 6, further comprising: storing the cursor data received from the plurality of client devices in the session data; each individual cursor position data in the session data is associated with a timestamp of receipt of the individual cursor position data; The first client device is further configured to display one or more input cursor representations based on the real-time cursor data of the session data.
8. 3. The method of claim 2, the streaming of the video data to the plurality of client devices is performed in association with a first streaming session; The method further comprises: storing the one or more drawing instructions associated with the particular frame in first session data for the first streaming session of the video data; storing second one or more drawing instructions associated with the particular frame in second session data for a second streaming session of the video data, the second one or more drawing instructions including second one or more drawing instructions for regenerating a second drawing annotation performed on the particular frame by a second client device; After storing the first session data and the second session data, displaying the particular frame at a third client device in association with the streaming of the video data; and and sending the one or more drawing instructions and the second one or more drawing instructions to the third client device, wherein the third client device is configured to draw the drawing annotation and the second drawing annotation of the particular frame displayed on the third client device based on the one or more drawing instructions and the second one or more drawing instructions.
9. 2. The method of claim 1, wherein the visual representations of input cursors displayed at the multiple client devices are each visually associated with information identifying a respective user associated with the input cursor.
10. One or more non-transitory computer-readable media containing one or more sequences of instructions, which when executed by one or more processors, Streaming video data to a plurality of client devices, the video data representing a plurality of video frames; receiving real-time cursor data from the plurality of client devices, the real-time cursor data indicating a position of an input cursor controlled at an individual client device from the plurality of client devices within a graphical user interface, the graphical user interface including a viewing area of the video data; transmitting to the plurality of client devices in real time real-time cursor data received from other client devices of the plurality of client devices, wherein in a synchronized mode, the plurality of client devices are configured to display within the graphical user interface displayed by the respective client devices visual representations of the input cursor controlled at the other client devices at respective positions indicated in the real-time cursor data; A non-transitory computer-readable medium that, in response to one of the plurality of client devices changing from the synchronous mode to an asynchronous mode, refrains from displaying a cursor indicative of the input cursor controlled at the respective client device within the graphical user interface of each of the client devices in the asynchronous mode.
11. 11. The non-transitory computer-readable medium of claim 10, further comprising, when executed by the one or more processors: receiving, from each individual client device of the plurality of client devices, user interaction information reflecting user interactions with the graphical user interface displayed by each individual client device; the user interaction information identifying particular controls within the graphical user interface displayed by the individual client device; A non-transitory computer-readable medium, wherein for the plurality of client devices other than an individual client device, the visual representation of the user interaction information includes a visual highlight of a corresponding graphical interface control.
12. 12. The non-transitory computer-readable medium of claim 11, wherein the user interaction information indicates that the input cursor at the respective client device has rolled over the particular control.
13. 12. The non-transitory computer readable medium of claim 11, the user interaction information identifying a particular action performed at the individual client device; A non-transitory computer-readable medium, wherein for the plurality of client devices other than an individual client device, the visual representation of the user interaction information includes text data indicating the particular action and a user identifier associated with the individual client device.
14. 12. The non-transitory computer readable medium of claim 11, The user interaction with the graphical user interface displayed on the individual client device includes: Affects video playback, adding annotations to the video data; Enter / Exit Stealth Mode, Enter / Exit the asynchronous mode, or Contains instructions for entering and exiting quiet drawing mode, The one or more sequences of instructions, when executed by one or more processors, further include, in response to receiving the user interaction information: requesting permission from a session master to comply with said instructions; receiving from the session master a permission to comply with the instructions; A non-transitory computer readable medium, wherein the transmitting of the user interaction information is performed in response to receiving permission to follow the instructions.
15. 12. The non-transitory computer readable medium of claim 11, wherein the real-time cursor data is time-synchronized with the video data.
16. 1. A computing system comprising: one or more processors; one or more non-transitory computer readable media; One or more sequences of instructions stored on the one or more non-transitory computer-readable media that, when executed by the one or more processors, Streaming video data to a plurality of client devices, the video data representing a plurality of video frames; receiving, from a first client device of the plurality of client devices, user interaction information reflecting a user interaction with a graphical user interface displayed by the first client device; in response to receiving the user interaction information, transmitting the user interaction information to one or more client devices other than the first client device of the plurality of client devices, wherein in a synchronous mode, the one or more client devices are configured to display a visual representation of the user interaction information in real time; and in response to one of the plurality of client devices changing from the synchronous mode to the asynchronous mode, refraining from displaying the visual representation of the user interaction information within the graphical user interface of each client device in the asynchronous mode.
17. 17. The computing system of claim 16, the user interaction information identifying a particular control within the graphical user interface displayed by the first client device; A computing system, wherein for one or more client devices other than the first client device of the plurality of client devices, the visual representation of the user interaction information includes a visual highlight of a graphical interface control.
18. 17. The computing system of claim 16, the user interaction information identifying a particular action performed at the first client device; A computing system, wherein for one or more client devices other than the first client device of the plurality of client devices, the visual representation of the user interaction information includes text data indicating the particular action and a user identifier associated with the first client device.
19. 20. The computing system of claim 16, wherein the one or more sequences of instructions, when executed by the one or more processors, further comprise: receiving, from a second client device of the plurality of client devices, a second one or more drawing instructions for regenerating a second drawing annotation performed at the second client device at a particular frame; A computing system comprising instructions for transmitting the second one or more drawing instructions to one or more client devices other than the second client device of the plurality of client devices, the one or more client devices being configured to draw the second drawing annotation in the particular frame displayed on the one or more client devices based on the second one or more drawing instructions.
20. 20. The computing system of claim 16, wherein the one or more sequences of instructions, when executed by the one or more processors, further comprise: and receiving real-time cursor data from the plurality of client devices, the real-time cursor data indicating a position of an input cursor controlled at an individual client device from the plurality of client devices within the graphical user interface, the graphical user interface including a viewing area for the video data.
Citation Information
Patent Citations
External input apparatus, display data creation method and program
JP2012118751A
Collaborative Effects in Video
JP2021510944A
System and methods for remote interactive sports instruction, analysis and collaboration
US20070160972A1
Desktop sharing method and system
US20090292999A1
Video collaboration
US20110018963A1