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