(57)【要約】レコーダは、第１のデバイスから第２のデバイスに送信される、複数のパケットを含むプロトコルデータストリームをインターセプトし、プロトコルデータストリームはディスプレイデータを表現する。レコーダは、プロトコルデータストリームの少なくとも１つのパケットをコピーする。レコーダは、少なくとも１つのコピーされたパケットを用いてプロトコルデータストリームの記録を作成する。プロトコルエンジンは、プロトコルデータストリームの記録から少なくとも１つのコピーされたパケットを読み取る。プロトコルエンジンは、少なくとも１つのコピーされたパケットに関連付けられる情報を用いてプロトコルデータストリームによって表されるディスプレイデータを再生成する。
2008535289.tif 000002
【特許請求の範囲】
【請求項１】
サーバ生成のデータを記録し、再生する方法であって、該方法は、
（ａ）レコーダによって、第１のデバイスから第２のデバイスに送信された複数のパケットを含むプロトコルデータストリームをインターセプトするステップであって、該プロトコルデータストリームは表示データを表している、ステップと、
（ｂ）該レコーダによって、該プロトコルデータストリームのうちの少なくとも一つのパケットをコピーするステップと、
（ｃ）該少なくとも一つのコピーされたパケットを使用して、該レコーダによって、該プロトコルデータストリームの記録を作成するステップと、
（ｄ）プロトコルエンジンによって、該プロトコルデータストリームの該記録から該少なくとも一つのコピーされたパケットを読取るステップと、
（ｅ）該プロトコルエンジンによって、該少なくとも一つのコピーされたパケットと関連する情報を使用して、該プロトコルデータストリームによって表された該表示データ再生成するステップと
を包含する、方法。
【請求項２】
ステップ（ａ）は、仮想チャネルをインターセプトすることをさらに包含する、請求項１に記載の方法。
【請求項３】
ステップ（ｂ）は、パケットがデータを含むときには、前記プロトコルデータストリームのパケットをコピーすることを決定することをさらに包含する、請求項１に記載の方法。
【請求項４】
ステップ（ｂ）は、ポリシーに応答して、前記プロトコルデータストリームのパケットをコピーすることを決定することをさらに包含する、請求項１に記載の方法。
【請求項５】
前記プロトコルデータストリームの前記記録を格納するステップをさらに包含する、請求項１に記載の方法。
【請求項６】
ステップ（ｃ）は、タイムスタンプを前記少なくとも一つのコピーされたパケットと関連付けることをさらに包含する、請求項１に記載の方法。
【請求項７】
ステップ（ｃ）は、前記関連付けられたタイムスタンプを前記プロトコルデータストリームの前記記録内に埋め込むことをさらに包含する、請求項６に記載の方法。
【請求項８】
ステップ（ｃ）は、データの長さのインジケータを前記プロトコルデータストリームの前記記録内に埋め込むことをさらに包含する、請求項１に記載の方法。
【請求項９】
ステップ（ｄ）は、前記プロトコルデータストリームの前記記録から連続して、前記少なくとも一つのコピーされたパケットを読取ることをさらに包含する、請求項１に記載の方法。
【請求項１０】
サーバ生成のデータを記録し、再生するシステムであって、該システムは、
プロトコルデータストリームの記録を生成するレコーダであって、該プロトコルデータストリームは、表示データを表し、第１のデバイスから第２のデバイスに送信される複数のパケットを含む、レコーダと、
該プロトコルデータストリームの該生成された記録を格納する格納要素と、
該格納要素と通信するプロトコルエンジンであって、該プロトコルエンジンは、該プロトコルデータストリームの該記録から少なくとも一つのパケットを読取り、該少なくとも一つのパケットと関連する情報を使用して、該プロトコルデータストリームの該記録を再生する、プロトコルエンジンと
を備える、システム。
【請求項１１】
前記レコーダは、プロトコルデータストリームからの少なくとも一つのパケットをコピーすることをさらに含む、請求項１０に記載のシステム。
【請求項１２】
前記レコーダは、前記少なくとも一つのパケットを時間基準と関連付ける、請求項１０に記載のシステム。
【請求項１３】
前記レコーダは、前記少なくとも一つのパケットをデータの長さのインジケータと関連付ける、請求項１０に記載のシステム。
【請求項１４】
前記データの長さは、前記パケット内のデータの長さを示す、請求項１３に記載のシステム。
【請求項１５】
前記レコーダは、前記第１のデバイス上に位置する、請求項１０に記載のシステム。
【請求項１６】
前記レコーダは、前記第２のデバイス上に位置する、請求項１０に記載のシステム。
【請求項１７】
前記レコーダは、プロキシサーバ上に位置する、請求項１０に記載のシステム。
【請求項１８】
前記レコーダは、パススルーサーバ上に位置する、請求項１０に記載のシステム。
【請求項１９】
前記レコーダは、ネットワークパケットスニッファ上に位置する、請求項１０に記載のシステム。
【請求項２０】
サーバ生成データを記録するためのシステムであって、該システムは、
前記格納要素は、ネットワーク格納デバイスを備える、請求項１０に記載のシステム。
【請求項２１】
第１のデバイスから第２のデバイスに送信される複数のパケットを含むプロトコルデータストリームをインターセプトするプロトコルデータストリームインターセプタと、
該プロトコルデータストリームの少なくとも一つパケットをコピーするパケットコピアと、
該少なくとも一つのコピーされたパケットを使用して、該プロトコルデータストリームの記録を作成する記録ジェネレータと、
該プロトコルストリームの該記録を格納する格納要素と
を備える、システム。
【請求項２２】
前記記録ジェネレータは、前記プロトコルデータストリームの前記記録に、情報を埋め込む、請求項２１に記載のシステム。
【請求項２３】
前記パケットコピアは、パケットがデータを含むときには、前記プロトコルデータストリームのパケットをコピーすることを決定することをさらに含む、請求項２１に記載のシステム。
【請求項２４】
前記パケットコピアは、ポリシーに応答して、前記プロトコルデータストリームのパケットをコピーすることを決定することをさらに含む、請求項２１に記載のシステム。
【請求項２５】
前記記録ジェネレータは、タイムスタンプを前記少なくとも一つのコピーされたパケットと関連付けることをさらに含む、請求項２１に記載のシステム。
【請求項２６】
前記記録ジェネレータは、前記関連付けられたタイムスタンプを前記プロトコルデータストリームの前記記録に埋め込むことをさらに含む、請求項２５に記載のシステム。
【請求項２７】
前記格納要素は、ネットワーク格納デバイス備える、請求項２１に記載のシステム。
【請求項２８】
プロトコルデータストリーム記録を記録し、プレイバックするシステムであって、該システムは、
プロトコルデータストリームをインターセプトするプロトコルデータストリームインターセプタであって、該プロトコルデータストリームは、サーバからクライアントに送信される複数のパケットを含む、プロトコルデータストリームインターセプタと、
該プロトコルデータストリームの少なくとも一つのパケットをコピーするパケットコピアと、
該少なくとも一つのコピーされたパケットを使用し、該プロトコルデータストリームの記録を作成し、プレイバック情報を該プロトコルデータストリームの該記録に埋め込む記録ジェネレータと、
該プロトコルストリームの該記録を格納する格納要素と、
該パケットデータストリームの該記録を受信し、該埋め込まれたプレイバック情報を使用して、該プロトコルデータストリームの該記録を再生するプロトコルエンジンと
を備える、システム。
【請求項２９】
前記プロトコルエンジンは、プロトコルデータストリームの前記記録から、少なくとも一つのパケットを読取ることをさらに含む、請求項２８に記載のシステム。
【請求項３０】
前記プロトコルエンジンは、前記プロトコルデータストリームの前記記録から、前記少なくとも一つのパケットを連続して読取ることをさらに含む、請求項２９に記載のシステム。
【請求項３１】
前記記録ジェネレータは、前記プロトコルデータストリームの前記記録に、時間基準を埋め込むことをさらに含む、請求項２８に記載のシステム。
【請求項３２】
前記記録ジェネレータは、データの長さのインジケータを、前記プロトコルデータストリームの前記記録に埋め込むことをさらに含む、請求項２８に記載のシステム。
【請求項３３】
前記格納要素は、ネットワーク格納デバイスを含む、請求項２８に記載のシステム。
【請求項３４】
遠隔提示プロトコルのプレイバックの間に、リアルタイムのシーキングをするための方法であって、該方法は、
（ａ）フォアグラウンドプロトコルエンジンによって、プロトコルデータストリームの記録内のパケットのコンテンツをレンダリングする要求を受信するステップであって、該プロトコルデータストリームは、複数のパケットを含む、ステップと、
（ｂ）該フォアグラウンドプロトコルエンジンによって、該要求されたパケットのタイムスタンプに先立つ関連するタイムスタンプを有するステートスナップショットを識別するステップと、
（ｃ）該フォアグラウンドプロトコルエンジンによって、該識別されたステートスナップショットに応答して、該要求されたパケットを表示するステップと
を包含する、方法。
【請求項３５】
前記ステップ（ｃ）は、前記ステートスナップショットと前記要求されたパケットとの間の中間のパケットのコンテンツをバッファにレンダリングすることをさらに含む、請求項３４に記載の方法。
【請求項３６】
遠隔提示プロトコルのプレイバックの間に、リアルタイムのシーキングを可能にするステートスナップショットを生成する方法であって、該方法は、
（ａ）バックグラウンドプロトコルエンジンによって、複数のパケットを含むプロトコルデータストリームの記録を受信するステップと、
（ｂ）該バックグラウンドプロトコルエンジンによって、プロトコルデータストリームの該記録の表示を生成するステップと、
（ｃ）該バックグラウンドプロトコルエンジンによって、該プロトコルデータストリームの該記録内の少なくとも一つのパケットの読み取りの間に、少なくとも一つのステートスナップショットを生成するステップと、
（ｄ）該バックグラウンドプロトコルエンジンによって、該生成されたステートスナップショットを格納するステップと
を包含する、方法。
【請求項３７】
ステップ（ｃ）は、前記プロトコルデータストリームの前記記録の提示と共に、前記少なくとも一つのステートスナップショットを実質的に同時に生成することをさらに含む、請求項３６に記載の方法。
【請求項３８】
ステップ（ｃ）は、前記バックグラウンドプロトコルエンジンによって、前記プロトコルデータストリームの前記記録の連続的な読取りの間に、少なくとも一つのステートスナップショットを生成することをさらに含む、請求項３６に記載の方法。
【請求項３９】
遠隔提示プロトコルのプレイバックの間に、リアルタイムでシーキングするシステムであって、該システムは、
プロトコルデータストリームの記録を受信し、複数のパケットを含む該プロトコルデータストリームの該記録を読取るバックグラウンドプロトコルエンジンと、
該バックグラウンドプロトコルエンジンによって生成されたステートスナップショットであって、該ステートスナップショットは、レコーダが、該プロトコルデータストリームから該プロトコルデータストリームの該記録にパケットをコピーするときには、その時点で該プロトコルデータストリームをレンダリングするプロトコルエンジンの状態を含む、ステートスナップショットと、
該プロトコルデータストリームの該記録を受信するフォアグランドプロトコルエンジンであって、該フォアグラウンドプロトコルエンジンは、該プロトコルデータストリームの該コンテンツをレンダリングし、該プロトコルデータストリームの該記録内のパケット内のコンテンツによって表される表示データをシーキングする要求を受信し、ステートスナップショットを使用して、該要求された表示データを表している該コンテンツをレンダリングする、フォアグラウンドプロトコルエンジンと
を含む、システム。
【請求項４０】
前記ステートスナップショットは、その時点でのスクリーンの状態を描いているデータ構造をさらに含む、請求項３９に記載のシステム。
【請求項４１】
前記ステートスナップショットは、可視面の状態を維持することをさらに含む、請求項３９に記載のシステム。
【請求項４２】
前記ステートスナップショットは、画面外の面の状態を維持することをさらに含む、請求項３９に記載のシステム。
【請求項４３】
前記ステートスナップショットは、描いているオブジェクトの状態を維持することをさらに含む、請求項３９に記載のシステム。
【請求項４４】
前記ステートスナップショットは、カラーパレットの状態を維持することをさらに含む、請求項３９に記載のシステム。
【請求項４５】
前記ステートスナップショットは、キャッシュされたオブジェクトの状態を維持することをさらに含む、請求項３９に記載のシステム。
【請求項４６】
前記ステートスナップショットは、バッファの状態を維持することをさらに含む、請求項３９に記載のシステム。
【請求項４７】
前記フォアグラウンドプロトコルエンジンは、ユーザに対する提示のために、前記プロトコルデータストリームの前記記録のリアルタイムの認識できる表示を生成することをさらに含む、請求項３９に記載のシステム。
【請求項４８】
前記フォアグラウンドプロトコルエンジンは、ユーザに対する提示のために、前記プロトコルデータストリームの前記記録のリアルタイムの可視表示を生成することをさらに含む、請求項３９に記載のシステム。
【請求項４９】
前記フォアグラウンドプロトコルエンジンは、ユーザに対する提示のために、前記プロトコルデータストリームの前記記録のリアルタイムの可聴表示を生成することをさらに含む、請求項３９に記載のシステム。
【請求項５０】
ステートスナップショットを適応性のあるように生成する方法であって、該方法は、
（ａ）プロトコルデータストリームの記録の表示をユーザに対して提示するステップと、
（ｂ）バックグラウンドプロトコルエンジンによって、該提示の間の該ユーザの活動をモニタリングするステップと、
（ｃ）該バックグラウンドプロトコルエンジンによって、該活動の該モニタリングに応答して、活動プロフィールを作成するステップと、
（ｄ）該バックグラウンドプロトコルエンジンによって、該活動プロフィールに応答して、少なくとも一つのステートスナップショットを生成するステップと
を包含する、方法。
【請求項５１】
ステップ（ｂ）は、前記ユーザによる活動のない期間を識別することをさらに含む、請求項５０に記載の方法。
【請求項５２】
ステップ（ｃ）は、シーキング確率の統計的な分布を識別することをさらに含む、請求項５０に記載の方法。
【請求項５３】
ステップ（ｄ）は、シーキング確率の前記統計的な分布に応答して、前記少なくとも一つのステートスナップショットを生成するステップをさらに含む、請求項５２に記載の方法。
【請求項５４】
ステップ（ｃ）は、前記ユーザの使用パターンに関する活動プロフィールを作成することをさらに含む、請求項５０に記載の方法。
【請求項５５】
ステップ（ｄ）は、一つ以上のステートスナップショットの間の間隔を広げることを決定することをさらに含む、請求項５０に記載の方法。
【請求項５６】
ステップ（ｄ）は、一つ以上のステートスナップショットの間の間隔を狭めることを決定することをさらに含む、請求項５０に記載の方法。
【請求項５７】
前記バックグラウンドプロトコルエンジンによって、前記活動プロフィールに応答して、前記少なくとも一つのステートスナップショットを除去することを決定するステップをさらに含む、請求項５０に記載の方法。
【請求項５８】
前記バックグラウンドプロトコルエンジンによって、前記活動プロフィールに応答して、少なくとも一つのステートスナップショットを追加することを決定するステップをさらに含む、請求項５０に記載の方法。
【請求項５９】
ステートスナップショットを適応性のあるように生成するシステムであって、該システムは、
ユーザに対して、プロトコルデータストリームの記録の表示を提示するフォアグラウンドプロトコルエンジンと、
該提示の間に、該ユーザの活動をモニタリングし、ステートスナップショットを生成するバックグラウンドプロトコルエンジンと、
該バックグラウンドプロトコルエンジンによって決定される活動プロファイルと
を含む、システム。
【請求項６０】
前記バックグラウンドプロトコルエンジンは、前記モニタリングに応答して、前記活動プロフィールを決定する、請求項５９に記載のシステム。
【請求項６１】
前記バックグラウンドプロトコルエンジンは、前記活動プロフィールに応答して、前記ステートスナップショットを維持する、請求項６０に記載のシステム。
【請求項６２】
前記活動プロフィールは、使用パターンを識別する、請求項６０に記載のシステム。
【発明の詳細な説明】
【技術分野】
【０００１】
（本発明の技術分野）
本発明は、遠隔提示プロトコルのプレイバックのための方法およびシステムに関し、特に、遠隔提示プロトコルのプレイバックの間のキャプチャリング、再生およびリアルタイムにおけるシーキング（ｓｅｅｋｉｎｇ）に関する。
【背景技術】
【０００２】
（本発明の背景）
遠隔提示プロトコル（ｒｅｍｏｔｏ  ｐｒｅｓｅｎｔａｔｉｏｎ  ｐｒｏｔｏｃｏｌ）、例えばＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．，  ｏｆ  Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａによって製造されたＩＣＡプロトコル、Ｘ．ｏｒｇ  ＦｏｕｎｄａｔｉｏｎによるＸプロトコル、ＡＴ＆Ｔ  Ｃｏｒｐ．，のＶｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ  Ｃｏｍｐｕｔｉｎｇプロトコル、またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ  ｏｆ  Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎによって製造されたＲＤＰプロトコルは、本来ステートフル（ｓｔａｔｅｆｕｌ）である。記録されたプレゼンテーションプロトコルデータのストリームの特定のポイントをビューするためには、ストリームのプレイバックは、ストリームの最初から始めなくてはならず、所望のポイントが見つかるまで連続してプレイバックされなくてはならない。
【０００３】
連続した順番ではない記録されたデータのストリームにアクセスする従来の技術は、一般的にキーフレームおよびデルタフレームの使用を伴う。キーフレームは、一般的に同期点としてストリーム自体に格納され、その結果として、フレームは、スクリーン上に素早く再現され得る。デルタフレームは、一般的に以前のフレームとの差異を記述し、可視のビデオフレームを生成する。
【０００４】
遠隔提示プロトコルは、そのステートフルな性質によって一般的にコンパクトであり、キーフレームの追加のストレージは、ファイルサイズを遥かに増加させる。現代のデジタルビデオの圧縮技術を持ってしても、キーフレームは通常、記録されたプレゼンテーションプロトコルデータのストリームのために要求されるストレージを遥かに大きなものにする。しかし、キーフレームを省くことは、シーキングができないプロトコルをもたらすことになる。格納されるキーフレームによって起こる大きすぎるファイルのオーバーヘッドのない、シーキング能力のための方法が望ましい。
【０００５】
遠隔提示プロトコルのサーバ側の記録は、トレーニング資料のオーサリング、ヘルプデスクサポートの提供、チュートリアルのイネーブリング、または各クライアントのワークステーションへのソフトウェアの分配が煩わしい環境で有用である。しかし、プロトコルデータストリームの記録のための多くの従来の方法は、コンピュータスクリーン活動の不充分および無損失な符号化などの欠点に苦しむ。サーバ上のみのファイルの記録および格納は、並行のセッションの多数のハンドリングに関する問題を作り得る。多くの従来のシステムは、一般的に、レビューされるものよりも遥かに多くのデータを記録する欠点に苦しみ、複雑な記録プロセスまたは大きなファイルサイズの生成を必要とする。
【０００６】
プロトコルデータストリームを記録する一部の従来の方法は、遠隔提示プロトコル自体に結びつかない。これらの多くの解決方法は、スクリーンのスクレーピング／キャプチャの技術またはクライアントのグラフィックエンジンのフッキングを必要とし、その結果として、プロセッサインテンシブな符号化またはプレイバックのためのトランスコーディングプロセスを必要とする欠点に苦しむ。
【０００７】
ユーザスクリーンの活動を記録する他の方法は、クライアントのデバイス上にグラフィック出力を符号化する。通常、これらの方法は、Ｗｉｎｄｏｗｓ（登録商標）のクライアントワークステーションから定期的なディスクリートスクリーンスナップショットを取ることに限定される。Ｍｉｃｒｏｓｏｆｔ社は、Ｗｉｎｄｏｗｓ（登録商標）Ｍｅｄｉａ  Ｅｎｃｏｄｅｒ  ＳＤＫの一部としてスクリーンキャプチャＡＰＩを提供するが、この方法は、トレーニングおよびビデオプレゼンテーションの市場に対するクライアントデバイス記録に焦点をしぼるという欠点に苦しむ。ほとんどの方法が、クライアント側のソフトウェアの構成要素を必要とし、サーバ側の記録を行う能力に欠ける。
【発明の開示】
【課題を解決するための手段】
【０００８】
（本発明の概要）
本発明は、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．，  ｏｆ  Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａによって製造されたＩＣＡプロトコル、Ｘ．ｏｒｇ  ＦｏｕｎｄａｔｉｏｎによるＸプロトコル、ＡＴ＆Ｔ  Ｃｏｒｐ．のＶｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ  Ｃｏｍｐｕｔｉｎｇ  ｐｒｏｔｏｃｏｌ、またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ  ｏｆ  Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎによって製造されたＲＤＰプロトコルなどの遠隔提示プロトコルをストリームとして記録する方法、および後程に記録されたストリームのプレイバックをイネーブルする方法を提供する。本発明は、当初コンピュータスクリーンの提示のライブディスプレイのために設計されたプロトコルを、現存のプロトコルの定義を修正することなく、記録され得る無損失なリアルタイムにおけるスクリーン活動のキャプチャに延長する。従来のスクリーンキャプチャの技術と違って、記録は、クライアントのデバイス上でなされる必要はなく、またはどのようなクライアント側の構成要素も要求しない。本発明によって提供されるサーバ側の記録は、多くのクライアントのデバイスの代わりにサーバマシーンのみへの記録ソフトウェアのインストールを可能にすることによって、配備を非常に簡単なものにする。例えば、企業のＣｉｔｒｉｘ  ＭｅｔａＦｒａｍｅ  Ｐｒｅｓｅｎｔａｔｉｏｎ  Ｓｅｒｖｅｒ環境において、クライアントのデバイスのサーバマシーンに対する割合は、通常は、１００対１よりも高い。サポートされるクライアントのデバイスの範囲は、従来のクライアントデプロイメント問題を複雑化する。Ｃｉｔｒｉｘは現在、Ｗｉｎｄｏｗｓ（登録商標）のＰＣと、ＵＮＩＸ（登録商標）と、Ｌｉｎｕｘと、Ｊａｖａ（登録商標）ベースのクライアントと、ＤＯＳと、幅広いＷｉｎｄｏｗｓ（登録商標）ＣＥおよびＥＰＯＣベースのハンドヘルドのデバイスと、Ｍａｃｉｎｔｏｓｈとのクライアントをサポートする。サーバ側の記録が作動するために、これらの任意のプラットフォーム上でのプラットフォーム特有の記録ソフトウェアまたは他のあらゆる変更は、何も必要ではない。遠隔提示プロトコルは一般的に、帯域幅を減少することによって比較的に低速のネットワークを介して効率的に作動するように設計され、そのようなプロトコルの記録もまた、本質的にコンパクトである。別のビデオフォーマットへのトランスコーディングは何も行われないので、記録プロセスは、軽いものであり、結果のストリームは、ユーザが記録時に自分のスクリーンで見たものの真の表現（ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）である。
【０００９】
本発明はまた、Ｃｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．，  ｏｆ  Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａによって製造されたＩＣＡプロトコル、Ｘ．ｏｒｇ  ＦｏｕｎｄａｔｉｏｎによるＸプロトコル、ＡＴ＆Ｔ  Ｃｏｒｐ．のＶｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ  Ｃｏｍｐｕｔｉｎｇ  ｐｒｏｔｏｃｏｌ、またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ  ｏｆ  Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎによって製造されたＲＤＰプロトコルなどの遠隔提示プロトコルをビデオフォーマットとして連続してプレイ可能なものにして、さらに格納されたキーフレームを使用することなくランダムなシーキング／ブラウジングを可能にする。シーキングは、プレイバックの間にストリームをビューしているユーザがストリームの中で前進または後退といった任意の位置にスキップすること、および応答する方式でプレイバックを継続することを可能にする。本発明は、キーフレームを記録または格納することなく、非常に高速なシーキングを可能にする。
【００１０】
一局面において、本発明は、サーバ生成のデータを記録および再生する方法に関する。レコーダは、第１のデバイスから第２のデバイスに送信された複数のパケットを含むプロトコルデータストリームをインターセプトし、該プロトコルデータストリームはディスプレイデータを表している。レコーダは、プロトコルデータストリームの少なくとも一つのパケットをコピーする。レコーダは、少なくとも一つのコピーされたパケットを用いて、プロトコルデータストリームの記録を作成する。プロトコルエンジンは、プロトコルデータストリームの記録から少なくとも一つのコピーされたパケットを読み取る。プロトコルエンジンは、少なくとも一つのコピーされたパケットと関連付けられた情報を用いて、プロトコルデータストリームによって表されたディスプレイデータを再生成する。
【００１１】
別の局面において、本発明は、サーバ生成のデータを記録および再生するシステムに関する。レコーダは、プロトコルデータストリームの記録を生成し、該プロトコルデータストリームは、ディスプレイデータを表し、第１のデバイスから第２のデバイスに送信される複数のパケットを含む。格納要素は、プロトコルデータストリームの生成された記録を格納する。プロトコルエンジンは、格納要素と通信し、プロトコルデータストリームの記録から少なくとも一つのパケットを読み取り、少なくとも一つのパケットと関連付けられた情報を用いて、プロトコルデータストリームの記録を再生する。
【００１２】
別の局面において、本発明は、サーバ生成のデータを記録するシステムに関する。プロトコルデータストリームインターセプタは、第１のデバイスから第２のデバイスに送信される複数のパケットを含むプロトコルデータストリームをインターセプトする。パケットコピアは、プロトコルデータストリームの少なくとも一つパケットをコピーする。記録ジェネレータは、少なくとも一つのコピーされたパケットを用いて、プロトコルデータストリームの記録を作成する。格納要素は、プロトコルストリームの記録を格納する。
【００１３】
さらに別の局面において、本発明は、プロトコルデータストリーム記録の記録およびプレイバックに関する。プロトコルデータストリームインターセプタは、プロトコルデータストリームをインターセプトし、該プロトコルデータストリームは、サーバからクライアントに送信される複数のパケットを含む。パケットコピアは、プロトコルデータストリームの少なくとも一つのパケットをコピーする。記録ジェネレータは、少なくとも一つのコピーされたパケットを用いてプロトコルデータストリームの記録を作成し、プレイバック情報をプロトコルデータストリームの記録に埋め込む。格納要素は、プロトコルストリームの記録を格納する。プロトコルエンジンは、パケットデータストリームの記録を受信し、埋め込まれたプレイバック情報を用いてプロトコルデータストリームの記録を再生する。
【００１４】
一局面において、本発明は、遠隔提示プロトコルのプレイバックの間のリアルタイムにおけるシーキングのための方法に関する。フォアグラウンドプロトコルエンジンは、プロトコルデータストリームの記録におけるパケットのコンテンツをレンダリングする要求を受信し、プロトコルデータストリームは、複数のパケットを含む。フォアグラウンドプロトコルエンジンは、要求されたパケットのタイムスタンプに先立つ関連付けられたタイムスタンプを有するステートスナップショットを識別する。フォアグラウンドプロトコルエンジンは、識別されたステートスナップショットに応答して、要求されたパケットを表示する。
【００１５】
別の局面において、本発明は、遠隔提示プロトコルのプレイバックの間のリアルタイムにおけるシーキングを可能にするステートスナップショットを生成する方法およびシステムに関する。バックグラウンドプロトコルエンジンは、複数のパケットを含むプロトコルデータストリームの記録を受信し、読み取る。バックグラウンドプロトコルエンジンは、プロトコルデータストリームの記録の表現を生成する。バックグラウンドプロトコルエンジンは、プロトコルデータストリームの記録における少なくとも一つのパケットの読み取りの間に、少なくとも一つのステートスナップショットを生成する。一実施形態において、ステートスナップショットは、レコーダがプロトコルデータストリームからプロトコルデータストリームの記録にパケットをコピーした時点のプロトコルデータストリームをレンダリングするプロトコルエンジンの状態を含む。バックグラウンドプロトコルエンジンは、生成されたステートスナップショットを格納する。一実施形態において、プロトコルデータストリームのコンテンツをレンダリングするフォアグラウンドプロトコルエンジンは、プロトコルデータストリームの記録におけるパケットの中のコンテンツによって表されるディスプレイデータをシーキングする要求を受信し、ステートスナップショットを用いて要求されたディスプレイデータを表すコンテンツをレンダリングする。
【００１６】
さらに別の実施形態において、本発明は、ステートスナップショットの適応性のある生成のための方法およびシステムに関する。プロトコルデータシステムの記録の表現が、ユーザに提示される。一実施形態において、フォアグラウンドプロトコルエンジンは、プロトコルデータストリームの記録の表現をユーザに提示する。バックグラウンドプロトコルエンジンは、提示の間のユーザの活動をモニターする。バックグラウンドプロトコルエンジンは、活動のモニタリングに応答する活動のプロファイルを展開する。バックグラウンドプロトコルエンジンは、活動のプロファイルに応答する、少なくとも１つのステートスナップショットを生成する。
【発明を実施するための最良の形態】
【００１７】
本発明のこれらおよび他の局面は、本明細書中の詳細な記述および添付される図面によって直ちに明確になる。これらは、本発明を説明するものであり、限定する意図はない。
【００１８】
ここで図１Ａを参照して、簡潔に概略すると、本発明が用いられ得るクライアント−サーバシステムの一実施形態が図示される。第１のコンピューティングデバイス１００’（一般に１００）は、通信ネットワーク１８０を介して第２のコンピューティングデバイス１４０’（一般に１４０）と通信する。第１のデバイス１００が介して第２のデバイス１４０と通信するネットワーク１８０のトポロジーは、バス、スターまたはリングのトポロジーであり得る。ネットワーク１８０は、ローカルエリアネットワーク（ＬＡＮ）、メトロポリタンエリアネットワーク（ＭＡＮ）、または、例えばインターネットのようなワイドエリアネットワーク（ＷＡＮ）であり得る。２つの第１のコンピューティングデバイス１００、１００’および２つの第２のコンピューティングデバイス１４０、１４０’のみが、図１Ａに図示されるが、他の実施形態は、ネットワーク１８０に接続される複数のそのようなデバイスを含む。
【００１９】
第１のデバイス１００および第２のデバイス１４０は、様々な接続を介してネットワーク１８０に接続し得、接続は、標準的な電話線と、ＬＡＮまたはＷＡＮリンク（例えば、Ｔ１、Ｔ３、５６ｋｂ、Ｘ．２５）と、ブロードバンド接続（ＩＳＤＮ、フレームリレー、ＡＴＭ）と、ワイアレス接続とを含む。接続は、様々な通信プロトコルを用いて確立され得る（例えば、ＴＣＰ／ＩＰ、ＩＰＸ、ＳＰＸ、ＮｅｔＢＩＯＳ、ＮｅｔＢＥＵＩ、ＳＭＢ、Ｅｔｈｅｒｎｅｔ（登録商標）、ＡＲＣＮＥＴ、Ｆｉｂｅｒ  Ｄｉｓｔｒｉｂｕｔｅｄ  Ｄａｔａ  Ｉｎｔｅｒｆａｃｅ（ＦＤＤＩ）、ＲＳ２３２、ＩＥＥＥ８０２．１１、ＩＥＥＥ８０２．１１ａ、ＩＥＥＥ８０２．１１ｂ、ＩＥＥＥ８０２．１１ｇおよび直接的で非同期式の接続）。
【００２０】
第１のデバイス１００は、該デバイスに代わって、１つ以上の第２のコンピューティングデバイス１４０によって実行されるアプリケーションからの出力を受信および表示する能力があり、本明細書に開示されるプロトコルに従って動作する能力がある任意のデバイスであり得る。第１のデバイス１００は、パーソナルコンピュータ、ウィンドウズ（登録商標）ベースのターミナル、ネットワークコンピュータ、情報アプライアンス、Ｘ−デバイス、ワークステーション、ミニコンピュータ、携帯情報端末、または携帯電話であり得る。
【００２１】
同様に、第２のコンピューティングデバイス１４０は、任意のコンピューティングデバイスであり得、実行するアプリケーションに対するユーザ入力を第１のコンピューティングデバイス１００から受信する能力と、第１デバイス１００の代わりにアプリケーションプログラムを実行する能力と、本明細書に開示されるプロトコルを用いて第１のコンピューティングデバイス１００と相互作用する能力がある。第２のコンピューティングデバイス１４０は、シングルサーバシステムとして論理的に作用するサーバデバイスのグループとして提供され得、本明細書中においてサーバファームとして呼ばれる。一実施形態において、第２のコンピューティングデバイス１４０は、マルチユーザサーバシステムであり、該システムは、もう１つの第１のデバイス１００から複数の同時にアクティブな接続をサポートする。
【００２２】
図１Ｂおよび図１Ｃは、第１のコンピューティングデバイス１００と第２のコンピューティングデバイス１４０として有用な、一般的なコンピュータ１００のブロック図を図示する。図１Ｂおよび図１Ｃに示されるように、中央処理装置１０２とメインメモリユニット１０４とを含む。各コンピュータ１００はまた、他のオプションの要素を含み得、例えば１つ以上の入力／出力デバイス１３０ａおよび１３０ｂ（通常は、参照番号１３０を用いて参照される）と、中央処理装置１０２と通信するキャッシュメモリ１４５とである。
【００２３】
中央処理装置１０２は、メインメモリユニット１０４から取り込まれた（ｆｅｔｃｈｅｄ）命令に応答し処理する任意の論理回路網である。多くの実施形態において、中央処理装置は、マイクロプロセッサユニットによって提供され、該マイクロプロセッサユニットは、例えば、Ｉｎｔｅｌ  Ｃｏｒｐｏｒａｔｉｏｎ  ｏｆ  Ｍｏｕｎｔａｉｎ  Ｖｉｅｗ，  Ｃａｌｉｆｏｒｎｉａによって全て製造された、８０８８プロセッサ、８０２８６プロセッサ、８０３８６プロセッサ、８０４８６プロセッサ、Ｐｅｎｔｉｕｍ（登録商標）プロセッサ、Ｐｅｎｔｉｕｍ（登録商標）プロプロセッサ、Ｐｅｎｔｉｕｍ（登録商標）ＩＩプロセッサ、Ｃｅｌｅｒｏｎプロセッサ、またはＸｅｏｎプロセッサ、Ｍｏｔｏｒｏｌａ  Ｃｏｒｐｏｒａｔｉｏｎ  ｏｆ  Ｓｃｈａｕｍｂｕｒｇ，  Ｉｌｌｉｎｏｉｓによって全て製造された、６８０００プロセッサ、６８０１０プロセッサ、６８０２０プロセッサ、６８０３０プロセッサ、６８０４０プロセッサ、Ｐｏｗｅｒ  ＰＣ６０１プロセッサ、Ｐｏｗｅｒ  ＰＣ６０４プロセッサ、Ｐｏｗｅｒ  ＰＣ６０４ｅプロセッサ、ＭＰＣ６０３ｅプロセッサ、ＭＰＣ６０３ｅｉプロセッサ、ＭＰＣ６０３ｅｖプロセッサ、ＭＰＣ６０３ｒプロセッサ、ＭＰＣ６０３ｐプロセッサ、ＭＰＣ７４０プロセッサ、ＭＰＣ７４５プロセッサ、ＭＰＣ７５０プロセッサ、ＭＰＣ７５５プロセッサ、ＭＰＣ７４００プロセッサ、ＭＰＣ７４１０プロセッサ、ＭＰＣ７４４１プロセッサ、ＭＰＣ７４４５プロセッサ、ＭＰＣ７４４７プロセッサ、ＭＰＣ７４５０プロセッサ、ＭＰＣ７４５１プロセッサ、ＭＰＣ７４５５プロセッサ、ＭＰＣ７４５７プロセッサ、Ｔｒａｎｓｍｅｔａ  Ｃｏｒｐｏｒａｔｉｏｎ  ｏｆ  Ｓａｎｔａ  Ｃｌａｒａ，  Ｃａｌｉｆｏｒｎｉａによって製造された、Ｃｒｕｓｏｅ  ＴＭ５８００プロセッサ、Ｃｒｕｓｏｅ  ＴＭ５６００プロセッサ、Ｃｒｕｓｏｅ  ＴＭ５５００プロセッサ、Ｃｒｕｓｏｅ  ＴＭ５４００プロセッサ、Ｅｆｆｉｃｅｏｎ  ＴＭ８６００プロセッサ、Ｅｆｆｉｃｅｏｎ  ＴＭ８３００プロセッサ、またはＥｆｆｉｃｅｏｎ  ＴＭ８６２０プロセッサ、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  ｏｆ  Ｗｈｉｔｅ  Ｐｌａｉｎｓ，  Ｎｅｗ  Ｙｏｒｋによって全て製造された、ＲＳ／６０００プロセッサ、ＲＳ６４プロセッサ、ＲＳ６４ＩＩプロセッサ、Ｐ２ＳＣプロセッサ、ＰＯＷＥＲ３プロセッサ、ＲＳ６４ＩＩＩプロセッサ、ＰＯＷＥＲ３−ＩＩプロセッサ、ＲＳ６４ＩＶプロセッサ、ＰＯＷＥＲ４プロセッサ、ＰＯＷＥＲ４＋プロセッサ、ＰＯＷＥＲ５プロセッサ、またはＰＯＷＥＲ６プロセッサ、またはＡｄｖａｎｃｅｄ  Ｍｉｃｒｏ  Ｄｅｖｉｃｅｓ  ｏｆ  Ｓｕｎｎｙｖａｌｅ，  Ｃａｌｉｆｏｒｎｉａによって製造された、ＡＭＤ  Ｏｐｔｅｒｏｎプロセッサ、ＡＭＤ  Ａｔｈｌｏｎ  ６４  ＦＸプロセッサ、ＡＭＤ  Ａｔｈｌｏｎプロセッサ、またはＡＭＤ  Ｄｕｒｏｎプロセッサである。
【００２４】
メインメモリユニット１０４は、データを格納する能力と、任意の格納ロケーションがマイクロプロセッサ１０２によって直接アクセスされることを可能にする能力とを有する１つ以上のメモリチップであり得、例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）、バースト（Ｂｕｒｓｔ）ＳＲＡＭまたはＳｙｎｃｈＢｕｒｓｔ  ＳＲＡＭ（ＢＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ファストページモードＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、エンハンストＤＲＡＭ（ＥＤＲＡＭ）、エクステンデッドデータ出力ＲＡＭ（ＥＤＯ  ＲＡＭ）、エクステンデッドデータ出力ＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、バーストエクステンデッドデータ出力ＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、エンハンストＤＲＡＭ（ＥＤＲＡＭ）、シンクロノスＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００  ＳＤＲＡＭ、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、エンハンストＳＤＲＡＭ（ＥＳＤＲＡＭ）、ＳｙｎｃＬｉｎｃ  ＤＲＡＭ（ＳＬＤＲＡＭ）、ディレクトランバスＤＲＡＭ（ＤＲＤＲＡＭ）、またはＦｅｒｒｏｅｌｅｃｔｒｉｃ  ＲＡＭ（ＦＲＡＭ）などである。図１Ｂに示される実施形態において、プロセッサ１０２は、システムバス１２０を介してメインメモリ１０４と通信する（以下に詳細に記述される）。図１Ｃは、プロセッサが、メモリポートを介してメインメモリ１０４と直接的に通信するコンピュータシステム１００の実施形態を図示する。例えば、図１Ｃにおいて、メインメモリ１０４はＤＲＤＲＡＭであり得る。
【００２５】
図１Ｂおよび図１Ｃは、メインプロセッサ１０２が、時に「バックサイド」バスと呼ばれる二次的なバスを介してキャッシュメモリ１４５と直接的に通信する実施形態を図示する。他の実施形態において、メインプロセッサ１０２は、システムバス１２０を用いてキャッシュメモリ１４５と通信する。キャッシュメモリ１４５は、通常はメインメモリ１０４よりも速い応答時間を有し、通常はＳＲＡＭ、ＢＳＲＡＭまたはＥＤＲＡＭによって提供される。
【００２６】
図１Ｂに示される実施形態において、プロセッサ１０２は、ローカルシステムバス１２０を介して様々なＩ／Ｏデバイス１３０と通信する。様々なバスは、中央処理装置１０２をＩ／Ｏデバイス１３０に接続するために用いられ得、該バスは、ＶＥＳＡ  ＶＬバス、ＩＳＡバス、ＥＩＳＡバス、ＭｉｃｒｏＣｈａｎｎｅｌ  Ａｒｃｈｉｔｅｃｔｕｒｅ（ＭＣＡ）バス、ＰＣＩバス、ＰＣＩ−Ｘバス、ＰＣＩ−Ｅｘｐｒｅｓｓバス、またはＮｕＢｕｓを含む。Ｉ／Ｏデバイスがビデオディスプレイである実施形態に対して、プロセッサ１０２は、ディスプレイと通信するためにアドバンストグラフィックポート（ＡＧＰ）を用い得る。図１Ｃは、メインプロセッサ１０２が、ハイパートランスポート、ラピッドＩ／Ｏ、またはＩｎｆｉｎｉＢａｎｄを用いてＩ／Ｏデバイス１３０ｂと直接的に通信する、コンピュータシステム１００の実施形態を図示する。図１Ｃはまた、ローカルバスと直接的な通信とが交じり合った実施形態を図示し、プロセッサ１０２は、ローカルインターコネクトバスを用いてＩ／Ｏデバイス１３０ａと通信し、その一方でＩ／Ｏデバイス１３０ｂと直接的に通信する。
【００２７】
幅広い種類のＩ／Ｏデバイス１３０が、コンピュータシステム１００において存在し得る。入力デバイスは、キーボードと、マウスと、トラックパッドと、トラックボールと、マイクと、製図（ｄｒａｗｉｎｇ）タブレットとを含む。出力デバイスは、ビデオディスプレイと、スピーカと、インクジェットプリンタと、レーザープリンタと、昇華型プリンタとを含む。Ｉ／Ｏデバイスはまた、コンピュータシステム１００に対して大容量のストレージを提供し得、例えば、ハードディスクドライブと、３．５インチ、５．２５インチ、またはＺＩＰディスクなどのフロッピー（登録商標）ディスクを受けるためのフロッピー（登録商標）ディスクドライブと、ＣＤ−ＲＯＭドライブと、ＣＤ−Ｒ／ＲＷドライブと、ＤＶＤ−ＲＯＭドライブと、ＤＶＤ−Ｒドライブと、ＤＶＤ−ＲＷドライブと、様々なフォーマットのテープドライブと、Ｔｗｉｎｔｅｃｈ  Ｉｎｄｕｓｔｒｙ，  Ｉｎｃ．  ｏｆ  Ｌｏｓ  Ａｌａｍｉｔｏｓ，  Ｃａｌｉｆｏｒｎｉａによって製造されたＵＳＢフラッシュドライブなどの種類のデバイスＵＳＢ格納デバイスとである。
【００２８】
さらなる実施形態において、Ｉ／Ｏデバイス１３０は、システムバス１２０と外部通信バスとの間のブリッジであり得、該外部通信バスは、例えばＵＳＢバス、Ａｐｐｌｅデスクトップバス、ＲＳ−２３２シリアル接続、ＳＣＳＩバス、ＦｉｒｅＷｉｒｅバス、ＦｉｒｅＷｉｒｅ８００バス、Ｅｔｈｅｒｎｅｔ（登録商標）バス、Ａｐｐｌｅトークバス、ギガビットＥｔｈｅｒｎｅｔ（登録商標）バス、非同期式のトランスファーモードバス、ＨＩＰＰＩバス、スーパーＨＩＰＰＩバス、シリアルプラスバス、ＳＣＩ／ＬＡＭＰバス、ＦｉｂｒｅＣｈａｎｎｅｌバス、またはシリアルアタッチト小型コンピュータシステムインターフェースバスである。
【００２９】
図１Ｂおよび図１Ｃに図示される種類の汎用デスクトップコンピュータは、通常オペレーティングシステムの制御の下で動作し、該オペレーティングシステムは、タスクのスケジューリングとシステムリソースへのアクセスとを制御する。通常のオペレーティングシステムが含むものは、とりわけ、Ｍｉｃｒｏｓｏｆｔ  Ｃｏｒｐ．  ｏｆ  Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎによって製造されたＭＩＣＲＯＳＯＦＴ  ＷＩＮＤＯＷＳ（登録商標）と、Ａｐｐｌｅ  Ｃｏｍｐｕｔｅｒ  ｏｆ  Ｃｕｐｅｒｔｉｎｏ，  Ｃａｌｉｆｏｒｎｉａによって製造されたＭａｃＯＳと、Ｉｎｔｅｒｎａｔｉｏｎａｌ  Ｂｕｓｉｎｅｓｓ  Ｍａｃｈｉｎｅｓ  ｏｆ  Ａｒｍｏｎｋ  Ｎｅｗ  Ｙｏｒｋによって製造されたＯＳ／２と、Ｃａｌｄｅｒａ  Ｃｏｒｐ．  ｏｆ  Ｓａｌｔ  Ｌａｋｅ  Ｃｉｔｙ，  Ｕｔａｈによって配給された自由に利用可能なオペレーティングシステムであるＬｉｎｕｘとである。
【００３０】
他の実施形態において、第１のデバイス１００または第２のデバイス１４０は、デバイスと調和する異なるプロセッサと、オペレーティングシステムと、入力デバイスとを有し得る。例えば、一実施形態において、第１のデバイス１００は、Ｐａｌｍ，  Ｉｎｃ．によって製造された携帯情報端末のＺｉｒｅ  ７１である。この実施形態において、Ｚｉｒｅ  ７１は、Ｔｅｘａｓ  Ｉｎｓｔｒｕｍｅｎｔｓ，  ｏｆ  Ｄａｌｌａｓ，  Ｔｅｘａｓによって製造されたＯＭＡＰ  ３１０プロセッサを用い、ＰａｌｍＯＳオペレーティングシステムの制御の下で動作し、液晶表示スクリーンと、スタイラス入力デバイスと、５方向ナビゲーターデバイスとを含む。
【００３１】
ここで図２を参照して、ブロック図が、ネットワーク２００の実施形態を図示し、該ネットワーク２００の中で本発明が実行され得、第１のデバイス２０２と、遠隔提示プロトコルサーバエンジン２０４と、レコーダ２０６と、プロトコルデータストリーム２０８と、レコーデッドプロトコルデータストリーム２１０と、第２のデバイス２１２と、遠隔提示プロトコルクライアントエンジン２１４と、ディスプレイ２１６と、格納要素２１８と、レコーデッドプロトコルデータストリーム２２０とを含む。簡潔に概略すると、レコーダ２０６は、プロトコルデータストリーム２０８をインターセプトする。レコーダ２０６は、プロトコルデータストリームから少なくとも１つのパケットをコピーし、該少なくとも１つのコピーされたパケットを用いてプロトコルデータストリーム２１０の記録を作成する。
【００３２】
ここで図２を参照して、さらに詳細には、第１のデバイス２０２は、プロトコルデータストリーム２０８を第２のデバイス２１２に送信する。一実施形態において、第１のデバイス２０２は、遠隔提示プロトコルサーバエンジン２０４を用いて第２のデバイス２１２にプロトコルデータストリーム２０８を送信する。一部の実施形態において、第２のデバイス２１２は、遠隔提示プロトコルクライアントエンジン２１４を用いて第１のデバイス２０２からプロトコルデータストリーム２０８を受信する。一部の実施形態において、遠隔提示プロトコルは、小型軽量クライアントプロトコル、例えばＣｉｔｒｉｘ  Ｓｙｓｔｅｍｓ，  Ｉｎｃ．，  ｏｆ  Ｆｔ．  Ｌａｕｄｅｒｄａｌｅ，  Ｆｌｏｒｉｄａによって製造されたＩＣＡプロトコル、Ｘ．ｏｒｇ  ＦｏｕｎｄａｔｉｏｎによるＸプロトコル、ＡＴ＆Ｔ  Ｃｏｒｐ．のＶｉｒｔｕａｌ  Ｎｅｔｗｏｒｋ  Ｃｏｍｐｕｔｉｎｇ  ｐｒｏｔｏｃｏｌ、またはＭｉｃｒｏｓｏｆｔ  Ｃｏｒｐｏｒａｔｉｏｎ  ｏｆ  Ｒｅｄｍｏｎｄ，  Ｗａｓｈｉｎｇｔｏｎによって製造されたＲＤＰプロトコルを含む。
【００３３】
プロトコルデータストリーム２０８は、複数のパケットを含み、その少なくとも一部は、ディスプレイデータを表す。一部の実施形態において、プロトコルデータストリーム２０８は、記録されたセッションについての情報を含む。一実施形態において、プロトコルデータストリーム２０８は、メタデータを含む。別の実施形態において、プロトコルデータストリーム２０８は、記録されたセッションにおけるユーザについての情報を含む。さらに別の実施形態において、プロトコルデータストリーム２０８は、記録されたデータを生成するサーバについての情報を含む。さらなる別の実施形態において、プロトコルデータストリーム２０８は、タイムスタンプを含む。
【００３４】
一実施形態において、プロトコルデータストリーム２０８は、複数のチャネルを含む。この実施形態において、チャネルは、データが送信されるピアトゥピアの接続を含む。別の実施形態において、プロトコルデータストリーム２０８は、複数の仮想のチャネルを含む。この実施形態において、仮想のチャネルは、別のチャネルにラップ（ｗｒａｐｐｅｄ）されたチャネルである。第２のデバイス２１２は、プロトコルデータストリーム２０８を受信し、一部の実施形態において遠隔提示プロトコルクライアントエンジン２１４を用いてディスプレイデータを再生成する。プロトコルデータストリーム２０８を処理することは、第２のデバイス２１２がディスプレイ２１６を介してユーザにディスプレイを提示することを可能にする。第２のデバイス２１２は、ディスプレイデータを処理するために遠隔提示プロトコルクライアントエンジン２１４を用い得る。ディスプレイは、聴覚的、視覚的、触覚的、または嗅覚的な提示、またはこれらの組み合わせを含み、それらに限定はされない。
【００３５】
レコーダ２０６は、第１のデバイス２０２から第２のデバイス２１２に送信されたプロトコルデータストリーム２０８をインターセプトする。一実施形態において、レコーダ２０６は、１つ以上のチャネルをインターセプトすることによってプロトコルデータストリーム２０８をインターセプトする。別の実施形態において、レコーダ２０６は、１つ以上の仮想のチャネルをインターセプトすることによってプロトコルデータストリーム２０８をインターセプトする。一部の実施形態において、レコーダ２０６は、第１のデバイス２０２が第２のデバイス２１２にプロトコルデータストリーム２０８を送信し得る１つ以上の仮想のチャネルをモニターする。レコーダ２０６は、プロトコルデータストリームから少なくとも１つのパケットをコピーする。一実施形態において、レコーダ２０６は、ポリシーに応答するプロトコルデータストリームの特定のパケットをコピーすることを決定する。一部の実施形態において、ポリシーは、パケット内に含まれるデータの種類に基づいて、レコーダ２０６が記録するパケットを定義する。別の実施形態において、レコーダ２０６は、パケットがデータを含むかどうかという決定に基づいて、プロトコルデータストリームのパケットをコピーすることを決定する。これらの実施形態の一部において、レコーダ２０６は、空のパケットは記録せず、その一方で、他のこれらの実施形態において、レコーダ２０６は、空のパケットを記録する。一部の実施形態において、レコーダ２０６は、プロトコルデータストリーム２０８の中の全てのパケットを記録する。
【００３６】
レコーダ２０６は、少なくとも１つのコピーされたパケットを用いて、記録されたプロトコルデータストリーム２１０を作成する。一実施形態において、レコーダ２０６は、情報を少なくとも１つのコピーされたパケットと関連付ける。一実施形態において、レコーダ２０６は、タイムスタンプを少なくとも１つのコピーされたパケットと関連付ける。別の実施形態において、レコーダ２０６は、データ長インジケータをパケットと関連付ける。レコーダ２０６が情報を少なくとも１つのコピーされたパケット、例えばタイムスタンプまたはデータ長インジケータと関連付ける実施形態に対して、レコーダ２０６は、この情報を、パケットに加えて記録されたプロトコルデータストリーム２１０に埋め込み得、またはレコーダ２０６は、この情報を直接にパケットに埋め込み得、またはレコーダ２０６は、パケットおよび記録されたプロトコルデータストリーム２１０から分離したロケーションにアソシエーションを格納し得る。
【００３７】
図２に図示されるように、レコーダ２０６は、第１のデバイス２０２上に存在し得る。図３は、レコーダ２０６が第２のデバイス上に存在する実施形態を図示し、図３中においてレコーダ２０６は、第２のデバイス２１２上に存在する。図４は、レコーダ２０６が第３のデバイス上に存在する実施形態を図示する。レコーダ２０６が存在し得るデバイスは、クライアントコンピューティングシステムと、サーバコンピューティングシステムと、プロキシサーバコンピューティングシステムと、ネットワークパケットスニフィングコンピューティングシステムと、プロトコルアナライザコンピューティングシステムと、パススルーサーバコンピューティングシステムとを含む。
【００３８】
レコーダ２０６は、少なくとも１つのコピーされたパケットと、一部の実施形態においては少なくとも１つのコピーされたパケットに関連付けられた情報とを用いて、記録されたプロトコルデータストリーム２１０を作成する。一部の実施形態において、レコーダ２０６は、プロトコルデータストリーム２１０の記録を、作成した後に格納する。これらの実施形態の一部において、レコーダ２０６は、格納要素２１８にプロトコルデータストリーム２１０の記録を格納する。格納要素２１８は、固定ストレージを含み、例えばハードドライブ、フロッピー（登録商標）ドライブ、ＣＤ−ＲＷ、ＤＶＤ−ＲＷまたは、任意の他のデバイスであり、それらは電力が消えたときにデータの状態を維持する。他の実施形態において、格納要素は、１つ以上の揮発性メモリ要素を含み得、例えば、スタティックランダムアクセスメモリ（ＳＲＡＭ）、バースト（Ｂｕｒｓｔ）ＳＲＡＭまたはＳｙｎｃｈＢｕｒｓｔ  ＳＲＡＭ（ＢＳＲＡＭ）、ダイナミックランダムアクセスメモリ（ＤＲＡＭ）、ファストページモードＤＲＡＭ（ＦＰＭ  ＤＲＡＭ）、エンハンストＤＲＡＭ（ＥＤＲＡＭ）、エクステンデッドデータ出力ＲＡＭ（ＥＤＯ  ＲＡＭ）、エクステンデッドデータ出力ＤＲＡＭ（ＥＤＯ  ＤＲＡＭ）、バーストエクステンデッドデータ出力ＤＲＡＭ（ＢＥＤＯ  ＤＲＡＭ）、エンハンストＤＲＡＭ（ＥＤＲＡＭ）、シンクロノスＤＲＡＭ（ＳＤＲＡＭ）、ＪＥＤＥＣ  ＳＲＡＭ、ＰＣ１００  ＳＤＲＡＭ、ダブルデータレートＳＤＲＡＭ（ＤＤＲ  ＳＤＲＡＭ）、エンハンストＳＤＲＡＭ（ＥＳＤＲＡＭ）、ＳｙｎｃＬｉｎｃ  ＤＲＡＭ（ＳＬＤＲＡＭ）、ディレクトランバスＤＲＡＭ（ＤＲＤＲＡＭ）、またはＦｅｒｒｏｅｌｅｃｔｒｉｃ  ＲＡＭ（ＦＲＡＭ）などである。
【００３９】
一実施形態において、格納要素は、ネットワーク格納デバイスを含む。格納要素２１８は、第１のデバイス２０２上、または第２のデバイス２１２上に存在し得る。他の実施形態において、格納要素２１８は、第３のデバイス上に存在し得、例えば、プロキシサーバコンピューティングデバイスまたはパススルーサーバコンピューティングデバイスである。さらに他の実施形態において、格納要素２１８は、ネットワーク上に存在し、レコーダ２０６は、ネットワークを介して格納要素２１８にアクセスし、プロトコルデータストリーム２２０の記録を格納する。他の実施形態において、レコーダ２０６は、レコーダ２０６が存在する同一のデバイス上にプロトコルデータストリームの記録を格納する。
【００４０】
ここで図５を参照して、ブロック図は、プロトコルエンジン５０２を図示し、プロトコルエンジン５０２は、プロトコルデータストリーム５０６の記録から少なくとも１つのコピーされたパケットを読み取り、少なくとも１つのコピーされたパケットに関連付けられた情報を用いてプロトコルデータストリーム５０６によって表されるディスプレイデータを再生成する。プロトコルエンジン５０２は、プロトコルデータストリーム５０６を受信する。一部の実施形態において、プロトコルエンジン５０２は、格納要素５０４からプロトコルデータストリーム５０６を検索する。他の実施形態において、プロトコルエンジン５０２は、レコーダ２０６からプロトコルデータストリーム５０６を検索する。さらに他の実施形態において、プロトコルエンジン５０２は、別のコンピューティングデバイスからプロトコルデータストリーム５０６を検索する。
【００４１】
一部の実施形態において、プロトコルエンジン５０２は、パケットリーダ５０８およびディスプレイデータ再生成要素５１０を含む。これらの実施形態において、パケットリーダ５０８は、プロトコルデータストリーム５０６の記録から少なくとも１つのコピーされたパケットを読み取る。一部の実施形態において、パケットリーダ５０８は、プロトコルデータストリーム５０６の記録から続けて少なくとも１つのコピーされたパケットを読み取る。
【００４２】
プロトコルエンジン５０２は、少なくとも１つのコピーされたパケットおよび少なくとも１つのコピーされたパケットに関連付けられたあらゆる情報を処理する。プロトコルエンジン５０２は、一部の実施形態において、処理のためにディスプレイデータ再生成要素５１０を用いる。パケットは、ユーザに提示される認知が可能なディスプレイの再生成を可能にするデータを含む。一部の実施形態において図２に示されるように、第２のデバイス２１２は、このデータを処理する。一実施形態において、処理することは、少なくとも１つのコピーされたパケットのコンテンツをバッファにレンダリングする（ｒｅｎｄｅｒ）ことを含む。別の実施形態において、処理することは、少なくとも１つのコピーされたパケットのコンテンツを認知が可能な仕方でレンダリングすることを含む。再生成されたディスプレイは、聴覚的、視覚的、触覚的、または嗅覚的な提示、またはこれらの組み合わせを含み、それらに限定はされない。
【００４３】
一部の実施形態において、プロトコルエンジン５０２は、第１のデバイス２０２上に存在する。他の実施形態において、プロトコルエンジン５０２は、第２のデバイス２１２上に存在する。さらに他の実施形態において、プロトコルエンジンは、第３のデバイス上に存在し、例えば、プロキシサーバコンピューティングデバイスまたはパススルーサーバコンピューティングデバイスに存在する。
【００４４】
ここで図７に進んで参照すると、ブロック図は、元来は図２におけるレコーダ２０６として記述されたレコーダ７０２のさらなる詳細を図示する。簡潔に概略すると、レコーダ７０２は、プロトコルデータストリーム７１０のインターセプションとプロトコルデータストリーム７１０の記録７１２の作成とを介してサーバから生成されるデータを記録する。
【００４５】
レコーダ７０２は、一実施形態においてプロトコルデータストリームインターセプタ７０４と、パケットコピア７０６と、記録ジェネレータ７０８とを含む。一実施形態において、レコーダ７０２は、プロトコルデータストリームインターセプタ７０４を用いてプロトコルデータストリーム７１０をモニターする。別の実施形態において、レコーダ７０２は、プロトコルデータストリームインターセプタ７０２を用いて、第１のデバイス２０２から第２のデバイス２１２に送信される複数のパケットを含むプロトコルデータストリーム７１０をインターセプトする。パケットコピア７０６は、プロトコルデータストリームの少なくとも１つのパケットをコピーする。パケットコピア７０６は、プロトコルデータストリームの中のパケットをコピーするか否かを決定する。一部の実施形態において、パケットコピア７０６は、ポリシーに応答してこの決定を下す。これらの実施形態において、パケットコピア７０６は、パケットがなんらかのデータを含むか否か、またはパケットの中に含まれるデータの種類に基づいて、パケットをコピーすることを決定し得る。
【００４６】
一実施形態において、レコーダ７０２は、記録ジェネレータ７０８を利用して、少なくとも１つのコピーされたパケットを用いてプロトコルデータストリームの記録を作成する。記録ジェネレータは、少なくとも１つのコピーされたパケットをプロトコルデータストリーム７１０の記録７１２の中にアセンブルする。一部の実施形態において、記録ジェネレータ７０８は、プロトコルデータストリームの記録の中に情報を埋め込む。この情報は、パケット内に含まれるデータによって表されるディスプレイデータをいつ再生成するかを示す時間基準、パケット内に含まれるデータを記述したデータ長インジケータ、またはプロトコルデータストリーム７１０内に含まれるデータによって表されるディスプレイデータを再生成するために用いられる他の種類の情報を含み得、それらに限定はされない。
【００４７】
図８は、プロトコルデータストリーム７１０の記録７１２の一実施形態を図示する。示される実施形態において、記録ジェネレータ７０８は、遠隔提示プロトコルデータチャンクの中に少なくとも１つのコピーされたパケットを分類した。記録ジェネレータ７０８は、時間基準およびデータ長を各遠隔提示プロトコルデータチャンクと関連付け、プロトコルデータストリーム７１０の記録７１２の中に情報およびパケットをアセンブルした。
【００４８】
図７に戻って参照すると、一実施形態において、レコーダ７０２は、格納要素７１４にプロトコルデータストリーム７１０の完了した記録７１２を格納する。一部の実施形態において、格納要素は、ネットワーク上に位置し、レコーダ７０２は、ネットワークを介して格納要素７１４に記録７１２を送信する。他の実施形態において、格納要素は、プロキシサーバコンピューティングデバイス上に位置する。さらに他の実施形態において、格納要素は、パススルーサーバコンピューティングデバイス上に位置する。一部の実施形態において、格納要素７１４は、レコーダ７０２と同一のデバイス上に存在する。
【００４９】
一実施形態において、図７によって陰影で図示されるプロトコルデータストリームの記録およびプレイバックのためのシステムは、レコーダ７０２および図５で議論されるプレイバックデバイス５１４を含む。プレイバックデバイス５１４は、プロトコルエンジン５０２を含み、該プロトコルエンジン５０２は、パケットリーダ５０８を用いてパケットデータストリームの記録７１２から少なくとも１つのコピーされたパケットを受信し、読み取り、埋め込まれた情報を用いてプロトコルデータストリームの記録７１２によって表されるディスプレイデータを再生成する。一部の実施形態において、プロトコルエンジン５０２は、ディスプレイデータの再生成中に続けてパケットを読み取る。
【００５０】
図７によって図示される別の実施形態において、サーバから生成されたデータを記録および再生するためのシステムは、レコーダ７０２と、格納要素７１４と、プロトコルエンジン５０２とを含む。レコーダ７０２は、プロトコルデータストリームの記録を生成し、記録７１２を格納要素７１４に格納する。レコーダはプロトコルデータストリームから少なくとも１つのパケットをコピーし、時間基準またはパケット内のデータの長さを記述するデータ長インジケータを含むが、それらには限定されない少なくとも１つのパケットと情報とを関連付ける。プロトコルエンジン５０２は、格納要素７１４と通信し、プロトコルデータストリームの記録から少なくとも１つのパケットを読み取り、少なくとも１つのパケットと関連付けられた情報を用いてプロトコルデータストリーム７１０の記録によって表されるディスプレイデータを再生成する。
【００５１】
一実施形態において、レコーダ７０２、プロトコルエンジン５０２、または格納要素７１４は、第１のデバイス２０２上に共に、または別個に位置し得る。他の実施形態において、それらは、第２のデバイス２１２上に共に、または別個に位置し得る。さらに別の実施形態において、それらは第３のデバイス、例えばプロキシサーバコンピューティングデバイス、ネットワークパケットスニッファ、またはパススルーサーバコンピューティングデバイスの上に共に、または別個に存在し得る。さらなる他の実施形態において、格納要素７１４は、レコーダ７０２およびプロトコルエンジン５０２とは分離して、格納領域ネットワーク上に存在し得る。
【００５２】
ここで図６を参照して、流れ図は、サーバから生成されるデータを記録および再生するための方法を要約する。簡潔に概略すると、レコーダ２０６は、第１のデバイス２０２から第２のデバイス２１２に送信される複数のパケットを含むプロトコルデータストリーム２０８をインターセプトする（ステップ６０２）。レコーダ２０６は、プロトコルデータストリーム２０８から少なくとも１つのパケットをコピー（ステップ６０４）し、プロトコルデータストリーム２１０の記録を作成する（ステップ６０６）。該記録は、プロトコルエンジン５０２が後程に、記録されたプロトコルデータストリーム２１０によって表されるディスプレイデータを再生成するときに用いる（ステップ６０８、ステップ６１０）。
【００５３】
レコーダ２０６は、複数のパケットを含むプロトコルデータストリーム２０８をインターセプトし、第１のデバイス２０２から第２のデバイス２１２に送信されるディスプレイデータを表す。レコーダ２０６は、プロトコルデータストリーム２０８の少なくとも１つ
のパケットをコピーする。レコーダ２０６は、少なくとも１つのコピーされたパケットを用いてプロトコルデータストリームの記録を作成する。レコーダ２０６は、一部の実施形態において情報を少なくとも１つのコピーされたパケットと関連付ける。情報は、タイムスタンプまたはデータ長インジケータを含み得る。これらの実施形態の一部において、レコーダ２０６は、パケットと関連付けられた情報をプロトコルデータストリーム２１０の記録に埋め込む。他のこれらの実施形態において、レコーダ２０６は、パケットと関連付けられた情報を別のプロトコルデータストリームに格納する。さらに他のこれらの実施形態において、レコーダは、パケットと関連付けられた情報をデータストアに格納する。プロトコルエンジン５０２は、プロトコルデータストリーム２１０の記録から少なくとも１つのコピーされたパケットを読み取り、少なくとも１つのコピーされたパケットと関連付けられた情報を用いてプロトコルデータストリーム２１０によって表されるディスプレイデータを再生成する。
【００５４】
ここで図１１に進んで参照すると、ブロック図は、ステートフル遠隔提示プロトコルのプレイバックの間にリアルタイムをシーキングするためのシステムを図示する。簡潔に概略すると、この図面は、プレイバックデバイス５１４（上記の図５を参照）の実施形態を図示し、該プレイバックデバイス５１４は、２つのプロトコルエンジン５０２、バックグラウンドプロトコルエンジン１１０２およびフォアグラウンドプロトコルエンジン１１０６、ならびにステートスナップショット１１０４およびディスプレイ１１０８を含む。バックグラウンドプロトコルエンジン１１０２は、プロトコルデータストリーム１１１０の記録を受信し、プロトコルデータストリーム１１１０の記録を読み取る。該記録は、複数のパケットを含み、ディスプレイデータを表す。一実施形態において、プレイバックデバイス５１４は、少なくとも１つのパケットのコンテンツをプロトコルデータストリーム１１１０にレンダリングすることと、ディスプレイ１１０８を用いて結果を表示することとによってディスプレイデータを再生成する。結果は、認知が可能な聴覚的、視覚的、触覚的、または嗅覚的な提示を含み、それらに限定はされない。
【００５５】
ここで図１１を参照して、より詳細な点に関して、バックグラウンドプロトコルエンジン１１０２は、レンダリングされたディスプレイデータの受信者が、プロトコルデータストリーム１１１０の提示の間にリアルタイムにおけるコンテンツをシーキングすることを可能にする。バックグラウンドプロトコルエンジン１１０２は、少なくとも１つのステートスナップショット１１０４を生成し、その一方でプロトコルデータストリーム１１１０から少なくとも１つのパケットを読み取る。一実施形態において、バックグラウンドプロトコルエンジン１１０２は、バッファに少なくとも１つのパケットのコンテンツをレンダリングする。この実施形態において、バッファは、オフスクリーンバッファを含み得る。この実施形態において、バックグラウンドプロトコルエンジン１１０２は、少なくとも１つのパケットのコンテンツをレンダリングしながら、少なくとも１つのステートスナップショット１１０４を生成する。バックグラウンドプロトコルエンジン１１０２は、フォアグラウンドプロトコルエンジン１１０６に対してステートスナップショット１１０４を利用可能にする。
【００５６】
ステートスナップショット１１０４は、ディスプレイデータの再生成を可能にするが、なぜならば、レコーダ２０６がプロトコルデータストリーム２０８からプロトコルデータストリーム１１１０の記録に少なくとも１つのパケットをコピーした時点で、プロトコルデータストリーム１１１０をレンダリングするプロトコルエンジンの状態を格納するからである。一実施形態において、ステートスナップショット１１０４は、ある時点のスクリーンの状態を記述するデータ構造を含む。別の実施形態において、ステートスナップショット１１０４は、プロトコルデータストリーム１１１０における基準点でプロトコルエンジンの状態を構成する全ての変数、イメージおよびデータ構成要素を表す。フォアグラウンドプロトコルエンジン１１０６もまた、プロトコルデータストリーム１１１０の記録を受信し、プロトコルデータストリーム１１１０を元来レンダリングしたプロトコルエンジンの状態を再び作成することによって、プロトコルデータストリーム１１１０の中に少なくとも１つのパケットのコンテンツをレンダリングする。一実施形態において、フォアグラウンドプロトコルエンジン１１０６は、ステートスナップショット１１０４のコンテンツを用いて少なくとも１つのパケットのコンテンツをレンダリングする。
【００５７】
一実施形態において、ステートスナップショット１１０４は、データ構造を含む。他の実施形態において、ステートスナップショット１１０４は、データベースを含む。一実施形態において、ステートスナップショット１１０４のコンテンツは、可視の表面の状態に関するディスプレイデータを含む。別の実施形態において、ステートスナップショット１１０４のコンテンツは、オフスクリーンの表面の状態に関するディスプレイデータを含む。さらなる別の実施形態において、ステートスナップショット１１０４のコンテンツは、描画対象の状態に関するディスプレイデータを含む。一部の実施形態において、ステートスナップショット１１０４のコンテンツは、カラーパレットの状態に関するディスプレイデータを含む。他の実施形態において、ステートスナップショット１１０４のコンテンツは、キャッシュされた対象物の状態に関するディスプレイデータを含む。さらに他の実施形態において、ステートスナップショット１１０４のコンテンツは、バッファの状態に関するディスプレイデータを含む。
【００５８】
フォアグラウンドプロトコルエンジン１１０６は、プロトコルデータストリーム１１１０の記録を受信し、ステートスナップショット１１０４を用いて要求されたデジタルデータの表現（ｒｅｐｒｅｓｅｎｔａｔｉｏｎ）を含むパケットを識別し、パケットをレンダリングする。一部の実施形態において、フォアグラウンドプロトコルエンジン１１０６は、ディスプレイ１１０８を用いるビューアへの提示のために、プロトコルデータストリーム１１１０の記録のリアルタイムにおける認識できる表現を生成する。一部の実施形態において、フォアグラウンドプロトコルエンジン１１０６は、プロトコルデータストリーム１１１０に少なくとも１つのパケットのコンテンツをレンダリングすることによって、リアルタイムにおける認識できる表現を生成する。認識できる表現は、聴覚的、視覚的、触覚的、または嗅覚的な提示を、別個にまたは共に含み得、それらに限定はされない。
【００５９】
フォアグラウンドプロトコルエンジン１１０６がプロトコルデータストリーム１１１０に少なくとも１つのパケットのコンテンツをレンダリングする実施形態の１つにおいて、フォアグラウンドプロトコルエンジン１１０６は、バックグラウンドプロトコルエンジン１１０２によってレンダリングすることと同時に、プロトコルデータストリーム１１１０に少なくとも１つのパケットのコンテンツをレンダリングすることを開始する。しかし、バックグラウンドプロトコルエンジン１１０２は、バッファのみにレンダリングし、フォアグラウンドプロトコルエンジン１１０６によって開始されたリアルタイムにおける認知可能なレンダリングの完了に先立って、レンダリングおよび少なくとも１つのステートスナップショット１１０４の生成を完了し、一実施形態において、フォアグラウンドプロトコルエンジン１１０６は、バッファおよび認知可能な仕方の両方にレンダリングする。一実施形態において、バックグラウンドプロトコルエンジン１１０２は、最大限に可能な限りの速度でプロトコルデータストリーム１１１０をレンダリングし、さもなければレンダリングのための時間を特定し得る記録に関連付けられたあらゆるタイムスタンプに関係なくなされる。従って、プロトコルデータストリーム１１１０の記録のリアルタイムにおける認知可能な表現の生成の間に、少なくとも１つのステートスナップショット１１０４は、フォアグラウンドプロトコルエンジン１１０６に利用可能である。
【００６０】
一実施形態において、フォアグラウンドプロトコルエンジン１１０６は、連続した仕方でプロトコルデータストリーム１１１０の記録内で複数のパケットのコンテンツをレンダリングする。この実施形態において、ユーザにレンダリングおよび提示されたディスプレイデータは、プロトコルデータストリームが記録された時間が発生した順番でディスプレイを提示する。プロトコルデータストリーム１１１０の記録は、例えばタイムスタンプなどの情報を含み、フォアグラウンドプロトコルエンジン１１０６がディスプレイデータを連続してレンダリングするときに用いられる。一部の実施形態において、フォアグラウンドプロトコルエンジン１１０６は、リアルタイムにおいてディスプレイデータをレンダリングする。フォアグラウンドプロトコルエンジン１１０６が、プロトコルデータストリーム１１１０の記録における特定のパケットによって表される特定のディスプレイデータを再生成する要求を受信するときに、フォアグラウンドプロトコルエンジン１１０６は、識別されたステートスナップショット１１０４のコンテンツを用いて要求されたディスプレイデータをレンダリングする。
【００６１】
一部の実施形態において、バックグラウンドプロトコルエンジン１１０２およびフォアグラウンドプロトコルエンジン１１０６は、同一のデバイス上に存在する。他の実施形態において、バックグラウンドプロトコルエンジン１１０２およびフォアグラウンドプロトコルエンジン１１０６は、別個のデバイス上に存在する。
【００６２】
ここで図９に戻って参照すると、流れ図は、ステートフル遠隔提示プロトコルのプレイバックの間のリアルタイムシーキングのための方法で取られるステップの一実施形態を図示する。簡潔に概略すると、プロトコルデータストリームの記録におけるパケットのコンテンツによって表されるデータディスプレイのレンダリングに対する要求がある（ステップ９０２）。まず要求されたパケットに関連付けられたタイムスタンプよりも後ではない関連付けられたタイムスタンプを有するステートスナップショットを識別（ステップ９０４）し、識別されたステートスナップショットに応答する要求されたコンテンツをレンダリングする（ステップ９０６）ことによって、適切なパケットのコンテンツはレンダリングされる。
【００６３】
一実施形態において、フォアグラウンドプロトコルエンジン１１０６は、プロトコルデータストリーム１１１０のレコーディングにおけるパケットのコンテンツをレンダリングする要求を受信する。プロトコルデータストリーム１１１０は、複数のパケットを含み、該パケットのコンテンツは、ディスプレイデータを表す。一部の実施形態において、フォアグラウンドプロトコルエンジン１１０６が、ディスプレイ１１０８を用いるビューアにプロトコルデータストリーム１１１０の記録におけるパケットのコンテンツをレンダリングすることによってディスプレイデータを再生成し、ビューアが特定のディスプレイデータをシーキングすることを望むときに、要求は結果として起こる。
【００６４】
フォアグラウンドプロトコルエンジン１１０６は、要求されたパケットに関連付けられたタイムスタンプよりも後ではない関連付けられたタイムスタンプを有するステートスナップショット１１０４を識別する。フォアグラウンドプロトコルエンジン１１０６は、識別されたステートスナップショット１１０４に応答する、要求されたパケットのコンテンツによって表されるディスプレイデータを表示する。一実施形態において、識別されたステートスナップショット１１０４は、プロトコルデータストリーム１１１０から正確なパケットを示し、プロトコルデータストリーム１１１０のコンテンツは、フォアグラウンドプロトコルエンジン１１０６が、要求されたディスプレイデータをユーザに提供するためにレンダリングし得る。
【００６５】
他の実施形態において、識別されたステートスナップショット１１０４は、レコーダがプロトコルデータストリーム１１１０からパケットをコピーしたが、コピーされたパケットのコンテンツによって表されるディスプレイデータが、ビューアによって要求されたディスプレイデータに先んずる時点における、プロトコルデータストリームをレンダリングする、プロトコルエンジンの状態を含む。これらの実施形態の一部において、ステートスナップショットと要求されたディスプレイデータの表現を含むパケットとの間に複数のパケットがある。これらの実施形態の一部において、フォアグラウンドプロトコルエンジン１１０６は、オフスクリーンバッファのみに中間のパケットまたは複数の中間のパケットのコンテンツをレンダリングする。フォアグラウンドプロトコルエンジン１１０６は、次いで、コンテンツが、認知可能な仕方でオフスクリーンバッファとユーザとの両方にディスプレイデータを表すパケットをレンダリングする。一実施形態において、フォアグラウンドプロトコルエンジン１１０６は、要求されたコンテンツによって表されるディスプレイデータに先立って、認知可能な仕方で中間のパケットのコンテンツによって表されるディスプレイデータを提示する。
【００６６】
ここで図１０を参照して、流れ図は、遠隔提示プロトコルのプレイバックの間にリアルタイムにおけるシーキングを可能にするステートスナップショットを生成するために取られるステップの一実施形態を図示する。簡潔に概略すると、バックグラウンドプロトコルエンジン１１０２は、プロトコルデータストリーム１１１０の記録を受信し、プロトコルデータストリーム１１１０内の複数のパケットのコンテンツによって表されるディスプレイデータを再生成する間に少なくとも１つのステートスナップショットを生成する。
【００６７】
バックグラウンドプロトコルエンジン１１０２は、複数のパケットを含むプロトコルデータストリーム１１１０の記録を受信（ステップ１００２）する。バックグラウンドプロトコルエンジン１１０２は、プロトコルデータストリームの記録の表現を生成する。一実施形態において、バックグラウンドプロトコルエンジン１１０２は、複数のパケットのコンテンツをバッファにレンダリングすることによって表現を生成する。一部の実施形態において、バッファは、オフスクリーンバッファである。
【００６８】
一部の実施形態において、フォアグラウンドプロトコルエンジン１１０６もまた、プロトコルデータストリーム１１１０の記録を受信する。これらの実施形態において、フォアグラウンドプロトコルエンジン１１０６は、プロトコルデータストリームの記録の人間に認知可能な表現を生成するが、上述のように、フォアグラウンドプロトコルエンジン１１０６は、オフスクリーンバッファと認知可能な仕方との両方にレンダリング（ステップ１００４）する。一つのこれらの実施形態において、フォアグラウンドプロトコルエンジン１１０６は、複数のパケットのコンテンツをレンダリングすることによってプロトコルデータストリーム１１１０の記録の人間に認知可能な表現を生成し、実質的に同時に、バックグラウンドプロトコルエンジン１１０２が、プロトコルデータストリームの記録の間に少なくとも１つのステートスナップショットを生成する。
【００６９】
プロトコルデータストリーム１１１０の記録における少なくとも１つのパケットの読み取りの後に、バックグラウンドプロトコルエンジン１１０２は、少なくとも１つのステートスナップショットを生成（ステップ１００６）する。一実施形態において、バックグラウンドプロトコルエンジン１１０２は、プロトコルデータストリーム１１１０の記録の連続する読み取りの間に少なくとも１つのステートスナップショットを生成する。別の実施形態において、バックグラウンドプロトコルエンジン１１０２は、プロトコルデータストリーム１１１０の記録における少なくとも１つのパケットを読み込み、実質的に同時に、バッファへのパケットのコンテンツのレンダリングを行う。一実施形態において、バックグラウンドプロトコルエンジン１１０２は、次いで生成されたステートスナップショット１１０４を格納（ステップ１００８）する。バックグラウンドプロトコルエンジン１１０２が定期的に複数のステートスナップショットを生成する実施形態において、ステートスナップショットは、プロトコルデータストリーム１１１０の記録の間じゅう、マーカーとして機能し得、プロトコルデータストリーム１１１０における特定の時点のロケーションおよびステートスナップショット１１０４の前または後に到着するパケットのロケーションを補助する。
【００７０】
図１２を参照すると、流れ図は、ステートスナップショットの適応的な生成のためにとられるステップの一実施形態を描いている。簡潔に概略すると、バックグラウンドプロトコルエンジン１１０２は、ビューアの活動をモニタリングし、ビューアの活動のレベルに応じて一つ以上のステートスナップショット１１０４を生成する。
【００７１】
ユーザに対してプロトコルデータストリーム１１１０の記録の表示を提示する間（ステップ１２０２）、バックグラウンドプロトコルエンジン１１０２は、ユーザの活動をモニタリングする（ステップ１２０４）。一実施形態において、フォアグラウンドプロトコルエンジン１１０６は、プロトコルデータストリーム１１１０の記録の表示を生成し、ディスプレイ１１０８を用いて、その表示をユーザに提示する。他の実施形態において、バックグラウンドプロトコルエンジン１１０２は表示を生成する。さらに他の実施形態において、第３のデバイスが表示を生成する。
【００７２】
バックグラウンドプロトコルエンジン１１０２は、提示の間、ユーザの活動をモニタリングする（ステップ１２０４）。ユーザの活動をモニタリングすることによって、バックグラウンドプロトコルエンジン１１０２は、活動のモニタリングに応答して活動のプロフィールを作成する（ステップ１２０６）。バックグラウンドプロトコルエンジンは、作成された活動プロフィールに応答して、少なくとも一つのステートスナップショット１１０４を生成する（ステップ１２０８）。
【００７３】
一部の実施形態において、バックグラウンドプロトコルエンジン１１０２は、ユーザの活動レベルを識別する。一部の実施形態において、バックグラウンドプロトコルエンジン１１０２は、活動のない期間を識別する。他の実施形態において、バックグラウンドプロトコルエンジン１１０２は、表示データ内のユーザにとって関心のあるエリアを識別する。活動プロフィールは、これらの識別を反映する。
【００７４】
バックグラウンドプロトコルエンジン１１０２は、活動プロフィールに応答して、少なくとも一つのステートスナップショットを生成する。一部の実施形態において、バックグラウンドプロトコルエンジン１１０２は、一つ以上のステートスナップショットの間隔を拡張することを決定する。他の実施形態において、バックグラウンドプロトコルエンジン１１０２は、一つ以上のステートスナップショットの間隔を減少させることを決定する。さらに他の実施形態において、バックグラウンドプロトコルエンジン１１０２は、活動プロフィールに応答して、少なくとも一つのステートスナップショットを除去することを決定する。さらに他の実施形態において、バックグラウンドエンジンプロトコル１１０２は、活動プロフィールに応答して、少なくとも一つのステートスナップショットを追加することを決定する。
【００７５】
一実施形態において、バックグラウンドプロトコルエンジン１１０２は、シーキング確率の見込みの統計的な分布を識別する。図１３は、一実施形態のシーキング確率の見込みの統計的な分布の三つのタイプを描いている図である。この実施形態において、バックグラウンドプロトコルエンジン１１０２は、ユーザによって行なわれたシーキング要求についてのデータを収集し、格納する。一実施形態において、データは、どの程度規則的に、ユーザがシーキング要求を行なうかを含む。一実施形態において、データは、各シーキング要求の範囲、要求された表示データと、プロトコルデータストリーム１１１０の記録内のパケットのコンテンツをレンダリングすることによって、ユーザに提示される現在の表示データとの間の距離を含む。範囲は、時間単位か、またはプロトコルデータストリーム１１１０の全記録の長さに関してかで、記述され得る。一実施形態において、シーキング要求が行なわれるタイムスタンプが記録される。
【００７６】
図１４は、シーキング確率分布の決定に応答して、ステートスナップショットを生成する一実施形態を描いている図である。バックグラウンドプロトコルエンジン１１０２は、収集されたシーキング要求データを使用して、現在提示されている表示データを中央に置く、シーキング確率分布のグラフを生成する。バックグラウンドプロトコルエンジン１１０２は、ストリーム内の各位置に、ユーザがその位置に関連する表示データをシーキングすることを要求する確率の見込みを指している値を割り当てる。このデータを使用して、バックグラウンドプロトコルエンジン１１０２は、生成されたスナップショット１１０４をどこに配置するべきかを決定し、シーキング確率の統計的な分布に応答して、少なくとも一つのステートスナップショット１１０４を生成する。
【００７７】
図１５は、ユーザの使用パターンの一実施形態を描いている。一実施形態において、バックグラウンドプロトコルエンジン１１０２は、ユーザの使用パターンに基づいて、ユーザに関する活動プロフィールを形成する。使用パターンは、識別されたシーキング確率を反映する。シーキング確率の高いエリアは、ステートスナップショットの密度が高く、シーキング確率の低いエリアは、ステートスナップショットの密度が低い。一部の実施形態において、ステートスナップショットの任意の対の間の距離は、それらの間の平均的なシーキング確率に対して反比例する。バックグラウンドプロトコルエンジン１１０２は、ユーザが確率の高いエリアをシーキングすることを予期し、それにより、シーキングの大部分が速くなる。なぜならば、生成されたステートスナップショット１１０４の間隔が比較的に短いからである。個々のシーキング要求が、あまり遅くならないことを確実にするために、一実施形態において、シーキング確率が非常に低いときでさえ、バックグラウンドプロトコルエンジン１１０２は、生成されたステートスナップショット１１０４の間隔に上限を設ける。同様に、別の実施形態において、下限は、非常に確率の高いエリアに、かなり密接してステートスナップショットを配置することを防止する。一部の実施形態において、待ち時間を最小化するために、ステートスナップショットの配置を決定するときに、隣接するステートスナップショット間のレンダリングの量が考慮される。
【００７８】
新たなユーザまたは使用パターンを区別することのできないユーザを有する実施形態に関して、バックグラウンドプロトコルエンジン１１０２は、デフォルトのステートスナップショット生成パターンを適用する。このパターンは、シーキングすることのほとんどが、現在のフレームの付近で各方向に発生することを想定するが、長い範囲のシーキングの性能は、せいぜい満足できる程度であり得る。多くの小さなシーキングステップとして、現在のフレームの周囲を前後にジョギングすることが、ジョグホイール入力デバイスを用いて達成され得る時には、一般的なユーザは、高い性能を要求する。長い範囲をシーキングすることは、あまり一般的ではなく、顕著な遅れは、許容可能なトレードオフであり得る。
【００７９】
ユーザが識別された使用パターンからはずれる場合には、バックグラウンドプロトコルエンジン１１０２は、ユーザの知識を用いることなくライブプレイバックの間、ステートスナップショット生成パターンを調整する。バックグラウンドプロトコル１１０２は、ステートスナップショットの位置を移動させ、新しい使用パターンのために調整する。例えば、マウスホイールを用いた小さなステップにおいて、普通にシーキングするユーザが、長い範囲をシーキングすることを開始する場合には、バックグラウンドプロトコルエンジン１１０２は、現在のフレームの周囲のステートスナップショットの数を低減させ、長い範囲におけるエリア内のステートスナップショットを追加するための供給源を使用できるようにする。
【００８０】
図１６は、ステートスナップショットの適応性の生成のためのシステムにおいて使用される、上記の方法の一実施形態を要約し、該ステートスナップショットは、バックグラウンドプロトコルエンジン１６０２と、フォアグラウンドプロトコルエンジン１６０８と、プロトコルデータストリーム１６１２と、活動プロフィール１６０４と、ステートスナップショット１６０６とを含む。フォアグラウンドプロトコルエンジン１６０８は、プロトコルデータストリームの記録の表示をビューアに対して提示する。バックグラウンドプロトコルエンジン１６０２は、提示の間、ビューアの活動をモニタリングし、モニタリングに応答して、活動プロフィール１６０４を形成し、活動プロフィールに応答して、ステートスナップショット１６０６を生成し、かつ維持する。
【００８１】
図１８を参照すると、流れ図は、記録されたコンピュータセッションのプレイバックのためのプレイバック命令を生成するためにとられるステップの一実施形態を描いている。簡潔に概略すると、第１のデバイス上で実行しているプロトコルエンジンは、記録されたセッションを受信する（ステップ１８０２）。記録されたストリームは、第２のデバイス上で実行されるアプリケーションプログラムによって生成された表示データを表している複数のパケットを含む。プロトコルエンジンは、人間が認識できる方法（ｈｕｍａｎ−ｐｅｒｃｅｐｔｉｂｌｅ  ｍａｎｎｅｒ）でパケットのコンテンツをレンダリングするように、記録されたストリーム内のパケットのために決定を行う（ステップ１８０４）。次に、プロトコルエンジンは、プレイバックデータ構造内に決定を格納する（ステップ１８０６）。
【００８２】
一実施形態において、プロトコルエンジンは、図５に記述されたように、プロトコルエンジン５０２を含む。他の実施形態において、プロトコルエンジンは、図１１に記述されたようにバックグラウンドプロトコルエンジン１１０２を含む。さらに他の実施形態において、プロトコルエンジンは、図１１に記述されたように、フォアグラウンドプロトコルエンジン１１０６を含む。プロトコルエンジンがバックグラウンドエンジン１１０２を含む一部の実施形態において、プロトコルエンジンは、バックグラウンドプロトコルエンジン１１０２の機能を実行することを中止し得、フォアグラウンドプロトコルエンジン１１０６の機能を実行することを開始し得る。プロトコルエンジンがフォアグラウンドプロトコルエンジン１１０６を含む一部の実施形態において、プロトコルエンジンは、フォアグラウンドプロトコルエンジン１１０６の機能を実行することを中止し得、バックグラウンドプロトコルエンジン１１０２の機能を実行することを開始する。他の実施形態において、プロトコルエンジンは、プロトコルエンジン１１０２とフォアグラウンドプロトコルエンジン１００６との両方を含む。これらの実施形態のうちの一部において、バックグラウンドプロトコルエンジン１１０２とフォアグラウンドプロトコルエンジン１１０６とは、同じデバイスに存在する。他の実施形態において、バックグラウンドプロトコルエンジン１１０２とフォアグラウンドプロトコルエンジン１１０６とは、別個のデバイスに存在する。
【００８３】
一実施形態において、プロトコルエンジンは、人間が認識できる方法でパケットを表示するように、記録されたセッション内のパケットのために決定を行う（ステップ１８０４）。表示は、聴覚的、視覚的、触覚的、または嗅覚的な提示、あるいはそれらの組み合わせを含むが、それらには限定されない。一部の実施形態において、プロトコルエンジンは、パケットのコンテンツの応答に基づいて、パケットを表示することを決定する。これらの実施形態のうちの一部において、プロトコルエンジンは、入力フォーカスを有するアプリケーションプログラムの指標に応答して決定を行なう。これらの実施形態のうちの別の実施形態において、プロトコルエンジンは、パケット内に格納されるユーザ入力のタイプの評価に応答して決定を行なう。これらの実施形態のうちの一部において、プロトコルエンジンは、パケットによって格納されるグラフィックの更新のタイプの評価に応答して決定を行なう。これらの実施形態のうちの他の実施形態において、プロトコルエンジンは、パケットによって格納される相互作用シーケンスのタイプの評価に応答して決定を行なう。
【００８４】
一実施形態において、プロトコルエンジンは、プレイバックデータ構造内に決定を格納する（１８０６）。一部の実施形態において、プレイバックデータ構造は、記録されたストリーム内に含まれる表示データをどのように再生成するのかを記述する。一実施形態において、プレイバックデータ構造内に格納される命令は、表示データをレンダリングする処理を制御する。一実施形態において、プレイバックデータ構造は、記録されたストリーム内のパケットのコンテンツをレンダリングするための時間を含む。この実施形態において、プレイバックデータ構造に含まれる時間が、パケットのコンテンツをレンダリングするために使用され、記録におけるパケットと関連するレンダリング時間は、例えあったとしても、使用されない。一実施形態において、プレイバックデータ構造は、レンダリングの時間を変更する際に、ユーザの入力を受け入れる。
【００８５】
一部の実施形態において、プレイバックデータ構造は、記録されたセッションの一つ以上のプレイバックをどのように実行するかを記述するメタデータを含む。一実施形態において、プレイバックデータ構造は、記録ストリーム内の各パケットに関する記録からなり、相対的にどの時点において適切に、そのパケットのコンテンツが、プレイバックの間にレンダリングされるべきかを示している。一部の実施形態において、メタデータはまた、パケットの開始のファイル内にオフセットを含む。
【００８６】
再び図１７を参照すると、ブロック図は、記録されたセッションをレンダリングするためのシステムの一実施形態を描き、該システムは、第１のデバイス１７０２と、バックグラウンドプロトコルエンジン１７０４と、プレイバックデータ構造１７０６と、フォアグラウンドプロトコルエンジン１７０８と、ディスプレイ１７１０と、第２のデバイス１７１２と、記録されたストリーム１７１４とを含む。バックグラウンドプロトコルエンジン１７０４は、第１のデバイス１７０２上で実行し、記録されたストリーム１７１４の受信に応答して、プレイバックデータ構造１７０６を生成し、該記録ストリーム１７１４は、第２のデバイス１７１２または第３のデバイス上で実行されるアプリケーションプログラムによって、生成された表示データを表している。フォアグラウンドプロトコルエンジン１７０８は、記録されたストリーム１７１４を受信し、バックグラウンドプロトコルエンジン１７０４によって生成されるプレイバックデータ構造１７０６に応答して、記録されたストリーム１７１４をレンダリングする。
【００８７】
一実施形態において、バックグラウンドプロトコルエンジン１７０４とフォアグラウンドプロトコルエンジン１７０８とのそれぞれは、記録されたストリーム１７１４を受信する。この実施形態において、バックグラウンドプロトコルエンジン１７０４は、プレイバックデータ構造を生成し、実質的に同時に、フォアグラウンドプロトコルエンジン１７０８は、記録されたストリームをレンダリングする。
【００８８】
一実施形態において、フォアグラウンドエンジン１７０８は、第１のデバイス１７０２に存在する。図１７の影の部分で示されている別の実施形態において、フォアグラウンドプロトコルエンジン１７０８は、第１のデバイス１７０２にも第２のデバイス１７１２にも存在しない。さらに別の実施形態において、フォアグラウンドプロトコルエンジン１７０８は、第３のデバイスに存在する。一部の実施形態において、フォアグラウンドプロトコルエンジン１７０８は、バックグラウンドプロトコルエンジン１７０４を含む。これらの実施形態のうちの一部において、バックグラウンドプロトコルエンジン１１０２とフォアグラウンドプロトコルエンジン１１０６とは、同じデバイスに存在する。これらの実施形態のうちの他の実施形態において、バックグラウンドプロトコルエンジン１１０２とフォアグラウンドプロトコルエンジン１１０６とは、別個のデバイスに存在する。
【００８９】
一実施形態において、バックグラウンドプロトコルエンジンは、記録されたストリーム内の少なくとも一つのパケットをレンダリングするための少なくとも一つの命令を、プレイバックデータ構造内に格納する。別の実施形態において、バックグラウンドプロトコルエンジンは、プレイバックデータ構造内にメタデータを格納する。さらに別の実施形態において、バックグラウンドプロトコルエンジンは、記録されたセッション内に少なくとも一つのパケットをレンダリングするための時間を示す記録を、プレイバックデータ構造内に格納する。
【００９０】
フォアグラウンドプロトコルエンジン１７０８は、プレイバックデータ構造に応答して、記録されたセッション内の少なくとも一つのパケットをレンダリングする。一実施形態において、フォアグラウンドプロトコルエンジンは、記録されたセッション内の少なくとも一つのパケットを、人間が認識できる方法でバッファにレンダリングする。別の実施形態において、フォアグラウンドプロトコルエンジンは、記録されたセッション内の少なくとも一つのパケットをバッファにレンダリングする。
【００９１】
図１９を参照すると、流れ図は、記録されたコンピュータセッションをプレイバックするための方法においてとられるステップの一実施形態を描いている。簡潔に概略すると、バックグラウンドプロトコルエンジンは、第２のデバイス上で実行されるアプリケーションプログラムによって生成される表示データを表している複数のパケットを含む記録されたストリームを受信する（ステップ１９０２）。バックグラウンドプロトコルエンジンは、人間が認識できる方法でパケットをレンダリングするように、記録されたストリーム内の少なくとも一つのパケットのために決定を行う（ステップ１９０４）。バックグラウンドプロトコルエンジンは、決定をプレイバックデータ構造内に格納する（ステップ１９０６）。フォアグラウンドプロトコルエンジンは、記録されたストリームから少なくとも一つのパケットを引き出し（ステップ１９０８）、プレイバックデータ構造にアクセスし（ステップ１９１０）、プレイバックデータ構造に応答して、少なくとも一つのパケットをレンダリングする（ステップ１９１２）。
【００９２】
一実施形態において、プロトコルエンジンは、人間が認識できる方法でパケットを表示するように、記録されたストリーム内のパケットのために決定を行う（ステップ１９０４）。表示は、聴覚的、視覚的、触覚的、または嗅覚的な提示、あるいはそれらの組み合わせを含むが、それらに限定されない。一部の実施形態において、プロトコルエンジンは、パケットのコンテンツに対する応答に基づいて、パケットを表示することを決定する。これらの実施形態のうちの一つにおいて、プロトコルエンジンは、入力フォーカスを有するアプリケーションプログラムの指標に応答して決定を行なう。これらの実施形態のうちの別の実施形態において、プロトコルエンジンは、パケット内に格納されるユーザの入力のタイプの評価に応答して決定を行なう。これらの実施形態のうちの一部において、プロトコルエンジンは、パケットによって格納されるグラフィックの更新のタイプの評価に応答して決定を行なう。これらの実施形態のうちの他の実施形態において、プロトコルエンジンは、パケットによって格納される相互作用シーケンスのタイプの評価に応答して決定を行なう。一実施形態において、プロトコルエンジンは、プレイバックデータ構造内に決定を格納する（１９０６）。
【００９３】
一実施形態において、フォアグラウンドプロトコルエンジンは、記録されたセッションを受信する。他の実施形態において、フォアグラウンドプロトコルエンジンは、記録されたセッションを引き出す。これらの実施形態のうちの一部において、フォアグラウンドプロトコルエンジンは、記録されたセッションを格納要素から引き出す。
【００９４】
一実施形態において、フォアグラウンドプロトコルエンジンは、少なくとも一つのパケットを記録されたストリームから引き出す（ステップ１９０８）。次に、この実施形態において、フォアグラウンドプロトコルエンジンは、プレイバックデータ構造にアクセスし（ステップ１９１０）、プレイバックデータ構造に応答して、パケットのコンテンツをレンダリングする（ステップ１９１２）。一部の実施形態において、プレイバックデータ構造は、パケットのコンテンツを認識できる方法でレンダリングする命令を含む。これらの実施形態のうちの一つにおいて、フォアグラウンドプロトコルエンジンは、パケットのコンテンツを画面上でレンダリングする。一部の実施形態において、フォアグラウンドプロトコルエンジンは、少なくとも一つのパケットのコンテンツをバッファに必ずレンダリングする。多くの実施形態において、フォアグラウンドプロトコルエンジンが、パケットのコンテンツをバッファにレンダリングするときには、画面外バッファである。これらの実施形態のうちの一つにおいて、フォアグラウンドプロトコルエンジンは、プレイバックデータ構造によって指示されるように、パケットのコンテンツを画面外バッファにレンダリングし、パケットのコンテンツを画面上でもまたレンダリングする。
【００９５】
他の実施形態において、プレイバックデータ構造は、パケットのコンテンツを認識できる方法でレンダリングしない命令を含む。これらの実施形態のうちの一つにおいて、プレイバックデータ構造にアクセスする際に、フォアグラウンドプロトコルは、パケットのコンテンツを認識できる方法でレンダリングしないが、パケットのコンテンツをバッファにレンダリングする。
【００９６】
フォアグラウンドプロトコルエンジンが、プレイバックデータ構造に応答して、パケットのコンテンツを画面外のバッファにのみレンダリングする実施形態に関して、フォアグラウンドプロトコルエンジンは、記録されたストリームとは異なる表示データを認識できるように再生成する。一実施形態において、このことは、最初の記録されたストリームよりも短い表示データの提示をもたらす。一部の実施形態において、パケットのレンダリングされたコンテンツは、最初の表示データの再生成を簡素化する。他の実施形態において、パケットのレンダリングされたコンテンツは、表示データのカスタム化されたバージョンを提供する。一実施形態において、パケットのコンテンツを認識できる方法でレンダリングする決定は、ポリシーまたはユーザの要求に応答する。これらの実施形態は、ユーザに記録されたセッションのプレイバックに対する制御を提供する。
【００９７】
図２１を参照すると、排除される活動を含んでいない認識できる時間間隔を有する記録されたセッションのレンダリングの一実施形態が描かれている。この図において、黒いブロックは、ユーザの入力を含んでいる一つのパケットまたは複数のパケットを表し、点のあるブロックは、グラフィックコマンドを含んでいる一つのパケットまたは複数のパケットを表す。「ユーザの入力」と「グラフィック」との両方の列において白いブロックによって表される時間間隔は、パケットが存在せず、従って全く活動がない。
【００９８】
活動のない認識できる時間間隔を排除する方法の一実施形態は、以下の通りである。記録されたセッション内の第１のパケットが識別される。記録されたセッションは、表示データを表す複数のパケットを含む。記録されたセッション内の第１のパケットの直前のパケットは、第２のパケットとして識別される。第１の時間間隔が決定され、該時間間隔は、該第１のパケットと該第２のパケットとの間に生じる。第１の時間間隔が閾値を超えるという決定が行なわれる。記録されたセッション内のパケットのコンテンツが、該第１のパケットと該第２のパケットとの間の、第１の時間間隔よりも短い第２の時間間隔を有して、レンダリングされる。
【００９９】
一実施形態において、プロトコルエンジンは決定を行なう。一部の実施形態において、プロトコルエンジンは、プレイバックデータ構造内に決定を格納する。一実施形態において、同じプロトコルエンジンが、プレイバックデータ構造に応答して、記録されたセッションをレンダリングする。別の実施形態において、決定を行なうプロトコルエンジンは、バックグラウンドプロトコルエンジンを含み、記録されたセッションをレンダリングするプロトコルエンジンは、フォアグラウンドプロトコルエンジンを含む。
【０１００】
一実施形態において、時間間隔が閾値を超えるということを、プロトコルエンジンが決定するときには、プロトコルエンジンは、時間間隔を認識できる時間間隔として分類する。再生成された記録されたセッションのユーザが、活動のない期間が経過したことを視認し得る場合には、時間間隔は認識できる。一部の実施形態において、ポリシーは、閾値を決定する。他の実施形態において、プロトコルエンジンは、所定の閾値を用いてハードコード化される。この実施形態において、プロトコルエンジンは、プレイバックデータ構造内に命令を格納し、最初の時間間隔の代わりに、第１のパケットと第２のパケットとの間のより短い時間間隔をレンダリングする。別の実施形態において、時間間隔が閾値を超えるということを決定するプロトコルエンジンはまた、記録されたセッションのコンテンツをレンダリングする。この実施形態において、プロトコルエンジンは、より短い時間間隔をレンダリングする命令を、プレイバックデータ構造内に格納しない。認識できると分類されない時間間隔に関して、短くされた時間間隔は必要とされず、最初の時間間隔が、第１のパケットと第２のパケットとの間でレンダリングされる。
【０１０１】
再び図２０を参照すると、流れ図は、記録されたセッションをレンダリングするプレイバック命令を生成するためにとられるステップの一実施形態を描いている。簡潔に概略すると、記録されたセッション内のパケットによって格納される入力のタイプが識別され（ステップ２００２）、入力のタイプに応答して、パッケトが、マーカー付けされる（ステップ２００４）。次に、マーカー付けに応答して、パケットのコンテンツをレンダリングする宛先が、プレイバックデータ構造に格納される。
【０１０２】
一実施形態において、パケットによって格納された入力のタイプは、パケットがレンダリングされるかどうかを決定する。一実施形態において、パケットはコンテンツを含んでいない。一部の実施形態において、少なくとも一つのパケットは、コンテンツを含んでいない。これらの実施形態において、コンテンツを含んでいない少なくとも一つのパケットを含む時間間隔が、識別される。これらの実施形態のうちの一部において、時間間隔は、レンダリングされない。
【０１０３】
一部の実施形態において、入力のタイプは、キーボード、マウス、マイク、またはカメラを含むが、それらには限定されない一定のタイプの入力デバイスからの入力を意味する。一実施形態において、入力のタイプを識別するステップは、入力デバイスからの入力として、入力のタイプを識別することをさらに包含する。別の実施形態において、入力のタイプを識別するステップは、入力のタイプをキーボード入力として識別することをさらに包含する。他の実施形態において、入力のタイプは、入力デバイスに関連しない。これらの実施形態のうちの１つにおいて、入力のタイプは、コマンドとして識別される。
【０１０４】
入力を含んでいるパケットは、パケットが含んでいる入力のタイプに応答して、マーカー付けされる（ステップ２００４）。一実施形態において、パケットは、ポリシーに応答してマーカー付けされる。この実施形態において、ポリシーは入力のタイプを決定し、パケットがマーカー付けされる。別の実施形態において、マーカー付けは必要とされない。
【０１０５】
パケットをレンダリングする宛先が、マーカー付けに応答して、プレイバックデータ構造内に格納される（ステップ２００６）。一部の実施形態において、宛先はバッファを含んでいる。一実施形態において、命令は、プレイバックデータ構造に格納され、バッファにパケットをレンダリングする。一実施形態において、バッファは、画面外のバッファであり、パケットのコンテンツが、バッファにレンダリングされるときには、コンテンツは、レンダリングのユーザにとって認識できない。一実施形態において、命令は、プレイバックデータ構造内に格納され、マーカー付けされたパケットのレンダリングを認識できる方法で、バッファに導く。
【０１０６】
一実施形態において、方法は、有意義な活動を含んでいない認識できる時間間隔を排除する。この実施形態において、ポリシーは、特定のタイプの入力を、有意義であるか、または無意味であるとして識別する。一部の実施形態において、ポリシーは、プロトコルエンジンにハードコード化され得る。他の実施形態において、アドミニストレータは、ポリシーを構成する。
【０１０７】
一部の実施形態において、パケットがコンテンツを含んでいない場合には、プロトコルエンジンは、パケットを無意味であると識別する。これらの実施形態のうちの一部において、パケットは、ユーザの活動が記録されたストリーム１７１４に記録されなかった時間間隔を表す。これらの実施形態において、プロトコルエンジンは、プレイバックデータ構造内に、いかなる無意味なパケットも認識できる方法ではレンダリングされない方法で、記録されたストリーム内の複数のパケットのそれぞれをレンダリングする宛先を格納する。図２２は、記録されたストリームの再生成の一実施形態を描き、該記録されたストリームのコンテンツは、プレイバックデータ構造に応答して、レンダリングされる。この実施形態において、プレイバックデータ構造に応答したレンダリングは、（図２２における白いストライプ状のブロックによって記述されている）無意味な活動を含んでいる時間間隔の排除を可能にし、該無意味な活動は、まったく活動していない時間間隔を含む。このレンダリングは、有意義な記録されたセッションの再生成をユーザに提供し、ポリシーは、いつコンテンツが有意義な活動を表示するかを決定する。一実施形態において、有意義な活動を表示しているコンテンツは、ユーザの入力のタイプを含む。
【０１０８】
一部の実施形態において、プロトコルエンジンは、証明可能に無意味な時間を含む前もって定義された時間に応答する入力タイプを識別する。一部の実施形態において、無意味な時間は、パケットがいかなるコンテンツも含んでいない時間間隔を含む。他の実施形態において、ポリシーは、入力タイプを定義し、該入力タイプは、無意味な時間を構成要素とする。さらに別の実施形態において、証明可能に無意味な時間を含む入力タイプの定義は、プロトコルエンジン内にハードコード化される。
【０１０９】
一部の実施形態において、パケットのコンテンツが、ユーザの活動を表示するが、ポリシーは、その活動を無意味な活動として識別する。これらの実施形態のうちの一つにおいて、ポリシーは、無意味な活動を、再生成された記録されたセッションのユーザにとって関心のないものとみなされる活動として定義する。これらの実施形態の別の実施形態において、ポリシーによって決定されるように、有意義なパケットは、再生成された記録されたセッションのユーザにとって関心のあるコンテンツを含んでいる。一実施形態において、無意味なパケットは、アプリケーションと有意義に相互作用する入力を表示するコンテンツを有していない。別の実施形態において、記録されたストリームが形成されるプロトコルデータストリームにおいて、アプリケーションデータを伝送するデバイスは、有意義なスクリーンのアップデートを伝送しない。
【０１１０】
一実施形態において、プロトコルエンジンは、記録されたセッション内の少なくとも一つのパケットに対して、パケットのコンテンツが、キーボード入力、マウス入力、またはコマンドメッセージを含むが、それらには限定されない入力のタイプを含んでいるかどうかを決定する。パケットが、キーボード入力のようなタイプの入力を含んでいる場合には、プロトコルエンジンは、パケットを有意義なパケットとしてマーカー付けする。パケットが、そのようなタイプの入力を含んでいない場合には、プロトコルエンジンは、そのパケットを無意味なパケットとしてマーカー付ける。一実施形態において、コンテンツの全てが、無意味な場合にのみ、パケットは無意味なものとなる。別の実施形態において、パケットは、一つより多いタイプの入力を含み、入力タイプのそれぞれは、意味があるものか、または無意味なものとしてマーカー付けされる。
【０１１１】
一実施形態において、プロトコルエンジンが、パケットを無意味なものとしてマーカー付けするときには、プロトコルエンジンは、パケットのコンテンツは認識できる方法で、レンダリングするべきではないということを決定する。その代わりに、一部の実施形態において、プロトコルエンジンは、パケットのコンテンツがバッファにレンダリングするべきであるということを決定する。これらの実施形態のうちの一つにおいて、バッファは、画面外バッファである。一実施形態において、パケットが、有意義なパケットとしてマーカー付けされた場合には、プロトコルエンジンは、パケットのコンテンツが、認識できる方法でレンダリングするべきであるということを決定する。一部の実施形態において、認識できる方法は、画面上でのレンダリングを含む。一実施形態において、プロトコルエンジンは、パケットが、認識できる方法で、バッファにレンダリングするべきであるということを決定する。この実施形態において、パケットのコンテンツは、ディスプレイの画面上と画面外のバッファとの両方でレンダリングする。プロトコルエンジンは、プレイバックデータ構造内に決定を格納する。
【０１１２】
図２２に記述される一実施形態において、記録されたストリーム内の特定のパケットは、有意義なユーザの活動、この実施形態において、図２２における黒いブロックによって表現されるマウスボタンの活動状態を示しているマウス入力を表現しているコンテンツを有する。記録されたストリーム内の他のパケットは、図２２におけるストライプ状のブロックによって表現されるマウスボタンの不活動状態を示しているマウス入力を表現しているコンテンツを有する。プロトコルエンジンは、無意味な活動、例えば、マウスボタンの不活動状態を示しているマウス入力のみを含んでいる少なくとも一つのパケットを識別し、パケットのコンテンツが、認識できる方法で、レンダリングするべきではないという決定を、プレイバックデータ構造内に格納する。この決定を行なうことによって、プレイバックデータ構造に応答して、記録されたストリームのコンテンツをレンダリングするプロトコルエンジンは、再生成された記録されたセッションのユーザに関連する表示データのみを再生成し、その場合には、ポリシーが、関連性を定義しているか、またはプロトコルエンジンが、関連するコンテンツの定義を含んでいる。
【０１１３】
図２３を参照すると、流れ図は、記録されたセッションをレンダリングする有意義な活動のない期間を排除するためにとられるステップの一実施形態を描いている。第１の時間間隔が決定され、該第１の時間間隔は、記録されたセッション内のマーカー付けされたパケットと直前にマーカー付けされたパケットとの間に発生する（ステップ２３０２）。記録されたセッションは、表示データを表示している複数のパケットを含んでいる。第１の時間間隔が閾値を超えているという決定が行なわれる（ステップ２３０４）。記録されたセッション内のパケットのコンテンツが、マーカー付けされたパケットと直前にマーカー付けされたパケットとの間の、第１の時間間隔よりも短い第２の時間間隔を有してレンダリングされる（ステップ２３０６）。
【０１１４】
一実施形態において、プロトコルエンジンは、決定を行なう。一部の実施形態において、プロトコルエンジンは、プレイバックデータ構造内に決定を格納する。一実施形態において、同じプロトコルエンジンが、プレイバックデータ構造に応答して、記録されたセッションをレンダリングする。別の実施形態において、決定を行なうプロトコルエンジンは、バックグラウンドプロトコルエンジンを含み、記録されたセッションをレンダリングするプロトコルエンジンは、フォアグラウンドプロトコルエンジンを含む。
【０１１５】
一部の実施形態において、パケットに含まれている入力のタイプに応答して、パケットが、有意義なパケットとしてマーカー付けされた後で、プロトコルエンジンは、第１の時間間隔の決定（ステップ２３０２）と、第１の時間間隔が閾値を超えているかどうかの決定（ステップ２３０４）とを行なう。これらの実施形態のうちの一つにおいて、パケットに含まれている出力のタイプは、パケットをマーカー付けするという決定に影響を与える。一実施形態において、プロトコルエンジンは、有意義なものとしてマーカー付けされたパケットと直前の有意義なパケットの間の時間間隔を決定するか、または直前に有意義なパケットがない場合には、記録の開始を決定する。別の実施形態において、プロトコルエンジンは、マーカー付けされたパケットと直前のパケットとの間の第２の時間間隔を有する記録されたセッションのコンテンツをレンダリングする。該第２の時間間隔は、第１の時間間隔よりも短い時間間隔を含んでいる。別の実施形態において、プロトコルエンジンは、識付けされたパケットと続いてマーカー付けされるパケットとの間の第２の時間間隔を有する記録されたセッションのコンテンツをレンダリングする。該第２の時間間隔は、第１の時間間隔よりも短い時間間隔を含んでいる。
【０１１６】
一実施形態において、プロトコルエンジンが、時間間隔が閾値を超えるということを決定（ステップ２３０４）するときには、プロトコルエンジンは、その時間間隔を認識できる時間間隔として分類する。再生成された記録されたセッションのユーザが、活動のない期間が経過しているということを理解し得る場合には、時間間隔は認識できる。一部の実施形態において、ポリシーは、閾値を決定する。他の実施形態において、プロトコルエンジンは、所定の閾値でハードコード化される。この実施形態において、プロトコルエンジンは、プレイバックデータ構造内に命令を格納し、最初の時間間隔の代わりに、２つの有意義なパケットとの間の短い時間間隔をレンダリングする。別の実施形態において、時間間隔が閾値を超えるということを決定するプロトコルエンジンはまた、記録されたセッションのコンテンツをレンダリングする。この実施形態において、プロトコルエンジンは、プレイバックデータ構造内で短い時間間隔をレンダリングする命令を格納しない。認識できると分類されていない時間間隔に関して、時間間隔は短くする必要はなく、最初の時間間隔は、２つの有意義なパケットとの間でレンダリングされる。
【０１１７】
一部の実施形態において、記録されたストリーム内のパケットのコンテンツは、グラフィックの更新を表し、スクリーン領域に影響を与える。一実施形態において、グラフィックの更新は、点滅システムのトレイアイコン、タイトルバーまたはタスクバーエントリー、ウェブページまたはウェブアプリケーション内の点滅テキスト、時計表示、システムアニメーション、アプリケーションアニメーション、および株価表示器、ならびに定期的に更新される情報表示を含むが、それらには限定されない。一部の実施形態において、これらのようなグラフィックの更新は、記録されたストリームの再生成のユーザに対して無意味なものであると決定される。これらの実施形態のうちの一つにおいて、プロトコルエンジンは、この決定を含んでいる。これらの実施形態の別のものにおいて、ポリシーは、少なくとも一つのグラフィックの更新を無意味なものとして定義する。この実施形態において、アドミニストレータは、ポリシーを生成する。別の実施形態において、記録されたストリームの再生成のユーザはポリシーを生成する。
【０１１８】
図２４を参照すると、流れ図は、記録されたセッションをレンダリングする際に、グラフィックの更新を排除するためにとられるステップの一実施形態を描いている。簡潔に概略すると、グラフィックの更新が識別され（ステップ２４０２）、グラフィックの更新によって影響されるスクリーン領域が、決定される（ステップ２４０４）。影響を与えられるスクリーン領域の位置および状態の指標が格納され（ステップ２４０６）、スクリーン領域の状態に影響を与えている第２のグラフィックの更新が、識別される（ステップ２４０８）。次に、第２のグラフィックの更新が、第１のグラフィックの更新によって影響を与えられる領域を変化させるかどうかに応答して、レンダリングの宛先、およびレンダリングの時間間隔が、示される（ステップ２４１０およびステップ２４１２）。
【０１１９】
一実施形態において、プロトコルエンジンは、図２４に描かれたステップを実行する。この実施形態において、プロトコルエンジンは、記録されたセッション内のパケットを識別し、該記録されたセッションは、アプリケーションプログラムによって生成された表示データを表示し、該パケットは、第１のグラフィックの更新を含んでいる。プロトコルエンジンは、第１のグラフィックの更新によって影響を与えられたスクリーン領域を決定する。一実施形態において、グラフィックの更新は、スクリーンのその部分に表示されるデータを変更することによって、スクリーン領域に影響を与える。プロトコルエンジンは、第１のグラフィックの更新、およびスクリーン領域の位置の後に、スクリーン領域の状態の表示を格納する。一実施形態において、プロトコルエンジンは、更新されたスクリーン領域のコピーを格納する。別の実施形態において、プロトコルエンジンは、更新されたスクリーン領域のハッシュを格納する。
【０１２０】
一実施形態において、プロトコルエンジンは、時間間隔内でスクリーン領域に影響を与える第２のグラフィックの更新を識別する。一部の実施形態において、ポリシーは、時間間隔の長さを決定する。これらの実施形態のうちの一つにおいて、ポリシーは、アプリケーションおよびオペレーティングシステムによって使用される人間スケールの循環期間のほぼ上限の時間間隔を決定する。一実施形態において、スクリーンの領域が循環表示を通過するときには、ユーザによって見られるように設計されている期間（例えば、一秒のほんの数分の一から最大で数秒）で、表示は人間スケールの循環期間を含んでいる。一部の実施形態において、プロトコルエンジンは、時間間隔の長さの定義を含んでいる。
【０１２１】
プロトコルエンジンが、第２のグラフィックの更新が第１のグラフィックの更新によって、影響を与えられているスクリーン領域に、影響を与えていることを識別する実施形態において、プロトコルエンジンは、第２のグラフィックの更新の後のスクリーン領域の状態が、第１のグラフィックの更新の後のスクリーン領域の状態から変化するかどうかを決定する。スクリーン領域が、第２のグラフィックの更新の後に変化しない場合には、第２のグラフィックの更新は、再生成された記録されたセッションにおいてレンダリングする必要がない。この実施形態におけるスクリーングラフィックの更新は、レンダリングする必要がない。なぜならば、プロトコルエンジンは、グラフィックの更新が、人間スケールの速度でコマンドを引き出す循環を実行するので、再生成された記録されたセッションのユーザにとって観察可能な（ｏｂｓｅｖａｂｌｅ）更新を行うが、グラフィックの更新は、ユーザにとって無意味な情報を伝えることを決定するからである。一部の実施形態において、グラフィックの更新は、図形、カレット点滅、点滅するタスクバーのアイコン、ネットワーク活動インジケータ、またはスクロールテキストを含むが、それらには限定されないものによって、スクリーン領域に影響を与える。一部の実施形態において、ポリシーは、そのタイプのグラフィックの更新を用いて、スクリーン領域に影響を与えることが、有意義な活動を構成せず、ユーザに対して、記録されたセッションの再生成においてレンダリングするべきではないということを決定する。他の実施形態において、プロトコルエンジンは、この決定を含んでいる。
【０１２２】
一実施形態において、スクリーン領域に影響を与える第２のグラフィックの更新を含んでいる第２のパケットをレンダリングする宛先の指標は、第２のグラフィック更新の後に、スクリーン領域が変化するかどうかに応答して、プレイバックデータ構造内に格納される。別の実施形態において、スクリーン領域に影響を与える第２のグラフィックの更新を含んでいる第２のパケットと関連する、レンダリングする時間間隔の指標は、第２のグラフィックの更新の後のスクリーン領域の状態が、第１のグラフィックの更新の後のスクリーン領域の状態から変化するかどうかに応答して、プレイバックデータ構造内に格納される。
【０１２３】
図２５は、第２のグラフィックの更新の後のスクリーン領域の状態が、第１のグラフィックの更新の後のスクリーン領域の状態から変化するかどうかに応答してプレイバックデータ構造内に格納される指標に応答して、再生成された記録されたセッションをレンダリングする一実施形態を描いている。一実施形態において、第１のグラフィックの更新によって影響を与えられるスクリーン領域は、第２のグラフィックの更新の後に変化しない。この実施形態において、指標は、第２のグラフィックの更新を認識できるようにレンダリングしないように、プレイバックデータ構造内に格納される。一実施形態において、第２のグラフィックの更新を認識できるようにレンダリングしないことは、画面上ではなく、画面外において第２のグラフィックの更新をレンダリングすることを含んでいる。一部の実施形態において、第２のグラフィックの更新を認識できるようにレンダリングしないことは、第２のグラフィックの更新を画面外のバッファにレンダリングすることを含んでいる。一実施形態において、第２のグラフィックの更新を認識できるようにレンダリングしないことは、第２のグラフィックの更新をレンダリングしないことを含んでいる。一部の実施形態において、第２のグラフィックの更新を認識できるようにレンダリングしない決定は、グラフィックの更新がレンダリングされない認識できる指標をレンダリングすることを含んでいる。これらの実施形態のうちの一つにおいて、再生成された記録されたセッションのユーザは、第２のグラフィックの更新が認識できるようにレンダリングすることを要求し得る。
【０１２４】
図２５は、第２のグラフィックの更新の後のスクリーン領域の状態が、第１のグラフィックの更新の後のスクリーン領域の状態から変化しないということを決定し、かつ循環の更新の検出に応答して、第２のグラフィックの更新をレンダリングしないことを決定することによって、循環の更新が検出される実施形態を描いている。第２のグラフィックの更新によって影響を与えられるスクリーン領域の状態が、第１のグラフィックの更新の後のスクリーン領域の状態から変化する一実施形態において、パケットのコンテンツを、認識できる方法で、バッファにレンダリングする決定が行なわれる。
【０１２５】
一部の実施形態において、複数のパケットのコンテンツが、グラフィックの更新を表示する。これらの実施形態のうちの一つにおいて、認識できる方法でグラフィックの更新をレンダリングする決定は、スクリーン領域上の二つよりも多いグラフィックの更新の効果に応答して行なわれる。一実施形態において、グラフィックの更新をレンダリングする宛先の決定は、識別された複数のパケットのうちの各パケットのコンテンツによって表示されるグラフィックの更新に応答する。
【０１２６】
一部の実施形態において、記録されたストリーム内のパケットのコンテンツは、相互作用シーケンスを表示する。一実施形態において、相互作用シーケンスは、ログオンシーケンス、ログオフシーケンス、または認証の入力を含むが、それらには限定されない。一部の実施形態において、これらのような相互作用シーケンスは、記録されたストリームの再生成のユーザにとって無意味なものであるとして決定される。これらの実施形態のうちの一つにおいて、プロトコルエンジンは、この決定を含んでいる。これらの実施形態のうちの別の実施形態において、ポリシーは、少なくとも一つの相互作用を無意味であるとして定義する。この実施形態において、アドミニストレータは、ポリシーを生成する。別の実施形態において、記録されたストリームの再生成のユーザは、ポリシーを生成する。
【０１２７】
図２６を参照すると、流れ図は、記録されたセッションをレンダリングする相互作用シーケンスを排除するためにとられるステップの一実施形態を描いている。少なくとも１つのパケットの相互作用シーケンスの開始が、ポリシーに応答して識別される（ステップ２６０２）。プレイバックデータ構造において、相互作用シーケンスがバッファにレンダリングするべき指標が存在する（ステップ２６０４）。少なくとも一つのパケットの相互作用シーケンスの終了が識別される（ステップ２６０６）。相互作用シーケンスの開始が識別されるのに先行するパケットと、相互作用シーケンスの終了が識別されるのに続くパケットとの間の第１の時間間隔が、識別される（ステップ２６０８）。プレイバックデータ構造は、第１の時間間隔よりも短い第２の時間間隔をレンダリングする指標を含んでいる（ステップ２６１０）。
【０１２８】
一実施形態において、プロトコルエンジンは、相互作用シーケンスを排除する識別および表示を行なう。相互作用シーケンスの開始の識別が、行なわれる（ステップ２６０２）。一実施形態において、相互作用シーケンスの開始は、視覚的なマーカーを識別することによって識別される。一実施形態において、視覚的なマーカーは、全てのセッションに対して同じ方法で表示される認証ウインドウを含んでいる。別の実施形態において、視覚的なマーカーは、ブランクスクリーン、および次に、デスクトップバックグラウンドによる認証ウインドウの移動を含んでいる。一実施形態において、視覚的なマーカーは、識別可能なアイコンの表示を含んでいる。
【０１２９】
一部の実施形態において、相互作用シーケンスの開始は、相互作用シーケンスの開始時間を決定することによって識別される。これらの実施形態のうちの一つにおいて、コンポーネントが、相互作用シーケンスにおけるイベントの開始時間を検出する。これらの実施形態の別の実施形態において、コンポーネントは、ログオンシーケンスの開始時間を検出する。これらの実施形態のさらに他の実施形態において、コンポーネントは、ログオフシーケンスの開始時間を検出する。一実施形態において、相互作用シーケンスの開始の識別は、入力フォーカスを用いてウインドウを識別することに応答する。
【０１３０】
プレイバックデータ構造において、相互作用シーケンスがバッファ内でレンダリングするべきであるという指示が行なわれる（ステップ２６０４）。識別された相互作用シーケンスが、認識できるようにレンダリングするべきではない実施形態において、相互作用シーケンスは、バッファにレンダリングされる。相互作用シーケンスをバッファにレンダリングすることは、相互作用シーケンスがレンダリングのユーザにとって認識できなくなることとなる。ポリシーまたはユーザが、相互作用シーケンスを無意味であるとして分類する実施形態に関して、このレンダリングは、無意味な相互作用シーケンスを排除することとなる。
【０１３１】
相互作用シーケンスの終了の識別がまた行なわれる（ステップ２６０６）。一部の実施形態において、相互作用シーケンスの終了は、視覚的なマーカーを識別することによって識別される。他の実施形態において、相互作用シーケンスの終了は、相互作用シーケンスの終了時間を決定することによって識別される。これらの実施形態のうちの一つにおいて、コンポーネントは、相互作用シーケンスにおけるイベントの終了時間を検出する。これらの実施形態のうちの別の実施形態において、コンポーネントは、ログオンシーケンスの終了時間を検出する。これらの実施形態のうちのさらに別の実施形態において、コンポーネントは、ログオフシーケンスの終了時間を検出する。別の実施形態において、相互作用シーケンスの終了を識別することは、入力フォーカスを用いたウインドウを識別することに応答する。
【０１３２】
一部の実施形態において、相互作用シーケンスは、アプリケーションの使用を含んでいる。これらの実施形態のうちの一つにおいて、ポリシーは、認識できる方法においてレンダリングするべきではないアプリケーションの使用を含んでいる相互作用シーケンスを識別する。一実施形態において、そのようなアプリケーションは、文書処理ドキュメントを含むが、それらには限定されない。
【０１３３】
これらの実施形態のうちの一つにおいて、相互作用シーケンスの開始は、入力フォーカスを有するアプリケーションを識別することによって識別される。パケットのコンテンツがフォーカスを有するウインドウを表示するときには、ウインドウを作成した処理に責任のあるアプリケーションに関して、決定が行なわれる。一実施形態において、フォーカスを有するウインドウを表示しているパケットのコンテンツは、入力フォーカスにおける変化を示しているウインドウ通知メッセージを含む。責任のあるアプリケーションが、認識できるようにレンダリングするべきではない相互作用シーケンスの開始を識別する場合には、指標は、プレイバックデータ構造に格納され、相互作用シーケンスをバッファにレンダリングする。相互作用シーケンスの終了が、相互作用シーケンスのアプリケーションと関連しない処理によって支配されるウインドウによる、フォーカスの獲得を識別することによって識別される。
【０１３４】
一実施形態において、第１の時間間隔は、相互作用シーケンスと関連付けられる。相互作用シーケンス自体がレンダリングしない実施形態において、相互作用シーケンスと関連する時間間隔を認識できるようにレンダリングすることは、レンダリングのユーザにとって認識できる期間となり、該レンダリングにおいて、表示データはレンダリングせず、ユーザは、相互作用シーケンスの後のパケットのコンテンツをレンダリングする前の時間間隔を通して待機する。一実施形態は、最初の時間間隔の代わりに、短い時間間隔をレンダリングすることによって、相互作用シーケンスと関連する時間間隔を排除する。この実施形態において、相互作用シーケンスの開始の識別に先行するパケットと、相互作用シーケンスの終了の識別に続くパケットとの間の第１の時間間隔が、識別される（ステップ２６０８）。プレイバックデータ構造は、第１の時間間隔よりも短い第２の時間間隔をレンダリングする指標を含んでいる（ステップ２６１０）。
【０１３５】
一部の実施形態において、プロトコルエンジンは、記録されたセッション内のパケットのコンテンツをレンダリングし、ユーザに記録されたセッションの再生成を提供する。これらの実施形態のうちの一部において、プロトコルエンジンは、少なくとも一つのパケットのコンテンツをレンダリングする間の時間間隔を自動的に変化させ、状況依存（ｃｏｎｔｅｘｔ−ｓｅｎｓｉｔｉｖｅ）のタイムワーププレイバックとなる。これらの実施形態において、レンダリングは、ユーザに表示される表示データを理解するユーザの能力を見積もる。一実施形態において、パケットのコンテンツによって表示される表示データが、ポリシーによって定義されるように、複雑さ、または重要性の程度が増加したことを、プロトコルエンジンが決定するときには、パケットのコンテンツをレンダリングする間の時間間隔が増加する。別の実施形態において、パケットのコンテンツによって表示される表示データが、ポリシーによって定義されるように、複雑さ、または重要性の程度が減少したことを、プロトコルエンジンが決定するときには、パケットのコンテンツをレンダリングする間の時間間隔が減少する。これらの実施形態において、プロトコルエンジンは、表示データを理解するユーザの能力を見積もり、コンテンツをゆっくりとレンダリングし、ユーザにレンダリングを理解する時間を与えるか、またはユーザが理解する時間をあまり必要としないときには、コンテンツを速くレンダリングするかのいずれかである。
【０１３６】
図２７を参照すると、流れ図は、記録されたコンピュータセッションをレンダリングする際の自動的なタイムワーププレイバックにおいてとられるステップの一実施形態を描いている。プロトコルエンジンは、記録されたセッションを受信し（ステップ２７０２）、記録されたセッションは、複数のパケットを含み、表示データを表示し、プロトコルエンジンは、記録されたセッション内の複数のパケットのうちの少なくとも一部によって表現される複雑さの程度を決定する（ステップ２７０４）。プロトコルエンジンは、記録されたセッション内の複数のパケットのうちの少なくとも一部の間の時間間隔を識別し（ステップ２７０６）、記録されたセッション内の複数のパケットのうちの少なくとも一部によって表示される複雑さの程度に応答して、時間間隔を改変する（ステップ２７０８）。プロトコルエンジンは、プレイバックデータ構造内に、改変された時間間隔を格納し（ステップ２７１０）、記録されたデータストリームは、プレイバックデータ構造に応答してレンダリングされる（ステップ２７１２）。
【０１３７】
一部の実施形態において、複雑さの程度を決定し、時間間隔を識別し、時間間隔を改変し、改変を格納するプロトコルエンジンは、バックグラウンドプロトコルエンジンである。これらの実施形態のうちの一つにおいて、バックグラウンドプロトコルエンジンはまた、記録されたストリームをレンダリングする。これらの実施形態のうちの別の実施形態において、フォアグラウンドプロトコルエンジンは、プレイバックデータ構造に応答して、記録されたストリームをレンダリングする。一部の実施形態において、バックグラウンドプロトコルエンジンおよびフォアグラウンドプロトコルエンジンは、同じデバイスに存在する。他の実施形態において、バックグラウンドプロトコルエンジンおよびフォアグラウンドプロトコルエンジンは、別のデバイスに存在する。
【０１３８】
一部の実施形態において、プロトコルエンジンは、記録されたセッション内の複数のパケットの少なくとも一部によって表示される複雑さの程度を決定する（ステップ２７０４）。これらの実施形態のうちの一部において、プロトコルエンジンは、キーボード入力における適切なシーケンスのタイピングを識別することによって、複雑さの程度を決定する。一実施形態において、プロトコルエンジンは、キーボード入力における適切なシーケンスのタイピングを識別するために含まれるキーの少なくとも一つのタイピングを調べる。別の実施形態において、プロトコルエンジンは、キーボード入力における適切なシーケンスのタイプの発見的な見積もりを完成させるためにレンダリングされる少なくとも一つのグリフのシーケンスを検査する。
【０１３９】
これらの実施形態のうちの一部において、プロトコルエンジンは、キーの特徴によって決定されたキーの分類を格納する。キーの特徴は、プリント可能であるか、またはプリント可能ではない文字、白いスペース、ナビゲーションキー、またはファンクションキーを含むが、それらには限定されず、それらの特徴の組み合わせを含む。一実施形態において、プロトコルエンジンは、プリント可能である文字と予備のナビゲーションキーとを含んでいる入力セクションが、通常のタイピングを構成し、ほとんど不可視であるキーを用いるセクションは、通常のタイピングを構成しないということを決定する。一実施形態において、プロトコルエンジンは、識別された白いスペースの量に応答して、複雑さの程度を決定する。この実施形態において、プロトコルエンジンは、白いスペースキーが、一般的なタイピングのパターンにおいて、平均して、大体５〜８文字ごとに現れることを示している文書処理の定義を含んでいる。
【０１４０】
一実施形態において、プロトコルエンジンは、プリント可能ではない文字の形状を使用して、複雑さの程度を決定する。別の実施形態において、プロトコルエンジンは、キーストロークシーケンスにアクセスし、適宜、近接して現れる白ではないスペースのプリント可能である文字のシーケンスを識別する。この実施形態において、プロトコルエンジンは、キーストロークシーケンスを辞書と比較し、妥当な単語を識別し、妥当ではない単語に対する妥当な単語を、ユーザが理解する能力に対する複雑さの程度を決定するキャパシティを含む。
【０１４１】
別の実施形態において、プロトコルエンジンは、パケットのコンテンツが、グリフをレンダリングするコマンドを含んでいるということを決定する。この実施形態において、プロトコルエンジンは、グリフを使用し、表示データがユーザのタイピング活動を表すかどうかを決定する。この実施形態において、グリフのレンダリング率が、わずかな遅れを有するキーボード入力率を見積もる場合には、キーストロークが直接的にグリフとなる可能性が高く、従ってユーザがタイピングしている可能性が極めて高い。一実施形態において、プロトコルエンジンは、生成されたグリフを用いて入力されたキーに相関する。別の実施形態において、プロトコルエンジンは、レンダリングされたグリフの空間的なシーケンス（左から右、右から左など）を決定し、ユーザがタイピングしているということを決定する。一実施形態において、プロトコルエンジンは、複数のパケットのコンテンツを分析し、コンテンツによって表されたパターンおよび活動を識別した結果に応答して、複雑さの程度の決定を行なう。
【０１４２】
他の実施形態において、プロトコルエンジンは、マウス入力のタイプの識別に応答して、複雑さの程度の決定を行なう。一実施形態において、特に、クリックがタイピングシーケンスに続く場合には、プロトコルエンジンは、マウスのクリックを表しているマウス入力が、理解するために、ゆっくりとしたレンダリング率を必要とし得る活動をもたらすということを決定する。別の実施形態において、プロトコルエンジンは、マウスのクリックを表さないマウス入力が、ユーザが表示データを理解する能力に影響を与えず、従って複雑さの程度に影響を与えないということを決定する。
【０１４３】
他の実施形態において、プロトコルエンジンは、グラフィックの更新の複雑さの発見的な見積もりを識別することに応答して、複雑さの程度の決定を行なう。一実施形態において、限定されるものではないが、更新される領域のサイズ、グラフィックコマンドによって変更される領域の面積サイズ、個々の領域に対する更新の頻度の履歴、循環グラフィックコマンド、グラフィックコマンドの数、グラフィックコマンドの頻度、コンテンツがグラフィックコマンドを含んでいる隣接するパケットの間の時間間隔、またはグラフィックの更新のタイプに基づいて、プロトコルエンジンは、グラフィックの更新の複雑さの発見的な見積もりを識別する。プロトコルエンジンが、グラフィックの更新に関する複雑さの程度が低いと識別する実施形態において、プロトコルエンジンは、グラフィックの更新を含んでいるパケットによって表される複雑さの程度が低いと決定する。プロトコルエンジンが、グラフィックの更新に関して複雑さの程度が高いと識別する実施形態において、プロトコルエンジンは、グラフィックの更新を含んでいるパケットによって表される複雑さの程度が高いと決定する。
【０１４４】
一実施形態において、プロトコルエンジンは、記録されたセッション内の複数のパケットのうちの少なくとも一部の間の時間間隔を識別する（ステップ２７０６）。この実施形態において、プロトコルエンジンは、複雑さの程度の決定に応答して、時間間隔を改変する（ステップ２７０８）。記録されたセッション内の複数のパケットのうちの少なくとも一部が、程度の高い複雑さと関連する表示データを表しているコンテンツを有する実施形態において、プロトコルエンジンは、パケットの間の時間間隔を増加させ、ユーザがレンダリング時間の増加によりレンダリングされた表示データを理解することを可能にする。記録されたセッション内の複数のパケットのうちの少なくとも一部が、程度の低い複雑さと関連する表示データを表しているコンテンツを有する別の実施形態において、プロトコルエンジンは、ユーザがレンダリングされた表示データを理解するために必要とする時間量が減少したことを反映するように、パケットの間の時間間隔を減少させる。一実施形態において、ユーザは、プロトコルエンジンによってレンダリングされた時間量とは異なる、レンダリングされたパケットのコンテンツの間の時間量を必要とする。この実施形態において、ユーザは、レンダリングされた表示データをユーザが理解するために必要とする時間量を反映するように、時間間隔を改変する。一部の実施形態において、プロトコルエンジンはまた、複数のパケットのうちの少なくとも一部と、複数のパケットのうちの他のパケットとの間の時間間隔を識別し、パケットのそれらのセットの間で識別された時間間隔を改変する。
【０１４５】
一部の実施形態において、プロトコルエンジンは、記録されたセッション内のパケットと関連する第１のマーカーを識別する。一実施形態において、パケットはマーカーを含む。別の実施形態において、記録されたセッションはマーカーを含む。
【０１４６】
一実施形態において、表示データのレンダリングのユーザは、マーカーを定義する。別の実施形態において、プロトコルエンジンは、マーカーを定義する。プロトコルエンジンがマーカーを識別する実施形態において、プロトコルエンジンは、第１のマーカーに応答して、時間間隔を改変する。一実施形態において、プロトコルエンジンは、時間間隔を増加させ、表示データのレンダリングのユーザに、第１のマーカーと関連するパケットのコンテンツを理解する追加の時間を提供する。別の実施形態において、プロトコルエンジンは、第２のパケット内の第２のマーカーを識別する。この実施形態において、プロトコルエンジンは、第１のマーカーと第２のマーカーとの間の距離に応答して、時間間隔を改変する。この実施形態において、プロトコルエンジンは、マーカー付けされたパケットのコンテンツによって表される表示データの理解のために時間を増加させ、マーカー付けされていないパケットのコンテンツによって表されるデータの理解のために時間を減少させる。一実施形態において、ユーザは、ユーザにとって関心のある表示データのためにマーカーを定義し、プロトコルエンジンは、ユーザにとって関心ある表示データのための追加の時間をレンダリングし、マーカーによって決定されるように、ユーザにとって関心のない表示データのためのレンダリング時間減少させる。
【０１４７】
一実施形態において、プロトコルエンジンは、記録されたセッション内の複数のパケットのうちの少なくとも一部における第１のマーカーを識別し、該マーカーは、記録されたセッション内の複数のパケットのうちの少なくとも一部における最初のパケットを指している。プロトコルエンジンは、第１のマーカーに応答して時間間隔を改変する。プロトコルエンジンは、記録されたセッション内の複数のパケットのうちの少なくとも一部における第２のパケットにおける第２のマーカーを識別し、該第２のマーカーは、記録されたセッション内の複数のパケットのうちの少なくとも一部における最後のパケットを指し、第１のマーカーと第２のマーカーとの間の時間間隔に応答して、時間間隔を改変する。
【０１４８】
一実施形態において、プロトコルエンジンは、プレイバックデータ構造内に改変された時間間隔を格納し（ステップ２７１０）、記録されたストリームは、プレイバックデータ構造のコンテンツに応答してレンダリングされる（ステップ２７１２）。一実施形態において、プロトコルエンジンはまた、改変された時間間隔に関するプレイバックデータ構造の命令に応答して、記録されたストリームをレンダリングする。別の実施形態において、別個のフォアグラウンドプロトコルエンジンが、記録されたストリームをレンダリングする。
【０１４９】
一部の実施形態において、アプリケーションを用いた、記録された相互作用は、ユーザが、レンダリングされた表示データの理解のために時間を増加させるために、レンダリングするための時間を増加させることを必要とするという決定が行なわれる。これらの実施形態のうちの一部において、時間を増加させることを必要とするアプリケーションは、時間を増加させることを必要としないアプリケーションよりも、重要なアプリケーションを含むという決定が行なわれる。これらの実施形態のうちの一つにおいて、ユーザが決定を行なう。これらの実施形態のうちの別の実施形態において、ポリシーが決定を行なう。これらの実施形態のうちのさらに別の実施形態において、プロトコルエンジンは、時間の増加を必要とするアプリケーションの定義を含む。
【０１５０】
図２８を参照すると、流れ図は、記録されたコンピュータセッション内の識別されたアプリケーションに応答して、自動的なタイムワーププレイバックするためにとられるステップの一実施形態を描いている。複数のパケットを含み、表示データを表している記録されたセッションが受信される（ステップ２８０２）。フォーカスを有するウインドウを表しているコンテンツを有する第１のパケットが、識別され、該ウインドウは、アプリケーションを指している（ステップ２８０４）。第１のパケットのコンテンツのレンダリングに先立ち、コンテンツがレンダリングする第２のパケットと、第１のパケットのコンテンツのレンダリングの後に、コンテンツがレンダリングする第３のパケットとの間で、時間間隔は識別される（ステップ２８０６）。識別された時間間隔は、示されたアプリケーションに応答して改変される（ステップ２８０８）。記録されたストリーム内の少なくとも一つのパケットは、改変に応答してレンダリングされる（ステップ２８１０）。
【０１５１】
一実施形態において、プロトコルエンジンは、記録されたセッションを受信する（ステップ２８０２）。この実施形態において、プロトコルエンジンはまた、フォーカスを有するウインドウを表しているコンテンツを有する第１のパケットを識別し、該ウインドウはアプリケーションを示している（ステップ２８０４）。一実施形態において、フォーカスを有するウインドウを表しているパケットのコンテンツは、入力フォーカスの変更を示しているウインドウ通知メッセージを含んでいる。一実施形態において、第１のパケットのコンテンツのレンダリングに先立ち、コンテンツがレンダリングする第２のパケットと、第１のパケットのコンテンツのレンダリングの後に、コンテンツがレンダリングする第３のパケットとの間で、時間間隔は識別される（ステップ２８０６）。この実施形態において、フォーカスを有するアプリケーションウインドウを表しているコンテンツをレンダリングするのに先立ち、コンテンツが、レンダリングするパケットと、コンテンツが、フォーカスを有するアプリケーションウインドウを表しているパケットと、コンテンツが、もはやフォーカスを有していないアプリケーションウインドウを表しているパケットとを、プロトコルエンジンは識別する。
【０１５２】
一部の実施形態において、プロトコルエンジンは、フォーカスを有するアプリケーションに先立つ時間間隔を改変する。他の実施形態において、プロトコルエンジンは、フォーカスを有するアプリケーションに続く時間間隔を改変する。一実施形態において、プロトコルエンジンは時間間隔を決定し、その時間間隔において、アプリケーションウインドウはフォーカスを有し、アプリケーションのタイプに応答して、その時間間隔を改変する。一実施形態において、プロトコルエンジンは、識別された時間間隔を増加させる。この実施形態において、プロトコルエンジンは、レンダリングのユーザのアプリケーションをレビューする時間の量を増加させる。別の実施形態において、プロトコルエンジンは、識別された時間間隔を減少させる。この実施形態において、プロトコルエンジンは、レンダリングのユーザのアプリケーションをレビューする時間の量を減少させ、アプリケーションにおける関心の量が減少したことを反映する。
【０１５３】
一実施形態において、プロトコルエンジンは、改変に応答して、記録されたストリーム内の少なくとも一つのパケットをレンダリングする。一実施形態において、プロトコルエンジンは、記録されたストリーム内の少なくとも一つのパケットのコンテンツを、バッファにレンダリングする。一実施形態において、バッファにレンダリングすることは、パケットのコンテンツを認識できる方法ではレンダリングしない。別の実施形態において、プロトコルエンジンは、記録されたストリーム内の少なくとも一つのパケットのコンテンツをバッファに、認識できる方法でレンダリングする。一部の実施形態において、プロトコルエンジンは、プレイバックデータ構造内の改変された時間間隔を示し、別個のプロトコルエンジンは、プレイバックデータ構造内に格納される情報に応答して、記録されたセッションをレンダリングする。
【０１５４】
図２９を参照すると、ブロック図は、記録されたコンピュータセッションをレンダリングする際の自動的なタイムワーププレイバックに関するシステムの一実施形態を描き、プロトコルエンジン２９０２、記録されたストリーム２９１０、プレイバックデータ構造２９０４、およびディスプレイ２９０８を含んでいる。簡潔に概略すると、プロトコルエンジン２９０２は、記録されたストリーム２９１０を受信することに応答して、プレイバックデータ構造２９０４を生成し、該記録されたストリーム２９１０は、複数のパケットを含み、該プロトコルエンジン２９０２は、生成されたプレイバックデータ構造２９０４に応答して、記録されたデータストリーム内の少なくとも一つのパケットをレンダリングする。
【０１５５】
一実施形態において、プロトコルエンジン２９０２は、バックグラウンドプロトコルエンジンとフォアグラウンドプロトコルエンジンとを含む。この実施形態において、バックグラウンドプロトコルエンジンは、記録されたストリーム２９１０を受信し、プレイバックデータ構造２９０４を生成する。この実施形態において、フォアグラウンドプロトコルエンジンは、記録されたストリーム２９１０を受信し、生成されたプレイバックデータ構造２９０４に応答して、記録されたストリーム内の少なくとも一つのパケットをレンダリングする。一実施形態において、バックグラウンドプロトコルエンジンとフォアグラウンドプロトコルエンジンとは、同じデバイスに存在し得る。別の実施形態において、バックグラウンドプロトコルエンジンは、第１のデバイスに存在し、フォアグラウンドプロトコルエンジンは、第２のデバイスに存在する。
【０１５６】
別の実施形態において、システムは、プレイバックデータ構造２９０４を生成し、生成されたプレイバックデータ構造２９０４に応答して、記録されたストリーム内の少なくとも一つのパケットをレンダリングする単一のプロトコルエンジン２９０２を備える。
【０１５７】
一実施形態において、プロトコルエンジン２９０２は、記録されたセッションをレンダリングするために、少なくとも一つの命令をプレイバックデータ構造内に格納する。一実施形態において、命令は、記録されたセッション内のパケットのコンテンツをレンダリングするための識別された時間間隔の改変を含む。別の実施形態において、プロトコルエンジンは、プレイバックデータ構造内にメタデータをプレイバックデータ構造内に格納する。この実施形態において、メタデータは、パケットのコンテンツをレンダリングするための優先順位の高い命令を含む。
【０１５８】
一実施形態において、プロトコルエンジンは、プレイバックデータ構造のコンテンツに応答して、記録されたセッション内の少なくとも一つのパケットのコンテンツをレンダリングする。一実施形態において、プロトコルエンジンは、記録されたセッション内の少なくとも一つのパケットを、認識できる方法でバッファにレンダリングする。別の実施形態において、プロトコルエンジンは、記録されたセッション内の少なくとも一つのパケットをバッファにレンダリングする。
【０１５９】
一部の実施形態において、パケットのレンダリングされたコンテンツは、最初の表示データの再生成の簡素化を提供する。他の実施形態において、パケットのレンダリングされたコンテンツは、表示データのカスタム化されたバージョンを提供する。一実施形態において、認識できる方法でパケットのコンテンツをレンダリングする決定は、ポリシーまたはユーザの要求に応答する。これらの実施形態は、記録されたセッションのレンダリングに対する制御を、ユーザに提供する。
【０１６０】
本発明は、一つ以上の工業製品に組み込まれる一つ以上のコンピュータで読取可能であるプログラムとして提供され得る。工業製品は、フロッピー（登録商標）ディスク、ハードディスク、コンパクトディスク、デジタル多目的ディスク、フラッシュメモリカード、ＰＲＯＭ、ＲＡＭ、ＲＯＭ、または磁気テープであり得る。概して、コンピュータで読取可能なプログラムは、任意のプログラミング言語で実装され得る。使用され得る言語の一部の例は、Ｃ、Ｃ＋＋、Ｃ＃またはＪＡＶＡ（登録商標）を含む。ソフトウェアプログラムは、オブジェクトコードとして、一つ以上の工業製品に格納され得る。
【０１６１】
本発明は、特定の好適な実施形態を参照して示され、記述されてきたが、形状および詳細に関する様々な変更が、特許請求の範囲によって定義されるように、本発明の意図および範囲を逸脱することなく行われ得ることを当業者は理解するべきである。
【図面の簡単な説明】
【０１６２】
【図１Ａ】図１Ａは、本発明の一実施形態を実施するのに適切なクライアント−サーバシステムを図示するブロック図である。
【図１Ｂ】図１Ｂは、本発明と関連して有用なコンピュータの実施形態を図示するブロック図である。
【図１Ｃ】図１Ｃは、本発明と関連して有用なコンピュータの実施形態を図示するブロック図である。
【図２】図２は、本発明が行われ得るネットワーク２００の実施形態を図示するブロック図である。
【図３】図３は、ネットワーク２００上のレコーダのための配置の代替的な実施形態を図示するブロック図である。
【図４】図４は、ネットワーク２００上のレコーダのための配置の代替的な実施形態を図示するブロック図である。
【図５】図５は、プロトコルデータストリームによって表されるディスプレイデータを再生成するシステムの一実施形態を図示するブロック図である。
【図６】図６は、サーバ生成のデータを記録および再生する方法を図示する流れ図である。
【図７】図７は、プロトコルデータストリームによって表されるディスプレイデータを記録するシステムにおける記録のさらなる詳細を図示するブロック図である。
【図８】図８は、プロトコルデータストリームの記録の一実施形態を図示する。
【図９】図９は、ステートフル遠隔提示プロトコルのプレイバックの間のリアルタイムにおけるシーキングの方法で取られるステップの一実施形態を図示する流れ図である。
【図１０】図１０は、遠隔提示プロトコルのプレイバックの間のリアルタイムにおけるシーキングを可能にするステートスナップショットを生成するために取られるステップの一実施形態を図示する流れ図である。
【図１１】図１１は、ステートフル遠隔提示プロトコルのプレイバックの間のリアルタイムにおけるシーキングのシステムを図示するブロック図である。
【図１２】図１２は、ステートスナップショットの適応性のある生成のために取られるステップの一実施形態を図示する流れ図である。
【図１３】図１３は、一実施形態の３種類のシーキング確率分布を図示するダイアグラムである。
【図１４】図１４は、決定されたシーキング確率分布に応答するステートスナップショットの生成の一実施形態を図示するダイアグラムである。
【図１５】図１５は、プロトコルデータストリームの提示のユーザに対する使用パターンの一実施形態を図示する。
【図１６】図１６は、ステートスナップショットの適応性のある生成のためのシステムの一実施形態を図示するブロック図であり、バックグラウンドプロトコルエンジンと、フォアグラウンドプロトコルエンジンと、プロトコルデータストリームと、活動のプロファイルと、ステートスナップショットとを含む。
【図１７】図１７は、記録されたセッションをレンダリングするためのシステムの一実施形態を図示するブロック図である。
【図１８】図１８は、記録されたコンピュータセッションのプレイバックのためのプレイバック命令を生成するために取られるステップの一実施形態を図示する流れ図である。
【図１９】図１９は、記録されたコンピュータセッションのプレイバックのための方法において取られるステップの一実施形態を図示する流れ図である。
【図２０】図２０は、記録されたセッションをレンダリングするプレイバック命令を生成するために取られるステップの一実施形態を図示する流れ図である。
【図２１】図２１は、コンテンツが、プレイバックデータ構造に応答してレンダリングされた、再生成された記録されたストリームの一実施形態を図示する。
【図２２】図２２は、コンテンツに有意義なユーザ活動を表させる記録ストリームにおける所定のパケットの一実施形態を図示し、この実施形態においてマウス入力は、アクティブなマウスのボタンの状態を示す。
【図２３】図２３は、記録されたセッションのレンダリングにおける無意味な活動を伴う期間を排除するために取られるステップの一実施形態を図示する流れ図である。
【図２４】図２４は、記録されたセッションのレンダリングにおけるグラフィックス更新を排除するために取られるステップの一実施形態を図示する流れ図である。
【図２５】図２５は、第２のグラフィックス更新の後のスクリーン領域の状態が第１のグラフィックス更新の後のスクリーン領域の状態と異なるかどうかに応答する再生成された記録されたセッションのレンダリングの一実施形態を図示する。
【図２６】図２６は、記録されたセッションのレンダリングにおける相互作用のシーケンスを排除するために取られるステップの一実施形態を図示する流れ図である。
【図２７】図２７は、記録されたコンピュータセッションのレンダリングにおける自動的なタイムワーププレイバックにおいて取られるステップの一実施形態を図示する流れ図である。
【図２８】図２８は、、記録されたコンピュータセッションのレンダリングにおける識別されたアプリケーションに応答する自動的なタイムワープトプレイバックにおいて取られるステップの一実施形態を図示する流れ図である。
【図２９】図２９は、記録されたコンピュータセッションのレンダリングにおける自動的なタイムワープトプレイバックのためのシステムの一実施形態を図示するブロック図である。
【図１Ａ】
2008535289.tif 000003
【図１Ｂ】
2008535289.tif 000004
【図１Ｃ】
2008535289.tif 000005
【図２】
2008535289.tif 000006
【図３】
2008535289.tif 000007
【図４】
2008535289.tif 000008
【図５】
2008535289.tif 000009
【図６】
2008535289.tif 000010
【図７】
2008535289.tif 000011
【図８】
2008535289.tif 000012
【図９】
2008535289.tif 000013
【図１０】
2008535289.tif 000014
【図１１】
2008535289.tif 000015
【図１２】
2008535289.tif 000016
【図１３】
2008535289.tif 000017
【図１４】
2008535289.tif 000018
【図１５】
2008535289.tif 000019
【図１６】
2008535289.tif 000020
【図１７】
2008535289.tif 000021
【図１８】
2008535289.tif 000022
【図１９】
2008535289.tif 000023
【図２０】
2008535289.tif 000024
【図２１】
2008535289.tif 000025
【図２２】
2008535289.tif 000026
【図２３】
2008535289.tif 000027
【図２４】
2008535289.tif 000028
【図２５】
2008535289.tif 000029
【図２６】
2008535289.tif 000030
【図２７】
2008535289.tif 000031
【図２８】
2008535289.tif 000032
【図２９】
2008535289.tif 000033
【国際調査報告】
2008535289.tif 000034
2008535289.tif 000035
2008535289.tif 000036
2008535289.tif 000037
2008535289.tif 000038
2008535289.tif 000039