(57)【要約】  複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをクロスプラットフォーム・レンダリングするためのシステムおよび方法が提供される。スクリプトがユーザ・コンピューティング・プラットフォームに送信され、複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するようにコンパイルされたアプリケーション・プログラムによって解釈される。スクリプトを送信することが、ユーザ・コンピューティング・プラットフォーム上で動作するアプリケーション・プログラムによってスクリプトを解釈させ、送信された、または別の方法でユーザ・コンピューティング・プラットフォームにとってアクセス可能な符号化されたビデオ・データを復号済みビデオ・データに直接復号させ、さらに復号済みビデオ・データをレンダリングさせる。
2014531142.tif 000002
【特許請求の範囲】
【請求項１】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするための、コンピュータ・システムによって実行される方法であって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信することを含み、前記スクリプトが、複数の前記ユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するようにコンパイルされたアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムが、前記ユーザ・コンピューティング・プラットフォーム上で動作し、
前記スクリプトを送信することが、前記ユーザ・コンピューティング・プラットフォーム上で動作する前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記解釈されたスクリプトに、前記ユーザ・コンピューティング・プラットフォームにとってアクセス可能な符号化されたビデオ・データを、１つまたは複数のフレーム画像を含む復号済みビデオ・データに直接復号させる、方法。
【請求項２】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記１つまたは複数のフレーム画像を前記ユーザ・コンピューティング・プラットフォーム上でネイティブに表示する、請求項１に記載の方法。
【請求項３】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記解釈されたスクリプトに、前記ユーザ・コンピューティング・プラットフォームにとってアクセス可能な符号化されたオーディオ・データを、復号済みオーディオ・データに直接復号させる、請求項１に記載の方法。
【請求項４】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記ユーザ・コンピューティング・プラットフォーム上で前記１つまたは複数のフレーム画像を表示することによって前記復号済みビデオ・データをレンダリングし、前記ユーザ・コンピューティング・プラットフォーム上で前記復号済みオーディオ・データを再生することによって前記復号済みオーディオ・データをレンダリングする、請求項３に記載の方法。
【請求項５】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記ユーザ・コンピューティング・プラットフォーム上で前記１つまたは複数のフレーム画像を表示することによって前記復号済みビデオ・データをネイティブにレンダリングし、前記復号済みオーディオ・データを再生することによって前記復号済みオーディオ・データをネイティブにレンダリングする、請求項３に記載の方法。
【請求項６】
前記ビデオ・データおよびオーディオ・データが、ビデオ・コンテンツ・アイテムの一部として互いに関連付けられており、前記１つまたは複数のフレーム画像が、複数のフレーム画像を含み、前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記解釈されたスクリプトに前記フレーム画像の表示を前記復号済みオーディオ・データの再生と直接同期させる、請求項４または５のいずれか一項に記載の方法。
【請求項７】
前記ビデオ・データおよびオーディオ・データが、ビデオ・コンテンツ・アイテムの一部として互いに関連付けられており、前記１つまたは複数のフレーム画像が、複数のフレーム画像を含み、前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記復号済みオーディオ・データの再生に関連するオーディオ再生時間基準を確かめ、前記解釈されたスクリプトに、前記オーディオ再生時間基準に基づいて前記フレーム画像の表示を前記復号済みオーディオ・データの再生と直接同期させる、請求項４または５のいずれか一項に記載の方法。
【請求項８】
前記フレーム画像の表示を前記復号済みオーディオ・データの再生と同期することが、前記ビデオ・データのレンダリングが時間の第１の閾値量だけ前記オーディオ再生時間基準より遅れていると判定されたことに基づいて１つまたは複数のフレーム画像の表示をスキップすることによって順序外れのフレーム画像の表示を進めること、および、前記ビデオ・データのレンダリングが時間の第２の閾値量だけ前記オーディオ再生時間基準より進んでいると判定されたことに基づいて１つまたは複数のフレーム画像を、前記ビデオ・データのフレームレートによって決まる期間より長い期間の間、表示させることのうちの少なくとも１つを含む、請求項７に記載の方法。
【請求項９】
前記フレーム画像の表示を前記復号済みオーディオ・データの再生と同期することが、前記オーディオ再生時間基準を使用し、現在のフレーム・インデックスを決定すること、および、前記現在のフレーム・インデックスに関連付けられた前記フレーム画像が表示される準備ができている場合、前記現在のフレーム・インデックスに関連付けられた前記フレーム画像を表示することを含む、請求項７に記載の方法。
【請求項１０】
前記フレーム画像の表示を前記復号済みオーディオ・データの再生と同期することが、前記現在のフレーム・インデックスに関連付けられた前記フレーム画像がフレーム画像キュー内の１つまたは複数の他のフレーム画像より遅れていると判定すること、および、遅れている場合、前記１つまたは複数の他のフレーム画像の表示をスキップすることを含む、請求項９に記載の方法。
【請求項１１】
前記フレーム画像の表示を前記復号済みオーディオ・データの再生と同期することが、前記現在のフレーム・インデックスに関連付けられた前記フレーム画像が表示される準備ができていないと判定すること、および、そのような判定とは独立して、ドロップ・フレーム・アクションを開始することを含み、前記ドロップ・フレーム・アクションが、前記現在のフレーム・インデックスに関連付けられた前記フレーム画像がレンダリングのための準備ができていなかったという指示を記録すること、復号済みオーディオ・データの再生を休止させる、または速度を落とさせること、符号化されたビデオ・データの復号のレートを増大させること、より低いフレームレートを有するビデオ・データへの切替えを引き起こすこと、前記画像フレームのサブセットを復号することによって前記ビデオ・データの事実上のダウンサンプリングへの切替えを引き起こすことのうちの１つまたは複数を含む、請求項９に記載の方法。
【請求項１２】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記符号化されたビデオ・データを前記フレーム画像に直接復号することを含む第１のシミュレートされたスレッドを反復してスケジューリングおよび実行すること、および、前記フレーム画像を表示することによって前記ビデオ・データをレンダリングすることを含む第２のシミュレートされたスレッドを反復してスケジューリングおよび実行することによって、マルチスレッド型実行環境をシミュレートする、請求項４または５のいずれか一項に記載の方法。
【請求項１３】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記符号化されたオーディオ・データを前記復号済みオーディオ・データに直接復号することを含む第３のシミュレートされたスレッドを反復してスケジューリングおよび実行すること、および、復号済みオーディオ・データをオーディオ・レンダラに供給するオーディオ・レンダラ・インターフェースを実行することを含む第４のシミュレートされたスレッドを反復してスケジューリングおよび実行することによって、マルチスレッド型実行環境をシミュレートする、請求項１２に記載の方法。
【請求項１４】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、方法を反復してスケジューリングおよび実行することによってマルチスレッド型実行環境をシミュレートし、前記方法が、反復ごとに、１つまたは複数の対応する条件を論理的に調査し、前記対応する条件の前記１つまたは複数に応じて、
前記符号化されたビデオ・データを前記フレーム画像に直接復号することを含む第１のシミュレートされたスレッド、
前記フレーム画像を表示することによって前記ビデオ・データをレンダリングすることを含む第２のシミュレートされたスレッド、
前記符号化されたオーディオ・データを前記復号済みオーディオ・データに直接復号することを含む第３のシミュレートされたスレッド、
前記復号済みオーディオ・データをオーディオ・レンダラに送るオーディオ・レンダラ・インターフェースを実行することを含む第４のシミュレートされたスレッドのうちの１つを選択および実行する、請求項４に記載の方法。
【請求項１５】
前記第１のシミュレートされたスレッドを実行することが、前記第１のシミュレートされたスレッドを複数のサブコンポーネントに分割すること、サブコンポーネントの対の実行の間で、１つまたは複数の対応する条件に対する１または複数の論理的な調査を行い、前記１つまたは複数の対応する条件に応じて、前記第１のシミュレートされたスレッドに一時的に割り込み、第２のシミュレートされたスレッド、および復号済みオーディオ・データをオーディオ・レンダラに送るオーディオ・レンダラ・インターフェースを実行することを含む別のシミュレートされたスレッドのうちの１つの反復を選択および実行する、請求項１２に記載の方法。
【請求項１６】
前記１つまたは複数のフレーム画像を表示することによって前記ビデオ・データをレンダリングすることが、少なくとも１対のフレーム画像を共にアルファブレンディングすることを含む、請求項４または５のいずれか一項に記載の方法。
【請求項１７】
前記１つまたは複数のフレーム画像を表示することによって前記ビデオ・データをレンダリングすることが、前記フレーム画像の第１のフレーム画像を表示することと前記フレーム画像の第２のフレーム画像を表示することとの間の１回または複数回のそれぞれにおいて、前記フレーム画像の前記第１のフレーム画像と前記フレーム画像の前記第２のフレーム画像のアルファブレンドを含むアルファブレンディング済み画像を表示することを含む、請求項４または５のいずれか一項に記載の方法。
【請求項１８】
前記フレーム画像の前記第１のフレーム画像を表示することと前記フレーム画像の前記第２のフレーム画像を表示することとの間の前記１回または複数回のそれぞれにおいて、前記アルファブレンディング済み画像を表示することが、
α＝［β＋ｌ−ｍｏｄ（ｆ＃，β）］−１
によって与えられるアルファブレンディング係数を使用して前記フレーム画像の前記第２のフレーム画像を以前に表示された画像上にアルファブレンディングすることを含み、
上式で、
・  βは、前記１回または複数回の数に等しいダウンサンプリング係数であり、
・  ｆ＃は、前記１回または複数回の現在の回の数を指すインデックスであり、
・  ｍｏｄ（ｘ，ｙ）は、ｘをｙで割った整数の余りを返すモジュロ演算子である、請求項１７に記載の方法。
【請求項１９】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、ビデオ・データ・キューを、その状況を判定するために直接監視するビデオ・データ・キュー・モニタの少なくとも一部分を、前記解釈されたスクリプトに直接実行させ、前記ビデオ・データ・キューの前記判定された状況に応じて、より多くの符号化されたビデオ・データをフェッチするかどうか判定する、請求項１から１８のいずれか一項に記載の方法。
【請求項２０】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、ＡＪＡＸ  ＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクトを使用してより多くの符号化されたビデオ・データをフェッチする前記ビデオ・キュー・モニタの第２の部分を実行する、請求項１９に記載の方法。
【請求項２１】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、複数のＡＪＡＸ  ＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクトを交互に使用することによってより多くの符号化されたビデオ・データをフェッチする前記ビデオ・キュー・モニタの第２の部分を実行する、請求項１９に記載の方法。
【請求項２２】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記オーディオ・データから前記ビデオ・データを直接逆多重化する、請求項４または５のいずれか一項に記載の方法。
【請求項２３】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、フレーム画像バッファを、その状況を判定するために監視するフレームバッファ・モニタを、前記解釈されたスクリプトに直接実行させ、前記フレーム画像バッファの前記判定された状況に応じて、前記符号化されたビデオ・データのより多くを復号するかどうか判定する、請求項１から２２のいずれか一項に記載の方法。
【請求項２４】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記解釈されたスクリプトに、前記フレーム画像のうちの少なくとも１つの画像ファイル・フォーマットを第１の画像ファイル・フォーマットから第２の画像ファイル・フォーマットに直接変換させ、前記第２の画像ファイル・フォーマットが、前記アプリケーション・プログラムによってネイティブにレンダリングされることが可能である、請求項１から２３のいずれか一項に記載の方法。
【請求項２５】
前記符号化されたビデオ・データを前記ユーザ・コンピューティング・プラットフォームに送信することを含む、請求項１から２４のいずれか一項に記載の方法。
【請求項２６】
前記符号化されたビデオ・データを前記ユーザ・コンピューティング・プラットフォームに送信する前に前記ビデオコンテンツを前記符号化されたビデオ・データに符号化することを含み、前記ビデオコンテンツを符号化することが、前記フレーム画像のうちの少なくとも１つの画像ファイル・フォーマットを第１の画像ファイル・フォーマットから第２の画像ファイル・フォーマットに直接変換することを含み、前記第２の画像ファイル・フォーマットが、前記ユーザ・コンピューティング・プラットフォーム上で動作する前記アプリケーション・プログラムによってネイティブにレンダリングされることが可能である、請求項２５に記載の方法。
【請求項２７】
前記符号化されたビデオ・データを前記ユーザ・コンピューティング・プラットフォームに送信する前に前記ビデオコンテンツを前記符号化されたビデオ・データに符号化することを含み、前記ビデオコンテンツを符号化することが、
第１のファイル・フォーマットで提供される前記フレーム画像の少なくとも第１のフレーム画像について、フレーム画像の前記第１のフレーム画像のコンテンツを解析すること、前記フレーム画像の前記第１のフレーム画像の前記コンテンツの前記解析に基づいて複数の２次画像ファイル・フォーマットの中から１つを選択すること、前記第１のファイル・フォーマットが前記２次画像ファイル・フォーマットの前記選択されたフォーマットと異なる場合、前記フレーム画像の前記第１のフレーム画像の前記画像ファイル・フォーマットを前記２次ファイル・フォーマットの前記選択されたものに変換すること、および
第２のファイル・フォーマットで提供されるフレーム画像の少なくとも第２のフレーム画像について、フレーム画像の前記第２のフレーム画像のコンテンツを解析すること、前記フレーム画像の前記第２のフレーム画像の前記コンテンツの前記解析に基づいて前記複数の２次画像ファイル・フォーマットの中から異なる１つを選択すること、前記第２のファイル・フォーマットが前記２次画像ファイル・フォーマットの前記選択された異なるフォーマットと異なる場合、前記フレーム画像の前記第１のフレーム画像の前記画像ファイル・フォーマットを前記２次ファイル・フォーマットの前記選択されたものに変換することを含み、
前記複数の２次画像ファイル・フォーマットのそれぞれが、前記アプリケーション・プログラムによってネイティブにレンダリングされることが可能である、請求項２５に記載の方法。
【請求項２８】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記解釈されたスクリプトに、前記フレーム画像の少なくとも１つのフレーム画像をコンテンツ転送フォーマットに直接変換させ、前記コンテンツ転送フォーマットが、前記スクリプトを解釈するスクリプト・インタプリタによって前記アプリケーション・プログラムに渡されることが可能である、請求項１から２７のいずれか一項に記載の方法。
【請求項２９】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記解釈されたスクリプトに、前記フレーム画像の少なくとも１つのフレーム画像をベース６４コンテンツ転送フォーマットに直接変換させる、請求項１から２７のいずれか一項に記載の方法。
【請求項３０】
前記符号化されたビデオ・データを前記ユーザ・コンピューティング・プラットフォームに送信する前に前記ビデオコンテンツを前記符号化されたビデオ・データに符号化することを含み、前記ビデオコンテンツを符号化することが、前記フレーム画像の少なくとも１つのフレーム画像をコンテンツ転送フォーマットで符号化し、それにより、前記コンテンツ転送符号化済みフレーム画像を、前記スクリプトを解釈するスクリプト・インタプリタによって前記アプリケーション・プログラムに渡すことができることを含む、請求項２５に記載の方法。
【請求項３１】
前記符号化されたビデオ・データを前記ユーザ・コンピューティング・プラットフォームに送信する前に前記ビデオコンテンツを前記符号化されたビデオ・データに符号化することを含み、前記ビデオコンテンツを符号化することが、前記複数のフレーム画像のそれぞれについて、前記フレーム画像をコンテンツ転送フォーマットで符号化し、それにより、前記コンテンツ転送符号化済みフレーム画像を、前記スクリプトを解釈するスクリプト・インタプリタによって前記アプリケーション・プログラムに渡すことができること、および、前記コンテンツ転送符号化済みフレーム画像を前記フレーム画像に無関係のパディング・データで特定のサイズにパディングすることを含む、請求項２５に記載の方法。
【請求項３２】
前記符号化されたビデオ・データを前記ユーザ・コンピューティング・プラットフォームに送信する前にビデオコンテンツを前記符号化されたビデオ・データに符号化することを含み、前記符号化されたビデオ・データを符号化することが、前記フレーム画像の少なくとも１つのフレーム画像をベース６４コンテンツ転送フォーマットで符号化することを含む、請求項２５に記載の方法。
【請求項３３】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記フレーム画像の少なくとも１つのフレーム画像を、前記アプリケーション・プログラムによってネイティブにレンダリングされることが可能な、対応する画像オブジェクトにネイティブに変換する、請求項１から３２のいずれか一項に記載の方法。
【請求項３４】
前記アプリケーション・プログラムがインターネットブラウザを含む、請求項１から３３のいずれか一項に記載の方法。
【請求項３５】
前記スクリプトがＨＴＭＬドキュメント内に埋め込まれる、請求項１から３４のいずれか一項に記載の方法。
【請求項３６】
前記１つまたは複数のフレーム画像が、複数のフレーム画像を含み、前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記復号済みオーディオ・データを再生することによって前記オーディオ・データをレンダリングし、前記複数のフレーム画像のサブセットを選択し前記複数のフレーム画像の前記選択されたサブセットを表示することによって前記ビデオ・データをレンダリングする、請求項３に記載の方法。
【請求項３７】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記ユーザ・コンピューティング・プラットフォームの１つまたは複数の特性を照会し、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じて、前記ユーザ・コンピューティング・プラットフォームにとってアクセス可能な前記符号化されたビデオ・データを含むファイルを変更する、請求項４または５のいずれか一項に記載の方法。
【請求項３８】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記ユーザ・コンピューティング・プラットフォームの１つまたは複数の特性を照会し、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じて、前記符号化されたビデオ・データの復号、および前記１つまたは複数のフレーム画像の再生のうちの１つまたは複数の少なくとも１つの特性を修正する、請求項４または５のいずれか一項に記載の方法。
【請求項３９】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記符号化されたビデオ・データが前記ユーザ・コンピューティング・プラットフォームに送信されるデータ転送速度を決定し、前記決定に応じて前記ユーザ・コンピューティング・プラットフォームに転送される前記符号化されたビデオ・データを含むファイルを変更する、請求項４または５のいずれか一項に記載の方法。
【請求項４０】
前記スクリプトを送信することが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記符号化されたビデオ・データが前記ユーザ・コンピューティング・プラットフォームに送信されるデータ転送速度を決定し、前記決定に応じて、前記符号化されたビデオ・データの復号、および前記フレーム画像の再生のうちの１つまたは複数の少なくとも１つの特性を修正する、請求項４または５のいずれか一項に記載の方法。
【請求項４１】
ビデオコンテンツをレンダリングするために、ユーザ・コンピューティング・プラットフォーム上で実行される方法であって、
前記ユーザ・コンピューティング・プラットフォームにてスクリプトを受信し、前記スクリプトが、前記ユーザ・コンピューティング・プラットフォーム上で動作するアプリケーション・プログラムによって解釈されるように構成されることと、
前記コンピューティング・プラットフォーム上で前記アプリケーション・プログラムを使用して前記スクリプトを解釈することとを含み、
前記スクリプトを解釈することが、前記解釈されたスクリプトに、前記ユーザ・コンピューティング・プラットフォームにとってアクセス可能な符号化されたビデオ・データを、１つまたは複数のフレーム画像を含む復号済みビデオ・データに直接復号させる、方法。
【請求項４２】
前記スクリプトを解釈することが、前記アプリケーション・プログラムに、前記１つまたは複数のフレーム画像を前記ユーザ・コンピューティング・プラットフォーム上でネイティブに表示させる、請求項４１に記載の方法。
【請求項４３】
前記スクリプトを解釈することが、前記解釈されたスクリプトに、前記ユーザ・コンピューティング・プラットフォームにとってアクセス可能な符号化されたオーディオ・データを、復号済みオーディオ・データに直接復号させる、請求項４１に記載の方法。
【請求項４４】
前記スクリプトを解釈することが、前記ユーザ・コンピューティング・プラットフォーム上で前記１つまたは複数のフレーム画像を表示することによって前記復号済みビデオ・データをレンダリングし、前記ユーザ・コンピューティング・プラットフォーム上で前記復号済みオーディオ・データを再生することによって前記復号済みオーディオ・データをレンダリングする、請求項４３に記載の方法。
【請求項４５】
前記スクリプトを解釈することが、前記アプリケーション・プログラムに、前記ユーザ・コンピューティング・プラットフォーム上で前記１つまたは複数のフレーム画像を表示することによって前記復号済みビデオ・データをネイティブにレンダリングさせ、前記復号済みオーディオ・データを再生することによって前記復号済みオーディオ・データをネイティブにレンダリングさせる、請求項４３に記載の方法。
【請求項４６】
前記ビデオ・データおよびオーディオ・データが、ビデオ・コンテンツ・アイテムの一部として互いに関連付けられており、前記１つまたは複数のフレーム画像が、複数のフレーム画像を含み、前記スクリプトを解釈することが、前記解釈されたスクリプトに、前記フレーム画像の表示を前記復号済みオーディオ・データの再生と直接同期させる、請求項４４または４５のいずれか一項に記載の方法。
【請求項４７】
前記ビデオ・データおよびオーディオ・データが、ビデオ・コンテンツ・アイテムの一部として互いに関連付けられており、前記１つまたは複数のフレーム画像が、複数のフレーム画像を含み、前記スクリプトを解釈することが、前記復号済みオーディオ・データの再生に関連するオーディオ再生時間基準を確かめ、前記解釈されたスクリプトに、前記オーディオ再生時間基準に基づいて前記フレーム画像の表示を前記復号済みオーディオ・データの再生と直接同期させる、請求項４４または４５のいずれか一項に記載の方法。
【請求項４８】
前記フレーム画像の表示を前記復号済みオーディオ・データの再生と同期することが、前記ビデオ・データのレンダリングが時間の第１の閾値量だけ前記オーディオ再生時間基準より遅れていると判定されたことに基づいて１つまたは複数のフレーム画像の表示をスキップすることによって順序外れのフレーム画像の表示を進めること、および、前記ビデオ・データのレンダリングが時間の第２の閾値量だけ前記オーディオ再生時間基準より進んでいると判定されたことに基づいて１つまたは複数のフレーム画像を、前記ビデオ・データのフレームレートによって決まる期間より長い期間の間、表示させることのうちの少なくとも１つを含む、請求項４７に記載の方法。
【請求項４９】
前記フレーム画像の表示を前記復号済みオーディオ・データの再生と同期することが、前記オーディオ再生時間基準を使用し、現在のフレーム・インデックスを決定すること、および、前記現在のフレーム・インデックスに関連付けられた前記フレーム画像が表示される準備ができている場合、前記現在のフレーム・インデックスに関連付けられた前記フレーム画像を表示することを含む、請求項４７に記載の方法。
【請求項５０】
前記フレーム画像の表示を前記復号済みオーディオ・データの再生と同期することが、前記現在のフレーム・インデックスに関連付けられた前記フレーム画像がフレーム画像キュー内の１つまたは複数の他のフレーム画像より遅れていると判定すること、および、遅れている場合、前記１つまたは複数の他のフレーム画像の表示をスキップすることを含む、請求項４９に記載の方法。
【請求項５１】
前記フレーム画像の表示を前記オーディオ・データの再生と同期することが、前記現在のフレーム・インデックスに関連付けられた前記フレーム画像が表示される準備ができていないと判定すること、および、そのような判定とは独立して、ドロップ・フレーム・アクションを開始することを含み、前記ドロップ・フレーム・アクションが、前記現在のフレーム・インデックスに関連付けられた前記フレーム画像がレンダリングのための準備ができていなかったという指示を記録すること、復号済みオーディオ・データの再生を休止させる、または速度を落とさせること、符号化されたビデオ・データの復号のレートを増大させること、より低いフレームレートを有するビデオ・データへの切替えを引き起こすこと、前記画像フレームのサブセットを復号することによって前記ビデオ・データの事実上のダウンサンプリングへの切替えを引き起こすことのうちの１つまたは複数を含む、請求項４９に記載の方法。
【請求項５２】
前記スクリプトを解釈することが、前記符号化されたビデオ・データを前記フレーム画像に直接復号することを含む第１のシミュレートされたスレッドを反復してスケジューリングおよび実行すること、および、前記フレーム画像を表示することによって前記ビデオ・データをレンダリングすることを含む第２のシミュレートされたスレッドを反復してスケジューリングおよび実行することによって、マルチスレッド型実行環境をシミュレートする、請求項４４または４５のいずれか一項に記載の方法。
【請求項５３】
前記スクリプトを解釈することが、前記符号化されたオーディオ・データを前記復号済みオーディオ・データに直接復号することを含む第３のシミュレートされたスレッドを反復してスケジューリングおよび実行すること、および、復号済みオーディオ・データをオーディオ・レンダラに供給するオーディオ・レンダラ・インターフェースを実行することを含む第４のシミュレートされたスレッドを反復してスケジューリングおよび実行することによって、マルチスレッド型実行環境をシミュレートする、請求項５２に記載の方法。
【請求項５４】
前記スクリプトを解釈することが、方法を反復してスケジューリングおよび実行することによって、マルチスレッド型実行環境をシミュレートし、前記方法が、各反復ごとに、１つまたは複数の対応する条件に対する１または複数の論理的な調査を行い、前記１つまたは複数の対応する条件に応じて、
前記符号化されたビデオ・データを前記フレーム画像に直接復号することを含む第１のシミュレートされたスレッド、
前記フレーム画像を表示することによって前記ビデオ・データをレンダリングすることを含む第２のシミュレートされたスレッド、
前記符号化されたオーディオ・データを前記復号済みオーディオ・データに直接復号することを含む第３のシミュレートされたスレッド、
復号済みオーディオ・データをオーディオ・レンダラに送るオーディオ・レンダラ・インターフェースを実装することを含む第４のシミュレートされたスレッドのうちの１つを選択および実行する、請求項４４または４５のいずれか一項に記載の方法。
【請求項５５】
前記第１のシミュレートされたスレッドを実行することが、前記第１のシミュレートされたスレッドを複数のサブコンポーネントに分割すること、サブコンポーネントの対の実行の間で、１つまたは複数の対応する条件に対する１または複数の論理的な調査を行い、前記１つまたは複数の対応する条件に応じて、前記第１のシミュレートされたスレッドに一時的に割り込み、第２のシミュレートされたスレッド、および復号済みオーディオ・データをオーディオ・レンダラに送るオーディオ・レンダラ・インターフェースを実行することを含む別のシミュレートされたスレッドのうちの１つの反復を選択および実行する、請求項５２に記載の方法。
【請求項５６】
前記１つまたは複数のフレーム画像を表示することによって前記ビデオ・データをレンダリングすることが、少なくとも１対のフレーム画像を共にアルファブレンディングすることを含む、請求項４４または４５のいずれか一項に記載の方法。
【請求項５７】
前記１つまたは複数のフレーム画像を表示することによって前記ビデオ・データをレンダリングすることが、前記フレーム画像の第１のフレーム画像を表示することと前記フレーム画像の第２のフレーム画像を表示することとの間の１回または複数回のそれぞれにおいて、前記フレーム画像の前記第１のフレーム画像と前記フレーム画像の前記第２のフレーム画像のアルファブレンドを含むアルファブレンディング済み画像を表示することを含む、請求項４４または４５のいずれか一項に記載の方法。
【請求項５８】
前記フレーム画像の前記第１のフレーム画像を表示することと前記フレーム画像の前記第２のフレーム画像を表示することとの間の前記１回または複数回のそれぞれにおいて、前記アルファブレンディング済み画像を表示することが、
α＝［β＋ｌ−ｍｏｄ（ｆ＃，β）］−１
によって与えられるアルファブレンディング係数を使用して前記フレーム画像の前記第２のフレーム画像を以前に表示された画像上にアルファブレンディングすることを含み、
上式で、
・  βは、前記１回または複数回の数に等しいダウンサンプリング係数であり、
・  ｆ＃は、前記１回または複数回の現在の回の数を指すインデックスであり、
・  ｍｏｄ（ｘ，ｙ）は、ｘをｙで割った整数の余りを返すモジュロ演算子である、請求項５７に記載の方法。
【請求項５９】
前記スクリプトを解釈することが、前記解釈されたスクリプトに、ビデオ・データ・キューを、その状況を判定するために直接監視するビデオ・データ・キュー・モニタの少なくとも一部分を、前記解釈されたスクリプトに直接実行させ、前記ビデオ・データ・キューの前記判定された状況に応じて、より多くの符号化されたビデオ・データをフェッチするかどうか判定する、請求項４１から５８のいずれか一項に記載の方法。
【請求項６０】
前記スクリプトを解釈することが、ＡＪＡＸ  ＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクトを使用してより多くの符号化されたビデオ・データをフェッチする前記ビデオ・キュー・モニタの第２の部分を実行する、請求項５９に記載の方法。
【請求項６１】
前記スクリプトを解釈することが、複数のＡＪＡＸ  ＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクトを交互に使用することによってより多くの符号化されたビデオ・データをフェッチする前記ビデオ・キュー・モニタの第２の部分を実行する、請求項５９に記載の方法。
【請求項６２】
前記スクリプトを解釈することが、前記アプリケーション・プログラムに、前記オーディオ・データから前記ビデオ・データをネイティブに逆多重化させる、請求項４４から４５のいずれか一項に記載の方法。
【請求項６３】
前記スクリプトを解釈することが、前記解釈されたスクリプトに、フレーム画像バッファを、その状況を判定するために監視するフレームバッファ・モニタを、前記解釈されたスクリプトに直接実行させ、前記フレーム画像バッファの前記判定された状況に応じて、前記符号化されたビデオ・データのより多くを復号するかどうか判定する、請求項４１から６２のいずれか一項に記載の方法。
【請求項６４】
前記スクリプトを解釈することが、前記解釈されたスクリプトに、前記フレーム画像のうちの少なくとも１つの画像ファイル・フォーマットを第１の画像ファイル・フォーマットから第２の画像ファイル・フォーマットに直接変換させ、前記第２の画像ファイル・フォーマットが、前記アプリケーション・プログラムによってネイティブにレンダリングされることが可能である、請求項４１から６３のいずれか一項に記載の方法。
【請求項６５】
前記スクリプトを解釈することが、前記解釈されたスクリプトに、前記フレーム画像の少なくとも１つのフレーム画像をコンテンツ転送フォーマットに直接変換させ、前記コンテンツ転送フォーマットが、前記スクリプトを解釈するスクリプト・インタプリタによって前記アプリケーション・プログラムに渡されることが可能である、請求項４１から６４のいずれか一項に記載の方法。
【請求項６６】
前記スクリプトを解釈することが、前記解釈されたスクリプトに、前記フレーム画像の少なくとも１つのフレーム画像をベース６４コンテンツ転送フォーマットに直接変換させる、請求項４１から６４のいずれか一項に記載の方法。
【請求項６７】
前記スクリプトを解釈することが、前記アプリケーション・プログラムに、前記フレーム画像の少なくとも１つのフレーム画像を、前記アプリケーション・プログラムによってネイティブにレンダリングされることが可能な、対応する画像オブジェクトにネイティブに変換させる、請求項４１から６６のいずれか一項に記載の方法。
【請求項６８】
前記アプリケーション・プログラムがインターネットブラウザを含む、請求項４１から６７のいずれか一項に記載の方法。
【請求項６９】
前記スクリプトがＨＴＭＬドキュメント内に埋め込まれる、請求項１から６８のいずれか一項に記載の方法。
【請求項７０】
前記１つまたは複数のフレーム画像が、複数のフレーム画像を含み、前記スクリプトを解釈することが、前記復号済みオーディオ・データを再生することによって前記オーディオ・データをレンダリングし、前記複数のフレーム画像のサブセットを選択し前記複数のフレーム画像の前記選択されたサブセットを表示することによって前記ビデオ・データをレンダリングする、請求項４３に記載の方法。
【請求項７１】
前記スクリプトを解釈することが、前記ユーザ・コンピューティング・プラットフォームの１つまたは複数の特性を照会し、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じて、前記ユーザ・コンピューティング・プラットフォームにとってアクセス可能な前記符号化されたビデオ・データを含むファイルを変更する、請求項４４または４５のいずれか一項に記載の方法。
【請求項７２】
前記スクリプトを解釈することが、前記ユーザ・コンピューティング・プラットフォームの１つまたは複数の特性を照会し、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じて、前記符号化されたビデオ・データの復号、および前記１つまたは複数のフレーム画像の再生のうちの１つまたは複数の少なくとも１つの特性を修正する、請求項４４または４５のいずれか一項に記載の方法。
【請求項７３】
前記スクリプトを解釈することが、前記符号化されたビデオ・データが前記ユーザ・コンピューティング・プラットフォームによって受信されるデータ転送速度を決定し、前記決定に応じて前記ユーザ・コンピューティング・プラットフォームにとってアクセス可能な前記符号化されたビデオ・データを含むファイルを変更する、請求項４４または４５のいずれか一項に記載の方法。
【請求項７４】
前記スクリプトを解釈することが、前記符号化されたビデオ・データが前記ユーザ・コンピューティング・プラットフォームによって受信されるデータ転送速度を決定し、前記決定に応じて、前記符号化されたビデオ・データの復号、および前記１つまたは複数のフレーム画像の再生のうちの１つまたは複数の少なくとも１つの特性を修正する、請求項４４または４５のいずれか一項に記載の方法。
【請求項７５】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信するためのサーバ・コンピューティング・デバイスであって、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するようにコンパイルされたアプリケーション・プログラムによって解釈されるように構成される、サーバ・コンピューティング・デバイスを備え、
前記スクリプトを送信することが、前記ユーザ・コンピューティング・プラットフォーム上で動作する前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記解釈されたスクリプトに、前記ユーザ・コンピューティング・プラットフォームにとってアクセス可能な符号化されたビデオ・データを、１つまたは複数のフレーム画像を含む復号済みビデオ・データに直接復号させる、システム。
【請求項７６】
請求項２〜４０の特徴のいずれか、または特徴の組合せを含む、請求項７５に記載のシステム。
【請求項７７】
ユーザ・コンピュータ・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、
前記ユーザ・コンピューティング・プラットフォームにとってアクセス可能な前記符号化されたビデオ・データを、１つまたは複数のフレーム画像を含む復号済みビデオ・データに復号するための復号要素を提供するように構成されたプロセッサを備え、
前記プロセッサが、前記ユーザ・コンピューティング・プラットフォーム上でアプリケーション・プログラムを実行することによって復号要素を提供するように構成され、前記アプリケーション・プログラムがクロスプラットフォーム・スクリプトを解釈し、それにより前記解釈されたスクリプトが前記ビデオ・データを直接復号する、システム。
【請求項７８】
請求項４２〜７４の特徴のいずれか、または特徴の組合せを含む、請求項７７に記載のシステム。
【請求項７９】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォームによって受信されるビデオ・データおよび関連のオーディオ・データによって具体化されるビデオコンテンツをレンダリングするために、コンピュータ・システムによって実行される方法であって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信することを含み、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するようにコンパイルされたアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ビデオ・データを構成するフレーム画像を表示することによって前記ビデオ・データをレンダリングし、
前記関連のオーディオ・データを再生し、
前記関連のオーディオ・データの再生に関連するオーディオ再生時間基準を確かめ、
前記解釈されたスクリプトに、前記オーディオ再生時間基準に基づいて前記フレーム画像の表示を前記関連のオーディオ・データの再生と直接同期させるようにさらに構成される、方法。
【請求項８０】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項７９に記載の方法。
【請求項８１】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォームによって受信されるビデオ・データおよび関連のオーディオ・データによって具体化されるビデオコンテンツをレンダリングするためのシステムであって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信するためのサーバ・コンピューティング・デバイスを備え、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ビデオ・データを構成するフレーム画像を表示することによって前記ビデオ・データをレンダリングし、
前記関連のオーディオ・データを再生し、
前記関連のオーディオ・データの再生に関連するオーディオ再生時間基準を確かめ、
前記解釈されたスクリプトに、前記オーディオ再生時間基準に基づいて前記フレーム画像の表示を前記関連のオーディオ・データの再生と直接同期させるようにさらに構成される、システム。
【請求項８２】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項８１に記載のシステム。
【請求項８３】
前記ユーザ・コンピューティング・プラットフォームによって受信されるビデオ・データおよび関連のオーディオ・データによって具体化されるビデオコンテンツをレンダリングするためにユーザ・コンピューティング・プラットフォーム上で実行される方法であって、
前記ユーザ・コンピューティング・プラットフォームにてスクリプトを受信し、前記スクリプトが、前記ユーザ・コンピューティング・プラットフォーム上で動作するアプリケーション・プログラムによって解釈されるように構成されることと、
前記コンピューティング・プラットフォーム上で前記アプリケーション・プログラムを使用して前記スクリプトを解釈し、前記アプリケーション・プログラムが、
前記ビデオ・データを構成するフレーム画像を表示することによって前記ビデオ・データをレンダリングし、
前記関連のオーディオ・データを再生し、
前記関連のオーディオ・データの再生に関連するオーディオ再生時間基準を確かめ、
前記解釈されたスクリプトに、前記オーディオ再生時間基準に基づいて前記フレーム画像の表示を前記関連のオーディオ・データの再生と直接同期させることとを含む方法。
【請求項８４】
請求項４１〜７４の特徴のいずれか、または特徴の組合せを含む請求項８３に記載の方法。
【請求項８５】
ユーザ・コンピューティング・プラットフォームによって受信されるビデオ・データおよび関連のオーディオ・データによって具体化されるビデオコンテンツをレンダリングするためのシステムであって、前記ユーザ・コンピューティング・プラットフォーム上でアプリケーション・プログラムを実行するように構成されたプロセッサを備え、前記アプリケーション・プログラムがクロスプラットフォーム・スクリプトを解釈し、それにより、
前記ビデオ・データを構成するフレーム画像を表示することによって前記ビデオ・データをレンダリングし、
前記関連のオーディオ・データを再生し、
前記関連のオーディオ・データの再生に関連するオーディオ再生時間基準を確かめ、
前記解釈されたスクリプトに、前記オーディオ再生時間基準に基づいて前記フレーム画像の表示を前記関連のオーディオ・データの再生と直接同期させる、システム。
【請求項８６】
請求項４１〜７４の特徴のいずれか、または特徴の組合せを含む、請求項８５に記載のシステム。
【請求項８７】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォームによって受信される符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするための、コンピュータ・システムによって実行される方法であって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信することを含み、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するようにコンパイルされたアプリケーション・プログラムによって解釈されるように構成され、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記符号化されたビデオ・データを１つまたは複数のフレーム画像を含む復号済みビデオ・データに復号することを含む第１のシミュレートされたスレッドを反復してスケジューリングおよび実行すること、および、
前記１つまたは複数のフレーム画像を表示することによって前記符号化されたビデオ・データをレンダリングすることを含む第２のシミュレートされたスレッドを反復してスケジューリングおよび実行することによって、マルチスレッド型実行環境をシミュレートする、方法。
【請求項８８】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項８７に記載の方法。
【請求項８９】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォームによって受信される符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするためのシステムであって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信するためのサーバ・コンピューティング・デバイスを備え、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成され、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記符号化されたビデオ・データを１つまたは複数のフレーム画像を含む復号済みビデオ・データに復号することを含む第１のシミュレートされたスレッドを反復してスケジューリングおよび実行すること、および、
前記１つまたは複数のフレーム画像を表示することによって前記符号化されたビデオ・データをレンダリングすることを含む第２のシミュレートされたスレッドを反復してスケジューリングおよび実行することによって、マルチスレッド型実行環境をシミュレートする、システム。
【請求項９０】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項８９に記載のシステム。
【請求項９１】
ユーザ・コンピューティング・プラットフォームによって受信される符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするために前記ユーザ・コンピューティング・プラットフォーム上で実行される方法であって、
前記ユーザ・コンピューティング・プラットフォームにてスクリプトを受信し、前記スクリプトが、前記ユーザ・コンピューティング・プラットフォーム上で動作するアプリケーション・プログラムによって解釈されるように構成されることと、
前記コンピューティング・プラットフォーム上で前記アプリケーション・プログラムを使用して前記スクリプトを解釈することとを含み、
前記スクリプトを解釈することが、
前記符号化されたビデオ・データを１つまたは複数のフレーム画像を含む復号済みビデオ・データに復号することを含む第１のシミュレートされたスレッドを反復してスケジューリングおよび実行すること、および、
前記１つまたは複数のフレーム画像を表示することによって前記符号化されたビデオ・データをレンダリングすることを含む第２のシミュレートされたスレッドを反復してスケジューリングおよび実行することによって、マルチスレッド型実行環境をシミュレートする、方法。
【請求項９２】
請求項４１〜７４の特徴のいずれか、または特徴の組合せを含む、請求項９１に記載の方法。
【請求項９３】
ユーザ・コンピューティング・プラットフォームによって受信される符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするためのシステムであって、プロセッサを備え、前記プロセッサが、前記ユーザ・コンピューティング・プラットフォーム上でアプリケーション・プログラムを実行するように構成され、前記アプリケーション・プログラムがクロスプラットフォーム・スクリプトを解釈し、
前記符号化されたビデオ・データを１つまたは複数のフレーム画像を含む復号済みビデオ・データに復号する第１のシミュレートされたスレッドを反復してスケジューリングおよび実行すること、および、
前記１つまたは複数のフレーム画像を表示することによって前記符号化されたビデオ・データをレンダリングする第２のシミュレートされたスレッドを反復してスケジューリングおよび実行することによって、シミュレートされたマルチスレッド型実行環境を提供する、システム。
【請求項９４】
請求項４１〜７４の特徴のいずれか、または特徴の組合せを含む、請求項９３に記載のシステム。
【請求項９５】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォームによって受信される符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするための、コンピュータ・システムによって実行される方法であって、スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信することを含み、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記符号化されたビデオ・データを、複数のフレーム画像を含む復号済みビデオ・データに復号し、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングするようにさらに構成され、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングすることが、少なくとも１対のフレーム画像を共にアルファブレンディングすることを含む、方法。
【請求項９６】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項９５に記載の方法。
【請求項９７】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォームによって受信される符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするためのシステムであって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信するためのサーバ・コンピューティング・デバイスを備え、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記符号化されたビデオ・データを、複数のフレーム画像を含む復号済みビデオ・データに復号し、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングするようにさらに構成され、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングすることが、少なくとも１対のフレーム画像を共にアルファブレンディングすることを含む、システム。
【請求項９８】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項９７に記載のシステム。
【請求項９９】
ユーザ・コンピューティング・プラットフォームによって受信される符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするために前記ユーザ・コンピューティング・プラットフォーム上で実行される方法であって、
前記ユーザ・コンピューティング・プラットフォームにてスクリプトを受信し、前記スクリプトが、前記ユーザ・コンピューティング・プラットフォーム上で動作するアプリケーション・プログラムによって解釈されるように構成されることと、
前記アプリケーション・プログラムを使用して前記スクリプトを解釈すること
とを含み、
前記スクリプトを解釈することが、
前記符号化されたビデオ・データを、複数のフレーム画像を含む復号済みビデオ・データに復号し、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングし、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングすることが、少なくとも１対のフレーム画像を共にアルファブレンディングすることを含む、方法。
【請求項１００】
請求項４１〜７４の特徴のいずれか、または特徴の組合せを含む、請求項９９に記載の方法。
【請求項１０１】
ユーザ・コンピューティング・プラットフォームによって受信される符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするためのシステムであって、前記ユーザ・コンピューティング・プラットフォーム上でアプリケーション・プログラムを実行するように構成されたプロセッサを備え、前記アプリケーション・プログラムがクロスプラットフォーム・スクリプトを解釈し、それにより、
前記符号化されたビデオ・データを、複数のフレーム画像を含む復号済みビデオ・データに復号し、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングし、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングすることが、少なくとも１対のフレーム画像を共にアルファブレンディングすることを含む、システム。
【請求項１０２】
請求項４１〜７４の特徴のいずれか、または特徴の組合せを含む、請求項１０１に記載のシステム。
【請求項１０３】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上の符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするための、コンピュータ・システムによって実行される方法であって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信することを含み、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムが、前記ユーザ・コンピューティング・プラットフォーム上で動作することと、
符号化されたビデオ・データを提供するように一連のフレーム画像を符号化し、前記フレーム画像を符号化することが、前記フレーム画像をコンテンツ転送フォーマットに符号化し、それにより、前記コンテンツ転送符号化済みフレーム画像を、前記スクリプトを解釈するスクリプト・インタプリタによって前記アプリケーション・プログラムに渡すことができることを含むことと、
前記符号化されたビデオ・データを前記ユーザ・コンピューティング・プラットフォームに送信すること
とを含み、
前記スクリプトが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記送信された、符号化されたビデオ・データを、前記コンテンツ転送符号化済みフレーム画像を含む復号済みビデオ・データに復号し、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングするようにさらに構成される、方法。
【請求項１０４】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１０３に記載の方法。
【請求項１０５】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上の符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするためシステムであって、
サーバ・コンピューティング・デバイスを備え、前記サーバ・コンピューティング・デバイスが、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信し、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されること、
前記符号化されたビデオ・データを提供するように一連のフレーム画像を符号化し、前記フレーム画像を符号化することが、前記フレーム画像をコンテンツ転送フォーマットに符号化し、それにより、前記コンテンツ転送符号化済みフレーム画像を、前記スクリプトを解釈するスクリプト・インタプリタによって前記アプリケーション・プログラムに渡すことができることを含むこと、および、
前記符号化されたビデオ・データを前記ユーザ・コンピューティング・プラットフォームに送信することを行うように構成され、
前記スクリプトが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記送信された、符号化されたビデオ・データを、前記コンテンツ転送符号化済みフレーム画像を含む復号済みビデオ・データに復号し、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングする、システム。
【請求項１０６】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１０５に記載のシステム。
【請求項１０７】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上の符号化されたビデオ・データによって具体化されるビデオコンテンツをレンダリングするために、コンピュータ・システムによって実行される方法であって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信し、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムが、前記ユーザ・コンピューティング・プラットフォーム上で動作することと、
前記符号化されたビデオ・データを提供するように一連のフレーム画像を符号化し、前記フレーム画像を符号化することが、
第１のファイル・フォーマットで提供される前記フレーム画像のうちの少なくとも１つについて、
フレーム画像の前記第１のフレーム画像のコンテンツを解析すること、
前記フレーム画像の前記第１のフレーム画像の前記コンテンツの前記解析に基づいて複数の２次画像ファイルの中の１つを選択すること、および、
前記第１のファイル・フォーマットが前記２次画像ファイル・フォーマットの前記選択されたフォーマットと異なる場合、前記フレーム画像の前記第１のフレーム画像の前記画像ファイル・フォーマットを前記２次ファイル・フォーマットの前記選択されたものに変換すること、および
第２のファイル・フォーマットで提供されるフレーム画像の少なくとも第２のフレーム画像について、
フレーム画像の前記第２のフレーム画像のコンテンツを解析すること、
前記フレーム画像の前記第２のフレーム画像の前記コンテンツの前記解析に基づいて前記複数の２次画像ファイル・フォーマットの中から異なる１つを選択すること、および、
前記第２のファイル・フォーマットが前記２次画像ファイル・フォーマットの前記選択された異なるフォーマットと異なる場合、前記フレーム画像の前記第２のフレーム画像の前記画像ファイル・フォーマットを前記２次ファイル・フォーマットの前記選択された異なるフォーマットに変換することを含み、
前記複数の２次画像ファイル・フォーマットのそれぞれが、前記アプリケーション・プログラムによってネイティブにレンダリングされることが可能であることと、
前記符号化されたビデオ・データを前記ユーザ・コンピューティング・プラットフォームに送信すること
とを含み、
前記スクリプトが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記送信された、符号化されたビデオ・データを、前記フレーム画像を含む復号済みビデオ・データに復号し、
前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングするようにさらに構成される、方法。
【請求項１０８】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１０７に記載の方法。
【請求項１０９】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、請求項１０７〜１０８の特徴のいずれか、または特徴の組合せを含むシステム。
【請求項１１０】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするために、コンピュータ・システムによって実行される方法であって、
符号化されたビデオ・データを提供するように一連のフレーム画像を符号化し、前記フレーム画像を符号化することが、前記フレーム画像をコンテンツ転送フォーマットに変換することを含むことと、
前記符号化されたビデオ・データを前記ユーザ・コンピューティング・プラットフォームに送信すること
とを含み、
前記符号化されたデータを送信することにより、前記ユーザ・コンピューティング・プラットフォーム上で動作するアプリケーション・プログラムのスクリプト・インタプリタがスクリプトを解釈し、前記送信された、符号化されたビデオ・データを、前記コンテンツ転送フォーマットの復号済みフレーム画像データに復号し、前記コンテンツ転送フォーマットの前記復号済みフレーム画像データを、前記復号済みフレーム画像データがレンダリングされる順序で前記アプリケーション・プログラムに渡す、方法。
【請求項１１１】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１１０に記載の方法。
【請求項１１２】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、請求項１１０〜１１１の特徴のいずれか、または特徴の組合せを含むシステム。
【請求項１１３】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするために、コンピュータ・システムによって実行される方法であって、
符号化されたビデオ・データを提供するように一連のフレーム画像を符号化し、前記フレーム画像を符号化することが、前記フレーム画像をコンテンツ転送フォーマットに符号化し、それにより、前記コンテンツ転送符号化済みフレーム画像を、前記ユーザ・コンピューティング・プラットフォーム上で動作するアプリケーション・プログラムのスクリプト・インタプリタから前記アプリケーション・プログラムに渡すことができ、このとき、前記スクリプト・インタプリタは、スクリプトを解釈し、前記符号化されたビデオ・データを前記コンテンツ転送符号化済みフレーム画像を含む復号済みビデオ・データに復号し、前記フレーム画像を表示することによって前記復号済みビデオ・データをレンダリングする、方法。
【請求項１１４】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１１３に記載の方法。
【請求項１１５】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、請求項１１３〜１１４の特徴のいずれか、または特徴の組合せを含むシステム。
【請求項１１６】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするために、コンピュータ・システムによって実行される方法であって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信することを含み、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ユーザ・コンピューティング・プラットフォームの１つまたは複数の特性を照会し、
前記ビデオコンテンツを実行する複数のタイプの符号化されたビデオ・データから選択された、前記ビデオコンテンツを実行する第１のタイプの符号化されたビデオ・データを受信するための要求を送信するようにさらに構成され、前記選択が、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じてなされる、方法。
【請求項１１７】
前記スクリプトが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ユーザ・コンピューティング・プラットフォームにて第１のタイプの符号化されたビデオ・データを受信したとき、前記第１のタイプの符号化されたビデオ・データを、１つまたは複数の第１のフレーム画像を含む第１の復号済みビデオ・データに復号し、
前記１つまたは複数の第１のフレーム画像を表示することによって前記第１の復号済みビデオ・データをレンダリングするようにさらに構成される、請求項１１６に記載の方法。
【請求項１１８】
前記スクリプトが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ユーザ・コンピューティング・プラットフォームにて受信された前記複数のタイプの符号化されたビデオ・データのうちから第２のタイプの符号化されたビデオ・データを、１つまたは複数の第２のフレーム画像を含む第２の復号済みビデオ・データに復号し、
前記１つまたは複数の第２のフレーム画像を表示することによって前記第２の復号済みビデオ・データをレンダリングするようにさらに構成され、
前記第２のタイプの符号化されたビデオ・データを復号すること、および前記第２の復号済みビデオ・データをレンダリングすることが、前記第１のタイプの符号化されたビデオ・データを受信するための前記要求を送信する前に行われる、請求項１１６に記載の方法。
【請求項１１９】
前記第２のタイプの符号化されたビデオ・データが前記第１のタイプの符号化されたビデオ・データとは異なる、請求項１１８に記載の方法。
【請求項１２０】
前記複数のタイプの符号化されたビデオ・データが、少なくとも２つのタイプの符号化されたビデオ・データを含み、前記少なくとも２つのタイプの符号化されたビデオ・データのそれぞれが、対応する画像フォーマットで表された、対応する符号化された一連のフレーム画像を含み、前記少なくとも２つのタイプの符号化されたビデオ・データの前記対応する画像フォーマットが互いに異なる、請求項１１７に記載の方法。
【請求項１２１】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１１６から１２０のいずれか一項に記載の方法。
【請求項１２２】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信するためのサーバ・コンピューティング・デバイスを備え、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ユーザ・コンピューティング・プラットフォームの１つまたは複数の特性を照会し、
前記ビデオコンテンツを実行する複数のタイプの符号化されたビデオ・データから選択された、前記ビデオコンテンツを実行する第１のタイプの符号化されたビデオ・データを受信するための要求を送信するようにさらに構成され、前記選択が、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じてなされる、システム。
【請求項１２３】
前記スクリプトが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ユーザ・コンピューティング・プラットフォームにて第１のタイプの符号化されたビデオ・データを受信したとき、前記第１のタイプの符号化されたビデオ・データを、１つまたは複数の第１のフレーム画像を含む第１の復号済みビデオ・データに復号し、
前記１つまたは複数の第１のフレーム画像を表示することによって前記第１の復号済みビデオ・データをレンダリングするようにさらに構成される、請求項１２２に記載のシステム。
【請求項１２４】
前記スクリプトが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ユーザ・コンピューティング・プラットフォームにて受信された前記複数のタイプの符号化されたビデオ・データのうちから第２のタイプの符号化されたビデオ・データを、１つまたは複数の第２のフレーム画像を含む第２の復号済みビデオ・データに復号し、
前記１つまたは複数の第２のフレーム画像を表示することによって前記第２の復号済みビデオ・データをレンダリングするようにさらに構成され、
前記第２のタイプの符号化されたビデオ・データを復号すること、および前記第２の復号済みビデオ・データをレンダリングすることが、前記第１のタイプの符号化されたビデオ・データを受信するための前記要求を送信する前に行われる、請求項１２２に記載のシステム。
【請求項１２５】
前記第２のタイプの符号化されたビデオ・データが前記第１のタイプの符号化されたビデオ・データとは異なる、請求項１２４に記載のシステム。
【請求項１２６】
前記スクリプトが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記第１のタイプの符号化されたビデオ・データを復号する復号特性を構成し、前記復号特性の構成が、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じてなされること、および、
前記１つまたは複数の第１のフレーム画像を表示する表示特性を構成し、前記表示特性の構成が、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じてなされることのうちの少なくとも１つを実行する、請求項１２３に記載のシステム。
【請求項１２７】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１２２から１２６のいずれか一項に記載の方法。
【請求項１２８】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするために、コンピュータ・システムによって実行される方法であって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信し、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ビデオコンテンツを実行する、前記ユーザ・コンピューティング・プラットフォームにて受信された、符号化されたビデオ・データを、１つまたは複数のフレーム画像を含む復号済みビデオ・データに復号し、
前記１つまたは複数のフレーム画像を表示することによって前記復号済みビデオ・データをレンダリングし、
前記ユーザ・コンピューティング・プラットフォームの１つまたは複数の特性を照会し、
前記符号化されたビデオ・データを復号する復号特性を構成し、前記復号特性の構成が、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じてなされること、および、
前記１つまたは複数のフレーム画像を表示する表示特性を構成し、前記表示特性の構成が、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じてなされることのうちの少なくとも１つを実行するようにさらに構成される、方法。
【請求項１２９】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１２８に記載の方法。
【請求項１３０】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、請求項１２８〜１２９の特徴のいずれか、または特徴の組合せを含むシステム。
【請求項１３１】
ビデオコンテンツをレンダリングするためにユーザ・コンピューティング・プラットフォーム上で実行される方法であって、
前記ユーザ・コンピューティング・プラットフォームにてスクリプトを受信し、前記スクリプトが、前記ユーザ・コンピューティング・プラットフォーム上で動作するアプリケーション・プログラムによって解釈されるように構成されることと、
前記アプリケーション・プログラムを使用して前記スクリプトを解釈することとを含み、
前記スクリプトを解釈することが、
前記ユーザ・コンピューティング・プラットフォームの１つまたは複数の特性を照会し、
前記ビデオコンテンツを実行する複数のタイプの符号化されたビデオ・データから選択された、前記ビデオコンテンツを実行する第１のタイプの符号化されたビデオ・データを受信するための要求を送信し、前記選択が、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じてなされる、方法。
【請求項１３２】
前記スクリプトを解釈することが、
前記ユーザ・コンピューティング・プラットフォームにて第１のタイプの符号化されたビデオ・データを受信したとき、前記第１のタイプの符号化されたビデオ・データを、１つまたは複数の第１のフレーム画像を含む第１の復号済みビデオ・データに復号し、
前記１つまたは複数の第１のフレーム画像を表示することによって前記第１の復号済みビデオ・データをレンダリングする、請求項１３１に記載の方法。
【請求項１３３】
請求項４１〜７４の特徴のいずれか、または特徴の組合せを含む、請求項１３１から１３２のいずれか一項に記載の方法。
【請求項１３４】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、請求項１３１〜１３３の特徴のいずれか、または特徴の組合せを含むシステム。
【請求項１３５】
ユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするために前記ユーザ・コンピューティング・プラットフォーム上で実行される方法であって、
前記ユーザ・コンピューティング・プラットフォームにてスクリプトを受信し、前記スクリプトが、前記ユーザ・コンピューティング・プラットフォーム上で動作するアプリケーション・プログラムによって解釈されるように構成されることと、
前記アプリケーション・プログラムを使用して前記スクリプトを解釈することとを含み、
前記スクリプトを解釈することが、
前記ビデオコンテンツを実行する、前記ユーザ・コンピューティング・プラットフォームにて受信された、符号化されたビデオ・データを、１つまたは複数のフレーム画像を含む復号済みビデオ・データに復号し、
前記１つまたは複数のフレーム画像を表示することによって前記復号済みビデオ・データをレンダリングし、
前記ユーザ・コンピューティング・プラットフォームの１つまたは複数の特性を照会し、
前記符号化されたビデオ・データを復号する復号特性を構成し、前記復号特性の構成が、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じてなされること、および、
前記１つまたは複数のフレーム画像を表示する表示特性を構成し、前記表示特性の構成が、前記ユーザ・コンピューティング・プラットフォームの前記１つまたは複数の照会された特性に応じてなされることのうちの少なくとも１つを実行する、方法。
【請求項１３６】
請求項４１〜７４の特徴のいずれか、または特徴の組合せを含む、請求項１３５に記載の方法。
【請求項１３７】
ユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、請求項１３５〜１３６の特徴のいずれか、または特徴の組合せを含むシステム。
【請求項１３８】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするための、コンピュータ・システムによって実行される方法であって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信することを含み、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ビデオコンテンツを実行する、前記ユーザ・コンピューティング・プラットフォームにて受信された、第１のタイプの符号化されたビデオ・データを、１つまたは複数の第１のフレーム画像を含む第１の復号済みビデオ・データに復号し、
前記１つまたは複数の第１のフレーム画像を表示することによって前記第１の復号済みビデオ・データをレンダリングし、
前記第１のタイプの符号化されたビデオ・データが前記ユーザ・コンピューティング・プラットフォームによって受信されているレートを決定し、
前記決定されたレートに応じて、前記ビデオコンテンツを実行する第２のタイプの符号化されたビデオ・データを受信するための要求を送信すること、
前記決定されたレートに応じて、前記第１のタイプの符号化されたビデオ・データの復号の特性を修正すること、および、
前記決定されたレートに応じて、前記１つまたは複数の第１のフレーム画像の表示の特性を修正することのうちの少なくとも１つを実行する、方法。
【請求項１３９】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１３８に記載の方法。
【請求項１４０】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信するためのサーバ・コンピューティング・デバイスを備え、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ビデオコンテンツを実行する、前記ユーザ・コンピューティング・プラットフォームにて受信された、第１のタイプの符号化されたビデオ・データを、１つまたは複数の第１のフレーム画像を含む第１の復号済みビデオ・データに復号し、
前記１つまたは複数の第１のフレーム画像を表示することによって前記第１の復号済みビデオ・データをレンダリングし、
前記第１のタイプの符号化されたビデオ・データが前記ユーザ・コンピューティング・プラットフォームによって受信されているレートを決定し、
前記決定されたレートに応じて、前記ビデオコンテンツを実行する第２のタイプの符号化されたビデオ・データを受信するための要求を送信すること、
前記決定されたレートに応じて、前記第１のタイプの符号化されたビデオ・データの復号の特性を修正すること、および、
前記決定されたレートに応じて、前記１つまたは複数の第１のフレーム画像の表示の特性を修正することのうちの少なくとも１つを実行するようにさらに構成される、システム。
【請求項１４１】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１４０に記載のシステム。
【請求項１４２】
ビデオコンテンツをレンダリングするために、ユーザ・コンピューティング・プラットフォーム上で実行される方法であって、
前記ユーザ・コンピューティング・プラットフォームにてスクリプトを受信し、前記スクリプトが、前記ユーザ・コンピューティング・プラットフォーム上で動作するアプリケーション・プログラムによって解釈されるように構成されることと、
前記アプリケーション・プログラムを使用して前記スクリプトを解釈することとを含み、前記スクリプトを解釈することが、
前記ビデオコンテンツを実行する、前記ユーザ・コンピューティング・プラットフォームにて受信された、第１のタイプの符号化されたビデオ・データを、１つまたは複数の第１のフレーム画像を含む第１の復号済みビデオ・データに復号し、
前記１つまたは複数の第１のフレーム画像を表示することによって前記第１の復号済みビデオ・データをレンダリングし、
前記第１のタイプの符号化されたビデオ・データが前記ユーザ・コンピューティング・プラットフォームによって受信されているレートを決定し、
前記決定されたレートに応じて、前記ビデオコンテンツを実行する第２のタイプの符号化されたビデオ・データを受信するための要求を送信すること、
前記決定されたレートに応じて、前記第１のタイプの符号化されたビデオ・データの復号の特性を修正すること、および、
前記決定されたレートに応じて、前記１つまたは複数の第１のフレーム画像の表示の特性を修正することのうちの少なくとも１つを実行する、方法。
【請求項１４３】
請求項４１〜７４の特徴のいずれか、または特徴の組合せを含む、請求項１４２に記載の方法。
【請求項１４４】
ユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、プロセッサを備え、前記プロセッサが、前記ユーザ・コンピューティング・プラットフォーム上でアプリケーション・プログラムを実行するように構成され、前記アプリケーション・プログラムがクロスプラットフォーム・スクリプトを解釈し、
前記ビデオコンテンツを実行する、前記ユーザ・コンピューティング・プラットフォームにて受信された、第１のタイプの符号化されたビデオ・データを、１つまたは複数の第１のフレーム画像を含む第１の復号済みビデオ・データに復号し、
前記１つまたは複数の第１のフレーム画像を表示することによって前記第１の復号済みビデオ・データをレンダリングし、
前記第１のタイプの符号化されたビデオ・データが前記ユーザ・コンピューティング・プラットフォームによって受信されているレートを決定し、
前記決定されたレートに応じて、前記ビデオコンテンツを実行する第２のタイプの符号化されたビデオ・データを受信するための要求を送信すること、
前記決定されたレートに応じて、前記第１のタイプの符号化されたビデオ・データの復号の特性を修正すること、および、
前記決定されたレートに応じて、前記１つまたは複数の第１のフレーム画像の表示の特性を修正することのうちの少なくとも１つを実行する、システム。
【請求項１４５】
請求項４１〜７４の特徴のいずれか、または特徴の組合せを含む、請求項１４４に記載のシステム。
【請求項１４６】
複数の異なるユーザ・コンピューティング・プラットフォーム・タイプのうちの１つのタイプであるユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするための、コンピュータ・システムによって実行される方法であって、
スクリプトを前記ユーザ・コンピューティング・プラットフォームに送信し、前記スクリプトが、前記複数のユーザ・コンピューティング・プラットフォーム・タイプのいずれか１つで動作するアプリケーション・プログラムによって解釈されるように構成されており、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、
前記ビデオコンテンツを実行する、前記ユーザ・コンピューティング・プラットフォームにて受信された、第１のタイプの符号化されたビデオ・データを、１つまたは複数の第１のフレーム画像を含む第１の復号済みビデオ・データに復号し、
前記１つまたは複数の第１のフレーム画像を表示することによって前記第１の復号済みビデオ・データをレンダリングし、
前記第１のタイプの符号化されたビデオ・データが前記ユーザ・コンピューティング・プラットフォームによって受信されているレートを決定するようにさらに構成されることと、
前記決定されたレートに応じて、前記ビデオコンテンツを実行する第２のタイプの符号化されたビデオ・データを受信するための要求を送信することとを含む、方法。
【請求項１４７】
前記スクリプトが、前記アプリケーション・プログラムによって前記スクリプトを解釈させ、前記レートを決定し前記第２のタイプの符号化されたビデオ・データを受信するための前記要求を送信した後で、
前記第２のタイプの符号化されたビデオ・データを、１つまたは複数の第２のフレーム画像を含む第２の復号済みビデオ・データに復号し、
前記１つまたは複数の第２のフレーム画像を表示することによって前記第２の復号済みビデオ・データをレンダリングするようにさらに構成される、請求項１４６に記載の方法。
【請求項１４８】
前記第１のタイプの符号化されたビデオ・データが前記第２のタイプの符号化されたビデオ・データとは異なる、請求項１４７に記載の方法。
【請求項１４９】
請求項１〜４０の特徴のいずれか、または特徴の組合せを含む、請求項１４６から１４８のいずれか一項に記載の方法。
【請求項１５０】
ユーザ・コンピューティング・プラットフォーム上でビデオコンテンツをレンダリングするためのシステムであって、請求項１４６〜１４９の特徴のいずれか、または特徴の組合せを含むシステム。
【請求項１５１】
請求項１から４０、７９、８０、８７、８８、９５、９６、１０３、１０４、１０７、１０８、１１０、１１１、１１３、１１４、１１６〜１２１、１２８、および１２９の方法のいずれか１つを実行するように適合されたデータ通信ネットワークを使用して動作可能に接続された１つまたは複数のコンピュータを含むコンピュータ・システム。
【請求項１５２】
データ通信ネットワークを使用して動作可能に接続された１つまたは複数のコンピュータを含む請求項７５、７６、８１、８２、８９、９０、９７、９８、１０５、１０６、１０９、１１２、１１５、１２２〜１２７、および１３０のいずれか一項に記載のシステム。
【請求項１５３】
データ通信ネットワークを使用して動作可能に接続された１つのコンピュータまたは複数のコンピュータを含むコンピュータ・システムによって実行されたとき、前記コンピュータ・システムに、請求項１から４０、７９、８０、８７、８８、９５、９６、１０３、１０４、１０７、１０８、１１０、１１１、１１３、１１４、１１６〜１２１、１２８、および１２９の方法のいずれか１つを実行させるコンピュータ実行可能コードを含むコンピュータ可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、解釈されたスクリプトを使用するユーザ・コンピューティング・デバイス上でのビデオコンテンツのクロスプラットフォーム・レンダリングのための方法およびシステムに関する。特定の実施形態は、インターネットブラウザのスクリプト・インタプリタによって解釈されたとき、解釈されたスクリプトに、ビデオ・データをフレーム画像に直接復号させ、インターネットブラウザに、それらのフレーム画像をネイティブにレンダリングさせる、ＨＴＭＬドキュメント内に埋め込まれたスクリプトを使用するビデオコンテンツのクロスプラットフォーム・レンダリングのための方法およびシステムを提供する。特定の実施形態は、ビデオコンテンツを符号化するための方法およびシステムを提供する。
【背景技術】
【０００２】
デジタル・ビデオは、ビデオコンテンツ、ビデオ・メディア、オーディオビジュアル・メディア、オーディオビジュアル・コンテンツ、マルチメディア、および／またはリッチメディアなど、しばしばいくつかの用語を使用して述べられる。この説明では、ビデオコンテンツは、ビデオ・データ、オーディオ・データ、またはオーディオ・データと組み合わされたビデオ・データによって具現化され得る、または別の形でそれらを含み得る任意のコンテンツおよび／またはメディアを含むと理解されたい。場合によっては、ビデオ・データおよび／またはオーディオ・データは、画像データ、および／またはメタデータなど他のデータとグループ化されてもよい。別段文脈によって示されていない限り、ビデオコンテンツは、そのような画像データ、および／またはメタデータなどを潜在的に含むと理解されたい。非限定的な例として、ビデオコンテンツは、インターネットまたは何らかの他のタイプのデータ・ネットワークを介して（たとえば、ホスト・サーバまたはピア・デバイスを介して）ストリームされ、または別の方法で送信されても、キャッシュされても（たとえば、ＩＳＰ、プロキシ・サーバ、または何らかの他の仲介者によってキャッシュされる）、ローカルでキャッシュされても（たとえば、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってキャッシュされる）、ローカルで記憶され、または別の方法でユーザ・コンピューティング・デバイスにとってローカルでアクセス可能であってもよい。
【０００３】
現在、インターネット（など）で使用可能なデジタル・ビデオ・コンテンツは、多種多様な技法および方式を使用して符号化、送信、およびレンダリングされる。現在使用可能なビデオ・レンダリング技術には、いくつかの欠点が伴う。
【発明の概要】
【０００４】
典型的な従来技術のデジタル・ビデオ技術を使用してビデオコンテンツを配信しユーザ・コンピューティング・デバイス上で実行することに伴う１つの欠点は、専用のアプリケーション・プログラム（一般に、メディア・プレーヤと呼ばれる）をユーザ・コンピューティング・デバイス上にダウンロードしインストールしなければならず、またはユーザ・コンピューティング・デバイス・プラットフォームのプロバイダによってプリインストールされていなければならない（ユーザ・コンピューティング・デバイス・プラットフォームは、ユーザ・コンピューティング・デバイスのハードウェアおよびオペレーティングシステム・ソフトウェアを含む）ことである。この説明では、アプリケーション・プログラムは、アプリケーション、機能、または演算を、それ自体で、かつ別のアプリケーション・プログラムの支援なしに独立して実行することが可能なコンパイル済みプログラム（実行可能オブジェクト・コード・モジュール、および／または他のコンパイル済みコード・セグメント）をいう。アプリケーション・プログラムは、下記でさらに述べるアドオンとは対照的なものである。なぜなら、アドオンは、ホスト・アプリケーションに依存してその機能を提供し、一方、アプリケーション・プログラムは、その機能を独立して実行することが可能であるからである。また、すべての独立のプログラムが必ずしもアプリケーション・プログラムではない。たとえば、Ｊａｖａ仮想マシンなど仮想マシンはアプリケーション・プログラムではない。なぜなら、そのような仮想マシンは、（仮想オペレーティングシステムおよび仮想ハードウェアなど）仮想環境を提供するにすぎず、独立のアプリケーション、機能、または演算を実行しないからである。そのような仮想マシンは、どのようなアプリケーション、機能、または演算を実行するためにも（コンパイル済みＪａｖａバイトコード・アプリケーション・プログラムなど）アプリケーション・プログラムを必要とする。ユーザによっては、別個のメディア・プレーヤをダウンロードしインストールすることができないことがある。ユーザによっては、一般的にファイル、特に実行可能アプリケーション・プログラムをダウンロードすることに伴うセキュリティおよび／またはプライバシの脅威（たとえば、ウィルス、マルウェア、および／またはローカル共有オブジェクトなど）を考えると、別個のメディア・プレーヤをダウンロードするのを嫌がることがある。
【０００５】
さらに、メディア・プレーヤ・アプリケーション・プログラムは、一般に、コンパイル済みオブジェクト・コード・モジュールとしてダウンロードおよびインストールされ、したがって市場に存在し得るユーザ・コンピューティング・デバイス・プラットフォームのバージョン毎に、異なるコンパイル・ターゲットが必要とされる。モバイル・スマートフォン・プラットフォームの成長および多様性、ならびに多種多様なパーソナルコンピュータ・プラットフォームを考えると、サポートされなければならないターゲット・プラットフォームの数が負担となる。なぜなら、メディア・プレーヤの１つのコンパイル済みバージョンが、標的とされていなかったハードウェアおよび／またはオペレーティングシステム・プラットフォーム上で動作しない可能性が高いからである。メディア・プレーヤの、プラットフォームとの互換性が、そのメディア・プレーヤと競合する可能性がある他のインストール済みアプリケーション・プログラムによって損なわれるおそれがあると、複雑さが増大する。
【０００６】
一部のユーザ・コンピューティング・デバイスのハードウェアおよび／またはソフトウェア・プラットフォームは、一部のメディア・プレーヤ・アプリケーションをサポートせず（逆も同様である）、メディア・プレーヤ・アプリケーションは、そのようなハードウェアおよびソフトウェア・プラットフォームにとって使用可能でない。さらに、メディア・プレーヤをダウンロードしインストールしようと望む可能性があるユーザは、一般に、正しいプレーヤをダウンロードするために、それらのユーザ・コンピューティング・デバイスのハードウェアおよび／またはソフトウェア・プラットフォームの何らかの知識を必要とすることになる。メディア・プレーヤをダウンロードおよびインストールすることに伴う問題に加えて、ビデオコンテンツをレンダリングすることは、特定のプレーヤがすでにダウンロードおよびインストールされている場合でさえ、メディア・プレーヤ・アプリケーションの実行を必要とし、これは一般に、かなりのコンピューティング・リソース（たとえば、ＲＡＭ、ＣＰＵ時間など）を消費する。
【０００７】
一部のビデオ・コンテンツ・レンダリング技術は、「隠しプレーヤ（ｈｉｄｄｅｎ  ｐｌａｙｅｒ）」を使用し、これは、ユーザ・コンピューティング・デバイス上で動作するホスト・アプリケーション・プログラム（インターネット・ブラウザなど）がメディア・プレーヤ・アドオンを自動的にダウンロードしインストールする場合をいう。この説明では、アドオンという用語は、アドオン、プラグイン、スナップイン、拡張機能、および／またはアプレットなどを含むと理解されたい。アドオンは、特定の機能（たとえば、ビデオ・コンテンツ・レンダリング）を「ホスト」アプリケーション・プログラムに追加するコンパイル済みプログラム（すなわち、実行可能オブジェクト・コード・モジュール、他のコンパイル済みコード・セグメントなど）である。アドオンは、いくつかの機能を実行することができるが、それらが動作可能であるためにそれらのホスト・アプリケーション・プログラムに依存する。ホスト・インターネット・ブラウザ・アプリケーション・プログラムと共に使用することができるアドオンの例は、メディア・プレーヤ・アドオン、ＰＤＦリーダ・アドオン、Ｊａｖａ仮想マシン（ＪＶＭ）アドオンなどを含む。
【０００８】
場合によっては、メディア・プレーヤ・アドオン（または、ユーザ・コンピューティング・デバイスにメディア・プレーヤ・アドオンをダウンロードおよびインストールさせる命令）は、ビデオ・コンテンツ・ファイルとバンドルされることがある。他の場合には、ビデオ配信技法により、ユーザ・コンピューティング・デバイスのインターネットブラウザが、メディア・プレーヤ・アドオンとビデオ・コンテンツ・ファイルを別々にダウンロードする。そのようなメディア・プレーヤ・アドオンは、実行前に実際にダウンロードおよびインストールされなければならないので、そのようなメディア・プレーヤ・アドオンには、それらの公開メディア・プレーヤ同等物と同様の欠点がある。一部のアプリケーション・プログラム（たとえば、インターネットブラウザ、および／またはアンチウィルス・プログラムなど）またはオペレーティングシステム・ソフトウェアは、そのようなメディア・プレーヤ・アドオンの自動ダウンロードを阻止するセキュリティおよび／またはプライバシ設定（それらのユーザ、それらのネットワーク管理者などによって設定される）を有することがある。メディア・プレーヤ・アドオンのダウンロードおよびインストールの後で、メディア・プレーヤ・アドオンを実行することは、かなりの処理リソースを消費する。コンパイル済みモジュールであるため、アドオンを実行させることができるプラットフォームの各可能な行き先ごとに、異なるバージョンのアドオンを作成しテストしなければならない。
【０００９】
ユーザ・コンピューティング・デバイス上で別個のメディア・プレーヤまたはメディア・プレーヤ・アドオンをダウンロードしインストールすること、プリインストールしておくこと、またはコンパイルすることを回避するようにしてビデオコンテンツをレンダリングすることが広く望まれている。プラットフォームに依存せず、または比較的高い度合いのクロスプラットフォーム動作可能性を有するようにしてビデオコンテンツを配信および実施することが広く望まれている。
【００１０】
コンテンツを配信しユーザ・コンピューティング・デバイス上で実行するための現在の技術の使用に伴う別の欠点は、ストリーミング・ビデオの状況で発生し、現在の技術は、一般に、ユーザ・コンピューティング・デバイスがビデオ・コンテンツ・ストリームを要求するたびにユーザ・コンピューティング・デバイスと何らかの「ハンドシェーク」プロトコルを実行するストリーミング・コンテンツサーバを使用する。コンテンツサーバ、および関連のハンドシェークプロトコルの使用に伴う欠点は、ビデオコンテンツのローカル（またはダウンストリーム）キャッシングを妨げる可能性があることである。そのようなローカルまたはダウンストリーム・キャッシングは、帯域幅（および関連のコスト）を削減し、ストリームの信頼性を改善する（それにより、ビデオ品質を高める）ことができる。
【００１１】
ビデオコンテンツを配信しユーザ・コンピューティング・デバイス上で実行するための現在の技術の使用に伴う別の欠点は、１つまたは複数のＣＯＤＥＣを更新することが望ましいときに発生する。ＣＯＤＥＣは、オーディオまたはビデオ・データを、その送信に必要な帯域幅を削減するために符号化し、次いで、送信の他方の側でデータを復号するための方式である。典型的には、ＣＯＤＥＣを使用することは、送信側でデータを圧縮し、受信側でデータを解凍することを必要とする。また、復号することは、データが受信用コンピューティング・デバイスに到着したときデータをパースおよびアンパックすること、および／または受信用コンピューティング・デバイスによって使用することができるフォーマットにデータを再編成することを必要とする可能性がある。従来技術のビデオ・レンダリング技術は、一般に、実行されたとき復号プロセスを実行するコンパイル済みコンピュータ・プログラム・モジュールの使用を必要とする。ビデオコンテンツが送信側にて更新済みＣＯＤＥＣを用いて符号化される場合には、一般に、そのＣＯＤＥＣ用の新しい更新済み復号用プログラムがユーザ・コンピューティング・デバイスにてダウンロードされインストールされるまで、そのビデオコンテンツをユーザ・コンピューティング・デバイスにて復号することができないことになる。
【００１２】
様々な、より新しいインターネット・ブラウザ・アプリケーション・プログラムは、ＨＴＭＬ５の＜ｖｉｄｅｏ＞タグを使用してウェブページ内に埋め込まれたビデオをネイティブにレンダリングすることが可能である。残念ながら、ＣＯＤＥＣサポートは、現時点では、必ずしもすべてのブラウザにわたって均一ではない。ＨＴＭＬ５の進行中の開発では、ビデオ・フォーマットがあればどれをＨＴＭＬ５コンプライアント・ブラウザによってネイティブにレンダリング可能とするべきかについて論争が続いている。ビデオコンテンツの複数のコピーを異なるＣＯＤＥＣで使用するために提供することができるが、これは一般に、ビデオコンテンツをあるＣＯＤＥＣから別のＣＯＤＥＣにトランスコードすることを必要とする。異なるＣＯＤＥＣに従って符号化されるようにビデオコンテンツをトランスコードすることが可能であるが、これには欠点がある。たとえば、
・  トランスコーディングは時間と労力がかかる。
・  トランスコーディングは、一般に、計算集約的なプロセスであり、その結果、現時点では、リアルタイム・トランスコーディングを提供することは技術的に困難であり、かつ／または比較的計算コストがかかる。
・  ビデオコンテンツを事前に異なるＣＯＤＥＣに従って符号化されるようにトランスコードする場合、一般に、そのビデオコンテンツの複数のコピーを（各異なるＣＯＤＥＣごとに１つ）記憶しなければならず、これは、大量のビデオコンテンツにとって煩わしいものとなり得る。
・  一部のＣＯＤＥＣは知的所有権のあるものであり、それらの合法的な使用は、制限されているか、ライセンス料の支払いを必要とする。
・  異なるＣＯＤＥＣに従って符号化されたビデオコンテンツを保存することは、異なるストリーミングサーバの使用を必要とする。
【００１３】
したがって、既存のビデオ・コンテンツ・レンダリング技術に伴うこれらの、または他の欠点のいくつかを克服する、または改善する、ビデオコンテンツをレンダリングするための方法およびシステムが広く望まれている。
【００１４】
関連技術の前述の例、およびそれらに関連する制限は、例示的なものであり、排他的なものではない。関連技術の他の制限は、本明細書を読み、図面を検討すれば、当業者には明らかになろう。
【００１５】
例示的な実施形態が、図面の参照される図に示されている。本明細書に開示されている実施形態および図は、制限的なものではなく例示的なものとみなすべきであることが意図されている。
本発明の非限定的な実施形態を示す図面において、各図は以下の通りである。
【図面の簡単な説明】
【００１６】
【図１】ＨＴＭＬドキュメント内に埋め込むことができる、またビデオコンテンツをレンダリングするためにインターネットブラウザなどアプリケーション・プログラムによって解釈させることができる、特定の実施形態によるスクリプトの機能コンポーネントを示す概略ブロック図である。
【図２Ａ】例示的な実施形態によるビデオ・レンダリング・システムの概略ブロック図である。
【図２Ｂ】例示的な実施形態によるオーディオ・レンダリング・システムの概略ブロック図である。
【図３】例示的な実施形態によるビデオ・データ・キューイングおよび復号方法のフローチャートである。
【図４】例示的な実施形態によるビデオ・データ・レンダリング方法のフローチャートである。
【図５】例示的な実施形態によるオーディオ・データ・キューイングおよび復号方法のフローチャートである。
【図６】特定の実施形態によるオーディオ・レンダラ・インターフェースを実行するための方法のフローチャートである。
【図７】別の実施形態による、オーディオおよびビデオ・データをキューイングおよび復号し、ビデオ・データをレンダリングし、オーディオ・レンダラ・インターフェースを実行するための方法のフローチャートである。
【図８】特定の例示的な実施形態による、ビデオ・データをフェッチするための方法のフローチャートである。
【図９Ａ】特定の例示的な実施形態による、フレーム補間をダウンサンプリングするための技法の概略図である。
【図９Ｂ】特定の例示的な実施形態による、フレーム補間をダウンサンプリングするための技法の概略図である。
【図９Ｃ】図９Ａおよび図９Ｂによるフレーム補間で使用するのに適した特定の実施形態によるアルファブレンドされた画像を作成するための方法のブロック図である。
【図１０】スクリプトが、解釈されたとき、ユーザ・コンピューティング・デバイスの１つまたは複数の特性、および／またはサーバとユーザ・コンピューティング・デバイスとの間のネットワーク接続に基づいてビデオコンテンツのレンダリングを調整する、ビデオコンテンツをレンダリングするための方法のブロック図である。
【発明を実施するための形態】
【００１７】
以下の説明を通して、当業者に、より完全に理解してもらうために、特定の詳細が記載されている。しかし、本開示を不必要にわかりにくくすることを避けるために、周知の要素は詳細に示されても述べられてもいないことがある。したがって、この説明および図面は、制限的ではなく例示的な意味で考えられるべきである。
【００１８】
本開示および特許請求の範囲では、以下の技術用語は、以下に記載の対応する定義を有する。
・  アプリケーション・プログラムは、アプリケーション、機能、または演算を、それ自体で、かつ別のアプリケーション・プログラムの支援なしに独立して実行することが可能なコンパイル済みプログラム（実行可能オブジェクト・コード・モジュール、および／または他のコンパイル済みコード・セグメント）を意味する。
・  アドオンは、特定の機能（たとえば、ビデオ・コンテンツ・レンダリング）を「ホスト」アプリケーション・プログラムに追加するコンパイル済みプログラム（すなわち、実行可能オブジェクト・コード・モジュール、および／または他のコンパイル済みコード・セグメントなど）を意味する。
・  スクリプトは、一般に、しかし必ずしもそうではないが人間が読めるものであり、コンパイルされることなしにアプリケーション・プログラムのスクリプト・インタプリタによって解釈される非コンパイル型の一連のクロスプラットフォーム命令を意味する。
・  スクリプトがアプリケーション・プログラムによって解釈され、ある機能を「直接」実行するとき、それは、その機能の表現を含むスクリプトが、その機能を実行するためにアプリケーション・プログラム（または、何らかの他のアプリケーション・プログラムまたはアドオン）によって提供される予めコンパイルされたモジュールに依拠することなしに、それ自体で機能を実現するように解釈されることを意味する。
・  アプリケーション・プログラム（インターネット・ブラウザなど）がある機能を「ネイティブに」実行するとき、それは、アプリケーション・プログラムがそれ自体で（コンピューティング・デバイスのハードウェアおよび／またはオペレーティングシステムの可能な支援と共に）その機能を実行し、しかしアドオンに依拠する必要がないことを意味する。アプリケーション・プログラムは、アドオンの予めコンパイルされたコード・モジュールではなく、それ自体の予めコンパイルされたコード・モジュールを要求することによって機能をネイティブに実行することができる。アプリケーション・プログラムは、スクリプトの指示の元で機能をネイティブに実行することができる。
【００１９】
本発明の特定の実施形態は、アプリケーション・プログラム（インターネット・ブラウザなど）によって解釈されるクロスプラットフォーム・スクリプトを使用して、ユーザ・コンピューティング・デバイス上でビデオコンテンツをレンダリングし、ビデオコンテンツを実行するビデオおよび／またはオーディオ・データをネイティブにレンダリングするための方法およびシステムを提供する。ビデオ・レンダリング・プロセスの特定の機能は、スクリプトが解釈されるとき、スクリプトによって直接実行することができる。この説明では、スクリプトという用語は、一般に、しかし必ずしもそうではないが人間が読めるものであり、コンパイルされることなしにアプリケーション・プログラムのスクリプト・インタプリタによって解釈される非コンパイル型の一連のクロスプラットフォーム命令を意味する。典型的なアプリケーション・プログラムおよびアドオンは、実行前にマシン・コードにコンパイルされる。スクリプトは、従来のコンパイル済みコード・アプリケーション・プログラムやアドオンとは対照的なものである。なぜなら、スクリプトはコンパイルされないからである。また、スクリプトはＪａｖａバイトコードとも異なる。バイトコードは、解釈される前に一部が予めコンパイルされ、解釈されるときマシン・コードにコンパイルされる。対照的に、スクリプトは、解釈されるときマシン・コードにコンパイルされない。この説明では、スクリプトが解釈されるとき、アプリケーション・プログラムのスクリプト・インタプリタがスクリプト化された命令を読み取り、そのスクリプト化された命令をマシン・コードにコンパイルすることなしにそのスクリプト化された命令を実行することを意味する。
【００２０】
非限定的な例として、いくつかの実施形態では、スクリプトは、ハイパーテキスト・マークアップ言語（ＨＴＭＬ）ドキュメント内に埋め込まれてもよく、インターネット・ブラウザ・アプリケーション・プログラムがＨＴＭＬドキュメントをレンダリングし、それによりＨＴＭＬページを表示するとき、ユーザ・コンピューティング・デバイス上で動作するインターネット・ブラウザ・アプリケーション・プログラムによって解釈されてもよい。ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザは、ブラウザに入力されるユニバーサル・リソース・ロケータ（ＵＲＬ）によって指定されるインターネット上のロケーションからＨＴＭＬドキュメントを受け取ることができる。大部分のインターネット・ブラウザ・アプリケーション・プログラムは、スクリプトをネイティブに解釈する１つまたは複数のネイティブ・スクリプト・インタプリタを含む。非限定的な例として、スクリプトは、ＥＣＭＡＳｃｒｉｐｔ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｊｓｃｒｉｐｔ、ＡｃｔｉｏｎＳｃｒｉｐｔ、および／またはＨＴＭＬ標準（たとえば、ＨＴＭＬ５）に固有のスクリプティング構文など、クロスプラットフォーム・スクリプティング構文で書かれてもよい。この説明では、アプリケーション・プログラム（インターネット・ブラウザなど）がある機能または演算をネイティブに実行ずるとき、それは、アプリケーション・プログラムそれ自体が（コンピューティング・デバイスのハードウェアおよび／またはオペレーティングシステムの可能な支援と共に）その機能を実行し、しかしアドオンに依拠する必要がないことを意味する。アプリケーション・プログラムは、アドオンの予めコンパイルされたコード・モジュールではなく、それ自体の予めコンパイルされたコード・モジュールを要求することによって機能をネイティブに実行することができる。
【００２１】
本発明の特定の態様は、アプリケーション・プログラム（インターネット・ブラウザなど）によって解釈され、ブラウザにユーザ・コンピューティング・デバイス上でビデオ・データをネイティブにレンダリングさせることができるスクリプトを提供する。いくつかの実施形態では、ユーザ・コンピューティング・デバイスは、ネイティブ・スクリプト・インタプリタを含むことができる、または別の方法でスクリプトを解釈することが可能である異なるアプリケーション・プログラム（たとえば、インターネットブラウザ以外）を使用してもよい。そのような実施形態では、スクリプトは、そのような他のアプリケーション・プログラムによって解釈されてもよく、そのように解釈されるとき、そのような他のアプリケーション・プログラムにユーザ・コンピューティング・デバイス上でビデオ・データをネイティブにレンダリングさせてもよい。話を簡単にするために、また一般性を失わずに、本願の残りの部分は、インターネットブラウザによって解釈され、インターネットブラウザにビデオ・データをネイティブにレンダリングさせるスクリプトを参照することがある。インターネットブラウザに言及することは、インターネットブラウザではなく、１つまたは複数のスクリプト・インタプリタを含む、または別の方法でスクリプトをネイティブに解釈することが可能であり得る他のアプリケーション・プログラムを含むと理解されたい。非限定的な例として、そのようなスクリプトは、必ずしもそうである必要はないが、ハイパーテキスト転送プロトコル（ＨＴＴＰ）を使用して通信されるドキュメント内で提供されてもよい。
【００２２】
いくつかの実施形態では、アプリケーション・プログラムは、スクリプトを解釈し、それにより、解釈されたスクリプトに（ビデオおよび／またはオーディオ・レンダリングに関連する）１つまたは複数の機能を直接実行させることができる。この説明では、スクリプトがアプリケーション・プログラムによって解釈され、ある機能を直接実行するとき、それは、スクリプトがその機能それ自体を実行するように解釈されることを意味する。スクリプトがアプリケーション・プログラムによって解釈され、ある機能を直接実行するとき、解釈されたスクリプトは、その機能の表現を含み、その機能を実行するためにアプリケーション・プログラム（または、何らかの他のアプリケーション・プログラムまたはアドオン）によって提供される予めコンパイルされたモジュールに依拠しない。たとえば、いくつかの実施形態では、インターネットブラウザは、スクリプトを解釈し、解釈されたスクリプトに直接、ビデオコンテンツをその符号化されたフォーマットからフレーム画像に復号する復号機能を実行させ、フレーム画像を、インターネットブラウザによってネイティブにレンダリングすることができるフォーマットに再フォーマット化させ、かつ／またはビデオおよびオーディオ・レンダリングのタイミングを制御もしくは同期させることができる。
【００２３】
特定の実施形態は、インターネットブラウザによって解釈され、解釈されたスクリプトに直接、ビデオ・データを一連の個々のフレーム画像に復号させ、その一連のフレーム画像を一連のビットマップとしてユーザ・コンピューティング・デバイスのディスプレイ上にネイティブに表示させる、ＨＴＭＬドキュメント内に埋め込まれたスクリプトを使用することを含む。同様に、いくつかの実施形態は、インターネットブラウザによって解釈され、解釈されたスクリプトにオーディオ・データを直接復号させ、その復号済みオーディオ・データをユーザ・コンピューティング・デバイス上でネイティブに再生させるスクリプトをさらに使用することを含む。ビデオコンテンツがビデオ・データとオーディオ・データを共に含む場合、スクリプトは、インターネットブラウザによって解釈され、フレーム画像の表示を、復号済みオーディオ・データの再生と同期し、それによりオーディオビジュアル・ビデオ・コンテンツ（たとえば、映画）を、ユーザが体験したいと期待するようにレンダリングしてもよい。
【００２４】
特定の実施形態は、前述のスクリプトをベースとするビデオ・レンダリング技法と共に使用するのに適したビデオコンテンツを符号化するための方法およびシステムを提供する。
【００２５】
コンピュータ、および同様のユーザ・コンピューティング・デバイスは、一般に、マイクロプロセッサのタイプ間で変わる可能性があるマシンまたはオブジェクトコードを理解する。ソフトウェア・エンジニアは、通常、Ｃのようないわゆる「上位」言語でプログラムし、次いで、上位コード（一般に、ソースコードと呼ばれる）を前もってマシンまたはオブジェクトコードを理解に変換することになるコンパイラを使用する。上位言語でプログラムし、次いで人間が読めるソースコードをコンパイル済みの実行可能なバージョンにコンパイルすることに伴う欠点は、プログラムのコンパイル済みバージョンがポータブルまたは「クロスプラットフォーム」でないことである。コンパイル済みコードは、ターゲット・ユーザ・コンピューティング・プラットフォーム（ユーザ・コンピューティング・デバイスのハードウェアおよびオペレーティングシステム）のために特に作成される。これは、上述のように状況によって問題になり得る。
【００２６】
この問題に対処するために、クロスプラットフォーム・コンピュータ言語、たとえばＪａｖａ（登録商標）が提案されている。このコンピュータ言語は、ユーザ・コンピューティング・デバイスにて受け取られる前にいわゆるバイトコードに一部が予めコンパイルされ、バイトコードを理解することになる追加の予めコンパイルされたプログラム（Ｊａｖａ仮想マシン（ＪＶＭ））をユーザ・コンピューティング・デバイスが呼び出すことができることを期待する。コンパイル済みコードであるため、バイトコードをユーザ・コンピューティング・デバイスにて解釈するＪＶＭは、ユーザ・コンピューティング・プラットフォーム特有のものである。ＪＶＭは、特定のユーザ・コンピューティング・デバイスのプラットフォームにとって使用可能でない可能性があり、または、特定のプラットフォームについて機能が制限される可能性がある。したがって、Ｊａｖａ（登録商標）（および、仮想マシンに依拠する同様のコンピュータ言語）の使用は、クロスプラットフォーム動作可能性問題を個々の問題からＪＶＭにシフトするにすぎない。すなわち、予めコンパイルされたプログラムが様々な特定のユーザ・コンピューティング・プラットフォームを標的とする必要があることの代わりに、ＪＶＭは、特定の様々なユーザ・コンピューティング・プラットフォームを標的とする必要がある。
【００２７】
コンパイル済み言語、およびＪａｖａ（登録商標）のような一部がコンパイルされた言語とは異なり、スクリプトはコンパイルされない。スクリプトは、様々なスクリプティング構文（たとえば、ＥＣＭＡＳｃｒｉｐｔ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｊｓｃｒｉｐｔ、ＡｃｔｉｏｎＳｃｒｉｐｔ、および／またはＨＴＭＬ標準に固有のスクリプティング構文など）に従って書かれた一連の命令（たとえば、スクリプト・タグ）を含む。スクリプト化された命令はコンパイルされず、ユーザ・コンピューティング・デバイス上でアプリケーション・プログラムによって（コンパイルされることなしに）解釈され、アプリケーション・プログラムにある種のアクションを実行させる。特にプロセッサ集約的なタスクについてスクリプトを使用することに伴う難点は、解釈が実行時に行われるため、スクリプトの解釈が（たとえば、コンパイル済みプログラムに比べたとき）比較的遅いことである。したがって、本発明者らの知る限り、一連のスクリプト・タグを含むスクリプトは、これまで、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザにビデオコンテンツをネイティブにレンダリングさせるために使用されていない。上述のように、従来技術のビデオ・レンダリング技術は、特定のハードウェアおよびソフトウェア・プラットフォームのためにコンパイルされた、予めコンパイルされたメディア・プレーヤ、アドオン、および／またはＪＶＭなどに依拠する。
【００２８】
図１は、特定の実施形態によるユーザ・コンピューティング・デバイス（図１には明確に示されていない）上でビデオコンテンツをレンダリングするためのスクリプト１０の機能コンポーネントを示す概略ブロック図である。スクリプト１０は、非限定的な例として、ＥＣＭＡＳｃｒｉｐｔ、ＪａｖａＳｃｒｉｐｔ（登録商標）、Ｊｓｃｒｉｐｔ、ＡｃｔｉｏｎＳｃｒｉｐｔなど、クロスプラットフォーム・スクリプト構文で書かれた一連のスクリプティング・タグを含むことができる。レンダリング・エンジン・スクリプト１０が書かれているスクリプティング構文は、好ましくは、主要なオペレーティングシステム、インターネットブラウザ、および／または他のアプリケーション・プログラムによって広くサポートされ、その結果、スクリプト１０は、プラットフォームに依存せず、それにより多種多様なユーザ・コンピューティング・デバイス（非限定的な例として、デスクトップ、ラップトップ、タブレット、スマートフォン、パーソナル・コンピューティング・デバイス、および／または特定用途向けデバイスなど）上で動作する。上述のように、ユーザ・コンピューティング・デバイスは、多種多様なプラットフォームを有することができ、スクリプト１０は、多種多様なプラットフォームを有する多種多様なユーザ・コンピューティング・デバイス上で解釈されることが可能である。スクリプト１０は、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってスクリプト１０が解釈されたときスクリプト１０がインターネットブラウザに図１に示されている機能コンポーネントをネイティブに提供させるように、ＨＴＭＬドキュメント内に埋め込まれてもよい。いくつかの実施形態では、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザは、スクリプト１０をネイティブに解釈することができ、スクリプト１０は、ユーザ・コンピューティング・デバイスがどのようなＣＯＤＥＣ用の追加の予めコンパイルされたデコーダ、メディア・プレーヤ・アドオン、または他のメディア・プレーヤ・アプリケーションをも、インターネットブラウザと並行に、またはそれと共に動作させるためにダウンロード、インストール、または実行することを必要とせずに、インターネットブラウザにビデオ・データをネイティブにレンダリングさせることができる。
【００２９】
特定の一実施形態では、ＨＴＭＬドキュメントは、スクリプト１０、およびビデオ・コンテンツ・ファイルに対する参照を含む。スクリプト１０は、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによって解釈され、インターネットブラウザにビデオコンテンツをレンダリングさせることができる。スクリプト１０の解釈の結果としてレンダリングされるビデオコンテンツは、ネットワーク通信リンクを介して（たとえば、インターネットから、または、ユーザ・コンピューティング・デバイスがホスト・サーバまたはピア・デバイスを介して通信することが可能な何らかの他のネットワークから）ストリーミング（または別の方法で送信）されても（１２）、好適なネットワーク通信リンクを介してダウンストリーム・ネットワーク・キャッシュからアクセスされても（たとえば、ＩＳＰ、プロキシ・サーバ、または何らかの他の仲介者によってキャッシュされる）（１４）、ローカルでキャッシュされても（たとえば、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってローカル・キャッシュにキャッシュされる、または別の方法でユーザ・コンピューティング・デバイスにとってアクセス可能なローカル・キャッシュにキャッシュされる）（１５）、かつ／またはローカル・ファイル（たとえば、ユーザ・コンピューティング・デバイスにとってアクセス可能なローカル・メモリ内に記憶されたファイル）に含まれてもよい（１６）、などである。
【００３０】
スクリプト１０は、解釈されたとき、インターネットブラウザにデータ受信要素２０を提供させることができ、データ受信要素２０は、（ストリーミングまたは別の方法でダウンロードされた（１２）、１つまたは複数のダウンストリーム・キャッシュからアクセスされた（１４）、ローカルでキャッシュされた（１５）、ローカルで記憶された（１６）、および／またはその他（１７））ビデオコンテンツを受信し、符号化されたビデオコンテンツにアクセスし、当初、単一のデータ・ソースに含まれていた可能性がある様々なタイプのデータ（たとえば、ビデオ・データ２２および任意選択でオーディオ・データ２４、画像データ２６、ならびにメタデータ（図示せず））を逆多重化（または別の方法で分離）する。
【００３１】
典型的には、データ受信ブロック２０によってアクセスされたビデオ・データ２２は、何らかのＣＯＤＥＣ方式を使用して符号化されることになる。したがって、図の実施形態のスクリプト１０は、ブラウザによって解釈されるとき、インターネットブラウザに復号要素３０を提供させる。復号要素３０は、ビデオ・データ２２を復号し、それにより復号済み（また典型的には解凍された）ビデオ・データ４２を得るようにネイティブに動作する。いくつかの実施形態では、ブロック３０の復号機能は、スクリプトによって直接実行されてもよい。復号要素３０によって実行される特定の復号および解凍方式は、当然ながらビデオ・データ２２を符号化および圧縮するために使用された符号化方式、またはＣＯＤＥＣに依存することになる。したがって、符号化方式の仕様、および対応する復号方式は、スクリプト１０の開発者にとって既知とすることができる。これらの符号化方式および復号方式（また、特に復号要素３０によって実行される復号方式）は、オープンソース、または別の形で公然と使用可能な標準を含むことができるが、これは必須ではない。
【００３２】
ビデオ・データ２２と同様に、データ受信ブロック２０によってアクセスされるオーディオ・データ２４も、何らかのＣＯＤＥＣ方式を使用して符号化されることになる。したがって、図の実施形態のスクリプト１０は、実行されたとき、インターネットブラウザに復号要素３２を提供させる。復号要素３２は、オーディオ・データ２４を復号し、それにより復号済み（また典型的には解凍された）オーディオ・データ４４を得るようにネイティブに動作する。いくつかの実施形態では、ブロック３２の復号機能は、スクリプトによって直接実行されてもよい。復号要素３２によって実行される特定の復号および解凍方式は、当然ながらオーディオ・データ２４を符号化および圧縮するために使用されたＣＯＤＥＣに依存することになる。したがって、符号化方式の仕様、および対応する復号方式は、スクリプト１０の開発者にとって既知とすることができる。これらの符号化方式および復号方式（また、特に復号要素３２によって実行される復号方式）は、オープンソース、または別の形で公然と使用可能な標準を含むことができるが、これは必須ではない。上述のビデオ・データ２２のものと同様に、知的所有権のあるフォーマットで符号化された圧縮済みオーディオ・データは、オーディオ・データ２４を提供するために公然と使用可能なフォーマットに復号されてもよく、その結果、復号要素３２は、公然と見ることができるスクリプト１０を実行することによって実現されてもよい。
【００３３】
また、スクリプト１０は、解釈されたとき、インターネットブラウザにビデオ表示要素５０を提供させ、ビデオ表示要素５０は、ユーザ・コンピューティング・デバイスのディスプレイ７０上で、復号済みビデオ・データ・ストリーム４２からフレーム画像をネイティブに表示する。符号化されたビデオ・データ２２が復号ブロック３０において復号され、（たとえば、一連のフレーム画像を含む）復号済みビデオ・ストリーム４２を提供した後で、復号済みビデオ・ストリーム４２は、表示要素５０によってユーザ・コンピューティング・デバイスのディスプレイ上で表示される。いくつかの実施形態では、表示要素５０は、いわゆるｃａｎｖａｓ要素またはｃａｎｖａｓタグを使用することを必要とする。ｃａｎｖａｓタグは、ユーザ・コンピューティング・デバイスのディスプレイ（たとえば、ディスプレイ７０）上で（指定された画素高さおよび幅の）２Ｄ形状およびビットマップ画像の動的、スクリプト可能なレンダリングを可能にするＨＴＭＬ５タグである。ｃａｎｖａｓタグを使用し、人間にビデオであると知覚される十分に速いフレームレートでビットマップ画像を表示することができる。
【００３４】
いくつかの実施形態では、表示要素５０は、ｃａｎｖａｓタグを使用し、復号済みビデオ・データ・ストリーム４２のフレーム画像のサブセットを表示することを必要とする。たとえば、復号済みビデオ・ストリーム４２のビットマップ・フレームは、オーディオ・データ４４の再生より遅れつつあるレートで表示要素５０がビットマップ画像を表示していることを任意選択の同期ブロック６０（下記でより詳細に述べる）が示す状況で、および／または使用可能な処理リソースにより、復号済みビデオ・ストリーム４２のフレーム画像のサブセットを表示することが望ましいものになる可能性がある他の状況で、落とされる可能性がある。いくつかの実施形態では、フレーム画像は、たとえばオーディオ・データ４４の再生より進みつつあるレートで表示要素５０が画像を表示していることを同期機能６０が示すとき、ユーザ・コンピューティング・デバイスのディスプレイ上で持続させられてもよい。表示要素５０が、ｃａｎｖａｓタグを使用し、復号済みビデオ・ストリーム４２のフレーム画像のサブセットを表示することを必要とする場合、表示要素５０および／または同期ブロック６０は、復号済みビデオ・ストリーム４２内から表示するために特定のフレーム画像を選択することを必要とする可能性がある。
【００３５】
いくつかの実施形態では、スクリプト１０を実行することにより、インターネットブラウザは、任意の追加の予めコンパイルされたアプリケーション・プログラムまたはアドオンを呼び出す、または他の方法で実行することを必要とせずにその機能（たとえば、復号済みビデオ・ストリーム４２内からフレーム画像（たとえば、ビットマップ・フレーム画像）を表示すること、および／または任意選択で、復号済みビデオ・ストリーム４２内から表示するためにフレーム画像を選択すること）がインターネットブラウザによってネイティブに実行される表示ブロック５０を提供する。
【００３６】
デジタル・デバイスの処理力が絶えず増大しているので、スクリプト１０の実行によって提供される表示要素５０は、カスタマイズされたビデオ再生アプリケーションを使用する従来のビデオ再生のフレームレートに迫るフレームレートでビットマップ画像を表示することが可能である。いくつかの実施形態では、表示要素５０は、６４０×４８０画素のビットマップ画像を４０フレーム／秒を超えるフレームレートで表示することが可能である。いくつかの実施形態では、６４０×４８０画素のビットマップ画像を５０フレーム／秒を超えるフレームレートで表示することが可能である。
【００３７】
図の実施形態では、ビデオコンテンツは、任意選択の画像データ２６を含む。表示要素５０は、やはり画像データ２６をユーザ・コンピューティング・デバイス７０上でネイティブに表示させることができる。大部分のインターネットブラウザは、表示要素５０の提供に関連するスクリプト１０の一部分からの命令を受けてブラウザによって呼び出すことができる、ＪＰＥＧ画像データを表示するためのネイティブ機能を含む。
【００３８】
スクリプト１０は、実行されたとき、復号済みオーディオ・ストリーム４４をネイティブに再生するためのオーディオ再生要素５２をも提供する。いくつかの実施形態では、復号済みオーディオ・ストリーム４４は、ＷＡＶフォーマットのオーディオ・ストリームを含む。大部分のインターネットブラウザは、オーディオ再生要素５２に関連するスクリプト１０の一部分からの命令を受けてブラウザによって呼び出すことができる、ＷＡＶフォーマットのオーディオ・ストリームを再生するためのネイティブ機能を含む。このネイティブ・オーディオ再生機能は、復号済みオーディオ・ストリーム４４の再生に関連する時間基準情報をも含む、またはそれにアクセスすることができる。この再生時間基準情報は、下記で述べる同期ブロック６０にフィードバックされてもよい。
【００３９】
スクリプト１０は、実行されたとき、任意選択で、インターネットブラウザに同期ブロック６０を提供させることができ、同期ブロック６０は、オーディオ再生要素５２による復号済みオーディオ・データ４４の再生と、表示要素５０による復号済みビデオ・データ４２からのフレーム画像の表示との間で許容公差内に同期を維持する。いくつかの実施形態では、同期ブロック６０は、基準タイミング点（たとえば、オーディオ・データ４４の再生の開始）、および／またはオーディオ再生ブロック５２から得たタイムスタンプ情報（オーディオ再生時間基準という）を利用する。いくつかの実施形態では、同期ブロック６０は、表示要素５０に、フレーム画像を表示するために選択する前に、オーディオ再生ブロック５２からのオーディオ再生時間基準をチェックさせることができる。次いで、同期ブロック６０は、表示要素５０に、オーディオ再生基準時間に対応するフレーム画像を選択させ、選択されたフレーム画像をｃａｎｖａｓタグを使用してビットマップとして表示させることができる。復号済みオーディオ・データ４４の再生が、解凍されたビデオ・データ４２内からのフレーム画像の表示より進みつつあることをオーディオ再生要素５２からのオーディオ再生基準時間が示す場合には、同期ブロック６０は、表示要素５０に１つまたは複数のフレーム画像をスキップさせることができる。復号済みオーディオ・データ４４の再生が、解凍されたビデオ・データ４２内からのフレーム画像の表示より遅れつつあることをオーディオ再生要素５２からのオーディオ再生基準時間が示す場合には、同期ブロック６０は、表示要素５０に、フレーム画像の更新時に遅延を引き起こさせる（たとえば、一部のフレーム画像を持続させる）ことができる。このようにして、表示要素５０によって表示されるビデオ・データを、オーディオ再生要素５２のオーディオ再生と同期させることができる。
【００４０】
制御パネル８０の機能を、たとえばグラフィカル・ユーザ・インターフェースを介してユーザ（図示せず）に提供することができる。制御パネル８０により、ユーザは、スクリプト１０によってビデオ・データ４２および／またはオーディオ・データ４４の再生を制御することができる。非限定的な例として、制御パネル８０により、ユーザは、データを再生すること、データの再生を休止すること、データ内であるロケーションを適時に探すこと、再生のボリュームを調整すること、再生の速度を調整することなどを制御することができる。図の実施形態では、制御パネル８０は、スクリプト１０の外側に設けられているが、これは必須ではない。いくつかの実施形態では、スクリプト１０は、インターネットブラウザに制御パネル８０を提供させることができる。
【００４１】
図２Ａは、例示的な実施形態によるビデオ・レンダリング・システム１００の概略ブロック図である。いくつかの実施形態では、ビデオ・レンダリング・システム１００は、少なくとも一部には、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザ（または他のアプリケーション・プログラム）により具現化されるスクリプト・インタプリタによって解釈されるクロスプラットフォーム・スクリプトを使用して実行される。いくつかの実施形態では、ビデオ・レンダリング・システム１００の一部が、スクリプトを解釈するインターネットブラウザによってネイティブに実行される。いくつかの実施形態では、スクリプトは、ビデオ・レンダリング・システム１００の機能の一部を直接実行または実行する。
【００４２】
図の実施形態では、ビデオ・レンダリング・システム１００は、ビデオコンテンツ１１６を入手する。いくつかの実施形態では、ビデオコンテンツ１１６は、ネットワークアクセス可能なホスト・サーバ、ネットワークアクセス可能なキャッシュ、またはネットワークアクセス可能なピア・デバイス上に存在する。他の実施形態では、ビデオコンテンツ１１６は、ユーザ・コンピューティング・デバイスにとってローカルで使用可能なものであってもよい。この説明の残りの部分では、ビデオコンテンツ１１６は、（一般性を失わずに）ホスト・サーバ上に存在すると仮定される。特定の実施形態では、ビデオ・レンダリング・システム１００は、サーバにてホストされている特定のビデオコンテンツ１１６を識別するＵＲＬを含むＨＴＴＰ要求をサーバに送信することによって（たとえば、サーバからビデオコンテンツ１１６の「ダウンロード」または「ストリーム」を開始することによって）、ビデオコンテンツ１１６を取り出す。上述のように、ビデオコンテンツ１１６は、ビデオ・データ１１４、ならびにオーディオ・データ１６４、画像データ（図示せず）、および／またはメタデータ（図示せず）など他のデータを含むことができる。図の実施形態では、ビデオ・レンダリング・システム１００に送られるビデオコンテンツ１１６は、一般に、任意のそのようなデータを含むことができ、そこに含まれるビデオ・データ１１４にアクセスするためにビデオ・レンダリング・システム１００によって逆多重化される。他の実施形態では、ビデオコンテンツ１１６は、好適なデマルチプレクサ（図示せず）によってビデオ・レンダリング・システム１００にて受け取られる前に逆多重化し、ビデオ・データ１１４をビデオコンテンツ１１６から分離し、ビデオ・レンダリング・システム１００が逆多重化されたビデオ・データ１１４に直接アクセスできるようにしてもよい。そのようなデマルチプレクサは、少なくとも一部には、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによって解釈されるクロスプラットフォーム・スクリプトを使用して実現されてもよい。
【００４３】
図の実施形態では、ビデオ・レンダリング・システム１００は、ビデオコンテンツ１１６からのビデオ・データ１１４を、ビデオ・データ・キュー１１２を具現化するデータ構造内に格納させるように、またビデオ・データ・キュー１１２を監視するように構成されたビデオ・データ・キュー・モニタ１１０を備える。いくつかの実施形態では、ビデオ・キュー・モニタ１１０は、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザ内で実現される。いくつかの実施形態では、ビデオ・データ１１４をビデオ・データ・キュー１１２内に格納することは、ビデオ・データ１１４をオーディオ・データ１６４、およびビデオコンテンツ１１６の一部を形成することができる他のデータ（たとえば、画像、および／またはメタデータなど）から逆多重化することを含む。この逆多重化機能は、ビデオ・データ・キュー・モニタ１１０によって実現されてもよい。他の実施形態では、ビデオ・データ・キュー・モニタ１１０は、この逆多重化機能を実行する必要がない。上述のように、いくつかの実施形態では、ビデオ・データ１１４は、ビデオ・レンダリング・システム１００によって受け取られる前に別のデマルチプレクサ（図示せず）によって逆多重化されてもよい。他の実施形態では、ビデオ・データ・キュー１１２内に格納されたデータは、（依然として逆多重化されていない）ビデオコンテンツ１１６を含み、ビデオ・データ１１４は、デコーダ１２２によって復号されている間にオーディオ・データ１６４および／または他のデータから逆多重化されてもよい。
【００４４】
システム１００は、ビデオ・デコーダ１２２を備える。ビデオ・デコーダ１２２は、ビデオ・データ１１４を復号し、フレーム画像を提供する。特定の実施形態では、ビデオ・デコーダ１２２は、スクリプトがインターネットブラウザによって解釈されるときスクリプトによって直接実行される。システム１００は、フレームバッファ・モニタ１２０を備える。図の実施形態では、フレームバッファ・モニタ１２０は、デコーダ１２２にビデオ・データ・キュー１１２内に含まれるビデオ・データ１１４を復号させるように、またフレーム画像プロセッサ１３６にこれらのフレーム画像を処理させ、それによりフレーム画像１２４を生成するように構成され、フレーム画像１２４は、フレーム画像バッファ１２６を具現化するデータ構造内に格納され、フレーム画像レンダラ１３２によって表示するのに適したフォーマットにある。フレームバッファ・モニタ１２０は、インターネットブラウザによってネイティブに実行されてもよい。いくつかの実施形態では、フレームバッファ・モニタ１２０の機能は、スクリプトがインターネットブラウザによって解釈されるときにスクリプトによって直接実行される。フレーム画像１２４は、順次（たとえば、ビデオ・データ１１４のフレームレートとすることができる好適なフレームレートで）レンダリングされたとき、人間にビデオであると知覚される画像のシーケンスを含む。フレームバッファ・モニタ１２０は、デコーダ１２２および／またはフレーム画像プロセッサ１３６に、少なくともある閾値数のフレーム画像１２４がフレーム画像バッファ１２６内にあるようになるまで（たとえば、フレーム画像バッファ１２６が一杯になるまで）、ビデオ・データ１１４からフレーム画像１２４を絶えず復号および処理させるように構成されてもよい。
【００４５】
図の実施形態では、任意選択のフレーム画像プロセッサ１３６は、ビデオ・デコーダ１２２によってフレーム画像１４０（たとえば、ビデオ・データ１１４から復号されたフレーム画像１４０）を受け取り、そのようなフレーム画像１４０を処理し、フレーム画像レンダラ１３２によって使用するのに適したフォーマットでフレーム画像１２４を生成する。特定の実施形態では、フレーム画像プロセッサ１３６の機能の一部が、スクリプトがインターネットブラウザによって解釈されるとき、スクリプトによって直接実行される。デコーダ１２２から出力されるフレーム画像１４０は、非限定的な例としてＪＰＥＧ、ＧＩＦ、ＰＮＧ、ＴＩＦＦ、ＲＡＷ、および／またはＢＭＰなどを含めて、任意の好適なグラフィック・ファイル・フォーマットの画像ファイルを含むことができる。いくつかのインターネットブラウザは、可能な画像ファイル・フォーマットの制限されたサブセットをネイティブに表示することが可能である。たとえば、ほとんどのインターネットブラウザは、ＪＰＥＧおよびＧＩＦ画像ファイル・フォーマットをネイティブに表示することが可能であるが、多数のインターネットブラウザは、ＴＩＦＦファイル・フォーマットを有する画像をネイティブに表示することができない。そのような場合、フレーム画像プロセッサ１３６は、フレーム画像１４０を、インターネットブラウザによってネイティブに表示可能な１つまたは複数の画像ファイル・フォーマット（たとえば、ＧＩＦおよび／またはＪＰＥＧ）を有する、ブラウザによってレンダリング可能なフレーム画像１４４に変換するフレーム画像コンバータ１４２を備えてもよい。フレーム画像コンバータ１４２の機能は、スクリプトがインターネットブラウザによって解釈されるときスクリプトによって直接実行されてもよい。フレーム画像１４０が、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブに表示することができるファイル・フォーマットにすでにある状況では、フレーム画像コンバータ１４２は必要とされない、またはバイパスしてもよいことを理解されたい。
【００４６】
フレーム画像１４４は、典型的には、いわゆるバイナリ・データ・フォーマットで表される。いくつかのインターネットブラウザは、バイナリ・データ・フォーマットの画像がスクリプト・インタプリタから転送された、または別の方法で渡されたとき、そのような画像を受け入れることが可能である。そのような状況では、フレーム画像１４４は、フレーム画像プロセッサ１３６によって、スクリプト・インタプリタからインターネットブラウザに渡されるのに適したフォーマットにさらに処理されてもよい。図の実施形態では、この処理機能は、フレーム画像１４４を処理しコンテンツ転送符号化済みフレーム画像１４６を生成するコンテンツ転送エンコーダ１４５によって実現される。コンテンツ転送エンコーダ１４５の機能は、スクリプトがインターネットブラウザによって解釈されるときスクリプトによって直接実行されてもよい。特定の一実施形態では、コンテンツ転送エンコーダ１４５は、フレーム画像１４４を処理し、ベース６４符号化済みフレーム画像１４６を生成するベース６４エンコーダを含む。これは必須ではない。他の実施形態では、ベース６４符号化の代わりに、他のコンテンツ転送符号化技法が使用されてもよく、フレーム画像１４６は、何らかの他の好適なコンテンツ転送符号化フォーマットに従って符号化されてもよい。
【００４７】
次いで、フレーム画像プロセッサ１３６は、コンテンツ転送符号化済みフレーム画像１４６を使用し、画像オブジェクト・クリエータ１４８を使用して画像オブジェクトを作成することができる。いくつかの実施形態では、画像オブジェクト・クリエータ１４８は、コンテンツ転送符号化済みフレーム画像１４６を使用し、それぞれがＲＧＢ画素値を含むＣａｎｖａｓＰｉｘｅｌＡｒｒａｙ画像オブジェクトの形態のフレーム画像１２４を作成するために、インターネットブラウザによってネイティブに実行されるＣａｎｖａｓ要素などをスクリプト・インタプリタに呼び出させることを必要とする。他の実施形態では、画像オブジェクト・クリエータ１４８は、コンテンツ転送符号化済みフレーム画像１４６を使用し、他の画像オブジェクト・フォーマットでフレーム画像１２４を作成することができる。いくつかの実施形態では、コンテンツ転送符号化済みフレーム画像１４６は、画像オブジェクト・クリエータ１４８（など）によって、以下の形態を有するスクリプト命令を使用してブラウザに渡されてもよい。
【数１】
2014531142.tif 000003
上述のように、フレーム画像１２４は、フレーム画像レンダラ１３２によって表示するのに適したフォーマットにあるものとすることができ、フレーム画像バッファ１２６を具現化するデータ構造内に格納されてもよい。
【００４８】
図の実施形態では、復号済みフレーム画像１４０、ブラウザによってレンダリング可能なフレーム画像１４４、およびコンテンツ転送符号化済みフレーム画像１４６は、それぞれ復号済みフレーム画像バッファ１３８、ブラウザによってレンダリング可能なフレーム画像バッファ１４１、およびコンテンツ転送符号化済みフレーム画像バッファ１４３内に格納されて示されている。そのようなバッファ１３８、１４１、１４３は、いくつかの実施形態において、特に（しかし限定しないが）ビデオ・デコーダ１２２、フレーム画像コンバータ１４２、コンテンツ転送エンコーダ１４５、および／または画像オブジェクト・クリエータ１４８の機能が、（下記でより詳細に述べる）離散的な反復で互いに独立して実行されるときに有用である。他の実施形態では、そのようなバッファ１３８、１４１、１４３は、必須ではない−すなわち、各反復において、ビデオ・デコーダ１２２は、単一の復号済みフレーム画像１４０を作成することができ、そのフレーム画像コンバータ１４２は、単一の対応する、ブラウザによってレンダリング可能なフレーム画像１４４に変換することができ、そのベース６４エンコーダは、単一の対応するコンテンツ転送符号化済みフレーム画像１４６に符号化することができ、その画像オブジェクト・クリエータ１４８は、それを使用し、フレーム画像バッファ１２６に追加されることになる単一のフレーム画像オブジェクト１２４を作成することができる。
【００４９】
図の実施形態のフレーム画像プロセッサ１３６は、任意選択である。他の実施形態では、フレーム画像プロセッサ１３６の機能のどれでも、デコーダ１２２および／またはビデオ再生インターフェース１３０（下記でさらに述べる）に組み込むことができる。非限定的な例として、フレーム画像コンバータ１４２の機能をデコーダ１２２に組み込むことができ、画像オブジェクト・クリエータの機能をビデオ再生インターフェース１３０に組み込むことができる。別の非限定的な例では、フレーム画像プロセッサ１３６の全部の機能がデコーダ１２２に組み込まれてもよい。
【００５０】
ビデオ・データ・キュー・モニタ１１０は、ビデオ・データ１１４がデコーダ１２２によって復号された後で、ビデオ・データ・キュー１１２からビデオ・データ１１４（またはビデオ・コンテンツ１１６）をクリアするように構成されてもよい。いくつかの実施形態では、ビデオ・データ・キュー・モニタ１１０は、デコーダ１２２によってこれから復号されなければならないビデオ・データ・キュー１１２内のビデオ・データ１１４の量に基づいてビデオコンテンツ・ソース（たとえば、遠隔サーバ）にビデオコンテンツ１１６（および／またはそこに含まれるビデオ・データ１１４）を要求するように構成される。たとえば、ビデオ・データ・キュー・モニタ１１０は、ビデオ・データ・キュー１１２が含むものが、デコーダ１２２によってこれから復号されなければならないビデオ・データの閾値量−たとえば、フレーム画像１２４の好適な閾値数に対応するビデオ・データ１１４の閾値量より少ないときはいつでもビデオコンテンツ１１６および／またはビデオ・データ１１４を要求するように構成されてもよい。ビデオ・データ１１４が既知の長さのビデオ・セグメント（たとえば、予め記録され番組、ファイル・クリップ、映画など）の一部分を含むとき、またはビデオ・データ１１４の終点が別の方法で認識可能であるとき、ビデオ・データ・キュー・モニタ１１０は、ビデオ・データ１１４の終点を構成するビデオ・データ１１４の一部分がビデオ・データ・キュー１１２内に配置された後で、ビデオコンテンツ１１６および／またはビデオ・データ１１４を要求するのを停止するように構成されてもよい。
【００５１】
システム１００は、ビデオ再生インターフェース１３０を備える。ビデオ再生インターフェース１３０の機能は、スクリプトがインターネットブラウザによって解釈されるときスクリプトによって直接実行されてもよい。ビデオ再生インターフェース１３０は、フレーム画像１２４の表示をフレーム・レンダラ１３２によって（たとえば、オーディオ・データの再生に）同期するように、または別の方法でフレーム・レンダラ１３２に適切な時点でフレーム画像１２４を表示させるように構成される。フレーム・レンダラ１３２は、全体または一部が、たとえば、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザ上でネイティブに提供される画像レンダリング・エンジンによって実行されてもよい。フレーム・レンダラ１３２は、ｄｒａｗＩｍａｇｅ（）メソッド、および／またはフレーム画像１２４を含むＩｍａｇｅＤａｔａオブジェクトをその引数の（うちの１つの）引数として有するｐｕｔＩｍａｇｅＤａｔａメソッドを呼び出すことを含むことができる。
【００５２】
いくつかの実施形態では、ビデオ再生インターフェース１３０は、フレーム・レンダラ１３２に、ビデオ・データ１１４のフレームレートにほぼ等しいレートでフレーム画像１２４を表示させるように構成される。いくつかの実施形態では、ビデオ再生インターフェース１３０は、フレーム・レンダラ１３２に、ビデオ・データ１１４のフレームレートより低いレートでフレーム画像１２４を表示させるように、また任意選択で、補間画像をフレーム画像１２４の表示間に表示させるように構成される。いくつかの実施形態では、ビデオ再生インターフェース１３０は、フレーム・レンダラ１３２に、ユーザ構成可能なレートでフレーム画像１２４を表示させてもよい。ビデオ再生インターフェース１３０は、フレーム・レンダラ１３２に、ビデオコンテンツ１１６内のビデオ・データ１１４に伴うオーディオ・データ１６４のレンダリングと何らかの好適な公差内で少なくともほぼ同期してフレーム画像１２４をレンダリングさせるように構成されてもよい。ビデオ再生インターフェース１３０はフレーム・レンダラ１３２によってフレーム画像１２４のレンダリングのタイミングを制御することができるので、ビデオ再生インターフェース１３０は、再生タイミング・モニタ１３０と呼ばれることがある。
【００５３】
図２Ｂは、例示的な実施形態によるオーディオ・レンダリング・システム１５０の概略ブロック図である。いくつかの実施形態では、少なくとも一部にはユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによって解釈されるクロスプラットフォーム・スクリプトを使用して、オーディオ・レンダリング・システム１５０が実行される。いくつかの実施形態では、オーディオ・レンダリング・システム１５０の一部が、スクリプトを解釈するインターネットブラウザによってネイティブに実行される。いくつかの実施形態では、スクリプトは、オーディオ・レンダリング・システム１５０の機能の一部を直接実行または実行する。いくつかの実施形態では、ビデオ・レンダリング・システム１００（図２Ａ）およびオーディオ・レンダリング・システム１５０（図２Ｂ）のすべて、または一部分が互いに一体化されてもよい。図２Ａおよび図２Ｂに示されている例示的な実施形態などいくつかの実施形態では、ビデオ・レンダリング・システム１００（図２Ａ）およびオーディオ・レンダリング・システム１５０（図２Ｂ）は、別々に実行されてもよい。いくつかの態様では、オーディオ・レンダリング・システム１５０は、上述のビデオ・レンダリング・システム１００と同様である。オーディオ・レンダリング・システム１５０は、ビデオ・レンダリング・システム１００と同じようにしてビデオコンテンツ１１６を取り出すことができる。ビデオ・レンダリング・システム１００によって取り出されたビデオコンテンツ１１６は、オーディオ・レンダリング・システム１５０にとってアクセス可能であってもよく、逆も同様である。
【００５４】
上述のように、オーディオ・レンダリング・システム１００に送られるビデオコンテンツ１１６は、一般に、ビデオ・データ１１４、オーディオ・データ１６４、画像データ（図示せず）、および／またはメタデータ（図示せず）などを含むことができる。図の実施形態のオーディオ・レンダリング・システム１５０は、ビデオコンテンツ１１６からのビデオ・データ１１４を、オーディオ・データ・キュー１６２を具現化するデータ構造内に格納させるように、またオーディオ・データ・キュー１６２を監視するように構成されたオーディオ・データ・キュー・モニタ１６０を備える。オーディオ・データ・キュー・モニタ１６０は、ビデオ・レンダリング・システム１００のビデオ・データ・キュー・モニタ１１０と同様のものであってもよい。いくつかの実施形態では、オーディオ・データ・キュー・モニタ１６０は、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザ内で実行される。いくつかの実施形態では、オーディオ・データ１６４をオーディオ・データ・キュー１６２内に格納することは、オーディオ・データ１６４をビデオ・データ１１４、およびビデオコンテンツ１１６の一部を形成することができる他のデータ（たとえば、画像、および／またはメタデータなど）から逆多重化することを含む。この逆多重化機能は、オーディオ・データ・キュー・モニタ１６０によって実行されてもよい。しかし、一般に、オーディオ・データ・キュー・モニタ１６０は、この逆多重化機能を実行する必要がない。上述のように、いくつかの実施形態では、オーディオ・データ１６４は、オーディオ・レンダリング・システム１５０によって受け取られる前に別のデマルチプレクサ（図示せず）によって逆多重化されてもよい。他の実施形態では、オーディオ・データ・キュー１６２内に格納されたデータは、依然として逆多重化されておらず、オーディオ・データ１６４は、デコーダ１７２によって復号されている間にビデオ・データ１１４および／または他のデータから逆多重化されてもよい。そのような実施形態では、ビデオ・データ・キュー１１２とオーディオ・データ・キュー１６２は共に、ビデオコンテンツ１１６を格納することができる同じビデオコンテンツ・キュー（図示せず）によって実行されてもよい。
【００５５】
オーディオ・レンダリング・システム１５０は、オーディオ・デコーダ１７２を備える。オーディオ・デコーダ１７２は、オーディオ・データ１６４を復号し、復号済みオーディオ・データ１７４を提供する。特定の実施形態では、オーディオ・デコーダ１７２は、スクリプトがインターネットブラウザによって解釈されるときスクリプトによって直接実行される。図の実施形態のオーディオ・レンダリング・システム１５０は、復号済みオーディオ・バッファ・モニタ１７０を備える。復号済みオーディオ・バッファ・モニタ１７０は、デコーダ１７２にオーディオ・データ・キュー１６２内に含まれるオーディオ・データ１６４を復号させ、復号済みオーディオ・データ１７４を生成するように構成され、復号済みオーディオ・データ１７４は、復号済みオーディオ・バッファ１７６を具現化するデータ構造内に格納される。復号済みオーディオ・バッファ・モニタ１７０は、インターネットブラウザによってネイティブで実行されてもよい。いくつかの実施形態では、復号済みオーディオ・バッファ・モニタ１７０の機能は、スクリプトがインターネットブラウザによって解釈されるときスクリプトによって直接実行される。復号済みオーディオ・バッファ・モニタ１７０は、デコーダ１７２に、オーディオ・データ１６４を絶えず復号させ、少なくともある閾値量の復号済みオーディオ・データ１７４が復号済みオーディオ・バッファ１７６内にあるようになるまで（たとえば、復号済みオーディオ・バッファ１７６が一杯になるまで）復号済みオーディオ・データ１７４を生成させるように構成されてもよい。復号済みオーディオ・データ１７４は、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによって（たとえば、ブラウザの（１つまたは複数の）ネイティブ・オーディオ再生機能を使用して）ネイティブにレンダリングすることができるフォーマットでオーディオ・データを含むことができる。いくつかの実施形態では、オーディオ・レンダリング・システム１５０は、ネイティブ・オーディオ再生機能を使用してユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによって使用するのに適した復号済みフォーマット１７４に、オーディオ・データ１６４を変換するための１つまたは複数の機能を含むオーディオ・データ・プロセッサ（図示せず）を備えることができる。いくつかの実施形態では、そのような機能は、デコーダ１７２および／またはオーディオ・レンダラ・インターフェース１８０によって実現することができる。
【００５６】
オーディオ・データ・キュー・モニタ１６０は、オーディオ・データ１６４がデコーダ１７２によって復号された後で、オーディオ・データ・キュー１６２からオーディオ・データ１６４（またはビデオ・コンテンツ・データ１１６）をクリアするように構成されてもよい。いくつかの実施形態では、オーディオ・データ・キュー・モニタ１６０は、デコーダ１７２によってこれから復号されなければならないオーディオ・データ・キュー１６２内のオーディオ・データ１６４の量に基づいてビデオコンテンツ・ソース（たとえば、遠隔サーバ）にビデオコンテンツ１１６（および／またはそこに含まれるオーディオ・データ１６４）を要求するように構成される。たとえば、オーディオ・データ・キュー・モニタ１６０は、オーディオ・データ・キュー１６２が含むものが、デコーダ１７２によってこれから復号されなければならないオーディオ・データ１６４の閾値量より少ないときはいつでもビデオコンテンツ１１６および／またはオーディオ・データ１６４を要求するように構成されてもよい。オーディオ・データ１６４の終点が検出可能であるとき、オーディオ・データ・キュー・モニタ１６０は、オーディオ・データ１６４の終点を構成するオーディオ・データ１６４の一部分がオーディオ・データ・キュー１６２内に配置された後で、ビデオコンテンツ１１６および／またはオーディオ・データ１６４を要求するのを停止するように構成されてもよい。
【００５７】
オーディオ・レンダリング・システム１５０は、オーディオ・レンダラ・インターフェース１８０を備える。オーディオ・レンダラ・インターフェース１８０は、オーディオ・レンダラ１８２によって使用するのに適したフォーマットで復号済みオーディオ・データ１７４をオーディオ・レンダラ１８２に送る（たとえば、ロードする）ように構成される。オーディオ・レンダラ１８２は、たとえば、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザ内でネイティブに提供されるオーディオ再生エンジンを備えることができる。いくつかの実施形態では、オーディオ・レンダラ１８２は、専用オーディオ・レンダリング・ハードウェアを使用することができ、主ユーザ・コンピューティング・デバイス・プロセッサ上で動作する（１つまたは複数の）プロセスに並列の１つまたは複数のプロセスでオーディオ・データをレンダリング（たとえば、再生）することができる。いくつかの実施形態では、オーディオ・レンダラ１８２は、（少なくとも一部には）主ユーザ・コンピューティング・デバイス・プロセッサを使用して実行されてもよいが、ビデオ・レンダリング・システム１００およびオーディオ・レンダリング・システム１５０に対して責任を担うスレッドのものに並列で動作する１つまたは複数の処理スレッドでさらに実行されてもよい。いくつかの実施形態では、オーディオ・レンダラ・インターフェース１８０は、任意選択で、オーディオ・レンダラ１８２による復号済みオーディオ・データ１７４のレンダリングに関連する再生タイミング情報（たとえば、オーディオ再生時間基準）を確かめるように構成されてもよい。オーディオ・レンダラ・インターフェース１８０によって得られる再生タイミング情報は、インターネットブラウザによってネイティブに得ることができる。オーディオ・レンダラ・インターフェース１８０の他の機能は、解釈されたスクリプトによって直接実行することができる。この再生タイミング情報をフレーム画像レンダラ１３２および／またはビデオ再生インターフェース１３０（図２Ａ）によって使用し、フレーム・レンダラ１３２によってフレーム画像１２４を、オーディオ・レンダラ１８２による復号済みオーディオ・データ１７４のレンダリングとほぼ同期したレートでレンダリングさせることができる。
【００５８】
いくつかの実施形態では、オーディオ・データ１６４のストリーム全体をビデオコンテンツ１１６から逆多重すること、およびオーディオ・データ１６４のストリーム全体をオーディオ・データ・キュー１６２内にバッファすることが可能となり得る。そのような実施形態では、オーディオ・データ・キュー・モニタ１６０は、より多くのオーディオ・データ１６４をいつ取り出すか判定するためにオーディオ・データ・キュー１６２の状況を積極的に監視する必要はない。その代わりに、オーディオ・データ・キュー・モニタ１６０は、オーディオ・データ１６４を求める単一の要求をすることができる。同様に、そのような実施形態では、オーディオ・データ１６４のストリーム全体をデコーダ１７２によって復号し、復号済みオーディオ・データ１７４として復号済みオーディオ・バッファ１７６内に格納することができる。そのような実施形態では、復号済みオーディオ・バッファ・モニタ１７０は、復号済みオーディオ・バッファ１７６の状況を積極的に監視する必要はなく、オーディオ・データ１６４のストリームをデコーダ１７２によって復号し、復号済みオーディオ・バッファ１７６内に配置するための単一の要求をすることができる。
【００５９】
いくつかのインターネットブラウザは、それらのブラウザが符号化されたオーディオ・データ１６４をネイティブにレンダリングすることを可能にするネイティブ機能を含む。非限定的な例として、Ｆｉｒｅｆｏｘ（登録商標）は、Ｖｏｒｂｉｓ符号化済みオーディオ・フォーマットをネイティブに処理することができ、Ｓａｆａｒｉ（登録商標）およびＩｎｔｅｒｎｅｔ  Ｅｘｐｌｏｒｅｒ（登録商標）は、ｍｐ３符号化済みオーディオ・フォーマットをネイティブに処理することができる。そのような実施形態では、デコーダ１７２、復号済みオーディオ・バッファ１７６、および復号済みオーディオ・バッファ・モニタ１７０は、必要とされないことがあり、オーディオ・レンダラ・インターフェース１８０が、符号化されたオーディオ・データ１６４をオーディオ・データ・キュー１６２からオーディオ・レンダラ１８２に直接送ることができる。
【００６０】
いくつかの実施形態では、ビデオ・レンダリング・システム１００および／またはオーディオ・レンダリング・システム１５０の機能は、少なくとも一部にはＨＴＭＬドキュメント内に埋め込まれたクロスプラットフォーム・スクリプトを使用して実行される１つまたは複数の方法によって達成される。そのようなスクリプトは、ユーザ・コンピューティング・デバイス上で動作するアプリケーション・プログラムの一部として提供および具現化されるスクリプト・インタプリタによって解釈することができる。たとえば、そのようなスクリプト・インタプリタは、インターネットブラウザの一部であってもよい。スクリプト・インタプリタによってそのようなスクリプトを解釈すると、論理演算および／または算術演算の実行、ならびにデータ構造のインスタンス化および／または操作を引き起こすことができ、これは、ビデオ・レンダリング・システム１００および／またはオーディオ・レンダリング・システム１５０の機能をもたらす。
【００６１】
いくつかの実施形態では、ビデオ・レンダリング・システム１００の機能は、少なくとも一部には２つの方法を実行するスクリプト・インタプリタによって達成される。すなわち、１つの方法は、（たとえば、ビデオ・データ・キュー・モニタ１１０、フレームバッファ・モニタ１２０、デコーダ１２２、およびフレーム画像プロセッサ１３６を実行することによって）システム１００のビデオ・データ・キューイング、復号および準備機能を提供し、別の方法は、（たとえば、ビデオ再生インターフェース１３０、および任意選択でフレーム画像レンダラ１３２を実行することによって）システム１００のフレーム画像同期およびレンダリング機能を提供する。図３は、特定の実施形態によるビデオ・データをキューイングし、復号し、準備するためのこの第１の方法の実行を概略的に示す。図４は、特定の実施形態によるビデオ・データのフレーム画像を同期し、レンダリングするためのこの第２の方法の実行を概略的に示す。スクリプト・インタプリタに、これらの２つの方法を同期した状態で繰返し実行させ、ビデオ・データを増加的にキューイング、復号、準備、同期、およびレンダリングすることができる。そのようなビデオ・データの増加的なキューイング、復号、準備、同期、およびレンダリングは、これらの方法が、シングルスレッド型インタプリタによって解釈されるスクリプトで実行される場合、有利となり得る。
【００６２】
図３は、例示的な実施形態によるビデオ・データを得て復号するための方法２００のフローチャートである。方法２００は、ブラウザがクロスプラットフォーム・スクリプト（またはスクリプトの一部）を解釈するとき、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブに実行されてもよい。たとえば、方法２００は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行されてもよい。方法２００の特定の機能は、スクリプトが解釈されるときスクリプトによって直接実行されてもよい。図の実施形態では、方法２００は、少なくとも閾値量のビデオ・データが復号するためにキューイングされているかどうかについての問い合わせを含むブロック２０４で始まる。いくつかの実施形態では、ブロック２０４は、ビデオ・データ・キュー（たとえば、システム１００のビデオ・データ・キュー１１２（図２Ａ））が、これから復号されなければならないビデオ・データの少なくとも１つのフレームを含むかどうか判定することを含む。
【００６３】
ブロック２０４の問い合わせによって、閾値量より少ないビデオ・データがキューイングされていると判定された場合（ブロック２０４、「いいえ」分岐）、方法２００はブロック２０６に進む。ブロック２０６は、使用可能なビデオ・データすべてがキューイングされたかどうかを調査することを含む。ブロック２０６は、たとえば、ビデオ・セグメントの終点部分（たとえば、既知の長さのビデオ・セグメントの終点部分、または別の方法で認識可能なビデオ・セグメントの終点部分）がビデオ・データ・キュー内に配置されたかどうか判定することを含むことができる。ブロック２０６の問い合わせによって、使用可能なビデオ・データすべてがキューイングされたと判定された場合（ブロック２０６、「はい」分岐）、方法２００は終了する。
【００６４】
ブロック２０６の問い合わせによって、依然としてキューイングされていない使用可能なビデオ・データがあると判定された場合（ブロック２０６、「いいえ」分岐）、方法２００はブロック２０８に進む。ブロック２０８は、より多くのビデオ・データをビデオ・データ・キュー内に配置させることを含む。非限定的な例として、特定の例示的な実施形態では、方法２００は、Ｊａｖａスクリプト命令のセットとして実行され、ブロック２０８は、サーバ上でホストされるビデオ・データに対応するＡＪＡＸ  ＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクトのｏｐｅｎ（）メソッドを呼び出すことを含む。このブロック２０８の機能は、インターネットブラウザが、Ｊａｖａスクリプト（登録商標）によって解釈することができるフォーマットで何らかのビデオ・データを取り出すことを要求する。ユーザ・コンピューティング・デバイスにおいて可能な場合、ビデオ・データを取り出すこのブロック２０８の機能は、インターネットブラウザによって、方法２００の残りのものに対して（マルチスレッド環境における）並列スレッドとして、または（マルチプロセッシング環境における）並列プロセスとして実行することができる。たとえば、インターネットブラウザのスクリプト・インタプリタは、方法２００を実行するために１つの並列スレッド／プロセスを実行することができ、一方、インターネットブラウザは、ブロック２０８を実現するために第２の並列スレッド／プロセスを実行する。
【００６５】
いくつかの実施形態では、ブロック２０８は、（たとえばＨＴＴＰ要求のＲａｎｇｅヘッダ・フィールド内でバイト・レンジを示すことによってなど、ビデオ・データ・キュー内に配置すべきビデオ・データの特定の一部分または特定の量を指定することによって）ビデオ・データの増加量だけを得ることを含む。そのような実施形態では、ブロック２０８は、どのビデオ・データが要求された、および／またはビデオ・データ・キュー内に配置されたか追跡するインデックス、レンジなどを更新することを含むことができる。
【００６６】
ブロック２０８の後で、方法２００は、下記で述べるブロック２１６に進む。いくつかの実施形態では、方法２００は、ブロック２０８の後でブロック２１２に進んでもよい。いくつかの実施形態では、ブロック２０６は省略される（たとえば、ブロック２０４で、ビデオ・データの少なくとも１つのフレームもキューイングされていないと判定された場合（ブロック２０４、「いいえ」分岐）、方法２００は、キューイングすべき使用可能なビデオ・データがあるかどうか判定することなしにビデオ・データをキューイングさせようと試みてもよい（たとえば、ブロック２０８を実行する））。
【００６７】
ブロック２０４に戻ると、ブロック２０４の問い合わせによって、ビデオ・データの少なくとも１つのフレームがキューイングされていると判定された場合（ブロック２０４、「はい」分岐）、方法２００はブロック２１２に進む。ブロック２１２は、フレーム画像バッファ（たとえば、システム１００のフレーム画像バッファ１２６（図２Ａ））内に十分な自由空間（たとえば、復号済みフレーム画像を格納するための十分な自由空間）があるかどうか判定することを含む。ブロック２１２の問い合わせによって、フレーム画像バッファ内に自由空間がないと判定された場合（ブロック２１２、「いいえ」分岐）、方法２００はブロック２１６に進む。ブロック２１２の問い合わせによって、フレーム画像バッファ内に自由空間があると判定された場合（ブロック２１２、「はい」分岐）、方法２００はブロック２１４に進む。
【００６８】
図の実施形態では、ブロック２１４は、キューイングされたビデオ・データの１つのフレームを、レンダリングするのに適したフレーム画像（たとえば、フレーム画像１２４（図２Ａ））の形に準備すること、および準備されたフレーム画像をフレーム画像バッファ（たとえば、フレーム画像バッファ１２６（図２Ａ））内に配置することを含む。ブロック２１４は、たとえば、フレーム画像のシーケンス内の次の未復号フレーム画像に対応する（またはそれを含む）ビデオ・データを準備することを含むことができる。いくつかの実施形態では、ブロック２１４で準備されたフレーム画像は、方法２００の全部または一部を実装するスクリプトを解釈中であるユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブにレンダリングすることができるフォーマットの画像を含む。非限定的な例として、特定の例示的な実施形態では、方法２００は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行され、ブロック２１４は、ビデオ・データをＩｍａｇｅＤａｔａオブジェクトの形に準備することを含み、ＩｍａｇｅＤａｔａオブジェクトは、ＲＧＢ画素値のアレイを含むＣａｎｖａｓＰｉｘｅｌＡｒｒａｙオブジェクトを含むことができる。別の例示的な実施形態では、ブロック２１４は、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブに表示することができるフォーマット（たとえば、ＰＮＧ、ＪＰＥＧ、ＧＩＦなど）のフレーム画像の形にビデオ・データを準備することを含む。
【００６９】
ブロック２１４は、概して、以下の例示的な動作のいずれか、または任意の組合せを含むことができる。
・  算術演算および／または論理演算を実行すること
・  データ構造および／またはその中に格納されたデータを作成、削除、および／または修正すること
・  スクリプト化された命令の１つまたは複数のセットを実行すること、スクリプト・インタプリタにとってネイティブに使用可能な実行可能ライブラリにアクセスすること、など
・  ブラウザにネイティブ・ブラウザ機能を呼び出させること（たとえば、キューイングされたビデオ・データがＪＰＥＧ画像データを含む（またはキューイングされたビデオ・データをＪＰＥＧ画像データに変換することができる）場合、ブロック２１４は、ＲＧＢ画素値のアレイを得るためにユーザ・コンピューティング・デバイス上で動作するインターネットブラウザのネイティブＪＰＥＧレンダリング機能をブラウザに呼び出せることを含むことができる）、および／または
・  その他
【００７０】
図の実施形態の特定の場合には、ブロック２１４でのフレーム画像の準備は、
・  ブロック２１４Ａで、ビデオ・データ（たとえば、ビデオ・データ・バッファ１１２からのビデオ・データ１１４）を復号し、復号済みフレーム画像（たとえば、復号済みフレーム画像１４０）を生成すること、
・  任意選択で、ブロック２１４Ｂにおいて、復号済みフレーム画像を、インターネットブラウザによってネイティブにレンダリング可能なファイル・フォーマットに変換し、ブラウザによってレンダリング可能なフレーム画像（たとえば、ブラウザによってレンダリング可能なフレーム画像１４４）を生成すること、
・  任意選択で、ブロック２１４Ｃにおいて、ブラウザによってレンダリング可能なフレーム画像をコンテンツ転送フォーマットに符号化し、コンテンツ転送符号化済みフレーム画像（たとえば、コンテンツ転送符号化済みフレーム画像１４６）を生成すること、および
・  任意選択で、ブロック２１４Ｄにおいて、フレーム画像からフレーム画像オブジェクト（フレーム画像オブジェクト１２４）を作成することを含む。
【００７１】
また、ブロック２１４は、任意選択で、コントラスト、輝度、鮮鋭度などを調整することなど、復号済みフレーム画像の画像関連の処理を含むことができる。
【００７２】
ブロック２１４の後で、方法２００は、将来のある時点のために方法２００の後続の反復をスケジューリングすること含むブロック２１６に進む。非限定的な例として、特定の例示的な実施形態では、方法２００は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行され、ブロック２１６は、ｓｅｔＴｉｍｅｏｕｔ（）メソッドを呼び出し、指定された時間量が経過した後で方法２００を実行するＪａｖａスクリプト命令のセットをスケジューリングすることを含む。別の特定の例示的な実施形態では、方法２００は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行され、ｓｅｔＩｎｔｅｒｖａｌ（）メソッドを使用し、指定された時間量が経過した後で方法２００を実行するＪａｖａスクリプト命令のセットをスケジューリングしてもよい。そのような実施形態では、ブロック２１６は、方法２００の反復毎に明確に必須ではない可能性がある。特定の実施形態では、方法２００の連続する反復は、レンダリングされるビデオ・データのフレーム間隔（すなわち、（フレームレート）−１）より短い間隔でスケジューリングされてもよい。いくつかの実施形態では、スケジューリングされる方法２００の間隔は、レンダリングされるビデオ・データのフレーム間隔の５０％未満である。いくつかの実施形態では、スケジューリングされる方法２００の間隔は、レンダリングされるビデオ・データのフレーム間隔の２０％未満である。いくつかの実施形態では、スケジューリングされる方法２００の間隔は、レンダリングされるビデオ・データのフレーム間隔の１０％未満である。ブロック２１６でキューイングおよび復号方法２００の次の反復がスケジューリングされた後で、方法２００は終了し、制御がインターネットブラウザ、およびそのスクリプト・インタプリタに返される。
【００７３】
図の実施形態では、ブロック２１４を含む方法２００の各反復において、ブロック２１４は、ビデオ・データのフレームを、ビデオ・データ・バッファ（たとえば、ビデオ・データ・バッファ１１２）内のその符号化されたフォーマットからレンダリングに適したフォーマット（たとえば、フレーム画像バッファ１２６内のフレーム画像オブジェクト１２４）に準備することを含む。このフレーム画像処理は、復号（ブロック２１４Ａ）、画像フォーマット変換（ブロック２１４Ｂ）、コンテンツ転送符号化（ブロック２１４Ｃ）、および画像オブジェクト準備（ブロック２１４Ｄ）を含めて、複数のステップを含むことができる。（ユーザ・コンピューティング・デバイスの処理リソースが比較的限られている、または遅い場合など）状況によっては、これらのステップの全部を実行する際に必要とされる処理量が大きくなり望ましくない。したがって、いくつかの実施形態では、方法２００は、ブロック２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄのステップの一部のサブセットが、ブロック２１４に到達する方法２００の反復毎に実行されるように修正されてもよい。たとえば、ブロック２１４Ａに到達する方法２００の各反復は、ブロック２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄの１つだけを実行することを含んでもよい。これは、方法２００の各反復に伴う処理時間を短縮することになる。適切な論理を定義し、各反復においてブロック２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄ間で選択してもよい。非限定的な例として、そのような論理は、（たとえば、キュー１３８、１４１、１４３、１２６（図２Ａ）のうちから）どのキューのフレーム数が最も少ないか確かめることができ、それに基づいて２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄのどれを実行するか選択することができる。
【００７４】
上述のように、方法２００は、ブラウザがクロスプラットフォーム・スクリプト（またはスクリプトの一部）を解釈するとき、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブに実行されてもよい。方法２００の特定の機能は、スクリプトが解釈されるときスクリプトによって直接実行されてもよい。たとえば、特定の実施形態では、ブロック２０４、２０６、２１２、２１４Ａ、２１４Ｂ、２１４Ｃのいずれかの機能を、スクリプトによってそれが解釈されるとき直接実行してもよい。
【００７５】
図４は、例示的な実施形態によるキューイングされたフレーム画像を同期およびレンダリングするための方法２２０のフローチャートである。方法２２０は、ブラウザがクロスプラットフォーム・スクリプト（またはスクリプトの一部）を解釈するとき、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブに実行されてもよい。たとえば、方法２００は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）によって実行されてもよい。方法２２０の特定の機能は、スクリプトが解釈されるときスクリプトによって直接実行されてもよい。
【００７６】
方法２２０のブロック２２４は、レンダリングすべき現在のフレーム画像を決定することを含む。ブロック２２４は、たとえば、レンダリングされるビデオ・データのフレームレートおよび現在の時間値に基づいて現在のビデオ・フレーム・インデックスを決定することを含むことができる。ブロック２２４で使用するのに適した、現在のビデオ・フレーム・インデックスを決定するための方法の特定の非限定的な実施形態が、任意選択のブロック２２４Ａおよび２２４Ｂに示されている。ブロック２２４Ａは、好適なソースからの現在の時間値を入手することを含む。図の実施形態では、ブロック２２４Ａの現在の時間値は、ビデオコンテンツ内のビデオ・データに伴うオーディオ・データのレンダリングから得られる。非限定的な一実施形態では、ブロック２２４Ａの現在の時間値は、ビデオコンテンツ１１６内からのオーディオ・データのレンダリングから得られる。上述のように、特定の実施形態では、オーディオ・レンダリング・システム１５０のオーディオ・レンダラ・インターフェース１８０（図２Ｂ）は、オーディオ・レンダラ１８２によるオーディオ再生のタイミングを（たとえば、オーディオ再生の開始など基準点に対して）監視することができ、ブロック２２４Ａにおいて、現在のオーディオ再生時間基準について照会を受けることができる。いくつかのそのような実施形態では、オーディオ・レンダラ・インターフェース１８０は、スクリプトによって直接実行され、オーディオ再生時間基準を入手することができる。他の実施形態では、オーディオ・レンダラ・インターフェース１８０は、ネイティブ・ブラウザ機能を利用し、オーディオ再生時間基準を入手してもよい。別の非限定的な、例示的な実施形態では、方法２２０は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行され、ブロック２２４Ａは、ブラウザに、関連のオーディオ・オブジェクトに対してａｕｄｉｏ．ｂｕｆｆｅｒｅｄ．ｅｎｄメソッドを呼び出させ、その関連のオーディオ・データの最後にレンダリングされた（またはレンダリングしようとしている）セグメントの時間を示す値を得ることができる。この例示的な実施形態は、ブラウザによってネイティブに実行することができ、オーディオ・レンダラ・インターフェース１８０に依拠する必要はない。
【００７７】
図の例示的な実施形態では、スクリプトによって直接実行されてもよいブロック２２４Ｂが、ブロック２２４の現在の時間値（たとえば、現在のオーディオ再生時間基準）をビデオ・データのフレームレートで乗算し、所望のブロック２２４の現在のビデオ・フレーム・インデックスを得ることを含む。いくつかの実行では、ブロック２２４Ａの現在の時間値とビデオ・データのフレームレートの積を最も近い整数に丸め、所望のブロック２２４の現在のビデオ・フレーム・インデックスをもたらすことができる。Ｊａｖａスクリプト（登録商標）をベースとする実行では、丸めるのが可能でない場合、このブロック２２４Ｂの丸め演算は、積に０．５を加算し、最も近い整数に切り捨てることによって実行されてもよい。
【００７８】
いくつかのインターネットブラウザでは、オーディオ・バッファリング情報が、レンダリングされるビデオ・データのフレームレートほど頻繁に更新されない（たとえば、オーディオ・バッファリング情報の連続する更新間で２フレーム期間以上が経過する可能性がある）場合があり得る。これにより生じ得る同期問題を改善するために、ブロック２２４は、ブロック２２４（または方法２００の別のブロック）が実行された最後の時間以来経過した時間の量を決定すること、および、この経過時間と、ブロック２２４が実行された最後の時間に決定されたブロック２２４のビデオ・フレーム・インデックスとの組合せに基づいて、現在のブロック２２４のビデオ・フレーム・インデックスを決定することを含むことができる。この経過時間は、システム・クロックなどから測定する、または別の方法で決定することができる。
【００７９】
スクリプトによって直接実行されてもよいブロック２２６は、現在のブロック２２４のビデオ・フレーム・インデックスによって参照されるフレーム画像がすでにレンダリングされたかどうか判定することを含む。ブロック２２６は、方法２２０が単一のビデオ・フレームの期間内で２回実行される状況において、同じフレームの２重レンダリングを回避することができる。いくつかの実施形態では、ブロック２２６は、現在のブロック２２４のビデオ・フレーム・インデックスを、方法２２０の以前の反復（たとえば、直前の反復）で決定されたブロック２２４のビデオ・フレーム・インデックスに比較することを含む。
【００８０】
ブロック２２６の問い合わせによって、現在のブロック２２４のビデオ・フレーム・インデックスに対応するビデオ・フレームがすでにレンダリングされたと判定された場合（ブロック２２６、「はい」分岐）、方法２２０はブロック２２８に進む。スクリプトによって直接実行されてもよいブロック２２８は、現在のブロック２２４のビデオ・フレーム・インデックスが、レンダリングされるビデオ・データの最後のフレーム（たとえば、既知の長さのビデオ・セグメントの最後のフレーム）を参照するかどうか判定することを含む。ブロック２２８で、現在のブロック２２４のビデオ・フレーム・インデックスが、レンダリングされるビデオ・データの最後のフレームを参照すると判定された場合（ブロック２２８、「はい」分岐）、方法２２０は終了する。ブロック２２８の問い合わせによって、現在のブロック２２４のビデオ・フレーム・インデックスが、レンダリングされるビデオ・データの最後のフレームを参照しないと判定された場合（ブロック２２８、「いいえ」分岐）、方法２２０は、下記で述べるブロック２３０に進む。
【００８１】
ブロック２２６に戻ると、ブロック２２６の問い合わせによって、現在のブロック２２４のビデオ・フレーム・インデックスに対応するビデオ・フレームがまだレンダリングされていないと判定された場合（ブロック２２６、「いいえ」分岐）、方法２２０はブロック２３２に進む。スクリプトによって直接実行されてもよいブロック２３２は、現在のブロック２２４のビデオ・フレーム・インデックスに対応するビデオ・フレーム（便宜上、「現在のフレーム画像」）がレンダリングのためにキューイングされているかどうかを調査することを含む。ブロック２３２は、現在のフレーム画像が、たとえば方法２００（図３）によってポピュレートされたフレーム画像バッファ内にあるかどうか判定することを含むことができる。ブロック２３２の問い合わせによって、現在のフレーム画像がレンダリングのためにキューイングされていないと判定された場合（ブロック２３２、「いいえ」分岐）、方法２２０はブロック２３０に進む。ブロック２３０に進む前に、方法２２０は、ブロック２３４で１つまたは複数の任意選択の、落とされたフレーム・アクションを開始および／または実現してもよい。非限定的な例として、ブロック２３４の落とされたフレーム・アクションは、現在のフレーム画像がレンダリングのために使用可能でなかったことを（たとえば、統計および／または解析目的で）記録すること、関連のオーディオ・トラックの再生を（たとえば、キューイングされたフレームがオーディオ再生によって決定された現在のフレームに追いつくことができるように）休止すること、フレーム画像を（ビデオ・データをより速いレートで得ること、フレームをより頻繁に復号すること、より低いビットレートまたはより低いフレームレートのビデオ・ソースに切り替えることなど、によるなどして）より迅速にキューイングすべきであることを（たとえば、別のプロセス、方法などに）示すこと、および／またはその他を含むことができる。ブロック２３４のドロップ・フレーム・アクションは、スクリプトによって直接開始されてもよい。可能なブロック２３４のドロップ・フレーム・アクションのいくつかを実現することもまた、スクリプトによって直接実行することができる。可能なブロック２３４のドロップ・フレーム・アクションの他のものを実行することは、１つまたは複数のネイティブ・ブラウザ機能の使用を含むことができる。いくつかの実施形態では、任意選択のブロック２３４は、ドロップ・フレーム・アクションを開始すべきか否か判定するために使用することができる何らかの論理を含むことができる。いくつかの実施形態では、フレームが落とされたことが既知である他の状況−たとえば、ブロック２２４の現在のフレーム・インデックスが（方法２２０の以前の反復からの）最後のブロック２２４のフレーム・インデックスより２カウント以上多く、１つまたは複数のフレームが方法２２０の連続する反復間で落とされたことを示す状況において、ブロック２３４のドロップ・フレーム・アクションと同様のアクションをとることができる。
【００８２】
ブロック２３２の問い合わせによって、現在のフレーム画像がレンダリングのためにキューイングされていると判定された場合（ブロック２３２、「はい」分岐）、方法２２０はブロック２３６に進む。ブロック２３６は、現在のフレーム画像をレンダリングすることを含む。方法２２０がユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによって解釈されるスクリプトを使用して実行される実施形態では、ブロック２３６は、たとえば、インターネットブラウザのネイティブ画像レンダリング機能を使用して現在のフレーム画像をレンダリングすることを含むことができる。非限定的な例として、特定の例示的な実施形態では、方法２２０は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行され、ブロック２３６は、ＩｍａｇｅＤａｔａオブジェクトをその引数の（うちの１つの）引数として有するｐｕｔＩｍａｇｅＤａｔａメソッドを呼び出すことを含み、ＩｍａｇｅＤａｔａオブジェクトは、レンダリングすべきフレーム画像（たとえば、フレーム画像１２４（図２Ａ））を表すＲＧＢ画素値のアレイを含むＣａｎｖａｓＰｉｘｅｌＡｒｒａｙオブジェクトを含む。別の例示的な実施形態では、ブロック２３６は、画像オブジェクト（たとえば、フレーム画像１２４（図２Ａ））をその引数の（うちの１つの）引数として有するｄｒａｗＩｍａｇｅ（）メソッドを呼び出すことを含む。
【００８３】
ブロック２３６の後で、方法２２０はブロック２３０に進む。ブロック２３０は、将来のある時点のために方法２２０の後続の反復をスケジューリングすること含む。いくつかの実施形態では、ブロック２３０は、１つまたは複数のネイティブ・ブラウザ機能の使用を含むことができる。非限定的な例として、特定の例示的な実施形態では、方法２２０は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行され、ブロック２３０は、ｓｅｔＴｉｍｅｏｕｔ（）メソッドを呼び出し、指定された時間量が経過した後で方法２２０を実行するＪａｖａスクリプト命令のセットをスケジューリングすることを含む。別の特定の例示的な実施形態では、方法２２０は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行され、ｓｅｔＩｎｔｅｒｖａｌ（）メソッドを使用し、指定された時間量が経過した後で方法２２０を実行するＪａｖａスクリプト命令のセットをスケジューリングしてもよい。そのような実施形態では、ブロック２３０は、方法２２０の反復毎に明確に必須ではない可能性がある。特定の実施形態では、方法２２０の連続する反復は、レンダリングされるビデオ・データのフレーム間隔（すなわち、（フレームレート）−１）より短い間隔でスケジューリングされてもよい。いくつかの実施形態では、スケジューリングされる方法２２０の間隔は、レンダリングされるビデオ・データのフレーム間隔の５０％未満である。いくつかの実施形態では、スケジューリングされる方法２２０の間隔は、レンダリングされるビデオ・データのフレーム間隔の２０％未満である。いくつかの実施形態では、スケジューリングされる方法２２０の間隔は、レンダリングされるビデオ・データのフレーム間隔の１０％未満である。ブロック２３０でビデオ・レンダリング方法２２０の次の反復がスケジューリングされた後で、方法２２０は終了し、制御がスクリプト・インタプリタに返される。
【００８４】
上述のように、方法２２０は、ブラウザがクロスプラットフォーム・スクリプト（またはスクリプトの一部）を解釈するとき、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブに実行されてもよい。方法２２０の特定の機能は、スクリプトが解釈されるときスクリプトによって直接実行されてもよい。たとえば、特定の実施形態では、ブロック２２４Ｂ、２２６、２２８、２３２、２３４のいずれかの機能を、スクリプトによってそれが解釈されるとき直接実行してもよい。
【００８５】
図の実施形態では、方法２００は、実行されるたびに、ビデオ・データの１つ以下のフレームを準備し、方法２２０は、実行されるたびに、１つ以下のフレーム画像をレンダリングする。この実現は、方法２００および方法２２０が、単一の実行スレッドを実行するアプリケーション・プログラムの同じスクリプト・インタプリタ（たとえば、いくつかの典型的なインターネットブラウザのＪａｖａスクリプト・インタプリタ）によって反復して実行され、非同期で解釈される場合、有利なものとなり得る。たとえば、そのような一実現は、方法２００の連続する反復間で方法２００によって復号されるフレーム画像を、方法２２０がレンダリングすることを可能にすることができる。他の実施形態では、ビデオ・データの複数のフレームを、方法２００の各反復において入手および／または準備することができ、および／または複数のフレーム画像を、方法２２０の各反復においてレンダリングすることができる。また、上述のように、いくつかの実施形態では、ビデオ・データの１つのフレーム画像が、方法２００の各反復において部分的に（たとえば、ブロック２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄのサブセット）準備されてもよい。
【００８６】
いくつかの実施形態では、方法２００および方法２２０は、それ自体の後続の反復を規則的な間隔でスケジューリングするように構成される（たとえば、連続する反復間のスケジューリングされる期間は、反復を挟んで一定とすることができる）。これらのスケジューリングされた間隔は、経過してもなおビデオ・データがそのビデオ・データのフレームレートでキューイング、準備、同期、およびレンダリングされることを可能にし得る、方法２００および方法２２０の連続する反復間の最大時間より短いものとすることができる。これは、方法２００および方法２２０の将来の反復が（たとえば、インタプリタの動作がそのインタプリタと同じ実行スレッド上で動作する他のプロセスによってプリエンプトされるため、方法２００および方法２２０の将来の反復がインタプリタの他のスケジューリングされた、および／または継続中の動作によってプリエンプトされるため、など）それらのスケジューリングされた時間で行われることを保証することができないアプリケーション・プログラムのスクリプト・インタプリタによって解釈されるスクリプトによって方法２００および方法２２０が実行される場合、有利なものとなり得る。方法２００および方法２２０が専用のスレッド上で動作している場合には厳密に必要とされるはずの頻度より多く、連続する反復をスケジューリングすることは、確実に方法２００および方法２２０が適時に実行され、見る人にとって満足のゆくものであるビデオ表示を提供する助けとなるように余裕をもたらすことができる。
【００８７】
方法２００および方法２２０は、同じ反復間期間、または異なる反復間期間を有するように構成されてもよい。いくつかの実施形態では、方法２００は、方法２２０より頻繁に実行されるように構成される。非限定的な例として、特定の例示的な実施形態では、方法２００は、連続する反復を、１ｍｓと１０ｍｓの間の所定の反復間期間でスケジューリングするように構成され、方法２２０は、連続する反復を、５ｍｓと２５ｍｓの間の所定の反復間期間でスケジューリングするように構成される。他の実施形態では、方法２２０は、連続する反復を、１ｍｓと１０ｍｓの間の所定の反復間期間でスケジューリングするように構成されてもよい。
【００８８】
方法２００および／または方法２２０の反復間期間は、動的に決定されてもよい。たとえば、方法２００および／または方法２２０は、連続する反復間で実際に経過した時間に基づいてそれらの反復間期間を動的に決定してもよい。別の例として、方法２００および方法２２０の反復間期間は、調和させてもよい（たとえば、方法２２０が方法２００の反復間期間を決定することができ、逆も同様である）。いくつかの実施形態では、方法２００および方法２２０の一方または両方を多インスタンス化し、複数の一方または両方の方法が（たとえば、同じ反復間期間で、または異なる反復間期間で）それ自体の連続する反復を絶えずスケジューリングするようにしてもよい。
【００８９】
次にオーディオ・レンダリング・システム１５０（図２Ｂ）に戻ると、いくつかの実施形態では、オーディオ・レンダリング・システム１５０の機能は、少なくとも一部には２つの方法を実行するアプリケーション・プログラムのスクリプト・インタプリタによって達成される。すなわち、１つの方法は、（たとえば、オーディオ・データ・キュー・モニタ１６０、復号済みオーディオ・バッファ・モニタ１７０、およびデコーダ１７２を実行することによって）システム１５０のオーディオ・データ・キューイングおよび復号機能を提供し、別の方法は、オーディオ・レンダラ１８２とインターフェースするためのオーディオ・レンダラ・インターフェース（たとえば、オーディオ・レンダラ・インターフェース１８０）を提供する。図５は、特定の実施形態によるオーディオ・データをキューイングおよび復号する（または別の方法で準備する）ためのこの第１の方法の実行を概略的に示す。図６は、特定の実施形態によるオーディオ・レンダラ・インターフェースを実現するためのこの第２の方法の実行を概略的に示す。スクリプト・インタプリタに、これらの２つの方法を同期した状態で繰返し実行させ、オーディオ・データを増加的にキューイング、復号、および別の方法で準備すること、ならびにオーディオ・レンダラ１８２とインターフェースすることができる。そのような増加的なキューイング、復号、およびオーディオ・レンダラ１８２とのオーディオ・データのインターフェースは、シングルスレッド型インタプリタによって解釈されるスクリプトで実行される場合、有利となり得る。
【００９０】
図５は、例示的な実施形態による、オーディオ・データを得て復号し、別の方法で準備するための方法２５０のフローチャートである。方法２５０は、ブラウザがクロスプラットフォーム・スクリプト（またはスクリプトの一部）を解釈するとき、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブに実行されてもよい。たとえば、方法２５０は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行されてもよい。方法２５０の特定の機能は、スクリプトが解釈されるときスクリプトによって直接実行されてもよい。多くの面で、方法２０５は、図３のビデオ・データのキューイング、復号、および準備方法２００と同様のものであってもよい。図の実施形態では、方法２５０は、少なくとも閾値量のオーディオ・データが復号するためにキューイングされているかどうかについての問い合わせを含むブロック２５４で始まる。いくつかの実施形態では、ブロック２５４は、オーディオ・データ・キュー（たとえば、システム１５０のオーディオ・データ・キュー１６２（図２Ｂ））が、これから復号されなければならないオーディオ・データの少なくとも１つのセグメントを含むかどうか判定することを含む。方法２５０で（また、下記で述べる方法２７０で）使用されるオーディオ・セグメントの長さは、構成可能な定数（たとえば、ユーザ・コンピューティング・デバイスにおいて使用可能な処理リソースによって決まり得るもの）を含むことも、オーディオ・データのセグメントが使用されるたびに、またはオーディオ・データ１６４の一片がレンダリングされるたびに決定される、動的に決定される変数を含むこともできる。いくつかの実施形態では、方法２５０、２７０で使用される各オーディオ・セグメントは、オーディオ・データの好適な数（たとえば、１つ）のフレームを含むことができるが、これは必須ではない。いくつかの実施形態では、方法２５０、２７０で使用される各オーディオ・セグメントは、好適な長さ（たとえば、１秒）の再生時間を含むことができる。いくつかの実施形態では、方法２５０、２７０で使用される各オーディオ・セグメントは、好適な数（たとえば、４４，０００）のオーディオ・サンプルを含むことができる。
【００９１】
ブロック２５４の問い合わせによって、閾値量より少ないオーディオ・データがキューイングされていると判定された場合（ブロック２５４、「いいえ」分岐）、方法２５０は、使用可能なオーディオ・データすべてがキューイングされたかどうかを調査することを含むブロック２５６に進む。ブロック２５６は、たとえば、オーディオ・データの終点部分がオーディオ・データ・キュー内に格納されたかどうか判定することを含むことができる。ブロック２５６の問い合わせによって、使用可能なオーディオ・データすべてがキューイングされたと判定された場合（ブロック２５６、「はい」分岐）、方法２００は終了する。ブロック２５６の問い合わせによって、依然としてキューイングされていない使用可能なオーディオ・データがあると判定された場合（ブロック２５６、「いいえ」分岐）、方法２５０は、より多くのオーディオ・データをオーディオ・データ・キュー内に配置させることを含むブロック２５８に進む。ブロック２５８は、（ビデオ・データではなく）オーディオ・データが入手されること、およびオーディオ・データが（ビデオ・データ・キューではなく）オーディオ・データ・キューに追加されることを除いて、方法２００（図３）のブロック２０８と同様のものであってもよい。
【００９２】
ブロック２５８の後で、方法２５０は、下記で述べるブロック２６６に進む。いくつかの実施形態では、方法２５０は、ブロック２５８の後でブロック２５８に進んでもよい。いくつかの実施形態では、ブロック２５６は省略される（たとえば、ブロック２５４で、オーディオ・データの少なくとも１つのセグメントもキューイングされていないと判定された場合（ブロック２５４、「いいえ」分岐）、方法２５０は、キューイングすべき使用可能なオーディオ・データがあるかどうか判定することなしにオーディオ・データをキューイングさせようと試みてもよい（たとえば、ブロック２５８を実行する））。
【００９３】
ブロック２５４に戻ると、ブロック２５４の問い合わせによって、オーディオ・データの少なくとも１つのセグメントがキューイングされていると判定された場合（ブロック２５４、「はい」分岐）、方法２５０は、復号済みオーディオ・バッファ（たとえば、システム１５０の復号済みオーディオ・バッファ１７６（図２Ｂ））内に十分な自由空間（たとえば、オーディオ・データの復号済みセグメントを格納するための十分な自由空間）があるかどうか判定することを含むブロック２６２に進む。ブロック２６２の問い合わせによって、復号済みオーディオ・バッファ内に自由空間がないと判定された場合（ブロック２６２、「いいえ」分岐）、方法２５０はブロック２６６に進む。ブロック２６２の問い合わせによって、復号済みオーディオ・バッファ内に自由空間があると判定された場合（ブロック２６２、「はい」分岐）、方法２５０はブロック２６４に進む。
【００９４】
ブロック２６４は、キューイングされているオーディオ・データの１つのセグメントを（たとえば、オーディオ・データ・キュー１６２から）復号すること、および復号済みオーディオ・セグメントを復号済みオーディオ・バッファ（たとえば、復号済みオーディオ・バッファ１７６）内に格納することを含む。ブロック２６４は、たとえば、オーディオ・トラック内の次の未復号セグメントに対応する（またはそれを含む）オーディオ・データを復号することを含むことができる。いくつかの実施形態では、ブロック２６４で復号されたオーディオ・データは、ネイティブ・オーディオ・レンダラ１８２を実行する、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブにレンダリングすることができるフォーマットで提供される。非限定的な例として、特定の例示的な実施形態では、ブロック２６４は、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブにレンダリング可能である、ＷＡＶファイル・フォーマットなどにオーディオ・データを復号することを含む。ブロック２６４は、（限定しないが）ブロック２１４に関連して上述した機能を含めて、任意の好適な復号アルゴリズムのステップを実行することを含むことができる。上述のように、オーディオ・レンダリング・システム１５０（図２Ｂ）は、復号済みオーディオ・データをレンダリングするのに適したフォーマットにするために使用することができる、フレーム画像プロセッサ１３６（図２Ａ）のものと同様のオーディオ処理機能を含むことができる。そのような実施形態では、ブロック２６４は、ブロック２１４の任意選択のブロック２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄと同様にしてそのような機能を提供するように、任意選択で分解されてもよい（図３）。方法２５０、復号ブロック２６４、およびデコーダ１７２（図２Ｂ）においてオーディオ・データを復号することに言及することは、任意選択で、オーディオ・データをレンダリングするのに適したフォーマットの形に準備することに関連する機能の任意の１つまたは複数を含むと理解されたい。ブロック２６４は、任意選択で、フィルタリング、ボリューム調整、圧縮など、復号済みオーディオ・データのオーディオ関連の処理を含むことができる。
【００９５】
ブロック２６４の後で、方法２５０は、将来のある時点のために方法２５０の後続の反復をスケジューリングすること含むブロック２６６に進む。ブロック２６６は、上述のブロック２１６と同様のものであってもよい。方法２５０の連続する反復は、方法２５０、２７０で使用されるオーディオ・セグメントの再生期間より短い間隔でスケジューリングされてもよい。たとえば、方法２５０、２７０で使用されるオーディオ・セグメントがτの再生期間を有する場合には、ブロック２６６は、０．５τ未満の間隔で、方法２５０の連続する反復をスケジューリングすることを含むことができる。いくつかの実施形態では、スケジューリングされる方法２５０の間隔は、０．２τ未満である。いくつかの実施形態では、スケジューリングされる方法２５０の間隔は、０．１τ未満である。ブロック２６６でキューイングおよび復号方法２５０の次の反復がスケジューリングされた後で、方法２５０は終了し、制御がスクリプト・インタプリタに返される。
【００９６】
上述のように、方法２５０は、ブラウザがクロスプラットフォーム・スクリプト（またはスクリプトの一部）を解釈するとき、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブに実行されてもよい。方法２５０の特定の機能は、スクリプトが解釈されるときスクリプトによって直接実行されてもよい。たとえば、特定の実施形態では、ブロック２５４、２５６、２６２、２６４のいずれかの機能を、スクリプトによってそれが解釈されるとき直接実行してもよい。
【００９７】
図６は、特定の実施形態によるオーディオ・レンダラ・インターフェースを実現するための方法のための方法２７０のフローチャートである。方法２７０は、ブラウザがクロスプラットフォーム・スクリプト（またはスクリプトの一部）を解釈するとき、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブに実行されてもよい。たとえば、方法２７０は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行されてもよい。方法２７０の特定の機能は、スクリプトが解釈されるときスクリプトによって直接実行されてもよい。方法２７０は、オーディオ・データの最後のセグメントが復号済みオーディオ・バッファ（たとえば、復号済みオーディオ・バッファ１７６（図２Ｂ））からオーディオ・レンダラ（たとえば、オーディオ・レンダラ１８２（図２Ｂ））にロードされたかどうかを調査することを含むブロック２７２で始まる。ブロック２７２の問い合わせが肯定的である（すなわち、復号済みオーディオ・データすべてがオーディオ・レンダラに送られた（ブロック２７２、「はい」分岐））場合、方法２７０は、下記で述べる任意選択のブロック２７４を介してブロック２７６に進む。一方、ブロック２７２の問い合わせによって、復号済みオーディオ・バッファ内に、オーディオ・レンダラに送るべき復号済みオーディオ・データが依然としてあると判定された場合（ブロック２７２、「いいえ」分岐）には、方法２７０はブロック２８０に進む。
【００９８】
ブロック２８０は、オーディオ・レンダラがより多くのオーディオ・データを受け入れることができるかどうか（たとえば、オーディオ・データの別のセグメントを受け入れるために、オーディオ・レンダラの内部バッファ内に空間があるかどうか）を調査することを含む。ブロック２８０の問い合わせによって、オーディオ・レンダラがより多くのオーディオ・データを受け入れることができないと判定された場合（ブロック２８０、「いいえ」分岐）、方法２７０は、下記で述べる任意選択のブロック２７４を介してブロック２７６に進む。そうでなければ、オーディオ・レンダラがより多くのオーディオ・データを受け入れることができる場合（ブロック２８０、「はい」分岐）、方法２７０はブロック２８２に進む。ブロック２８２は、復号済みオーディオ・バッファ内に、オーディオ・レンダラにロードすべき復号済みオーディオ・データが使用可能であるかどうかを調査することを含む。ブロック２８２の問い合わせによって、復号済みオーディオ・バッファ内で十分な復号済みオーディオ・データが使用可能であると判定された場合（ブロック２８２、「はい」分岐）には、方法２７０は、復号済みオーディオ・データのセグメントを復号済みオーディオ・バッファからオーディオ・レンダラに転送することを含むブロック２８４に進む。このブロック２８４のデータ転送は、オーディオ・レンダラによって使用するのに適したフォーマットにオーディオ・データをフォーマットすることを含むことができる。ブロック２８４においてオーディオ・データをオーディオ・レンダラにロードした後で、方法２７０は、任意選択のブロック２７４を介してブロック２７６に進む。
【００９９】
ブロック２８２に戻ると、ブロック２８２の問い合わせによって、復号済みオーディオ・バッファ内で十分な復号済みオーディオ・データが使用可能でないと判定された場合（ブロック２８２、「いいえ」分岐）には、方法２７０は、任意選択のブロック２８６およびブロック２７４を介してブロック２７６に進む。任意選択のブロック２８６は、オーディオ・レンダラにはより多くの復号済みオーディオ・データを受け入れるための容量があったが、そのような復号済みオーディオ・データが復号済みオーディオ・バッファ内で使用可能でなかったことを記録すること、オーディオ・データの再生を（たとえば、オーディオ・データの復号および／またはキューイングオーディオ・レンダラに追いつくことができるように）オーディオ・レンダラによって休止する、または速度を落とすこと、オーディオ・データを（オーディオ・データをより速いレートで得ること、オーディオ・データをより頻繁に復号すること、より低いビットレートのオーディオ・ソースに切り替えることなど、によるなどして）より迅速に復号および／またはキューイングすべきであることを（たとえば、別のプロセス、方法などに）示すこと、および／またはその他など、１つまたは複数のドロップ・オーディオ・アクションを含むことができる。
【０１００】
方法２７０は、様々な経路を介して任意選択のブロック２７４で終わることができる。任意選択のブロック２７４は、現在の時間値をオーディオ・レンダラから入手することを含む。この現在の時間値は、オーディオ・データの現在のセグメントの再生に関連する時間基準を含むことができる。非限定的な例として、特定の例示的な実施形態では、方法２７０は、スクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行され、任意選択のブロック２７４は、関連のオーディオ・オブジェクトに対してａｕｄｉｏ．ｂｕｆｆｅｒｅｄ．ｅｎｄメソッドを呼び出し、その関連のオーディオ・データの最後にレンダリングされた（またはレンダリングしようとしている）セグメントの時間を示す値を得ることを含むことができる。任意選択のブロック２７４で得られた時間値は、方法２２０（図４）のブロック２２４Ａにとって使用可能なものとしてもよい。いくつかの実施形態では、時間値が方法２２０のブロック２２４Ａで得られるので、ブロック２７４は必要とされない。
【０１０１】
最終的に、方法２７０は、オーディオ・レンダラによるオーディオ・データの再生が完了したかどうかを調査することを含むブロック２７６に進む。ブロック２７６の問い合わせが肯定的である（すなわち、オーディオ再生が完了している）場合には、方法２７０は終了する。一方、オーディオ再生が未完了である（ブロック２７６、「いいえ」分岐）場合、方法２７０は、将来のある時点のために方法２７０の後続の反復をスケジューリングすること含むブロック２７８に進む。ブロック２７８は、上述のブロック２３０（図４）と同様のものであってもよい。方法２７０の連続する反復は、方法２５０、２７０で使用されるオーディオ・セグメントの再生期間より短い間隔でスケジューリングされてもよい。たとえば、方法２５０、２７０で使用されるオーディオ・セグメントがτの再生期間を有する場合には、ブロック２７８は、０．５τ未満の間隔で、方法２７０の連続する反復をスケジューリングすることを含むことができる。いくつかの実施形態では、スケジューリングされる方法２７０の間隔は、０．２τ未満である。いくつかの実施形態では、スケジューリングされる方法２７０の間隔は、０．１τ未満である。ブロック２３０でビデオ・レンダリング方法２２０の次の反復がスケジューリングされた後で、方法２２０は終了し、制御がスクリプト・インタプリタに返される。
【０１０２】
上述のように、ブラウザがクロスプラットフォーム・スクリプト（またはスクリプトの一部）を解釈するとき、ユーザ・コンピューティング・デバイス上で動作するインターネットブラウザによってネイティブに実行されてもよい。特定の機能は、スクリプトが解釈されるときスクリプトによって直接実行されてもよい。たとえば、特定の実施形態では、ブロック２７２、２８０、２８２、２８６、２７６のいずれかの機能を、スクリプトによってそれが解釈されるとき直接実行してもよい。
【０１０３】
図の実施形態では、方法２５０は、実行されるたびに、オーディオ・データの１つ以下のセグメントを入手および復号（または別の方法で準備）し、方法２７０は、実行されるたびに、オーディオ・データの１つ以下のセグメントをオーディオ・レンダラにロードする。上述のように、そのようなセグメントの長さは、たとえばユーザ・コンピューティング・デバイスにて使用可能な処理リソースによって決まり得る構成可能なパラメータであってもよい。いくつかの実施形態では、各オーディオ・セグメントは、オーディオ・データのフレームを含む。この実行は、方法２５０および方法２７０が、単一の実行スレッドを実行するアプリケーション・プログラムの同じスクリプト・インタプリタ（たとえば、いくつかの主要なインターネットブラウザのＪａｖａスクリプト・インタプリタ）によって反復して実行され、非同期で解釈される場合、有利なものとなり得る。たとえば、そのような一実施は、方法２５０の連続する反復間で、方法２７０が（方法２５０によって復号された）オーディオ・データをオーディオ・レンダラにロードすることを可能にすることができる。他の実施形態では、オーディオ・データの複数のセグメントを、方法２５０の各反復において入手および／または復号（または別の方法で準備）することができ、および／または複数のセグメントを、方法２７０の各反復においてレンダリングすることができる。上述のように、いくつかの実施形態では、オーディオ・データの１つのセグメントが、方法２５０の各反復において部分的に（たとえば、ブロック２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄと同様のブロックのサブセット）準備されてもよい。
【０１０４】
方法２５０、２７０のスケジューリングは、上述の方法２００、２２０のスケジューリングのものと同様の特性を有することがある。スケジュール間隔は、一定、動的、調和されたものであり、オーディオ・データのサンプリングレートで、または聴取者に適したレートでオーディオ・データをキューイング、復号、およびレンダリングすることを可能にするのに十分短いものとすることができる。方法２５０、２７０は、同じ、または異なる反復間期間を有するように構成されてもよい。いくつかの実施形態では、方法２５０は、方法２７０より頻繁に実行されるように構成される。いくつかの実施形態では、方法２５０、２７０の一方または両方を多インスタンス化し、複数の一方または両方の方法が（たとえば、同じ反復間期間で、または異なる反復間期間で）それ自体の連続する反復を絶えずスケジューリングするようにしてもよい。
【０１０５】
上述のように、いくつかの実施形態では、インターネットブラウザが符号化されたオーディオ・データをネイティブにレンダリングすることができる。そのような実施形態では、オーディオ・データを復号すること、および復号済みオーディオ・データをキューイングすることに伴うステップが必要とされないように、方法２５０、２７０に適切な修正を加えることができる。
【０１０６】
図３〜６に関連して上述した実施形態では、シングルスレッド型インタプリタによって順に実行される方法２００、２２０、２５０、２７０の連続する反復をスケジューリングすることによって、マルチスレッド型処理がシミュレートされている。図７は、オーディオおよびビデオ・データをキューイング、復号、および準備するために、ビデオ・データをレンダリングするために、また他の実施形態によるオーディオ・レンダラ・インターフェースを実現するために使用することができる方法３００のフローチャートである。方法３００を使用することは、単一の方法３００のコード・セグメントの連続する反復を反復してスケジューリングおよび解釈すること、しかし、どの手順が各反復において実行されるか判定するために論理を方法３００のコード・セグメントに組み込むことを含む。
【０１０７】
方法３００は、図の実施形態ではいくつかの論理問い合わせ３０４、３０８、３１２、１３６を含む論理ブロック３０２を含む。いくつかの実施形態では、論理ブロック３０２、または論理ブロック３０２の特定の機能は、スクリプトが解釈されるときスクリプトによって直接実行されてもよい。論理ブロック３０２は、どの手順が方法３００において実行されるか決定することができる。たとえば、図の実施形態では、論理ブロック３０２は、オーディオ・レンダラ・インターフェース手順を実行するのに条件が適切かどうかを調査することを含むブロック３０４で始まる。ブロック３０４の条件は、一般に、スクリプトにとってネイティブに、または直接使用可能とすることができる任意の情報に基づく情報を含むことができる。たとえば、ブロック３０４の条件は、オーディオ・レンダラのバッファ内のオーディオ・データの量を何らかの閾値に比較することに基づいてもよい。オーディオ・レンダラのバッファ内のオーディオ・データの量が何らかの閾値量より少ないと判定された場合には、オーディオ・レンダラ・インターフェース手順を実行し、より多くのオーディオ・データをオーディオ・レンダラにロードすることが望ましいものとなり得る。ブロック３０４の条件は、オーディオ・レンダラ・インターフェースに、または一般的にオーディオ・レンダリングに直接関連する条件に限定されない。いくつかの実施形態では、ブロック３０４の条件は、何らかの他の機能がより早く必要とされ得るかどうか評価することを含むことができる。たとえば、ブロック３０４の条件は、オーディオ・レンダラのバッファ内のオーディオ・データの量が閾値量より少ない場合でさえ（方法３００の現在の反復において）ビデオ復号手順を実行することがより重要であるかどうか評価することを含むことができる。ブロック３０４の条件は、ドロップ・オーディオのブロック２８６（図６）および／またはドロップ・フレームのブロック２３４（図４）において生成される情報に基づいてもよい。
【０１０８】
ブロック３０４の条件の評価により、オーディオ・レンダラ・インターフェース手順を実行するのに条件が適切であると判定された場合（ブロック３０４、「はい」分岐）には、方法３００はブロック３０６に進む。ブロック３０６は、オーディオ・レンダラ・インターフェース手順を実行することを含む。そのようなオーディオ・レンダラ・インターフェース手順は、ブロック２７８の将来の反復のスケジューリングが必要とされないことを除いて、方法２７０（図６）のものと同様の方法を含むことができる。オーディオ・レンダラ・インターフェース手順から戻った後で、方法３００は、将来のある時点のために方法３００の別の反復をスケジューリングすること含むブロック３２０に進む。ブロック３２０のスケジューリングは、方法２００、２２０、２５０、２７０のスケジューリングのブロックについて上述したものと同様のものであってもよい。たとえば、方法３００がスクリプト化された命令のセット（たとえば、Ｊａｖａスクリプト命令のセット）として実行される場合、ブロック３２０は、ｓｅｔＴｉｍｅｏｕｔ（）メソッドおよび／またはｓｅｔＩｎｔｅｒｖａｌ（）メソッドを使用することを含むことができる。ブロック３２０でスケジューリングされる間隔は、静的でも動的でもよい。ブロック３２０でスケジューリングされる間隔は、経過してもなおビデオおよびオーディオ・データが好適なレートでキューイング、復号、および／または別の方法で準備されることを可能にし得る最大時間より短いものとすることができる。いくつかの実施形態では、ブロック３２０でスケジューリングされる間隔は、０．２５ｍｓ〜２５ｍｓの範囲内である。いくつかの実施形態では、ブロック３２０でスケジューリングされる間隔は、方法３００の現在の反復が完了した後、可能な限りすぐにスケジューリングされる。
【０１０９】
ブロック３０４の条件の評価により、オーディオ・レンダラ・インターフェース手順を実行するのに条件が適切でないと判定された場合（ブロック３０４、「いいえ」分岐）には、方法３００はブロック３０８に進む。ブロック３０８は、オーディオ・レンダラ手順を実行するのに条件が適切かどうかを調査することを含む。ブロック３０８の問い合わせは、ブロック３０４の問い合わせと同様のものであってもよく、スクリプトにとってネイティブに、または直接使用可能とすることができる任意の情報に基づくことができる。非限定的な例として、ブロック３０８の問い合わせは、（たとえば、ブロック２２４（図４）で上述したものと同様にして得られた）現在のフレーム・インデックスを評価すること、および現在のフレーム・インデックスが、レンダリングされた最後のビデオ・フレームのフレーム・インデックスより大きいかどうか判定することに基づいてもよい。現在のフレーム・インデックスが、レンダリングされた最後のビデオ・フレームより大きい場合には、ビデオ・レンダラ手順を実行し、ビデオ・データの別のフレームをレンダリングすることが望ましいものとなり得る。上述のブロック３０８の条件と同様に、ブロック３０８の条件は、何らかの他の機能がより早く必要とされ得るかどうか評価することを含むことができる。ブロック３０４の条件は、ドロップ・オーディオのブロック２８６（図６）および／またはドロップ・フレームのブロック２３４（図４）において生成される情報に基づいてもよい。ブロック３０８の条件の評価により、ビデオ・レンダリング手順を実行するのに条件が適切であると判定された場合（ブロック３０８、「はい」分岐）には、方法３００はブロック３１０に進む。ブロック３１０は、ビデオ・レンダリング手順を実行することを含む。そのようなビデオ・レンダリング手順は、ブロック２３０の将来の反復のスケジューリングが必要とされないことを除いて、方法２２０（図４）のものと同様の方法を含むことができる。ビデオ・レンダラ手順から戻った後で、方法３００は、続いてブロック３２０で別の反復をスケジューリングする。
【０１１０】
ブロック３０８の条件の評価により、ビデオ・レンダラ手順を実行するのに条件が適切でないと判定された場合（ブロック３０８、「いいえ」分岐）には、方法３００はブロック３１２に進む。ブロック３１２は、ビデオ・キューイング／復号手順を実行するのに条件が適切かどうかを調査することを含む。ブロック３１２の問い合わせは、ブロック３０４、３０８の問い合わせと同様のものであってもよく、スクリプトにとってネイティブに、または直接使用可能とすることができる任意の情報に基づくことができる。非限定的な例として、ブロック３１２の問い合わせは、フレーム画像バッファ（たとえば、フレーム画像バッファ１２６（図２Ａ））内の準備されたビデオ・データの量を適切な閾値に比較すること、および／またはビデオ・データ・キュー（たとえば、ビデオ・データ・キュー１１２（図２Ａ））内のビデオ・データの量を適切な閾値に比較することに基づいてもよい。ブロック３０４、３０８の条件と同様に、ブロック３１２の条件は、何らかの他の機能がより早く必要とされ得るかどうか評価することを含むことができる。ブロック３１２の条件は、ドロップ・オーディオのブロック２８６（図６）および／またはドロップ・フレームのブロック２３４（図４）において生成される情報に基づいてもよい。ブロック３１２の条件の評価により、ビデオ・キューイング／復号手順を実行するのに条件が適切であると判定された場合（ブロック３１２、「はい」分岐）には、方法３００はブロック３１４に進む。ブロック３１４は、ビデオ・キューイング／復号手順を実行することを含む。そのようなビデオ・キューイング／復号手順は、ブロック２１６の将来の反復のスケジューリングが必要とされないことを除いて、方法２００（図３）のものと同様の方法を含むことができる。ビデオ・キューイング／復号手順から戻った後で、方法３００は、続いてブロック３２０で別の反復をスケジューリングする。
【０１１１】
ブロック３１２の条件の評価により、ビデオ・キューイング／復号手順を実行するのに条件が適切でないと判定された場合（ブロック３１２、「いいえ」分岐）には、方法３００はブロック３１６に進む。ブロック３１６は、オーディオ・キューイング／復号手順を実行するのに条件が適切かどうかを調査することを含む。ブロック３１６の問い合わせは、ブロック３０４、３０８、３１２の問い合わせと同様のものであってもよく、スクリプトにとってネイティブに、または直接使用可能とすることができる任意の情報に基づくことができる。非限定的な例として、ブロック３１６の問い合わせは、復号済みオーディオ・バッファ（たとえば、復号済みオーディオ・バッファ１７６（図２Ｂ））内の復号済みオーディオ・データの量を適切な閾値に比較すること、および／またはオーディオ・データ・キュー（たとえば、オーディオ・データ・キュー１６２（図２Ｂ））内のオーディオ・データの量を適切な閾値に比較することに基づいてもよい。ブロック３０４、３０８、３１２の条件と同様に、ブロック３１６の条件は、何らかの他の機能がより早く必要とされ得るかどうか評価することを含むことができる。ブロック３１６の条件は、ドロップ・オーディオのブロック２８６（図６）および／またはドロップ・フレームのブロック２３４（図４）において生成される情報に基づいてもよい。ブロック３１６の条件の評価により、オーディオ・キューイング／復号手順を実行するのに条件が適切であると判定された場合（ブロック３１６、「はい」分岐）には、方法３００はブロック３１８に進む。ブロック３１８は、オーディオ・キューイング／復号手順を実行することを含む。そのようなオーディオ・キューイング／復号手順は、ブロック２６６の将来の反復のスケジューリングが必要とされないことを除いて、方法２５０（図５）のものと同様の方法を含むことができる。オーディオ・キューイング／復号手順から戻った後で、方法３００は、続いてブロック３２０で別の反復をスケジューリングする。
【０１１２】
図の実施形態では、ブロック３１６の条件の評価により、ビデオ・キューイング／復号手順を実行するのに条件が適切でないと判定された場合（ブロック３１６、「いいえ」分岐）には、方法３００は、２つの任意選択の経路の１つに沿って進む。場合によっては、ブロック３１６の「いいえ」分岐は、方法３００をブロック３０４にループバックさせることができる。他の場合には、ブロック３１６の「いいえ」分岐は、方法３００に、続いてブロック３２０で別の反復をスケジューリングさせる。他の実施形態では、ブロック３１６の「いいえ」分岐は、手順（たとえば、ブロック３０６、３１０、３１４、３１８）の１つを選択することを含むことができる別の機能ブロック（図示せず）に方法３００を導くことができる。そのような選択は、ブロック３０４、３０８、３１２、３１６の条件のどれが肯定的な結果に最も近いかに基づいてもよい。他の実施形態では、ブロック３１６は必要とされず、ブロック３１２の「いいえ」分岐が、ブロック３１８に直接導いてもよい。そのような実施形態では、ブロック３１８のオーディオ・キューイング／復号手順がデフォルト手順である。他の実施形態では、他の手順の１つ（たとえば、ブロック３０６、３１０、３１４の１つ）がデフォルト手順であるように、論理ブロック３０２の論理を構築することができる。
【０１１３】
状況によっては、方法２００、２２０、２５０、２７０、３００の特定の機能ブロックは、過度に時間がかかることがあり、これはレンダリング・アーチファクトを引き起こすおそれがある。たとえば、方法２００のプロセッサ集約的な機能ブロック（図３）は、ビデオ・データのフレームを準備することを含むブロック２１４である。ブロック２１４は、ブロック２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄの機能のすべてがブロック２１４内にまとめられた場合、特にプロセッサ集約的なものとなり得る。状況によっては、特に比較的処理能力の小さいデバイス上で、ブロック２１４においてビデオ・データのフレームを準備するために必要とされる時間は、関連のビデオ・データのフレーム間間隔（（フレームレート）−１）より長くなり得る。そのような状況では、プロセッサは、そうでない場合にはビデオ・データのフレームをレンダリングしていることができたときにブロック２１４におけるビデオ・データのフレームを復号することに掛かり切りであるため、ビデオ・フレームが飛ばされる、または失われる可能性があり、ビデオ・アーチファクトを引き起こす。
【０１１４】
いくつかの実施形態では、方法２００、２２０、２５０、２７０、３００は、サブコンポーネント（たとえば、機能サブブロックまたはサブステップ）にパースまたは再分割されてもよく、ビデオおよび／またはオーディオ・レンダリングに関連する機能（たとえば、ビデオ・レンダリング方法２２０および／またはオーディオ・レンダリング方法２７０）を、そのようなサブコンポーネント間で実現してもよい。ビデオ準備のブロック２１４の例を続けると、ビデオ準備のブロック２１４は、いくつかのサブコンポーネントに再分割されてもよく、これらのサブコンポーネントは、サブコンポーネント２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄを含むことも、他の（図示されている、または図示されていない）サブコンポーネントを含むこともできる。いくつかの実施形態では、サブコンポーネント２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄは、それら自体がさらなるサブコンポーネントに再分割されてもよい。ブロック２１４の特定のサブコンポーネントの後で、条件を評価し、ビデオおよび／またはオーディオ・レンダリング（たとえば、ビデオ・レンダリング方法２２０および／またはオーディオ・レンダリング・インターフェース方法２７０）に関連する手順を実行するためにブロック２１４を解釈すべきかどうか判定することができる。そのような解釈条件は、ブロック３０６、３１０、３１４、３１８について上述した条件と同様のものであってもよく、概して、スクリプトにとってネイティブに、または直接使用可能とすることができる任意の情報に基づくことができる。たとえば、ビデオ・レンダリング手順を実行することに関連する解釈条件は、ブロック３０８のものと同様のものであってもよく、オーディオ・レンダラ・インターフェース手順を実行することに関連する解釈条件は、ブロック３０４のものと同様のものであってもよい。そのような解釈条件が肯定的なものであると評価された場合には、ビデオ復号ブロック２１４を解釈することができ、適切なビデオ・レンダリング手順および／またはオーディオ・レンダラ・インターフェース手順を実行することができる。この手順を実行した後で、ビデオ復号ブロックが再開されてもよい。そのような機能をビデオ復号ブロック２１４のサブコンポーネント間で実現することは、レンダリング・アーチファクトを低減する助けとなり得る。
【０１１５】
方法２００、２２０、２５０、２７０、３００をサブコンポーネントに再分割すること、ならびにビデオおよび／またはオーディオ・レンダリングに関連する機能をそのようなサブコンポーネント間で実現することは、上述のブロック２１４の例に限定されない。方法２００、２２０、２５０、２７０、３００（および／または方法２００、２２０、２５０、２７０、３００の任意の好適な図示されている、または図示されていないブロックまたはステップ）を、任意の好適な方法で任意の好適なサブコンポーネントに再分割することができる。
【０１１６】
上述のように、特定の非限定的な、例示的な実施形態では、方法２００のブロック２０８（図３）および方法２５０のブロック２５８（図５）は、サーバ上でホストされるビデオコンテンツに対応するＡＪＡＸ  ＸＭＬＨｔｔｐＲｅｑｕｅｓｔオブジェクトのｏｐｅｎ（）メソッドを呼び出すことを含むことができる。このブロック２５８の機能は、インターネットブラウザが何らかのビデオおよび／またはオーディオ・データを、Ｊａｖａスクリプトによって解釈することができるフォーマットで取り出すことを要求する。いくつかの実施形態では、ブロック２０８および／または２５８（およびそれらの対応する方法２００、２５０）は、ブロック２０８および／または２５８の効率を高めるために反復して使用することができる複数のＡＪＡＸ  ＸＭＬＨｔｔｐＲｅｑｕｅｓｔ（以下、ＡＪＡＸ）オブジェクトを利用することができる。
【０１１７】
図８は、ブロック２０８のビデオ・データ・フェッチ機能を実現するために使用することができる方法３５０のフローチャートを示す。ブロック２５８は、同様にして実行されてもよい。図の実施形態では、方法３５０は、２つのＡＪＡＸオブジェクトの使用を含む。しかし、方法３５０は、３つ以上のＡＪＡＸオブジェクトを使用するように拡張されてもよい。方法３５０は、第１のＡＪＡＸオブジェクト（ＡＪＡＸ＿１）が方法３５０の最後の反復で使用されたかどうかを調査することを含むブロック３５２で始まる。ブロック３５２の問い合わせが肯定的である（ブロック３５２、「はい」分岐）場合には、方法３５０はブロック３５４に進む。ブロック３５４では、第２のＡＪＡＸオブジェクト（ＡＪＡＸ＿２）を使用し、データの次のセットをフェッチする。ＡＪＡＸ＿２によって取り出されたデータは、ＡＪＡＸ＿２オブジェクトを提供するインターネットブラウザ（または他のアプリケーション・プログラム）によってネイティブに管理されるデータ構造内に格納される。ブロック３５２の問い合わせが否定的である（ブロック３５２、「いいえ」分岐）場合には、方法３５０はブロック３５６に進む。ブロック３５６では、ＡＪＡＸ＿１を使用し、データの次のセットをフェッチする。ＡＪＡＸ＿１によって取り出されたデータは、ＡＪＡＸ＿１オブジェクトを提供するインターネットブラウザ（または他のアプリケーション・プログラム）によってネイティブに管理されるデータ構造内に格納される。方法３５０は、ブロック３５４またはブロック３５６を実行した後で終了する。
【０１１８】
いくつかの実施形態では、（方法３５０を含めて）ブロック２０８のデータ取り出し機能は、スクリプトの指示下でインターネットブラウザによってネイティブに実行されてもよい。いくつかの実施形態では、（方法３５０を含めて）ブロック２０８のデータ取り出し機能は、方法２００の残りのものに対して（マルチスレッド環境における）並列スレッドとして、または（マルチプロセッシング環境における）並列プロセスとして実現されてもよい。たとえば、いくつかの実施形態では、インターネットブラウザは、方法２００を実行するために１つの並列スレッド／プロセス（たとえば、スクリプト・インタプリタを含む）を実行することができ、方法３５０を実行するために第２の並列スレッド／プロセス（たとえば、ＡＪＡＸオブジェクトを含む）を実行することができる。方法３５０において複数のＡＪＡＸオブジェクトを使用することは、複数のスレッドおよび／またはマルチプロセッシング環境を実行（実現）することが可能なユーザ・コンピューティング・デバイスを利用してもよい。たとえば、スレッドまたはプロセスを、複数のＡＪＡＸオブジェクトのそれぞれに割り当ててもよい。
【０１１９】
インターネットブラウザのスクリプト・インタプリタがスクリプトを解釈しているとき、そのメモリ管理手順は、比較的非効率なものになり得る。これは特に、もはや使用されていない以前割り当てられたメモリを解放するために使用される、いわゆる「ガベージコレクション」の場合である。ガベージコレクションは、特に非効率なものになる可能性があり、処理リソースを消費する可能性があり、望ましくない時点−たとえばフレーム画像、またはオーディオの次のセグメントをレンダリングすることが望ましい時点で行われる可能性がある。方法３５０を使用して、符号化されたビデオ・データを中間バッファリングする必要を、インターネットブラウザのスクリプト・インタプリタによって割り振られるメモリを使用して回避することができる、あるタイプの「ラウンド・ロビン」バッファとしてＡＪＡＸオブジェクトを使用することができる。単一のＡＪＡＸオブジェクトしか使用されないときには、ＡＪＡＸオブジェクトからフェッチされたデータ・ストリングを、インターネットブラウザのスクリプト・インタプリタによって管理される中間バッファ内にコピーすることが必要である、または望ましいものとなり得る。そのような中間バッファリングは、より多くのデータをフェッチするために使用することができるように単一のＡＪＡＸオブジェクトを解放するために必要となる、または望ましいものとなり得る。そのような中間バッファリングは、複数のＡＪＡＸオブジェクトを使用することによって回避することができる。なぜなら、それらのＡＪＡＸオブジェクトの１つを、データをフェッチするために使用することができ、一方、任意の他のＡＪＡＸオブジェクトからのデータを使用し、方法２００の残りの部分を実現するスクリプトによって必要とされるデータを提供することができるからである。複数のＡＪＡＸオブジェクトから直接、フェッチされたデータを使用することに加えて、ＡＪＡＸオブジェクトを実行する責任を担うブラウザの機能により、データの作成／破棄を管理することができ、これは、ブラウザのスクリプト・インタプリタによるデータの作成／破棄より効率的なものとなり得る。
【０１２０】
また、状況によっては、インターネットを介して、または何らかの他のネットワークを介してアクセスされるデータには、接続ごとの帯域幅制限があり得る。そのような状況では、複数のＡＪＡＸオブジェクトの使用により、データをより速くストリーミングすることができる。
【０１２１】
Ｊａｖａスクリプト（登録商標）以外のスクリプトで実行される実施形態では、同様の方法および同様のオブジェクトを使用し、ビデオおよび／またはオーディオ・データをフェッチすることができる。そのような実施形態では、複数のデータ・フェッチ・オブジェクトを、本明細書に記載の複数のＡＪＡＸオブジェクトの使用と同様にして使用することができる。
【０１２２】
いくつかの実施形態では、ビデオコンテンツは、好適なスクリプトを使用してそのビデオコンテンツを効率的にレンダリングする助けとすることができる技法を使用して符号化されてもよい。
【０１２３】
いくつかのインターネットブラウザは、特定のデータ・フォーマット（コンテンツ転送フォーマットと呼ばれる）を有するデータがスクリプト・インタプリタから転送された、または別の方法で渡されたとき、そのようなデータを受け入れるにすぎない。たとえば、いくつかのブラウザは、そのようなデータがＪａｖａスクリプト・インタプリタによってブラウザに転送された、または別の方法で渡されたとき、いわゆるベース６４符号化データ・フォーマットを読み取るにすぎない。上述のように、ビデオ・レンダリング・システム１００のコンテンツ転送エンコーダ１４５（図２Ａ）は、任意選択で、方法２００の任意選択のブロック２１４Ｃ（図３）でフレーム画像をベース６４（または他のコンテンツ転送）符号化フォーマットに変換することができる。このコンテンツ転送符号化は、ユーザ・コンピューティング・デバイスでは計算コストがかかるプロセスとなり得る。たとえば、ベース６４符号化の特定の場合には、そのようなコンテンツ転送符号化は、３バイトの各セットを検査すること、および３バイトの各セットを４文字に変換することを必要とする。そのような計算コストは、たとえば、そのようなコンテンツ転送符号化によりビデオ・フレームのレンダリングが、所望のフレームレートによって決まるフレーム間期間より長い期間、遅延を受ける可能性がある状況において、レンダリング・アーチファクトに通じる可能性がある。
【０１２４】
いくつかの実施形態によれば、ビデオ・データのフレーム画像（および／またはオーディオ・データのセグメント（たとえば、フレーム））を、たとえばユーザ・コンピューティング・デバイスに送られる（またはユーザ・コンピューティング・デバイスによって取り出される）前に、ベース６４（または他の好適なコンテンツ転送フォーマット）で予め符号化されてもよい。以下の説明は、ビデオ・データのフレーム画像をベース６４または何らかの他の好適なコンテンツ転送フォーマットに予め符号化することをいい、そのような予め符号化することがオーディオ・データにも当てはまり得るという一般性を失わない。このフレーム画像をベース６４（または何らかの他の好適なコンテンツ転送）フォーマットに予め符号化することは、下にあるビデオ・データのフレーム画像が、インターネットブラウザによってネイティブにレンダリングすることができるフォーマットで表される場合（たとえば、下にあるビデオ・データのフレーム画像がＪＰＥＧまたはＧＩＦフォーマットで表されるとき）、特に有用である。そのような場合、フレーム画像変換およびコンテンツ転送符号化のプロセス（方法２００のブロック２１４Ｂ、２１４Ｃ（図３））をスキップしてもよい。なぜなら、フレーム画像（ブロック２１４Ａで復号された後）がすでに、インターネットブラウザに転送するのに、またインターネットブラウザによってレンダリングされるのに適したフォーマットになっているからである。そのような場合、ビデオ・レンダリング・システム１００のフレーム画像コンバータ１４２およびコンテンツ転送エンコーダ１４５（図２Ａ）も同様に省略されてもよい。いくつかの実施形態では、下にあるビデオコンテンツのフレーム画像が、インターネットブラウザによってネイティブにレンダリングすることができるフォーマット（たとえば、ＪＰＥＧまたはＧＩＦフォーマット）にトランスコードされてもよく、次いでトランスコードされたフレーム画像を、好適なコンテンツ転送フォーマットに予め符号化することができる。フレーム画像をベース６４（または他のコンテンツ転送）フォーマットに予め符号化することは、符号化された（１つまたは複数の）ビデオ・コンテンツ・ファイルのサイズを増大することがあるが、ベース６４（または他のコンテンツ転送）符号化データに圧縮性があるので、ファイル・サイズの増大があっても、符号化されたファイルをユーザ・コンピューティング・デバイスにストリーミングすることができる速度に対する影響は比較的小さい可能性がある。ＨＴＴＰ１．１によってサポートされる多数のデータ圧縮技法（たとえば、ｇｚｉｐおよび／またはデフレートなど）は、ベース６４（または他のコンテンツ転送）符号化データが、限られた文字セット（たとえば、ベース６４の場合、６４文字、およびいくつかの制御文字）を使用することを利用することができる。
【０１２５】
ビデオ・データのフレーム画像（および／またはオーディオ・データのフレーム）を予め符号化するこの技法は、ユーザ・コンピューティング・デバイスでのプロセッサ・リソースの消費を削減することができる。より具体的には、フレーム画像がベース６４または他の好適なコンテンツ転送フォーマットに予め符号化される場合、それらは、ユーザ・コンピューティング・デバイスにてスクリプトによってベース６４フォーマットに変換、または別の方法で符号化されることなしにユーザ・コンピューティング・デバイスにてインターネットブラウザに直接渡すことができる。
【０１２６】
いくつかの実施形態では、ビデオコンテンツの下にあるフレーム画像がベース６４フォーマットまたは何らかの他の好適なコンテンツ転送フォーマットに予め符号化される場合、各フレーム画像に対応するデータ・ストリングが同じ長さを有するように、その画像に対応するデータ・ストリングがパディングされる。たとえば、ベース６４では、フレーム画像に対応するデータ・ストリングは、ラインフィード文字＜ＬＦ＞など適切な文字でパディングされてもよい。そのようなパディングは、パディングされたストリングに比較的圧縮性があるので、転送速度を著しく増大することがない。しかし、フレーム画像のこのパディングは、インターネットブラウザのスクリプト・インタプリタに、再振り分け、および対応する「ガベージコレクション」なしにメモリを再使用させる可能性がある。
【０１２７】
より具体的には、パディングがなければ、各フレーム画像は、異なる長さを有することになる。ブラウザのスクリプト・インタプリタは、通常、ユーザ・コンピューティング・デバイスにおける何らかのメモリをフレーム画像の格納用に割り振ることになる。非限定的な例として、そのようなフレーム画像ストレージは、フレーム画像キュー（たとえば、キュー１２６、１４３、１４１、１３８（図２Ａ））のいずれかを実行するために使用され得る。新しいフレームを処理するために、割り振られたメモリの一部を再使用することになったとき、新しいフレームのサイズが、上書きされることになる以前のフレームのサイズとは異なる場合、スクリプト・インタプリタは、以前の割振りを破棄し、新しいフレームを収容するためにメモリを再割振りする必要があると判断する可能性がある。以前割り振られたメモリの破棄および再割振りは、一般に「ガベージコレクション」と呼ばれる。そのような以前割り振られたメモリの破棄および再割振りは、プロセッサ・リソースを消費し、アーチファクトに通じる可能性がある。対照的に、フレームのすべてが同じサイズである場合には、スクリプトは、以前のメモリ割振りを破棄する、または別の方法でメモリ再割振りを引き起こすことなしに、以前割り振られたメモリ内で、以前のフレームを新しいフレームで上書きすることができる。これは、メモリ再割振りに関連するプロセッサ・リソースの消費を低減し、レンダリング・アーチファクトの発生を低減することができる。
【０１２８】
現在、関心の高いインターネットブラウザすべてが、少なくとも２つの画像符号化ファイル・フォーマット、すなわちＪＰＥＧおよびＧＩＦをネイティブにサポートする。特定の実施形態では、ビデオコンテンツは、複数の異なる符号化ファイル・フォーマットを有するビデオコンテンツのフレーム画像と共に符号化することができる。個々のフレーム画像が２つ以上の異なる画像符号化ファイル・フォーマット（たとえば、ＪＰＥＧおよびＧＩＦ）で符号化されるビデオコンテンツが符号化されてもよい。より具体的には、符号化プロセス中に、各フレーム画像のための符号化ファイル・フォーマットが、フレーム画像の視覚的特性またはコンテンツに基づいて選択されてもよい。たとえば、ＧＩＦは、視覚的特性が鮮鋭な縁部および細部−たとえば、テクスチャ情報を表示する画像（クレジット画面、タイトル画面など）、および／または漫画画像などを含むフレーム画像を符号化するのに望ましいものとなり得る。ＪＰＥＧは、より自然なビジュアル・コンテンツ（たとえば、そのような鮮鋭な縁部がない）を組み込むフレーム画像により適している可能性がある。
【０１２９】
いくつかの実施形態では、特定のビデオコンテンツ要素内の個々のフレーム画像を処理し、ＪＰＥＧファイル・フォーマットでよりよく符号化され得るか、それともＧＩＦファイル・フォーマットか判定することができる。たとえば、各フレームの個々の画素に関連する値（たとえば、明るさ値および／または色度値）を、それらの隣接する画素に関連する値に比較し、１つまたは複数の階調度を決定することができる。一実施形態では、特定の非縁部の画素に対する隣接する画素のグループが、その８つの隣りの画素を含むことができるが、他の実施形態では、隣接する画素の他のグループを使用することができる。例示的な一実施形態では、階調度は、画素値の差に基づいてもよい。次いで、特定のフレーム画像内の画素のすべてに関する階調度を解析し、その特定のフレーム画像をＪＰＥＧファイル・フォーマットで符号化すべきか、それともＧＩＦファイル・フォーマットか判定することができる。たとえば、比較的多数の比較的高い階調度がある場合には、これは、ＧＩＦフォーマットで符号化すべき鮮鋭な縁部を有するフレーム画像を示す可能性があり、一方、比較的多数の比較的低い階調度がある場合には、これは、ＪＰＥＧファイル・フォーマットで符号化すべきフレーム画像を示す可能性がある。特定の一実施形態では、階調度のこの解析は、階調度をビニングし（概念的なヒストグラムなどを形成し）、次いで、各ビン内の階調度の数を１つまたは複数の適切な閾値に比較することによって行うことができる。
【０１３０】
状況によっては、関心の高いユーザ・コンピューティング・デバイスの（１つまたは複数の）インターネットブラウザが追加の画像符号化ファイル・フォーマットをネイティブにレンダリングすることが可能であることを確かめることができる。そのような状況では、そのような追加の画像符号化ファイル・フォーマットが符号化プロセスに組み込まれてもよい。すなわち、特定のビデオコンテンツ要素内の個々のフレーム画像が３つ以上の異なる画像符号化ファイル・フォーマットで符号化されるビデオコンテンツを符号化することができる。
【０１３１】
異なる符号化ファイル・フォーマットを有する個々のフレーム画像を有するビデオコンテンツを符号化することにより、（単一のファイル・フォーマットのフレーム画像を符号化することに対して）圧縮を改善することができ、これは、ビデオコンテンツをユーザ・コンピューティング・デバイスにてより効率的に入手および／または復号すること、および対応するより少ないアーチファクトに通じる可能性がある。
【０１３２】
特定の実施形態では、フレーム画像をＪＰＥＧフォーマットに符号化するために使用される量子化テーブル（たとえば、明るさおよび色度量子化テーブル）を、各フレーム画像のビジュアル・コンテンツに従ってフレームごとにフレームに対して操作することができる。いくつかの実施形態では、各フレーム画像の画素値を、その時間的に隣接するフレーム画像のどちらか、または両方の画素値に（たとえば、画素ごとに）比較し、１つまたは複数の差メトリックを決定することができ、フレーム画像を符号化するために使用される（１つまたは複数の）量子化テーブルを、そのような（１つまたは複数の）差メトリックに基づいて決定することができる。たとえば、特定のフレーム画像の色度がその隣接するフレームの色度とは著しく異ならない（すなわち、色度の差メトリックが低い）と判定された場合には、これは比較的ゆっくりした動きのシーンを示す可能性があり、その特定のフレーム画像について比較的高いレベルの圧縮に対応する色度量子化テーブルの使用を可能にする。対照的に、特定の画素についての色度の差メトリックが比較的高い場合には、これは比較的速い動きのシーンを示す可能性があり、その特定のフレーム画像について比較的低いレベルの圧縮に対応する色度量子化テーブルの使用を示唆する。明るさ量子化テーブルについても、同様の調整が可能である。
【０１３３】
符号化側でフレーム画像を符号化するためにＪＰＥＧ量子化テーブルを操作することは、人間に知覚可能な細部を過度に犠牲にすることなしに高い圧縮を達成する助けとなり得る。フレーム画像のより高い圧縮により、ユーザ・コンピューティング・デバイスにて、より少ない計算リソースを使用し、フレーム画像を復号およびレンダリングすることができ、これにより、レンダリング・アーチファクトがより少なくなり得る。
【０１３４】
いくつかのユーザ・コンピューティング・プラットフォームは、ビデオ・コンテンツ・ファイルの一部分のフェッチをサポートせず、完全なビデオ・コンテンツ・ファイルをダウンロード（または、別の方法で入手）することが可能であるにすぎない。非限定的な例として、Ａｎｄｒｏｉｄ（登録商標）オペレーティングシステムを動作させるいくつかの移動電話デバイスには、現在、この制限がある。いくつかの実施形態では、単一のビデオ・コンテンツ・ファイルが一連のチャンクにパースされてもよく、各チャンクを、まるで完全なビデオ・コンテンツ・ファイルであるかのように符号化してもよい。これは、ユーザ・コンピューティング・デバイスが各チャンクを別々にダウンロード（または、別の方法で入手）することを可能にし、スクリプトは、ユーザ・コンピューティング・デバイスにて解釈され、次いでユーザ・コンピューティング・デバイスにて、完全なビデオ・コンテンツ・ファイルをレンダリングするために、チャンクを一緒にして順番に編成するように構成することができる。より小さいビデオ・コンテンツ・ファイルを順番に編成するために、ユーザ・コンピューティング・デバイスにてリストが使用されてもよい。
【０１３５】
一般に、しかし限定しないが、ビデオ・データは、２４フレーム／秒または３３フレーム／秒のフレームレートで符号化される。状況によっては、本明細書に記載のスクリプトがこれらの、または他の所望のフレームレートでのビデオ・データのレンダリングをサポートすることを可能にするためには、ユーザ・コンピューティング・デバイスにて使用可能な処理リソースが不足することになることが予想される。したがって、いくつかの実施形態では、ビデオ・データをより低いフレームレートでダウンサンプリングおよび再符号化することができ、ダウンサンプリングされたビデオ・データがユーザ・コンピューティング・デバイスにて復号されるとき、使用可能なフレーム画像は正常に表示することができ、使用可能なフレーム画像間の時点では、アルファブレンディング技法を使用して、補間フレーム画像を描画することができる。そのような補間技法は、ビデオ・データが符号化前にダウンサンプリングされる状況に限定されない。いくつかの実施形態では、ユーザ・コンピューティング・デバイスにて、所望のフレームレートでビデオ・データをレンダリングするためには処理リソースが不十分であると判定されてもよく、その場合には、使用可能なフレーム画像のサブセットを復号および表示することを選択することによって、ビデオ・データをユーザ・コンピューティング・デバイスにて事実上ダウンサンプリングすることができ、選択されたフレーム画像間の時点では、アルファブレンディング技法を使用して、補間フレーム画像を描画することができる。そのようなプロセスの例が、図９Ａおよび図９Ｂに概略的に示されている。
【０１３６】
図９Ａおよび図９Ｂは、元のビデオ・データ４００が、フレームレート１／ｔ０を有する例を示している。ここで、ｔ０はフレーム間隔を表し、ｆ０、ｆ１、ｆ２、ｆ３．．．は、元のフレーム画像（たとえば、フレーム画像内の個々の画素の画素値）を表している。図９Ａおよび図９Ｂのそれぞれにおいて、元のビデオ・データ４００は、元のビデオ・データ４００より低いフレームレートでダウンサンプリングされる。上述のように、そのようなダウンサンプリングは、ビデオ・データをユーザ・コンピューティング・デバイスに対して使用可能にする前に行うことができ、または、そのようなダウンサンプリングは、復号および処理するためにビデオ・データ内からフレーム画像の特定のサブセットを選択することによって、ユーザ・コンピューティング・デバイスにて行うことができる。図９Ａの例では、元のビデオ・データ４００は、１つ置きのフレーム（ｆ０、ｆ２、ｆ４、ｆ６．．．）を取ることによってダウンサンプリングされ、その結果、再符号化されたビデオ・データ４０２は、元のビデオ・データ４００のフレームレート１／ｔ０の半分である１／ｔＡを有する。図９Ｂの例では、元のビデオ・データ４００は、２つ置きのフレーム（ｆ０、ｆ３、ｆ６、ｆ９．．．）を取ることによってダウンサンプリングされ、その結果、再符号化されたビデオ・データ４０４は、元のビデオ・データ４００のフレームレート１／ｔ０の１／３である１／ｔＢを有する。図９Ａおよび図９Ｂの例は説明のためのものにすぎず、元のビデオ・データ４００は、一般に、元のフレーム画像ｆ０、ｆ１、ｆ２、ｆ３．．．の任意の好適な整数分の一を取ることによってダウンサンプリングされてもよいことが当業者には理解されよう。
【０１３７】
図９Ａおよび図９Ｂの実施形態におけるダウンサンプリングされたデータ４０２、４０４の利点は、ユーザ・コンピューティング・デバイスがそれに応じて画像データのより少ないフレームを復号および準備すればよいことである。たとえば、図９Ａのダウンサンプリングされたデータ４０２の場合には、ビデオ・デコーダ１２２およびフレーム画像プロセッサ１３６（図２Ａ参照）は、ブロック２１４Ａ、２１４Ｂ、２１４Ｃ、２１４Ｄ（図３参照）においてフレーム画像の数の半分を処理すればよい。フレーム画像復号および／または準備のそのように削減された量により、ユーザ・コンピューティング・デバイスの処理リソースに対する負担が低減され得る。しかし、いくつかの実施形態では、（たとえば、ブロック２３６（図４）においてフレーム画像レンダラ１３２（図２Ａ）によって）元のフレームレート１／ｔ０でフレーム画像をレンダリングすることが望ましいものとなり得る。なぜなら、これは流れるように動くビデオの見え方をもたらすことになるからである。そのような実施形態では、補間フレーム画像を、ダウンサンプリングされたデータ４０２、４０４の画像フレーム間の時点でレンダリングすることが望ましい可能性がある。たとえば、図９Ａのダウンサンプリングされたデータ４０２の場合、ダウンサンプリングされたデータ４０２はｔ１、ｔ３、ｔ５．．．の時間に対応する復号済みフレーム画像を含まないが、これらの時点で補間フレーム画像をレンダリングすることが望ましい可能性がある。同様に、図９Ｂのダウンサンプリングされたデータ４０４の場合、ダウンサンプリングされたデータ４０４はｔ１、ｔ２、ｔ４、ｔ５．．．の時間に対応する復号済みフレーム画像を含まないが、これらの時点で補間フレーム画像をレンダリングすることが望ましい可能性がある。
【０１３８】
いくつかの実施形態では、そのような補間は、アルファブレンディングを使用して画像オブジェクトを作成することによって提供することができる。アルファブレンディングされたそのような画像オブジェクトは、たとえばブロック１４８（図２Ａ）およびブロック２１４Ｄ（図３）で作成されてもよい。特定の一実施形態の場合には、作成された画像オブジェクトを、たとえばｃａｎｖａｓタグの引数とすることができる。図９Ｃは、特定の実施形態に従って、そのようなアルファブレンディングされた画像オブジェクトを作成するための方法４２０を示す。方法４２０は、現在のフレーム・インデックス（たとえば、ブロック２２４（図４）で決定されるフレーム・インデックス）について的確なフレームが使用可能であるかどうかを調査することを含むブロック４２２で始まる。使用可能な的確なフレームがある場合（ブロック４２２、「はい」分岐）には、方法４２０は、その的確なフレームに基づいて画像オブジェクトを作成することを含むブロック４２４に進む。ダウンサンプリングされたデータ４０２（図９Ａ）の例示的な実施形態の場合、方法４２０は、ｔ０、ｔ２、ｔ４、ｔ６．．．の時点でフレームｆ０、ｆ２、ｆ４、ｆ６．．．のための的確なフレームを使用して画像オブジェクトを作成することが可能であり、ダウンサンプリングされたデータ４０４（図９Ｂ）の例示的な実施形態の場合、方法４２０は、ｔ０、ｔ３、ｔ６．．．の時点でフレームｆ０、ｆ３、ｆ６．．．のための的確なフレームを使用して画像オブジェクトを作成することが可能である。これは、描画すべきデータ４０６として図９Ａに、また描画すべきデータ４０８として図９Ｂに概略的に示されている。方法４２０は、ブロック４２４で画像オブジェクトを作成した後で終了する。
【０１３９】
ブロック４２２に戻ると、ブロック４２２の問い合わせによって、現在のフレーム・インデックスについて使用可能な的確なフレームがないと判定された場合（ブロック４２２、「いいえ」分岐）には、方法４２０は、アルファブレンディング係数を決定することを含むブロック４２６に進む。一般に、ブロック４２６のアルファブレンディング係数は、
α＝［β＋ｌ−ｍｏｄ（ｆ＃，β）］−１
によって与えることができ、上式で、
・  αは、所望のアルファブレンディング係数であり、
・  βは、事実上のダウンサンプリング係数、または同等に、使用可能な画像フレーム間のレンダリング回数＋１（たとえば、図９Ａの場合β＝２、および図９Ｂの場合β＝３）であり、
・  ｆ＃は、現在のフレーム・インデックスであり、
・  ｍｏｄ（ｘ，ｙ）は、ｘをｙで割った整数の余りを返すモジュロ演算子である。
【０１４０】
この公式を図９Ａの例について使用すると、ｆ１、ｆ３、ｆ５．．．の場合、α＝０．５であり、図９Ｂの例については、ｆ１、ｆ４、ｆ７．．．の場合、α＝０．３３、ｆ２、ｆ５、ｆ８．．．の場合、α＝０．５である。一般に、上記の式は、任意のダウンサンプリング係数βについてアルファブレンディング係数を求めるのに適している。ブロック４２６の後で、方法４２０は、次に使用可能な画像フレームの一部分を以前の画像フレームの画像オブジェクト上にアルファブレンディングすることによって画像オブジェクトを作成することを含むブロック４２８に進む。次に使用可能な画像フレームの一部分は、ブロック４２６のアルファブレンディング係数によって決定される。たとえば、図９Ａの例におけるフレームｆ１の場合、α＝０．５、次に使用可能な画像フレームはｆ２であり、以前のフレームについての画像オブジェクトはｆ０であり、ブロック４２８は、０．５ｆ２を以前の画像オブジェクト（ｆ０）上にアルファブレンディングすることによって画像オブジェクトを作成することを含み、これによりｆ１＝０．５ｆ２＋０．５ｆ０が生成される。同様に、図９Ａの例におけるフレームｆ３の場合、α＝０．５、次に使用可能な画像フレームはｆ４であり、以前のフレームについての画像オブジェクトはｆ２であり、ブロック４２８は、０．５ｆ４を以前の画像オブジェクト（ｆ２）上にアルファブレンディングすることによって画像オブジェクトを作成することを含み、これによりｆ３＝０．５ｆ４＋０．５ｆ２が生成される。これは、描画すべきデータ４０６として図９Ａに概略的に示されている。
【０１４１】
図９Ｂの例におけるフレームｆ１の場合、α＝０．３３、次に使用可能な画像フレームはｆ３であり、以前のフレームについての画像オブジェクトはｆ０であり、ブロック４２８は、０．３３ｆ３を以前の画像オブジェクト（ｆ０）上にアルファブレンディングすることによって画像オブジェクトを作成することを含み、これによりｆ１＝０．３３ｆ３＋０．６７ｆ０が生成される。図９Ｂの例におけるフレームｆ２の場合、α＝０．５、次に使用可能な画像フレームはｆ３であり、以前のフレームについての画像オブジェクトはｆ１＝０．３３ｆ３＋０．６７ｆ０であり、ブロック４２８は、０．５ｆ３を以前の画像オブジェクト（ｆ１＝０．３３ｆ３＋０．６７ｆ０）上にアルファブレンディングすることによって画像オブジェクトを作成することを含み、これによりｆ３＝０．５ｆ３＋０．５（０．３３ｆ３＋０．６７ｆ０）＝０．６７ｆ３＋０．３３ｆ０が生成される。図９Ｂの例におけるフレームｆ４の場合、α＝０．３３、次に使用可能な画像フレームはｆ６であり、以前のフレームについての画像オブジェクトはｆ３であり、ブロック４２８は、０．３３ｆ６を以前の画像オブジェクト（ｆ３）上にアルファブレンディングすることによって画像オブジェクトを作成することを含み、これによりｆ４＝０．３３ｆ６＋０．６７ｆ３が生成される。図９Ｂの例におけるフレームｆ５の場合、α＝０．５、次に使用可能な画像フレームはｆ６であり、以前のフレームについての画像オブジェクトはｆ４＝０．３３ｆ６＋０．６７ｆ３であり、ブロック４２８は、０．５ｆ６を以前の画像オブジェクト（ｆ４＝０．３３ｆ６＋０．６７ｆ３）上にアルファブレンディングすることによって画像オブジェクトを作成することを含み、これによりｆ４＝０．５ｆ６＋０．５（０．３３ｆ６＋０．６７ｆ３）＝０．６７ｆ６＋０．３３ｆ３が生成される。これは、描画すべきデータ４０８として図９Ｂに概略的に示されている。
【０１４２】
方法４２０は、ブロック４２８で各画像オブジェクトを作成した後で終了する。方法４２０（図９Ｃ）のプロセスは、方法２００（図３）の各反復、たとえばブロック２１４において実行し、エンコーダ側でのダウンサンプリングまたはユーザ・コンピューティング・デバイスでの事実上のダウンサンプリングのためにフレーム画像が使用可能でないところでフレーム画像を補間することができる。これは、ユーザ・コンピューティング・デバイスが望ましいフレームレートでフレーム画像をレンダリングすることを可能にすることができ、一方、ユーザ・コンピューティング・デバイスでのプロセッサ・リソースに対する負荷を低減し、おそらくはより少ないビデオ・アーチファクトに通じる。
【０１４３】
特定の実施形態では、スクリプトは、解釈されたとき、ユーザ・コンピューティング・デバイスに、ＨＴＴＰプロトコルを使用してサーバなどからのビデオコンテンツにアクセスさせる。比較的洗練されたプロトコルを利用し、ビデオコンテンツを特定のユーザ・コンピューティング・デバイス、特定のメディア・プレーヤ・アプリケーション、および／または特定のストリーミング・ネットワーク接続速度（ビットレート）に合わせて調整することができるストリーミング・メディアとは異なり、データを転送するためにＨＴＴＰプロトコルを使用するＨＴＴＰサーバは、一般に、ユーザ・コンピューティング・デバイスとインタラクションするための能力が比較的制限されている。いくつかの実施形態では、スクリプトは、解釈されたとき、ユーザ・コンピューティング・デバイス、インターネットブラウザ、および／またはサーバとユーザ・コンピューティング・デバイスとの間のネットワーク接続の特性を決定し、ビデオコンテンツのレンダリングを調整するために適切なアクションをとる。
【０１４４】
図１０は、スクリプトが、解釈されたとき、ユーザ・コンピューティング・デバイス、および／またはサーバとユーザ・コンピューティング・デバイスとの間のネットワーク接続の１つまたは複数の特性に基づいてビデオコンテンツのレンダリングを調整する、ビデオコンテンツをレンダリングするための方法４５０を示す。方法４５０、またはその一部分は、スクリプトによって直接実行されてもよい。方法４５０は、初期デバイス特性を照会することを含むブロック４５２で始まる。そのようなデバイス特性は、デバイスのハードウェアおよび／またはそのデバイス上で動作するソフトウェア（インターネットブラウザおよび／またはオペレーティングシステム・ソフトウェアを含む）の特性を含むことができる。デバイス特性の非限定的な例は、プロセッサ速度および／または処理能力、表示特性（たとえば、表示解像度、表示の向き、縦横比、および／または画面サイズなど）、専用ハードウェアがあること（たとえば、専用オーディオ・レンダリング・ハードウェアおよび／またはビデオ・レンダリング・ハードウェア）、インターネットブラウザ、またはスクリプトを解釈する他のアプリケーション・プログラムのソフトウェア特性（特定のオーディオ・フォーマットをネイティブにレンダリングする、および／または特定の画像ファイル・フォーマットをネイティブにレンダリングするためのインターネットブラウザの能力など）、デバイスのオペレーティングシステムのソフトウェア特性、および／またはファイル処理能力（デバイス、デバイスのオペレーティングシステム、および／またはデバイスのインターネットブラウザがビデオコンテンツの全体を単一のファイルとして対処することができるかどうか、あるいはビデオコンテンツを複数のより小さいファイルにパースしなければならないかどうかなど）などを含む。
【０１４５】
デバイス特性が決定された後で、スクリプトは、解釈されたとき、ブロック４５４において、ブロック４５２で得られたデバイス特性を使用し、特定のデバイスについてレンダリング特性を初期化する。ブロック４５４における特定のレンダリング特性を初期化することは、サーバからダウンロードするために適切な（１つまたは複数の）ファイルを選択することを含むことができる。これは、たとえば、特定のユーザ・コンピューティング・デバイスがより小さなファイルにパースされたビデオコンテンツを有する必要があると決定された場合、ユーザ・コンピューティング・デバイスまたはそのブラウザのネイティブ・オーディオ・レンダリング能力により、（１つまたは複数の）特定のビデオ・コンテンツ・ファイルの使用が示唆される場合、ユーザ・コンピューティング・デバイスまたはそのブラウザのネイティブ画像レンダリング能力により、（１つまたは複数の）特定のビデオ・コンテンツ・ファイルの使用が示唆される場合、ユーザ・デバイスのディスプレイの解像度および／または画面サイズにより、（１つまたは複数の）特定のビデオ・コンテンツ・ファイルの使用が示唆される場合、および／またはユーザ・コンピューティング・デバイスのプロセッサの知識により、ダウンサンプリングされた（１つまたは複数の）ビデオコンテンツを使用すべきであると示される場合などがあり得る。ブロック４５４における他のレンダリング特性を初期化することは、後続のレンダリングのために特定の情報を追跡することを含むことができる。これは、たとえば、画面サイズおよび／または表示の向き（縦横比）などレンダリング特性の場合があり得る。
【０１４６】
次いで、方法４５０は、先に述べた方法のいずれかによるレンダリング・プロセスを開始することを含むブロック４５６に進む。ブロック４５６では、スクリプトは、解釈されたとき、ブロック４５４の初期化されたレンダリング特性に基づいて（１つまたは複数の）適切なオーディオ・コンテンツ・ファイルを入手しようと試みることができる。それに加えて、または代替として、ブロック４５６では、スクリプトは、任意の入手された（１つまたは複数の）ビデオ・コンテンツ・ファイルのビデオコンテンツを、ブロック４５４の初期化されたレンダリング特性に基づいてレンダリングさせることになる。非限定的な例として、ユーザ・コンピューティングのディスプレイがある解像度または画面サイズを有する場合には、スクリプトは、ユーザ・コンピューティング・デバイスのディスプレイに最もよく合うように画像フレームを拡縮することになり、ビデオ・データが、ユーザ・コンピューティング・デバイスにて受信される前にダウンサンプリングされる場合には、スクリプトは、既知の画像フレーム間で補間することになり、および／またはビデオ・データが特定のフレームレートで受信されるが、ユーザ・コンピューティング・デバイスのプロセッサが画像フレームを十分速く復号および準備することができない場合には、スクリプトは、復号および準備するために画像フレームのサブセットを選択することによってユーザ・コンピューティング・デバイスにてビデオ・データを事実上ダウンサンプリングすることになり、選択された画像フレーム間で補間することになる、などがある。
【０１４７】
時々、スクリプトは、解釈されたとき、ブロック４５８において、継続中のデバイス特性を照会することになる。このブロック４５８の照会は、ブロック４５２の初期照会から何かが変化したどうかについてブロック４５８が問い合わせることができることを除いて、方法４５２の初期照会と同様のものであってもよい。非限定的な例として、潜在的な変化は、デバイス・ディスプレイの向き、および対応する、表示すべき画像フレームの縦横比の変化を含むことができる。状況によっては、ブロック５４８は、ブロック２３４（図４）におけるドロップ・ビデオ・アクションおよび／またはブロック２８６（図５）におけるドロップ・オーディオ・アクションから情報を獲得することを含むことができる。たとえば、ブロック４５８の照会によって、画像フレームの閾値数を超えて落とされたと判定された場合には、ユーザ・コンピューティング・デバイスのプロセッサの能力が完全なフレームレートのビデオ・データを処理するのに不十分であり、適切な（１つまたは複数の）ビデオ・コンテンツ・ファイルをおそらくはダウンサンプリングされた（１つまたは複数の）ファイルに変更すべきであるか、または完全なレートのビデオ・フレームの適切なサブセットを選択することによって、ビデオ・データをユーザ・コンピューティング・デバイスにて事実上ダウンサンプリングすべきであると結論づけることができる。
【０１４８】
また、時々、スクリプトは、解釈されたとき、ブロック４６０において、サーバとユーザ・コンピューティング・デバイスとの間の継続中のネットワーク特性を照会することになる。サーバとユーザ・コンピューティング・デバイスとの間の使用可能な帯域幅またはビットレートが低すぎ、ビデオコンテンツが、復号またはレンダリングされるように適時にユーザ・コンピューティング・デバイスに到着することを保証することができない場合には、ダウンサンプリングされたビデオ・データを有する（１つまたは複数の）ファイル、および／またはより低い解像度の（１つまたは複数の）ファイルなど、より低い品質の（１つまたは複数の）ビデオ・ファイルに切り替えることが望ましいものとなり得る。
【０１４９】
ブロック４６２は、ブロック４５８およびブロック４６０から得られた情報に基づいてレンダリング特性を更新することを含む。たとえば、最初の反復では、ブロック４６２は、ブロック４５８およびブロック４６０から得られた情報に基づいてブロック４５４の初期化されたレンダリング特性を更新することを含むことができる。後続の反復では、ブロック４６２は、以前のブロック４６２のレンダリング特性を更新することを含むことができる。次いで、方法４５０は、引き続きビデオコンテンツをレンダリングすることを含むブロック４６４に進む。ブロック４６４は、ブロック４６４がブロック４６２で更新されたレンダリング特性を利用することを除いて、上述のブロック４５６と同様のものであってもよい。上述のように、（ブロック４５８およびブロック４６０の照会に基づく）更新されたブロック４６２のレンダリング特性は、レンダリングするために得られた（１つまたは複数の）ファイルの変化（たとえば、より高い、またはより低い品質のビデオ・ファイル）、またはビデオコンテンツのレンダリング一般の変化（たとえば、表示の向きに対処するように拡縮すること）に通じる可能性がある。これらの変化は、ブロック４６４で実行されてもよい。
【０１５０】
次いで、方法４５０は、ビデオコンテンツのレンダリングが終わったかどうかについての問い合わせを含むブロック４６６に進む。終わった場合（ブロック４６６、「はい」分岐）には、方法４５０は終了する。さらに多くのビデオコンテンツをレンダリングすべき場合（ブロック４６６「いいえ」分岐）には、方法４５０は、ブロック４５８にループバックし、時々、デバイス特性を照会し、レンダリング特性を更新するプロセスを繰り返す。
【０１５１】
本発明の実施形態は様々な動作を含み、それらは本明細書に記載されている。別段指定されていない限り、これらの動作は、ハードウェア・コンポーネント、ソフトウェア、ファームウェア、またはそれらの組合せによって実施することができる。
【０１５２】
いくつかの実施形態は、マシン読取可能媒体上に記憶された命令を含むことができるコンピュータ・プログラム製品として実現されてもよい。これらの命令を使用し、記載の動作を実現するように汎用プロセッサまたは専用プロセッサをプログラムすることができる。マシン読取可能媒体は、マシン（たとえば、コンピュータ）によって読取り可能な形態（たとえば、ソフトウェア、処理アプリケーション）で情報を記憶するための任意の機構を含む。マシン読取可能媒体は、それだけには限らないが、磁気記憶媒体（たとえば、フロッピーディスケット）、光記憶媒体（たとえば、ＣＤ−ＲＯＭ）、光磁気記憶媒体、読出し専用メモリ（ＲＯＭ）、ランダムアクセス・メモリ（ＲＡＭ）、消去可能なプログラマブル・メモリ（たとえば、ＥＰＲＯＭおよび／またはＥＥＰＲＯＭ）、フラッシュ・メモリ、または電子命令を記憶するのに適した任意のタイプの媒体を含むことができる。
【０１５３】
さらに、いくつかの実施形態は、マシン読取可能媒体が複数のコンピュータ・システム上に記憶される、および／またはそれらによって実行される分散コンピューティング環境で実現されてもよい。さらに、コンピュータ・システム間で転送される情報は、それらのコンピュータ・システムを接続する通信媒体を挟んでプルまたはプッシュされてもよい。単一の一続きのプロセス・ステップとして示されている方法が、対応する１つまたは複数のコンピュータ・プロセッサ上で実行されるステップの１つまたは複数のサブセットを有してもよく、次いでこれらのプロセッサは、たとえばプロセス間通信を使用してコンピュータ・プロセッサの間で中間結果、または結果の入手可能性を通信する。データ値は、ＣＰＵに近接して常駐するキャッシュ・メモリ内に、またはメモリ管理ハードウェアを介してコンピュータの主メモリにアドレスすることによって、さらにはそのようなメモリ管理ハードウェアが、外部記憶デバイス上に記憶すべきデータをコンピュータの主メモリにロードさせることによって格納されてもよい。
【０１５４】
本発明の様々な実施形態を実現する際に使用されるコンピュータ処理コンポーネントは、マイクロプロセッサまたは中央処理装置、コントローラ、グラフィカル処理ユニット（ＧＰＵ）、セル・コンピュータなど、１つまたは複数の汎用処理デバイスを含む。あるいは、そのようなデジタル処理コンポーネントは、デジタル信号プロセッサ（ＤＳＰ）、特定用途向け集積回路（ＡＳＣＩ）、フィールド・プログラマブル・ゲート・アレイ（ＦＰＧＡ）など、１つまたは複数の専用処理デバイスを含むことができる。特定の実施形態では、たとえば、デジタル処理デバイスは、コア・ユニットと複数のマイクロエンジンとを含む複数のプロセッサを有するネットワーク・プロセッサであってもよい。さらに、デジタル処理デバイスは、（１つまたは複数の）汎用処理デバイスと（１つまたは複数の）専用処理デバイスの任意の組合せを含むことができる。
【０１５５】
本明細書には（１つまたは複数の）方法の動作が特定の順序で示され述べられているが、各方法の動作の順序は変えることができ、その結果、いくつかの動作は逆の順序で実行されてもよく、またはある動作が、少なくとも一部には他の動作と同時に実行されてもよい。他の実施形態では、異なる動作の命令または下位動作が、断続的なもの、および／または交互するようなものであってもよい。
【０１５６】
上記であるコンポーネント（たとえば、ソフトウェア・モジュール、プロセッサ、アッセンブリ、デバイス、回路など）に言及が及ぶ場合、別段示されていない限り、そのコンポーネントに対する言及（「手段」に対する言及を含む）は、そのコンポーネントの等価物として、本発明の示されている例示的な実施形態における機能を実現する、開示されている構造に対して構造的に等価でないコンポーネントを含めて、記載のコンポーネントの機能を実現する（すなわち、機能的に等価である）任意のコンポーネントを含むものと解釈すべきである。
【０１５７】
いくつかの例示的な態様および実施形態について上記で論じられているが、当業者なら、いくつかの修正、置換、追加、およびそれらのサブコンビネーションを理解するであろう。たとえば、
・  方法３００は、複数の方法がそれら自体の連続する反復を（たとえば、同じ反復間期間、または異なる反復間期間で）絶えずスケジューリングするように多インスタンス化されてもよい。
・  いくつかのユーザ・コンピューティング・デバイスは、複数および／または特定用途向けの画像／ビデオ・レンダリング・エンジンを有することが知られている。そのような画像／ビデオ・レンダリング・エンジンは、好適なハードウェアおよび／またはソフトウェアを含むことができる。非限定的な例として、ＡｐｐｌｅのｉＰｈｏｎｅ（登録商標）およびｉＰａｄ（登録商標）デバイスは、特定用途向けの３Ｄ画像／ビデオ・レンダリング・エンジンを含む。いくつかの実施形態は、ユーザ・コンピューティング・デバイスのインターネットブラウザをトリガし、そのような複数および／または特定用途向けのレンダリング・エンジンを活動化させることを含むことができる。たとえば、いくつかの実施形態は、ｉＰｈｏｎｅ（登録商標）およびｉＰａｄ（登録商標）デバイスのＳａｆａｒｉ（登録商標）インターネットブラウザを、そのデバイスの３Ｄレンダリング・エンジンを使用するようにトリガし、ビデオコンテンツが３Ｄビデオ・データを含まない可能性があっても、ビデオコンテンツをレンダリングする助けとすることを含むことができる。特定の非限定的な一実施形態では、ウェブページ内の以下のＣＳＳコードが、３Ｄレンダリング・エンジンを使用するようにＳａｆａｒｉ（登録商標）をトリガすることになる。
【数２】
2014531142.tif 000004
・  いくつかの実施形態では、インターネットブラウザは、特定のユーザ・コンピューティング・デバイス・プラットフォーム用にコンパイルされるアプリケーション・プログラムである。他の実施形態では、ブラウザ機能は、オペレーティングシステムの一部であり、または場合によっては、デバイス・ハードウェアに内蔵された機能である。
【０１５８】
したがって、以下の添付の特許請求の範囲、および以下導入される特許請求の範囲は、そのような修正、置換、追加、およびそれらのサブコンビネーションがそれらの真の精神および範囲内に入るので、それらすべてを含むように解釈されることが意図されている。
【図１】
2014531142.tif 000005
【図２Ａ】
2014531142.tif 000006
【図２Ｂ】
2014531142.tif 000007
【図３】
2014531142.tif 000008
【図４】
2014531142.tif 000009
【図５】
2014531142.tif 000010
【図６】
2014531142.tif 000011
【図７】
2014531142.tif 000012
【図８】
2014531142.tif 000013
【図９Ａ】
2014531142.tif 000014
【図９Ｂ】
2014531142.tif 000015
【図９Ｃ】
2014531142.tif 000016
【図１０】
2014531142.tif 000017
【国際調査報告】
2014531142.tif 000018
2014531142.tif 000019
2014531142.tif 000020
2014531142.tif 000021
2014531142.tif 000022
2014531142.tif 000023