(58)【調査した分野】(Int.Cl.,DB名)
前記入力映像チャンク(233)の残余部分を依然として受信している間に、前記入力映像チャンク(233)の受信された部分を入力映像サブチャンク(234)に分割するステップと、
前記入力映像チャンク(233)の前記残余部分を依然として受信している間に、少なくとも1つの入力映像サブチャンク(234)を前記1つ以上のスレーブトランスコーダ(220)に送るステップとをさらに備える、請求項1に記載の方法(600)。
各スレーブトランスコーダは、スレーブデコーダ(510)とスレーブエンコーダ(512)とを含み、前記スレーブエンコーダ(512)は、第1の入力映像サブチャンク(234)を符号化する一方、前記スレーブデコーダ(510)は、第2の入力映像サブチャンク(234)を復号する、請求項1に記載の方法(600)。
前記入力メディアストリーム(232)の前記映像部分(232′)の任意の残余部分を入力映像チャンク(233)に分割している間に、前記出力映像チャンク(236)を前記出力メディアストリーム(239)にアセンブルするステップをさらに備える、請求項1に記載の方法(600)。
トランスコーディングを停止させるように前記複数のトランスコーダ(220)の他のスレーブトランスコーダ(220)に命令した後、全ての前記スレーブトランスコーダ(220)を別の入力映像チャンク(233)の受信に利用可能であると特定するステップをさらに備える、請求項5に記載の方法(600)。
入力音声チャンク(237)および入力映像チャンク(233)の対応する各対は、前記入力メディアストリーム(232)内で同時に開始し、実質的に同一の時間の長さを有する、請求項7に記載の方法(600)。
前記出力映像チャンク(236)を前記出力メディアストリーム(239)にアセンブルするステップは、各出力音声チャンク(238)を対応する出力映像チャンク(236)と位置合わせするステップを備える、請求項9に記載の方法(600)。
各スレーブトランスコーダ(220)は、スレーブデコーダ(510)とスレーブエンコーダ(512)とを含み、前記スレーブエンコーダ(512)は、第1の入力映像サブチャンク(234)を符号化する一方、前記スレーブデコーダ(510)は、第2の入力映像サブチャンク(234)を復号する、請求項15に記載のトランスコーディングサーバ(200)。
前記処理装置(210)は、前記入力メディアストリーム(232)の前記映像部分(232′)の任意の残余部分を入力映像チャンク(233)に分割している間に、前記出力映像チャンク(236)を前記出力メディアストリーム(239)にアセンブルする、請求項15に記載のトランスコーディングサーバ(200)。
トランスコーディングを停止させるように前記複数のトランスコーダ(220)の他のスレーブトランスコーダ(220)に命令した後、前記処理装置(210)は、全ての前記スレーブトランスコーダ(220)を別の入力映像チャンク(233)の受信に利用可能であると特定する、請求項19に記載のトランスコーディングサーバ(200)。
入力音声チャンク(237)および入力映像チャンク(233)の対応する各対は、前記入力メディアストリーム(232)内で同時に開始し、実質的に同一の時間の長さを有する、請求項21に記載のトランスコーディングサーバ(200)。
前記処理装置(210)が前記出力映像チャンク(236)を前記出力メディアストリーム(239)にアセンブルすることは、各出力音声チャンク(238)を対応する出力映像チャンク(236)と位置合わせすることを含む、請求項23に記載のトランスコーディングサーバ(200)。
前記スレーブトランスコーダ(220)は、前記処理装置(210)と通信する1つ以上の他の処理装置(210)上で実行される、請求項15に記載のトランスコーディングサーバ(200)。
【発明の概要】
【課題を解決するための手段】
【0003】
概要
本開示の一局面は、方法を提供し、上記方法は、符号化パラメータの第1の組に従って符号化された入力メディアストリームを受信するステップを含む。また、上記方法は、上記入力メディアストリームの残余部分を受信している間に、上記入力メディアストリームの受信された部分の映像部分を入力映像チャンクに分割するステップを含む。上記入力メディアストリームの上記映像部分の各入力映像チャンクについて、上記方法は、上記入力映像チャンクを1つ以上のスレーブトランスコーダに割当てるステップと、上記入力映像チャンクを入力映像サブチャンクに分割するステップと、上記符号化パラメータの第1の組から符号化パラメータの第2の組にデータをトランスコードする上記1つ以上のスレーブトランスコーダの各々に各入力映像サブチャンクを別々に送るステップとをさらに含む。上記方法は、各入力映像サブチャンクを対応する出力映像サブチャンクにトランスコードするステップと、上記出力映像サブチャンクを、上記入力映像チャンクに対応する出力映像チャンクにアセンブルするステップとをさらに含む。また、上記方法は、上記出力映像チャンクを出力メディアストリームにアセンブルするステップを含む。
【0004】
本開示の実現例は、以下の特徴のうちの1つ以上を含み得る。いくつかの実現例では、上記方法は、上記入力映像チャンクの残余部分を依然として受信している間に、上記入力映像チャンクの受信された部分を入力映像サブチャンクに分割するステップを含む。また、上記方法は、上記入力映像チャンクの上記残余部分を依然として受信している間に、少なくとも1つの入力映像サブチャンクを上記1つ以上のスレーブトランスコーダに送るステップを含み得る。各スレーブトランスコーダは、スレーブデコーダとスレーブエンコーダとを含み得る。上記スレーブエンコーダは、第1の入力映像サブチャンクを符号化する一方、上記スレーブデコーダは、第2の入力映像サブチャンクを復号する。上記方法は、上記入力メディアストリームの上記映像部分の任意の残余部分を入力映像チャンクに分割している間に、上記出力映像チャンクを上記出力メディアストリームにアセンブルするステップを含み得る。
【0005】
いくつかの例では、上記方法は、上記入力映像チャンクを複数のスレーブトランスコーダに割当てるステップを含む。さらにまたは代替的に、上記複数のスレーブトランスコーダのうちの1つが上記入力映像チャンクのトランスコーディングを完了し得たときに、上記入力映像チャンクの上記入力映像サブチャンクのトランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令する。さらにまたは代替的に、上記方法は、トランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令した後、全ての上記スレーブトランスコーダを別の入力映像チャンクの受信に利用可能であると特定するステップを含み得る。
【0006】
いくつかの実現例では、上記方法は、上記入力メディアストリームを上記入力メディアストリームの上記映像部分および音声部分に多重分離するステップと、上記入力メディアストリームの上記音声部分を入力音声チャンクに分割するステップとを含む。各入力音声チャンクは、上記映像部分の上記入力映像チャンクのうちの1つにそれぞれ対応する。さらにまたは代替的に、入力音声チャンクおよび入力映像チャンクの対応する各対は、上記入力メディアストリーム内で同時に開始し得て、実質的に同様または同一の時間の長さを有し得る。
【0007】
各入力音声チャンクについて、上記方法は、上記入力音声チャンクを音声サンプルに復号するステップを含み得る。上記入力音声チャンク内の失われた音声パケットが検出されたときに、上記方法は、上記失われた音声パケットに対応する場所でサイレント音声サンプルを上記音声サンプルに挿入するステップと、上記音声サンプルを出力音声チャンクに符号化するステップとを含み得る。さらにまたは代替的に、上記方法は、各出力音声チャンクを対応する出力映像チャンクと位置合わせするステップを含む、上記出力映像チャンクを上記出力メディアストリームにアセンブルするステップを含み得る。
【0008】
いくつかの実現例では、上記方法は、利用可能なトランスコーダのキューから上記1つ以上のスレーブトランスコーダを検索するステップを含む。1つ以上のスレーブトランスコーダが割当てられた入力映像チャンクのトランスコーディングを完了したときに、上記方法は、上記1つ以上のトランスコーダを解放して上記トランスコーダのキューに戻すステップを含み得る。
【0009】
各入力映像チャンクについて、上記方法は、上記入力映像チャンクの直前の先行する入力映像チャンクの少なくとも1つの先行する入力映像サブチャンクを取得するステップを含み得る。上記方法は、上記入力映像チャンクの上記入力映像サブチャンクを送る前に、少なくとも1つの先行する入力映像サブチャンクを上記1つ以上のスレーブトランスコーダに送るステップを含み得る。上記方法は、上記出力メディアストリームを発行するステップと、上記出力メディアストリームをユーザ装置に送信するステップとをさらに含み得る。
【0010】
本開示の別の局面は、トランスコーディングサーバを提供し、上記トランスコーディングサーバは、非一時的なコンピュータ読取可能な媒体と、複数のスレーブトランスコーダと、処理装置とを含む。上記非一時的なコンピュータ読取可能な媒体は、コンピュータ読取可能な命令を格納する。上記複数のスレーブトランスコーダは、符号化パラメータの第1の組から符号化パラメータの第2の組にデータをトランスコードする。上記処理装置は、上記コンピュータ読取可能な媒体と通信し、上記コンピュータ読取可能な命令を実行する。上記コンピュータ読取可能な命令は、上記処理装置に、上記符号化パラメータの第1の組に従って符号化された入力メディアストリームを受信させる。また、上記コンピュータ読取可能な命令は、上記処理装置に、上記入力メディアストリームの残余部分を受信している間に、上記入力メディアストリームの受信された部分の映像部分を入力映像チャンクに分割させる。上記入力メディアストリームの上記映像部分の各入力映像チャンクについて、上記処理装置は、上記入力映像チャンクを1つ以上のスレーブトランスコーダに割当て、上記入力映像チャンクを入力映像サブチャンクに分割し、上記入力映像サブチャンクを出力映像サブチャンクにトランスコードする上記1つ以上のスレーブトランスコーダの各々に各入力映像サブチャンクを別々に送る。上記1つ以上のスレーブトランスコーダのうちの1つが上記入力映像チャンクの全ての上記入力映像サブチャンクを出力映像サブチャンクにトランスコードしたときに、上記スレーブトランスコーダは、上記出力映像サブチャンクを出力映像チャンクにアセンブルする。上記処理装置は、上記入力映像チャンクに対応する上記出力映像チャンクを上記1つのスレーブトランスコーダから受信し、上記出力映像チャンクを出力メディアストリームにアセンブルする。
【0011】
いくつかの実現例では、上記処理装置は、上記入力映像チャンクの残余部分を依然として受信している間に、上記入力映像チャンクの受信された部分を入力映像サブチャンクに分割する。上記処理装置はさらに、上記入力映像チャンクの上記残余部分を依然として受信している間に、少なくとも1つの入力映像サブチャンクを上記1つ以上のスレーブトランスコーダに送る。上記処理装置は、上記入力メディアストリームの上記映像部分の任意の残余部分を入力映像チャンクに分割している間に、上記出力映像チャンクを上記出力メディアストリームにアセンブルし得る。
【0012】
各スレーブトランスコーダは、スレーブデコーダとスレーブエンコーダとを含み得る。上記スレーブエンコーダは、第1の入力映像サブチャンクを符号化する一方、上記スレーブデコーダは、第2の入力映像サブチャンクを復号する。上記処理装置はさらに、上記入力映像チャンクを複数のスレーブトランスコーダに割当て得る。さらにまたは代替的に、上記複数のスレーブトランスコーダのうちの1つが上記入力映像チャンクのトランスコーディングを完了したときに、上記処理装置は、上記入力映像チャンクの上記入力映像サブチャンクのトランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令し得る。さらにまたは代替的に、トランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令した後、上記処理装置は、全ての上記スレーブトランスコーダを別の入力映像チャンクの受信に利用可能であると特定し得る。
【0013】
いくつかの例では、上記処理装置は、上記入力メディアストリームを上記入力メディアストリームの上記映像部分および音声部分に多重分離し、上記入力メディアストリームの上記音声部分を入力音声チャンクに分割する。各入力音声チャンクは、上記映像部分の上記入力映像チャンクのうちの1つにそれぞれ対応する。入力音声チャンクおよび入力映像チャンクの対応する各対は、上記入力メディアストリーム内で同時に開始し得て、実質的に同様または同一の時間の長さを有し得る。
【0014】
各入力音声チャンクについて、上記処理装置は、上記入力音声チャンクを音声サンプルに復号し得る。上記入力音声チャンク内の失われた音声パケットが検出されたときに、上記処理装置は、上記失われた音声パケットに対応する場所で1つ以上のサイレント音声サンプルを上記音声サンプルに挿入し得る。上記処理装置はさらに、上記音声サンプルを出力音声チャンクに符号化し得る。さらにまたは代替的に、上記サーバは、上記出力映像チャンクを上記出力メディアストリームにアセンブルし得て、各出力音声チャンクを対応する出力映像チャンクと位置合わせすることを含む。いくつかの例では、上記サーバは、複数の出力ストリームをアセンブルし、各出力ストリームは、出力映像チャンクまたは出力音声チャンクを別々に含むが、それら両方は含まない。
【0015】
いくつかの例では、上記処理装置は、利用可能なトランスコーダのキューから上記1つ以上のスレーブトランスコーダを検索する。上記1つ以上のスレーブトランスコーダが割当てられた入力映像チャンクのトランスコーディングを完了したときに、上記処理装置は、上記1つ以上のトランスコーダを解放して上記トランスコーダのキューに戻す。上記処理装置は、上記出力メディアストリームを発行し、上記出力メディアストリームをユーザ装置に送信し得る。上記処理装置は、上記スレーブトランスコーダを実行し得て、上記スレーブトランスコーダは、上記処理装置と通信する1つ以上の他の処理装置上で実行され得る。
【0016】
本開示の別の局面は、トランスコーディングサーバを提供し、上記トランスコーディングサーバは、非一時的なコンピュータ読取可能な媒体と、複数のスレーブトランスコーダと、処理装置とを含む。上記非一時的なコンピュータ読取可能な媒体は、コンピュータ読取可能な命令を格納する。上記複数のスレーブトランスコーダは、符号化パラメータの第1の組から符号化パラメータの第2の組にデータをトランスコードする。上記処理装置は、上記コンピュータ読取可能な媒体と通信し、上記コンピュータ読取可能な命令を実行する。上記コンピュータ読取可能な命令は、上記処理装置に、上記符号化パラメータの第1の組に従って符号化された入力メディアストリームを受信させる。また、上記コンピュータ読取可能な命令は、上記処理装置に、上記入力メディアストリームの残余部分を受信している間に、上記入力メディアストリームの受信された部分の映像部分を入力映像チャンクに分割させる。上記入力メディアストリームの上記映像部分の各入力映像チャンクについて、上記処理装置は、上記入力映像チャンクを1つ以上のスレーブトランスコーダに割当て、上記入力映像チャンクを入力映像サブチャンクに分割し、各入力映像サブチャンクを上記1つ以上のスレーブトランスコーダの各々に別々に送る。また、上記処理装置は、上記1つ以上のスレーブトランスコーダから出力映像サブチャンクを受信し、上記出力映像サブチャンクを、上記入力映像チャンクに対応する出力映像チャンクにアセンブルする。各出力映像サブチャンクは、上記入力映像サブチャンクのうちの1つにそれぞれ対応する。上記処理装置はさらに、上記出力映像チャンクを出力メディアストリームにアセンブルすることを含む。
【0017】
いくつかの実現例では、上記処理装置は、上記入力映像チャンクの残余部分を依然として受信している間に、上記入力映像チャンクの受信された部分を入力映像サブチャンクに分割する。上記処理装置はさらに、上記入力映像チャンクの上記残余部分を依然として受信している間に、少なくとも1つの入力映像サブチャンクを上記1つ以上のスレーブトランスコーダに送る。上記処理装置は、上記入力メディアストリームの上記映像部分の任意の残余部分を入力映像チャンクに分割している間に、上記出力映像チャンクを上記出力メディアストリームにアセンブルし得る。
【0018】
各スレーブトランスコーダは、スレーブデコーダとスレーブエンコーダとを含み得る。上記スレーブエンコーダは、第1の入力映像サブチャンクを符号化する一方、上記スレーブデコーダは、第2の入力映像サブチャンクを復号する。上記処理装置はさらに、上記入力映像チャンクを複数のスレーブトランスコーダに割当て得る。さらにまたは代替的に、上記複数のスレーブトランスコーダのうちの1つが上記入力映像チャンクのトランスコーディングを完了したときに、上記処理装置は、上記入力映像チャンクの上記入力映像サブチャンクのトランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令し得る。さらにまたは代替的に、トランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令した後、上記処理装置は、全ての上記スレーブトランスコーダを別の入力映像チャンクの受信に利用可能であると特定し得る。
【0019】
いくつかの例では、上記処理装置は、上記入力メディアストリームを上記入力メディアストリームの上記映像部分および音声部分に多重分離し、上記入力メディアストリームの上記音声部分を入力音声チャンクに分割する。各入力音声チャンクは、上記映像部分の上記入力映像チャンクのうちの1つにそれぞれ対応する。入力音声チャンクおよび入力映像チャンクの対応する各対は、上記入力メディアストリーム内で同時に開始し得て、実質的に同様または同一の時間の長さを有し得る。
【0020】
各入力音声チャンクについて、上記処理装置は、上記入力音声チャンクを音声サンプルに復号し得る。上記入力音声チャンク内の失われた音声パケットが検出されたときに、上記処理装置は、上記失われた音声パケットに対応する場所でサイレント音声サンプルを上記音声サンプルに挿入し得る。上記処理装置はさらに、上記音声サンプルを出力音声チャンクに符号化し得る。さらにまたは代替的に、上記サーバは、上記出力映像チャンクを上記出力メディアストリームにアセンブルし得て、各出力音声チャンクを対応する出力映像チャンクと位置合わせすることを含む。
【0021】
いくつかの例では、上記処理装置は、利用可能なトランスコーダのキューから上記1つ以上のスレーブトランスコーダを検索する。上記1つ以上のスレーブトランスコーダが割当てられた入力映像チャンクのトランスコーディングを完了したときに、上記処理装置は、上記1つ以上のトランスコーダを解放して上記トランスコーダのキューに戻す。上記処理装置は、上記出力メディアストリームを発行し、上記出力メディアストリームをユーザ装置に送信し得る。上記処理装置は、上記スレーブトランスコーダを実行し得て、上記スレーブトランスコーダは、上記処理装置と通信する1つ以上の他の処理装置上で実行され得る。
【0022】
本開示の1つ以上の実現例の詳細が、添付の図面および以下の説明に記載されている。他の局面、特徴および利点は、明細書および図面、ならびに特許請求の範囲から明らかになるであろう。
【0023】
さまざまな図面中の同様の参照符号は、同様の要素を示す。
【発明を実施するための形態】
【0025】
詳細な説明
図1は、ユーザ装置100にメディアストリームを配信するための例示的なシステム10を示す。いくつかの実現例では、トランスコーディングサーバ200は、コンテンツプロバイダ120から入力メディアストリーム232を受信する。入力メディアストリーム232は、メディアコンテンツを含み、符号化パラメータの第1の組(例えば1080p MP4符号化)に従って符号化される。トランスコーディングサーバ200は、任意の好適なソースから入力メディアストリーム232を受信することができ、当該任意の好適なソースは、ネットワーク110を介した人工衛星120Aおよび/またはコンテンツサーバ120Bからの送信によるものを含む。いくつかの例では、入力メディアストリーム232は、ライブテレビジョンストリーム、例えば1つ以上のユーザ装置100に送信されるライブのテレビ放送である。さらにまたは代替的に、入力メディアストリーム232は、ユーザ装置から要求される要求されたメディアコンテンツ(例えばビデオ・オン・デマンドサービス)である。
【0026】
トランスコーディングサーバ200は、入力メディアストリーム232を、パラメータの第2の組(例えば720p MP4符号化)に従って符号化された出力メディアストリーム239にトランスコードする。トランスコーディングサーバ200(または別のサーバ)は、出力メディアストリーム239をユーザ装置100に送信し得る。ユーザ装置の例としては、タブレットコンピューティング装置100A、スマートフォン100B、パーソナルコンピューティング装置100Cおよびセットトップボックス100Dが挙げられるが、これらに限定されるものではない。ユーザ装置100は、1つ以上のユーザインターフェース(例えばディスプレイ装置および/またはスピーカ)を介して出力メディアストリーム239を再生し得る。入力または出力メディアストリーム232,239は、映像部分232′および/または音声部分232″を含み得る。ユーザ装置100は、任意の好適な態様で出力メディアストリーム239を要求し得る。例えば、スマートフォンまたはタブレットタイプのユーザ装置100の場合、ユーザは、ユーザ装置100上の専用のアプリケーションにアクセスし得る。当該アプリケーションにおいて、ユーザは、メディアストリーム(例えばチャンネルまたは映像)を選択することができる。ユーザ装置100は、選択されたコンテンツを要求する要求をトランスコーディングサーバ200(またはそれに関連付けられるサーバ)に送信する。当該要求に応答して、トランスコーディングサーバ200(または関連のサーバ)は、出力メディアストリーム239をユーザ装置100に流すことができる。出力メディアストリーム239は、ユーザ装置100に適したパラメータで符号化され得る。
【0027】
動作時、トランスコーディングサーバ200は、入力メディアストリーム232を映像部分232′および音声部分232″に多重分離する(これは、メディアストリームが音声部分と映像部分とを含んでいるときである)。トランスコーディングサーバ200は、入力メディアストリーム232の映像部分232′を複数の入力映像チャンク233に分割し、各々の入力映像チャンク233を複数の入力映像サブチャンク234に分割する。入力映像チャンク233は、入力メディアストリーム232の映像データのセグメントである。入力映像サブチャンク234は、入力映像チャンク233のセグメントである。いくつかの実現例では、入力映像チャンク233の各々は、同じサイズのセグメント(例えば、5ミリ秒)に分割される。同様に、入力映像サブチャンク234の各々は、同じサイズのサブセグメント(例えば、.5ミリ秒)に分割される。したがって、入力映像チャンク233の各々は、同じ数の入力映像サブチャンク234を含んでいる。明瞭化するために、トランスコーディングサーバ200によってまだトランスコードされていない映像チャンク233および映像サブチャンク234を、入力映像チャンク233および入力映像サブチャンク234と称する。
【0028】
トランスコーディングサーバ200は、入力メディアストリーム232の各入力映像チャンク233を1つ以上の利用可能なスレーブトランスコーダ220に割当てる。トランスコーディングサーバ200は、それぞれの映像チャンク233の映像サブチャンク234を、それぞれの映像チャンク233が割当てられた1つ以上のスレーブトランスコーダ220に送る。1つ以上のスレーブトランスコーダ220は、入力映像サブチャンク234の各々を出力映像サブチャンク235にトランスコードする。いくつかの実現例では、1つ以上のスレーブトランスコーダ220は、出力映像サブチャンク235を用いて、それぞれの入力映像チャンク233に対応する出力映像チャンク236をアセンブルする。スレーブトランスコーダ220は、出力映像チャンク236を返し得る。いくつかの実現例では、スレーブトランスコーダ220は、個々の出力映像サブチャンク235を出力し得て、当該個々の出力映像サブチャンク235は、後に出力映像チャンク236にアセンブルされる。スレーブトランスコーダ220は、トランスコーディングサーバ200の一部として実現されてもよく、またはトランスコーディングサーバ200の外側にあってもよい。
【0029】
いくつかの実現例では、トランスコーディングサーバ200は、各々の入力映像チャンク233を複数のスレーブトランスコーダ220(例えば3個のスレーブトランスコーダ220)に割当てる。次いで、トランスコーディングサーバ200は、入力映像チャンク233の入力映像サブチャンク234を、割当てられたスレーブトランスコーダ220に送る。割当てられたスレーブトランスコーダ220のうちの1つが出力映像チャンク236への入力映像チャンク233のトランスコーディングを完了させるまで、割当てられたスレーブトランスコーダ220は、入力映像サブチャンク234をトランスコードする。一旦完了すると、トランスコーディングサーバ200は、他のスレーブトランスコーダ220を停止させ得る。トランスコーディングサーバ200は、全ての割当てられたスレーブトランスコーダ220の状態を利用可能な状態に変更し得る。
【0030】
入力メディアストリーム232が音声部分232″を含んでいるシナリオでは、トランスコーディングサーバ200は、音声部分232″をトランスコードし得る。いくつかの実現例では、トランスコーディングサーバ200は、音声部分232″を一連の入力音声チャンク237に分割し得る。トランスコーディングサーバ200は、入力音声チャンク237を出力音声チャンク238にトランスコードする。いくつかの実現例では、入力音声チャンク237は、入力音声サブチャンク(図示せず)に分割され、当該入力音声サブチャンクは、出力音声サブチャンク(図示せず)にトランスコードされる。出力音声サブチャンクは、出力音声チャンク238にアセンブルされる。
【0031】
トランスコーディングサーバ200は、出力映像チャンク236および出力音声チャンク238に基づいて出力メディアストリーム239をアセンブルし得る。トランスコーディングサーバ200(またはトランスコーディングサーバ200に関連付けられる別のサーバ)は、ネットワーク110を介して出力メディアストリームを1つ以上のユーザ装置100に配信し得る。
【0032】
図2Aおよび
図2Bは、トランスコーディングサーバ200の一例を示す。
図2Aは、トランスコーディングサーバ200の構成要素を示す。
図2Bは、トランスコーディングサーバ200の例示的なデータフローを示す。トランスコーディングサーバ200は、処理装置210と、メモリ装置230と、記憶装置240と、ネットワークインターフェース装置250とを含み得る。トランスコーディングサーバ200の構成要素は、1つ以上のバスおよび/またはネットワーク110によって接続され得る。トランスコーディングサーバ200は単一の場所における装置として示されているが、トランスコーディングサーバ200は、分散した態様で実現されてもよく、そのため、構成要素は、異なる物理的場所における複数の装置として実現されてもよい。このようなシナリオでは、構成要素は、ネットワーク110(例えばインターネットおよび/または1つ以上のイントラネット)を介して通信し得る。
【0033】
処理装置210は、コンピュータ読取可能な命令(例えば実行可能なコンピュータコード)を実行する1つ以上の物理的プロセッサを含んでいる。処理装置210が2つ以上のプロセッサを含んでいる実現例では、2つ以上のプロセッサは、個々の態様で動作してもよく、または分散した態様で動作してもよい。処理装置210は、ストリーミングエージェント212、サブチャンクモジュール214、リソースマネージャ216、ライブチャンクマネージャ218、および複数のスレーブトランスコーダ220を実行し得て、これらは全てコンピュータ読取可能な命令として実現され得る。上記の構成要素は、集合的にトランスコーディングパイプラインを形成する。いくつかの実現例では、実行される構成要素のうちのいくつかは、異なる物理的装置において実現される。例えば、ライブチャンクマネージャ218およびストリーミングエージェント212は、第1の場所/装置において実行されてもよく、サブチャンクモジュール214、リソースマネージャおよびスレーブトランスコーダ220は、第2の場所/装置において実行されてもよい。さらに、スレーブトランスコーダ220は、処理装置210と通信する1つ以上の他の処理装置210上で実行されてもよい。
【0034】
メモリ装置230は、1つ以上の揮発性の非一時的なコンピュータ読取可能な媒体(例えばRAMおよび/またはROM)を含んでいる。メモリ装置230は、入力メディアストリーム232の部分および出力メディアストリーム239の部分を格納することができる。さらに、メモリ装置230は、上記のコンピュータ読取可能な命令を格納することができる。
【0035】
記憶装置240は、1つ以上の不揮発性の非一時的なコンピュータ読取可能な媒体(例えばフラッシュディスク、HDDなど)を含んでいる。記憶装置240は、入力映像チャンク233およびその対応するサブチャンク234、出力映像チャンク236およびその対応するサブチャンク235、入力音声チャンク237およびその対応するサブチャンク、ならびに、出力音声チャンク239およびその対応するサブチャンクを含む任意の好適なデータを格納することができる。さらに、記憶装置240は、音声および映像データに対応するメタデータを格納することができる。
【0036】
ネットワークインターフェース装置250は、ネットワーク110からデータを受信し、ネットワーク110にデータを送信する。ネットワークインターフェース装置250は、ネットワーク110と通信する1つ以上の装置を含み得る。ネットワークインターフェース装置250は、有線および/または無線通信を実行し得る。
【0037】
ストリーミングエージェント212は、トランスコーディングパイプラインのエントリポイントである。ストリーミングエージェント212は、さまざまなコンテンツソース120から入力メディアストリーム232を受信する。個々の入力メディアストリーム232は、一連のデータパケットとして、またはアナログ信号として受信され得る。デジタル入力メディアストリーム232の場合には、入力メディアストリームの各パケットは、音声データおよび/または映像データ、ならびに入力メディアストリーム232に関するメタデータを含み得る。入力メディアストリーム232に関するメタデータの例としては、ストリームの名称(例えばNBC(登録商標)から受信されるライブストリームのNBCUHD)、データパケットに含まれるデータのタイムスタンプ、入力メディアストリーム232の符号化パラメータ(例えばH264_1080p)が挙げられるが、これらに限定されるものではない。ストリーミングエージェント212は、入力メディアストリーム232をメモリ装置230に格納することができ、および/または、入力メディアストリーム232をサブチャンクモジュール214に提供することができる。入力メディアストリーム232がアナログ信号であるシナリオでは、ストリーミングエージェント212は、アナログ入力メディアストリーム232をデジタル入力メディアストリーム232に変換するアナログデジタル変換器を含み得る。
【0038】
サブチャンクモジュール214は、ストリーミングエージェント212および/またはメモリ装置230から入力メディアストリーム232を取得する。サブチャンクモジュール214は、入力メディアストリーム232の映像部分232′および音声部分232″を取得するために入力メディアストリーム232を多重分離する。サブチャンクモジュール214は、入力メディアストリーム232の映像部分232′を一連の映像チャンク233に分割し、各映像チャンク233を一連の映像サブチャンク234に分割する。サブチャンクモジュール214は、映像サブチャンク234および任意に映像チャンク233をリソースマネージャ216に提供する。
【0039】
サブチャンクモジュール214は、入力メディアストリーム232の音声部分232″をトランスコードするようにさらに構成され得る。サブチャンクモジュール214は、トランスコードされた音声部分232″を入力音声チャンク237に分割する。サブチャンクモジュール214は、入力音声チャンク237を出力音声チャンク238にトランスコードする。出力音声チャンク238は、出力メディアストリーム239をアセンブルするために使用され、また、格納およびデバッギングの目的でリソースマネージャ216に通信され得る。
【0040】
リソースマネージャ216は、各入力映像チャンク233の入力映像サブチャンク234を受信する。各々の入力映像チャンク233について、リソースマネージャ216は、入力映像チャンク233を1つ以上のスレーブトランスコーダ220に割当てる。リソースマネージャ216が新たな映像チャンク233の映像サブチャンク234を受信し始めたときに、リソースマネージャ216は、当該新たな映像チャンク233をm個のスレーブトランスコーダ(mは1以上)に割当てる。いくつかの実現例では、利用可能なスレーブトランスコーダ220は、先入れ先出し(first-in-first-out:FIFO)キュー220′において待機する。リソースマネージャ216は、キュー220′の順序付けに基づいてm個のスレーブトランスコーダ220を選択する。
【0041】
mが1よりも大きい実現例では、リソースマネージャ216は、新たな映像チャンク233の各映像サブチャンク234をm個のスレーブトランスコーダの各々に送る。スレーブトランスコーダ220は、出力映像チャンク236をリソースマネージャ216に返す。m個のトランスコーダ220のうちの1つが映像チャンク233全体のトランスコーディングを終了すると、リソースマネージャ216は、他のm−1個のスレーブトランスコーダ220を停止させ得る。スレーブトランスコーダ220が入力映像チャンク233の入力映像サブチャンク234を全てトランスコードし、対応する出力映像チャンク236をリソースマネージャ216に返すと、スレーブトランスコーダ220は、映像チャンク233全体を終了する。一旦リソースマネージャがm−1個のスレーブトランスコーダを停止させると、m個のスレーブトランスコーダ220の状態は、利用可能な状態に変更され、m個のスレーブトランスコーダ220は、キュー220′に戻る。このようにして、映像チャンク233のトランスコーディングは、スローなスレーブトランスコーダ220によって遅延される可能性が低い。さらに、これらの実現例は、m個のスレーブトランスコーダ220のうちの1つ以上が故障した場合に冗長性を提供する。さらに、入力映像チャンク233をトランスコードできない可能性が低い。
【0042】
いくつかの実現例では、リソースマネージャ216は、出力映像チャンク236をサブチャンクモジュール214に返す。また、いくつかの実現例では、リソースマネージャ216は、その後の分析および/またはデバッギングの目的で出力映像サブチャンク235および出力映像チャンク236を記憶装置240に書込む。
【0043】
サブチャンクモジュール214は、出力映像チャンク236および出力音声チャンク238に基づいて出力メディアストリーム239をアセンブルする。サブチャンクモジュール214は、1つ以上のプロトコルに従って出力メディアストリーム239をアセンブルし得る。例えば、サブチャンクモジュール214は、HTTPベースのMPEGダイナミック・アダプティブ・ストリーミング(Dynamic Adaptive Streaming over HTTP:DASH)プロトコルおよび/またはアップルHTTPライブストリーミング(HTTP Live Streaming:HLS)プロトコルに従って出力メディアストリーム239を生成し得る。出力映像チャンク236および対応するトランスコードされた音声チャンク238が利用可能になったときに、サブチャンクモジュール214は、出力メディアストリーム239を生成し得る。サブチャンクモジュール214は、出力メディアストリーム239をライブチャンクマネージャ218に発行する。
【0044】
ライブチャンクマネージャ218は、トランスコーディングパイプラインのエグジットポイントである。出力メディアストリーム239の部分がサブチャンクモジュール214によって発行されたときに、ライブチャンクマネージャ218は、当該部分を受信する。ライブチャンクマネージャ218は、出力メディアストリーム239を1つ以上のユーザ装置100に配信し得る。ライブチャンクマネージャ218は、特定のメディアストリーム239のための要求を受信し、それにしたがって、要求を行っているユーザ装置100に出力メディアストリーム239を供給する。
【0045】
図3は、例示的なサブチャンクモジュール214を示す。いくつかの実現例では、サブチャンクモジュール214は、異なる符号化標準に従って符号化された出力メディアストリーム232を生成するように構成されている。示されている例では、例示的なサブチャンクモジュール214は、HTTPベースのMPEGダイナミック・アダプティブ・ストリーミング(DASH)またはアップルHTTPライブストリーミング(HLS)に従って符号化された出力メディアストリーム232を生成し得る。さらに、示されている例では、サブチャンクモジュール214は、デマルチプレクサ310と、チャンカ312と、音声デコーダ314と、音声エンコーダ316と、MPEGマルチプレクサ318と、HLSセグメンタ320と、パブリッシャ322と、ダッシュセグメンタ324と、サブチャンクマネージャ326とを含み得る。
【0046】
動作時、デマルチプレクサ310は、入力メディアストリーム232を受信し、入力メディアストリーム232を映像部分232′および音声部分232″に多重分離する。いくつかの実現例では、デマルチプレクサ310は、入力メディアストリーム232を別々の音声部分232″および映像部分232′に多重分離するために、既存のライブラリ(例えばFfmpegサードパーティライブラリ)を呼出す。デマルチプレクサ310は、音声部分232″および映像部分232′を一連のデータパケットとして出力する。代替的に、デマルチプレクサ310は、処理装置210と通信するハードウェアコンポーネントであってもよい。
【0047】
チャンカ312は、入力メディアストリーム232の音声部分232″および映像部分232′を受信し、それぞれの部分を音声チャンク237および映像チャンク233に分割する。いくつかの実現例では、チャンカ312は、時間の長さ(例えば5秒)が実質的に同様または同等の入力映像チャンク233および入力音声チャンク237を出力する。さらに、各々の入力映像チャンク233は、同一の相対的時刻において開始および終了する対応する入力音声チャンク237を有し得る。例えば、入力映像チャンク233が、.15秒のタイムスタンプで開始する場合には、チャンカ312は、やはり、.15秒のタイムスタンプで開始する入力音声チャンク237を分割する。チャンカ312は、入力メディアストリーム232の他の入力映像チャンク233から入力映像チャンク233を識別するチャンク識別子(「チャンクID」)を各入力映像チャンク233に割当て得る。同様に、チャンカ312は、チャンク識別子を各入力音声チャンク237に割当て得る。いくつかの実現例では、対応する音声チャンク237および映像チャンク233は、同一のまたは対応するチャンク識別子が割当てられ得る。さらに、入力映像チャンク233および音声チャンク237は、チャンクタイプ(例えば音声または映像)によってタグ付けされ得る。
【0048】
各々の入力映像チャンク233について、チャンカ312は、入力映像チャンク233を一連の入力映像サブチャンク234に分割し得る。チャンカ312は、入力映像チャンク233の他の入力映像サブチャンク234から入力映像サブチャンク234を識別するサブチャンク識別子(「サブチャンクID」)を各入力映像サブチャンク234に割当て得る。チャンカ312は、入力映像サブチャンク234を同等の時間区分に分割し、そのため、各々の入力映像チャンク233は、実質的に同様または同一の時間の長さを有する同一の数の入力映像サブチャンク234を有する。このようにして、入力メディアストリーム232の映像部分232′は、一連の映像チャンク233および映像サブチャンク234に編成される。単一の映像チャンク233は、映像サブチャンク234の順序付きリストを含んでいる。いくつかの実現例では、サブチャンク234は、それらのサブチャンクID(例えばタイムスタンプ)によって順序付けられ、チャンクIDによって一意に識別される。入力映像サブチャンク234の各々は、入力映像サブチャンク234が属している入力映像チャンク233およびサブチャンク234のタイプ(例えば映像)を識別する識別子をさらに含み得る。
【0049】
いくつかの実現例では、チャンカ312は、各入力音声チャンク237を一連の入力音声サブチャンクに分割し得る。これらの実現例では、チャンカ312は、サブチャンクIDを各音声サブチャンクに割当て得る。入力音声サブチャンクの各々は、入力音声サブチャンクが属している入力音声チャンク237およびサブチャンクのタイプ(例えば音声)を識別する識別子をさらに含み得る。
【0050】
出力映像チャンク236、出力音声チャンク238、出力映像サブチャンク235および出力音声サブチャンクは、入力対応物と同様のフィールドを含み得る。例えば、出力映像および音声チャンク236,238は、チャンクのタイプを示し得る。同様に、出力映像サブチャンク235および出力音声サブチャンクは、サブチャンクが属しているチャンクを識別する識別子を含み得る。
【0051】
チャンカ312は、失われた映像パケットについて入力メディアストリーム232の映像部分232′を分析するようにさらに構成され得る。これらの実現例では、入力映像チャンク233における1つ以上の映像パケットが失われるかまたは損傷を受けると、チャンカ312は、入力映像チャンク233に、損傷を受けたというフラグを立て得る。動作時、チャンカ312は、ストリームにおける不連続性について入力ストリームの入ってくる映像部分232′をモニタリングする。当該不連続性は、単一の入力映像チャンク233内で、または2つの隣接する入力映像チャンク233の境界をまたいで生じ得る。いずれのシナリオでも、入力映像チャンクが不連続性を含んでいる場合には、チャンカ312は、サブチャンクフラグフィールドに印を付ける(例えばサブチャンクフラグフィールドに「BaD」と印を付ける)ことによって、入力映像チャンク233にローカルに、損傷を受けたというラベルを付ける。いくつかの実現例では、チャンカ312は、同様に、入力映像チャンク233における全ての後続のサブチャンク234に、損傷を受けたという印を付ける。これらのサブチャンク234は、後にリソースマネージャ216に書込まれ、リソースマネージャ216は、サブチャンク234をスレーブトランスコーダ220に提供する。スレーブトランスコーダ220が、損傷を受けたという印を付けられた入力映像サブチャンク234を処理するとき、スレーブトランスコーダ220は、そのように印を付けられた入力映像チャンク233の最後のサブチャンクに達するまで、損傷を受けたサブチャンク234を読取り続ける。この時点で、スレーブトランスコーダ220は、予めロードされたキー/同期フレームを用いて、(フラグが立てられた出力映像サブチャンク235からなる)新たな出力映像チャンク236を生成し、出力映像チャンク236にそのように印を付け、フラグが立てられた出力映像チャンク236をリソースマネージャ216に書込む。いくつかの実現例では、フラグが立てられた出力映像チャンク236は、繰返される多数の同一の、固定された、予めロードされたキー/同期フレームからなっている。出力映像チャンク236は、「BaD」と印を付けられた単一の出力映像サブチャンク235を含み得る。
【0052】
音声デコーダ314は、入力メディアストリーム232の音声部分232″の入力音声チャンク237を受信および復号する。いくつかの実現例では、音声デコーダ314は、音声チャンクをパルス符号変調(pulse-code modulation:「PCM」)サンプルに復号する。音声デコーダ314は、音声チャンク237において失われた音声パケットを検出するように構成され得る。音声デコーダ314が失われた音声パケットを検出する場合、音声デコーダ314は、サイレント音声PCMサンプルを音声チャンク237のPCMサンプルに挿入する。
【0053】
音声エンコーダ316は、一連のPCMサンプルを受信し、PCMサンプルを出力音声チャンク238に符号化する。音声エンコーダ316は、PCMサンプルを任意の好適なフォーマット(例えばAAC)に符号化する。エンコーダ316は、チャンクIDを出力音声チャンク238に割当て得て、チャンクIDは、出力音声チャンク238を生成するために使用される入力音声チャンク237のチャンクIDと同一であるか、またはそれに対応する。
【0054】
サブチャンクマネージャ326は、サブチャンクモジュール214とリソースマネージャ216との間のインターフェースである。サブチャンクマネージャ326は、チャンカ312から映像チャンク233およびサブチャンク234を受信し、入力映像チャンク233およびサブチャンク234をリソースマネージャ216に書込む。いくつかの実現例では、チャンカ312がデマルチプレクサ310からそれぞれの入力チャンク233,237の後続の音声および映像部分を受信している間に、サブチャンクマネージャ326は、入力映像サブチャンク234をリソースマネージャ216に書込み得る。このようにして、同一の入力映像チャンク233の後続の映像サブチャンク234がチャンカ312、デマルチプレクサ310、またはいくつかのシナリオではストリーミングエージェント212によって受信される前に、サブチャンクマネージャ326は、以前の映像サブチャンク234をリソースマネージャ216に通信する。これらの実現例では、メディアストリームの待ち時間を減少させることができる。なぜなら、トランスコーディングサーバ200が入力映像チャンク233全体を受信する前に、チャンク233のトランスコーディングを開始することができるからである。いくつかの実現例では、サブチャンクマネージャ326は、出力音声チャンク238および/または出力音声サブチャンクをリソースマネージャ216に書込むようにさらに構成され得る。
【0055】
サブチャンクマネージャ326は、リソースマネージャ216から出力映像チャンク236を受信する。出力映像チャンク236がリソースマネージャ216に書込まれたときに、リソースマネージャ216は、出力映像チャンク236をサブチャンクマネージャ326に書込み得る。サブチャンクマネージャ326は、出力メディアストリーム239の送信のためのフォーマットに応じて、受信された出力映像チャンク236をMPEGマルチプレクサ318および/またはダッシュセグメンタ324に提供し得る。例えば、出力メディアストリーム239がHLSストリームとして送信される場合には、サブチャンクマネージャ326は、受信された出力映像チャンク236および対応する出力音声チャンク238をMPEGマルチプレクサ318に提供する。出力メディアストリーム239がDASHストリームとして送信される場合には、サブチャンクマネージャ326は、受信された出力映像チャンク236および対応する出力音声チャンク238または音声サブチャンクをダッシュセグメンタ324に提供する。サブチャンクマネージャ326は、それぞれのチャンク識別子またはそれぞれのタイムスタンプに基づいて、対応する出力音声チャンク238および出力映像チャンク236を識別し得る。いくつかの実現例では、チャンカ312およびリソースマネージャ216のうちの1つ以上が、サブチャンクマネージャ326の機能のうちのいくつかまたは全てを実行してもよい。
【0056】
出力メディアストリーム239がHLSストリームである場合、MPEGマルチプレクサ318は、出力メディアストリーム239を取得するために、出力音声チャンク238および対応する出力映像チャンク236を好適なMPEGフォーマット(例えばMPEG−2TS)に多重化する。HLSセグメンタ320は、出力メディアストリーム239をMPEG−2トランスポートストリームとして受信し、出力メディアストリーム239を一連の同じ長さのファイルとして出力する。HLSセグメンタ320は、セグメント化された出力メディアストリーム239をパブリッシャ322に出力する。パブリッシャ322は、セグメント化された出力メディアストリーム239をライブチャンクマネージャ218に発行する。パブリッシャ322は、出力メディアストリーム239のセグメントを受信された通りに発行する。このようにして、ライブチャンクマネージャ218は、リアルタイムで、またはリアルタイムに近い状態で、出力メディアストリーム239を配信することができる。
【0057】
出力メディアストリーム239がDASHストリームである場合、出力音声チャンク238および対応する出力映像チャンク236は、多重化される必要はない。したがって、出力音声チャンク238および対応する出力映像チャンク236は、ダッシュセグメンタ324に通信される。ダッシュセグメンタ324は、出力音声チャンク238および対応する出力映像チャンク236を受信し、出力メディアストリーム239を一連の小さなHTTPファイルセグメントとして生成する。ダッシュセグメンタ324は、出力メディアストリーム239をパブリッシャ322に書込む。パブリッシャ322は、出力メディアストリーム239のセグメントを受信された通りに発行する。
【0058】
図3の例示的なサブチャンクモジュール214は、DASHメディアストリームおよびHLSメディアストリームを提供するように構成されている。しかし、サブチャンクモジュール214は、今では公知のまたは後に開発される他の好適なタイプのメディアストリームを出力するように適合されてもよい。サブチャンクモジュール214は、一例として設けられており、サブチャンクモジュール214の変形例は、本開示の範囲内である。サブチャンクモジュール214は、
図3に図示されていない他の構成要素を含んでいてもよい。例えば、サブチャンクモジュール214は、出力メディアストリーム239を暗号化する1つ以上の暗号化モジュールを含んでいてもよい。
【0059】
図4は、ジョブアロケータ410とデータマネージャ412とを含む例示的なリソースマネージャ216を示す。ジョブアロケータ410は、トランスコーディングジョブ414を受信する。トランスコーディングジョブ414は、入力メディアストリーム232の識別子(例えばチャネル識別子またはコンテンツファイル識別子)と、出力メディアストリーム239のための符号化パラメータの組とを含んでいる。ジョブアロケータ410は、出力メディアストリーム239のための符号化パラメータに従って入力サブチャンク233を出力映像サブチャンク235およびチャンク236にトランスコードするようにスレーブトランスコーダ220を環境設定する。符号化パラメータは、映像解像度、目標ビットレート、映像コーデックタイプ、目標GOPサイズ、またはその他の好適なパラメータを含み得る。
【0060】
ジョブアロケータ410は、入力メディアストリーム232の受信された入力映像チャンク233をm個のスレーブトランスコーダ220に割当て、mは、1以上の整数である。ジョブアロケータ410は、複数のスレーブトランスコーダ220からm個のスレーブトランスコーダ220を割当てる。複数のスレーブトランスコーダ220は、アレイまたはキュー220′または何らかの同様の構造で配置され得る。いくつかの実現例では、キューは、スレーブトランスコーダ220を利用可能な状態に維持するFIFOキューである。ジョブアロケータ410が新たな入力映像チャンク233の入力映像サブチャンク234を受信すると、ジョブアロケータ410は、m個のスレーブトランスコーダ220をキューから取出し、取出されたスレーブトランスコーダ220に新たな入力映像チャンク233を割当てる。一旦ジョブアロケータ410が新たな入力映像チャンク233をm個のスレーブトランスコーダ220に割当てると、ジョブアロケータ410は、割当てられたスレーブトランスコーダ220に入力映像サブチャンク234を送り始める。m個のスレーブトランスコーダ220の各々が入力映像サブチャンク234をトランスコードするときに、スレーブトランスコーダ220は、出力映像サブチャンク235からなる出力映像チャンク236をジョブアロケータ410に返す。ジョブアロケータ410は、出力映像チャンク236をサブチャンクモジュール214に返し得る。
【0061】
m個のスレーブトランスコーダ220のうちの1つが入力映像チャンク233全体のトランスコーディングを完了するまで、ジョブアロケータ410は、各入力映像サブチャンク234をm個のスレーブトランスコーダ220の各々に送る。m個のスレーブトランスコーダ220のうちの1つが、割当てられた入力映像チャンク233の全ての映像サブチャンク234のトランスコーディングを完了したと判断すると、ジョブアロケータ410は、他のm−1個のスレーブトランスコーダ220を停止させ、m個全てのスレーブトランスコーダ220の状態を利用可能な状態に更新し、m個のスレーブトランスコーダ220をキュー220′に返し得る。
【0062】
ジョブアロケータ410は、入力メディアストリーム232の期間中は上記の態様で動作し続けることができる。ジョブアロケータ410は、スレーブトランスコーダ220を一巡し得て、複数の組のm個のスレーブトランスコーダ220に異なる入力映像チャンク233を同時にトランスコードさせ得る。例えば、以前の入力映像チャンク233が依然として異なる一組のm個のスレーブトランスコーダ220によってトランスコードされている間に、ジョブアロケータ410は、一組のm個のスレーブトランスコーダ220による後続の入力映像チャンク233のトランスコーディングを開始してもよい。このようにして、入力メディアストリーム232をトランスコードするための待ち時間を減少させることができる。
【0063】
データマネージャ412は、入力映像チャンク233および出力映像チャンク236をメモリ装置230および記憶装置240に格納する。ジョブアロケータ410は、受信された映像チャンク233および返された出力映像チャンク236をデータマネージャ412に提供し得る。
【0064】
データマネージャ412は、各入力映像チャンク233の1つ以上のコピーをメモリ装置230に書込み得る。いくつかの実現例では、入力映像チャンク233は、一連の入力映像チャンク233として格納される。入力映像チャンク233を格納するとき、データマネージャ412は、映像チャンク233のチャンクIDを用いて、メモリ装置230内の入力映像チャンク233の各々を索引付けし得る。同様に、データマネージャ412は、映像サブチャンク234のサブチャンクIDを用いて、メモリ装置230内の入力映像サブチャンク234の各々を索引付けし得る。いくつかの実現例では、データマネージャ412は、パブリックデータ構造を用いて、サブチャンクモジュール214がデータをメモリ装置230に書込むことを可能にし、スレーブトランスコーダ220がメモリ装置230からデータを読取ることを可能にする。
【0065】
また、データマネージャ412は、各出力映像チャンク236の1つ以上のコピーをメモリ装置230に書込む。いくつかの実現例では、データマネージャ412は、各出力映像チャンク236のトランスコードされたフレームおよび/またはサブチャンク234を格納する。データマネージャ412は、チャンク236のチャンクIDを用いて、メモリ装置230内の出力映像チャンク236の各々を索引付けし得る。さらに、データマネージャ412は、サブチャンク235のサブチャンクIDを用いて、メモリ装置230内の各出力映像サブチャンク235を索引付けし得る。いくつかの実現例では、データマネージャ412は、パブリックデータ構造を用いて、サブチャンクモジュール214がメモリ装置230からデータを読取ることを可能にし、スレーブトランスコーダ220がデータをメモリ装置230に書込むことを可能にする。
【0066】
また、いくつかの実現例では、データマネージャ412は、各入力音声チャンク237および出力音声チャンク238の1つ以上のコピーをメモリ装置230に格納する。入力音声チャンク237および出力音声チャンク238は、それらのそれぞれのチャンクIDによって参照されることができる。さらに、データマネージャ412は、サブチャンクモジュール214が記憶装置240から音声データを読み書きすることを可能にするパブリックデータ構造を使用し得る。
【0067】
デバッギングの目的で、データマネージャ412は、メモリ装置230に格納されたデータを記憶装置240において複製し得る。例えば、入力および出力映像チャンク233,236ならびに入力および出力音声チャンク237,238は、.cnsファイルの状態で記憶装置240に格納され得る。さらに、入力および出力映像チャンク233,236ならびに入力および出力音声チャンク237,238に対応するメタデータが、記憶装置240に格納され得る。
【0068】
図5は、例示的なスレーブトランスコーダ220を示す。スレーブトランスコーダ220は、入力映像チャンク233のトランスコーディングを担当する。スレーブトランスコーダ220は、リソースマネージャ216から入力映像チャンク233を読取り、出力映像チャンク236の出力映像サブチャンク235をリソースマネージャ216に書込む。
【0069】
各々のスレーブトランスコーダ220は、3つの異なる状態、すなわち「未初期化状態」、「利用可能な状態」および「ビジー状態」のうちの1つに属し得る。スレーブトランスコーダ220が符号化パラメータの組に従って入力映像チャンク233を符号化するように構成される前は、スレーブトランスコーダ220の状態は、未初期化状態である。一旦スレーブトランスコーダ220が初期化/環境設定され、キュー220′に入ると、リソースマネージャ216は、スレーブトランスコーダ220の状態を利用可能な状態に変更する。スレーブトランスコーダ220が「利用可能な」状態にあるとき、スレーブトランスコーダ220は、トランスコーディングを実行する準備が整っている。いくつかの実現例では、スレーブトランスコーダ220は、その状態を利用可能な状態として周期的に報告する。スレーブトランスコーダ220は、トランスコーディングジョブを受信するために、利用可能な状態になければならない。リソースマネージャ216が入力映像チャンク233をスレーブトランスコーダ220に割当てると、リソースマネージャ216は、スレーブトランスコーダ220の状態をビジー状態に変更する。スレーブトランスコーダ220がビジー状態にあるとき、スレーブトランスコーダ220は、入力映像チャンク233をトランスコードしており、別のトランスコーディングジョブを割当てられることはできない。スレーブトランスコーダ220が入力映像チャンク233のトランスコーディングを終了すると、スレーブトランスコーダ220は、出力映像チャンク236をリソースマネージャに返し、リソースマネージャ216は、スレーブトランスコーダの状態を利用可能な状態に更新する。
【0070】
各々のスレーブトランスコーダ220は、映像デコーダ510と映像エンコーダ512とを含んでいる。いくつかの実現例では、映像デコーダ510は、入力映像サブチャンク234を未加工のYUVフレームに復号する。映像エンコーダ512は、当該未加工のYUVフレームを出力映像サブチャンク235に符号化する。映像エンコーダ512は、符号化パラメータに従って出力映像サブチャンク235を符号化する。これら2つの連結的な段階(復号に続く符号化)は、復号段階から出た未加工のYUVフレームを符号化のための後続の符号化段階に直ちに押出すことができるように復号および符号化を並列化するために実行される。
【0071】
動作時、リソースマネージャ216は、トランスコーディングジョブ(すなわちトランスコードされるべき入力映像チャンク233)をスレーブトランスコーダ220に割当てる。リソースマネージャ216は、トランスコードされるべき入力映像チャンク233のチャンクID、出力映像チャンク236に提供するためのチャンクID、および出力映像チャンク236の符号化パラメータを提供する。トランスコーディングの到来時に、リソースマネージャ216は、符号化パラメータに従って出力映像チャンク236を符号化するように全てのスレーブトランスコーダ220を初期化し得る。さらに、スレーブトランスコーダ220は、初期化されるときに、エラー処理の目的で、予め規定された同期/キーフレーム(H264/AVCにおけるIDR)をロードし得る。
【0072】
スレーブトランスコーダ220は、リソースマネージャ216から入力映像チャンク233の入力映像サブチャンク234を読取り始める。スレーブトランスコーダ220は、映像サブチャンク234を映像デコーダ510に送り、YUVフレームをエンコーダ512に送る。スレーブトランスコーダ220は、入力映像チャンク233の最後のサブチャンク234に達するまで、リソースマネージャ216から入力映像サブチャンク234を読取り続ける。一旦スレーブトランスコーダ220が入力映像チャンク233の全てのサブチャンク234をトランスコードすると、スレーブトランスコーダ220は、出力映像サブチャンク235を出力映像チャンク236にアセンブルし得て、出力映像チャンク236をリソースマネージャ216に書込み得る。さらにまたは代替的に、スレーブトランスコーダ220は、トランスコードされた出力映像サブチャンク235をリソースマネージャ216に返す。いくつかの実現例では、スレーブトランスコーダ220は、出力映像サブチャンク235を返す前に全ての映像サブチャンク233をトランスコードするまで待機する。他の実現例では、スレーブトランスコーダ220は、出力映像サブチャンク235が利用可能になったときに出力映像サブチャンク235をリソースマネージャ216に返す。
【0073】
いくつかの実現例では、スレーブトランスコーダ220は、損傷を受けた入力映像チャンク233を処理するように構成されている。スレーブトランスコーダ220が損傷を受けた入力映像サブチャンク234(例えば「BaD」と印を付けられた入力映像チャンク233)を受信すると、スレーブトランスコーダ220は、入力映像サブチャンク234のトランスコーディングを停止し、入力映像チャンク233、および、スレーブトランスコーダ220が既にトランスコードしたいかなる出力映像サブチャンク235も廃棄する。次いで、スレーブトランスコーダ220は、予め規定された同期/キーフレームを用いて代替の出力映像チャンク236を作成し、当該代替の映像チャンク236をリソースマネージャ216に書込む。スレーブトランスコーダ220は、そのように代替の出力映像チャンクにフラグを立てることができる。次いで、リソースマネージャ216は、スレーブトランスコーダ220の状態を利用可能な状態に更新する。
【0074】
いくつかの実現例では、スレーブトランスコーダ220は、トランスコードされるべき入力映像チャンク233の直前の入力映像チャンク233の少なくとも一部をトランスコードし、次いで、トランスコードされるべき入力映像チャンク233をトランスコードすることによって、トランスコードされるべき入力映像チャンク233をトランスコードする。これらの実現例では、スレーブトランスコーダ220は、トランスコードされるべき入力映像チャンク233に対応する単一の出力映像チャンク236を出力する。動作時、リソースマネージャ216は、トランスコードされるべき入力映像チャンク233に先行する入力映像チャンク233の少なくとも一部をデコーダ512に送り、それに続いて、トランスコードされるべき入力映像チャンク233を送る。したがって、各々のスレーブトランスコーダ220は、2つの連続した入力映像チャンク233から入力映像サブチャンク234をトランスコードする。これらの実現例のうちのいくつかでは、スレーブトランスコーダ220は、トランスコードされるべき入力映像チャンク233をトランスコードする前に、トランスコードされるべき入力映像チャンク233に先行する入力映像チャンク233全体をトランスコードする。他の実現例では、スレーブトランスコーダ220は、トランスコードされるべき入力映像チャンク233をトランスコードする前に、トランスコードされるべき入力映像チャンク233に先行する入力映像チャンク233の後続の入力映像サブチャンク234(例えば最終的な3個のサブチャンク234)をトランスコードする。いずれの場合にも、スレーブトランスコーダ220が両方の入力映像チャンク233の入力映像サブチャンク234のトランスコーディングを終了すると、スレーブトランスコーダ220は、先行する入力映像チャンク233に対応する出力映像サブチャンク235を廃棄し、トランスコードされるべき入力映像チャンク233に対応する出力映像サブチャンク235を返す。スレーブトランスコーダ220は、単一パストランスコーディングについての出力映像チャンク236における最初のキーまたは同期フレームの質の突然の不連続性を回避するために、上記の技術を実行し得る。リソースマネージャ216は、入力メディアストリームの第1の入力映像チャンク233をm個のスレーブトランスコーダに二回送り得る。その後、リソースマネージャ216は、連続した入力映像チャンク233の第2の入力映像チャンク233をトランスコードするために割当てられる一組のm個のスレーブトランスコーダ220に、連続した入力映像チャンク233を送る。
【0075】
図2Aに戻って、いくつかの実現例では、トランスコーディングサーバ200は、その構成要素のうちの1つ以上において致命的なエラーから回復するように設計されている。致命的なエラーは、スレーブトランスコーダ220、リソースマネージャ216、サブチャンクモジュール214、ストリーミングエージェント212および/またはライブチャンクマネージャ218において生じ得る。
【0076】
1つのタイプのエラーは、スレーブトランスコーダ220の故障である。例えば、リソースマネージャ216は、既に故障したスレーブトランスコーダ220にトランスコーディングジョブを割当て得る。リソースマネージャ216がトランスコーディングジョブを複数のトランスコーダ220に割当てる実現例では、冗長な割当てが、機能しなくなったスレーブトランスコーダ220のいかなる問題も軽減させる。故障したトランスコーダ220が一旦発見されると、当該故障したトランスコーダ220は再起動され得る。
【0077】
リソースマネージャ216が故障した場合に問題が生じ得る。例えば、スレーブトランスコーダ220は、リソースマネージャ216から入力映像サブチャンク234を読取ることができない可能性がある。このようなシナリオでは、スレーブトランスコーダ220は、現在のトランスコーディングジョブを終了させて、その状態を「利用可能な」状態に変更し、その現在の状態を報告する。別のシナリオでは、スレーブトランスコーダ220は、出力映像サブチャンク235をリソースマネージャ216に書込むことができない可能性がある。このようなシナリオでは、スレーブトランスコーダ220は、故障を無視して、トランスコーディングジョブを完了させ、その状態を利用可能な状態に更新する。別の例では、サブチャンクモジュール214は、入力音声チャンク237および/または入力映像チャンク233をリソースマネージャ216に書込むことができない可能性がある。このシナリオでは、サブチャンクモジュール214は、故障を無視し得て、まるで故障が発生していないかのように入力チャンク233,237をリソースマネージャ216に書込もうと試み続けることができる。しかし、サブチャンクモジュール214が所与のタイムアウト期間にわたって出力映像チャンク236を読取ることができなければ、サブチャンクモジュール214は、欠落している出力映像チャンク236を交換するために「BaD」出力映像チャンク236を生成し得る。最終的に、故障したスレーブトランスコーダ216は再起動され得る。再起動後、リソースマネージャ216は、既に処理されている入力映像チャンク233の一部として受信されたいかなる入力映像サブチャンク234も廃棄し得る。リソースマネージャ216は、一旦新たな入力映像チャンク233を受信し始めると、入力映像サブチャンク234を処理し始め得る。
【0078】
別のタイプのエラーは、サブチャンクモジュール214の故障である。サブチャンクモジュール214が故障すると、トランスコーディングジョブを実行するいかなるスレーブトランスコーダ220も、現在のトランスコーディングジョブを終了させて、それらのそれぞれの状態を利用可能な状態に更新し得て、リソースマネージャ216は、スレーブトランスコーダ220へのトランスコーディングジョブの割当てを停止し得る。このシナリオでは、ライブチャンクマネージャ218は、出力メディアストリーム239の受信を停止し、ストリーミングエージェント212は、入力メディアストリーム232の配信を停止する。サブチャンクモジュール214が故障した場合、サブチャンクモジュール214は最終的には再起動され、他の構成要素の動作が動作を再開することができる。
【0079】
ストリームエージェント212が故障した場合に問題が生じ得る。このシナリオでは、他の構成要素は、動作を継続し、入力メディアストリーム232をトランスコードしようと試み得る。しかし、ストリームエージェント212が故障状態にあるので、サブチャンクモジュール214は、入力メディアストリーム232を受信しない。残りの構成要素は、影響を受けない。一旦ストリームエージェント212が再起動すると、サブチャンクモジュール214は、入力メディアストリーム232を受信し始めることができ、トランスコーディングを開始することができる。
【0080】
別のタイプのエラーは、ライブチャンクマネージャ218の故障である。ライブチャンクマネージャ218が故障すると、残りの構成要素は、入力メディアストリーム232を出力メディアストリーム234にトランスコードし続け得る。このシナリオでは、サブチャンクモジュール214は、出力メディアストリーム239の一部をライブチャンクマネージャ218に書込もうと試み得る。サブチャンクモジュール214がライブチャンクマネージャ218に書込むことができない場合、サブチャンクモジュール214は、出力メディアストリーム239の利用可能な部分を廃棄し得る。一旦ライブチャンクマネージャ218が再起動すると、サブチャンクモジュール214は、出力メディアストリーム239の配信を開始することができる。
【0081】
上記のタイプのエラーは、一例として提供されている。トランスコーディングサーバ200は、他のタイプのエラーにも遭遇する可能性がある。トランスコーディングサーバ200がエラーを処理する技術もさまざまであってもよい。
【0082】
図6は、ユーザ装置100に出力メディアストリーム239を配信するための方法600の例示的な一組のオペレーションを示す。方法600は、上記のトランスコーディングサーバ200の構成要素に関して説明される。しかし、方法600は、任意の好適な装置によって実行されてもよい。
【0083】
オペレーション610において、トランスコーディングサーバ200は、トランスコーディング命令を受信する。トランスコーディング命令は、符号化すべき入力メディアストリーム232のストリーム識別子と、入力メディアストリーム232を符号化するための符号化パラメータとを含み得る。トランスコーディング命令は、ユーザ装置100から受信されてもよく、別の装置から受信されてもよく、または内部で受信されてもよい。例えば、ユーザ装置100は、チャネルのライブストリームを要求し得る。別の例では、トランスコーディングサーバ200は、任意の数のチャネルおよびビデオ・オン・デマンドコンテンツを異なる符号化パラメータで利用できるようにするようにセットアップされ得る。ストリーム識別子は、トランスコードすべきチャネルフィードまたはメディアコンテンツを識別し得る。符号化パラメータは、出力メディアストリーム239のためのターゲット符号化を示す。
【0084】
オペレーション612において、リソースマネージャ216は、スレーブトランスコーダ220を環境設定する。例えば、リソースマネージャ216は、スレーブトランスコーダ220の出力ビットレートを設定し得る。また、リソースマネージャ216は、スレーブトランスコーダ220のキュー220′も確立し得る。
【0085】
オペレーション614において、サブチャンクモジュール214は、ストリーミングエージェント212によって入力メディアストリーム232を受信する。ストリーミングエージェント212は、任意の好適なコンテンツソース120から入力メディアストリーム232を受信し得る。例えば、ストリーミングエージェント212は、ケーブルプロバイダ、ネットワーク、個人、映画スタジオ、またはその他の好適なソースからコンテンツを受信してもよい。
【0086】
オペレーション616において、サブチャンクモジュール214は、入力メディアストリーム232を音声部分232″および映像部分232′に多重分離する。オペレーション618において、サブチャンクモジュールは、音声部分232″を入力音声チャンク237に分割し、映像部分232′を入力映像チャンク233に分割する。入力映像チャンク233および入力音声チャンク237は、同じサイズのチャンク(例えば5ミリ秒)に分割される。各々の入力チャンク233,237は、チャンクIDを割当てられ、そのチャンクタイプでフラグを立てられ得る。
【0087】
オペレーション620において、サブチャンクモジュール214は、入力音声チャンク237をトランスコードする。サブチャンクモジュール214は、出力メディアストリーム239の音声部分のための所望の符号化パラメータに従って入力音声チャンク237をトランスコードし得る。サブチャンクモジュール214は、入力音声チャンク237を出力音声チャンク238にトランスコードする。
【0088】
オペレーション622において、サブチャンクモジュール214は、入力映像チャンク233を入力映像サブチャンク234に分割する。入力映像サブチャンク234は、同じ長さ(例えば.05ミリ秒セグメント)を有している。サブチャンクモジュール214は、サブチャンクIDを各入力映像サブチャンク234に割当て得る。サブチャンクモジュール214は、入力映像サブチャンクをリソースマネージャ216に書込み得る。オペレーション624において、リソースマネージャ216およびスレーブトランスコーダ220は、入力映像チャンク233をトランスコードする。
【0089】
図7は、入力映像チャンク233をトランスコードするための方法の一組のオペレーションを示す。オペレーション710において、リソースマネージャ216は、m個のスレーブトランスコーダ220をキュー220′から取出し、mは、1以上の整数である。オペレーション712において、リソースマネージャ216は、入力映像チャンク233をm個のスレーブトランスコーダ220に割当てる。リソースマネージャ216は、m個のスレーブトランスコーダの各々の状態をビジー状態に更新し得る。
【0090】
いくつかの実現例では、オペレーション714に示されるように、m個のスレーブトランスコーダ220は、トランスコードされるべき入力映像チャンク233の直前の入力映像チャンク233の少なくともいくつかのサブチャンク234を取得する。m個のスレーブトランスコーダ220は、先行する入力映像チャンク233の全てのサブチャンク234または先行する入力映像チャンク233の最後の1つ以上のサブチャンク234をリソースマネージャ216から読取り得る。
【0091】
オペレーション716において、m個のスレーブトランスコーダ220は、トランスコードされるべき入力映像チャンク233の入力映像サブチャンク234を取得する。入力映像サブチャンク234は、シーケンシャルにリソースマネージャ216から読取られることができ、そのため、スレーブトランスコーダ220は、後続の入力映像サブチャンク234の前に以前の入力映像サブチャンク234を読取る。いくつかの実現例では、後続の入力映像サブチャンク234がサブチャンクモジュール214によって受信されている間に、m個のスレーブトランスコーダ220は、以前の入力映像サブチャンク234を読取る。
【0092】
オペレーション718において、m個のスレーブトランスコーダ220は、入力映像サブチャンク234をトランスコードする。いくつかの実現例では、m個のスレーブトランスコーダ220の各々は、入力映像サブチャンク234をYUVフレームに復号し、次いで当該YUVフレームを出力映像サブチャンク235に符号化する。m個のスレーブトランスコーダ220は、それら自身のそれぞれの速度で独立して動作し得る。スレーブトランスコーダ220が入力映像サブチャンク234の復号を終了すると、スレーブトランスコーダ220は、次の入力映像サブチャンク234を取得し、次の入力映像サブチャンク234の復号を開始し得る。同様に、スレーブトランスコーダ220が出力映像サブチャンク235を符号化すると、スレーブトランスコーダ220がYUVフレームの復号を終了するや否や、スレーブトランスコーダ220は、次の利用可能な入力映像サブチャンク234を復号し始め得る。上記のように、いくつかの実現例では、m個のスレーブトランスコーダ220は、トランスコードされるべき入力映像チャンク233の入力映像サブチャンク234をトランスコードする前に、先行する入力映像チャンク233の入力映像サブチャンク234をトランスコードし始める。先行する入力映像チャンク233の入力映像サブチャンク234をトランスコードするとき、スレーブトランスコーダ220は、それに対応する出力映像サブチャンク235を廃棄し得る。
【0093】
オペレーション720において、リソースマネージャ216は、m個のスレーブトランスコーダ220のうちの1つがトランスコーディングジョブ(すなわち入力映像サブチャンク234のトランスコーディング)を終了したか否かを判断する。終了していなければ、m個のスレーブトランスコーダ220は、入力映像サブチャンクをトランスコードし続ける。
【0094】
スレーブトランスコーダ220のうちの1つが入力映像チャンク233全体のトランスコーディングを完了すると、オペレーション722に示されるように、スレーブトランスコーダ220は、出力映像チャンク236を返す。一旦スレーブトランスコーダ220が入力映像チャンク233の全ての入力映像サブチャンク234のトランスコーディングを完了すると、スレーブトランスコーダ220は、出力映像サブチャンク235から出力映像チャンク236をアセンブルする。スレーブトランスコーダ220は、出力映像チャンク236をリソースマネージャ216に返す。いくつかの実現例では、スレーブトランスコーダ220は、出力映像サブチャンク235をリソースマネージャ216に返し得て、リソースマネージャ216は、出力映像サブチャンク235を出力映像チャンク236にアセンブルする。
【0095】
オペレーション724において、リソースマネージャ216は、残りのm−1個のスレーブトランスコーダ220を停止させ、m−1個のスレーブトランスコーダ220によってトランスコードされた出力映像サブチャンク235を廃棄する。リソースマネージャ216は、出力映像チャンク236をサブチャンクモジュール214に返し得る。オペレーション726において、リソースマネージャ216は、m個のスレーブトランスコーダ220の状態を「利用可能な」状態に更新する。リソースマネージャ216は、m個のスレーブトランスコーダ220をキュー220′に加え得る。
【0096】
図6に戻って、入力映像チャンク233がサブチャンクモジュール214によって受信およびチャンクされると、リソースマネージャ216およびスレーブトランスコーダ220は、入力映像チャンク233を連続的にトランスコードする。なお、リソースマネージャ216およびスレーブトランスコーダ220が入力映像チャンク233をトランスコードする間に、サブチャンクモジュール214は、音声チャンク237をトランスコードし得る。
【0097】
オペレーション626において、サブチャンクモジュール214は、出力映像チャンク236および出力音声チャンク238を出力メディアストリーム239にアセンブルする。上記のように、サブチャンクモジュール214は、1つ以上のプロトコル(例えばHLSおよび/またはDASH)に従って出力メディアストリーム239を生成し得る。オペレーション628において、サブチャンクモジュール214は、出力メディアストリーム239をライブチャンクマネージャ218に発行する。ライブチャンクマネージャ218は、出力メディアストリーム239を1つ以上の下流のユーザ装置100に送信し得る。
【0098】
図6および
図7において実行されるオペレーションの順序は、必須ではない。オペレーションの多くは、入力メディアストリーム232のさまざまな部分のために同時に行われる。例えば、音声および映像チャンクのトランスコーディングは、同時に実行されてもよく、複数の映像チャンク233が異なるスレーブトランスコーダ220によって同時にトランスコードされている例があってもよい。上記のオペレーションの多くは、並行しておよび/または直列的に実行されてもよい。例えば、スレーブトランスコーダ220は、他の入力映像サブチャンク234をトランスコードしている間に映像サブチャンク234を受信してもよい。同様に、音声チャンク238は、映像チャンク233と同時にトランスコードされてもよい。さらに、方法600および700は、代替的なまたは追加のオペレーションを含んでいてもよい。
【0099】
ここに記載されているシステムおよび技術のさまざまな実現例は、デジタル電子回路および/もしくは光回路、集積回路、特別に設計されたASIC(特定用途向け集積回路)、コンピュータハードウェア、ファームウェア、ソフトウェア、ならびに/または、それらの組み合わせで実現可能である。これらのさまざまな実現例は、プログラム可能なシステム上で実行可能および/または解釈可能な1つ以上のコンピュータプログラムでの実現例を含み得て、当該プログラム可能なシステムは、記憶システム、少なくとも1つの入力装置および少なくとも1つの出力装置からデータおよび命令を受信し、記憶システム、少なくとも1つの入力装置および少なくとも1つの出力装置にデータおよび命令を送信するように結合された、特殊用途または汎用であり得る少なくとも1つのプログラム可能なプロセッサを含む。
【0100】
これらのコンピュータプログラム(プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても知られている)は、プログラム可能なプロセッサのためのマシン命令を含み、高級手続き型プログラミング言語および/もしくはオブジェクト指向プログラミング言語で実現されてもよく、ならびに/または、アセンブリ/マシン言語で実現されてもよい。本明細書で用いられる「マシン読取可能な媒体」および「コンピュータ読取可能な媒体」という表現は、マシン命令および/またはデータをプログラム可能なプロセッサに提供するために使用される任意のコンピュータプログラム製品、非一時的なコンピュータ読取可能な媒体、装置および/またはデバイス(例えば磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス(Programmable Logic Device:PLD))を指し、マシン命令をマシン読取可能な信号として受信するマシン読取可能な媒体を含む。「マシン読取可能な信号」という表現は、マシン命令および/またはデータをプログラム可能なプロセッサに提供するために使用される任意の信号を指す。
【0101】
本明細書に記載されている主題および機能的動作の実現例は、デジタル電子回路で実現されてもよく、または本明細書に開示されている構造およびそれらの構造的等価物を含むコンピュータソフトウェア、ファームウェアまたはハードウェアで実現されてもよく、またはそれらのうちの1つ以上の組み合わせで実現されてもよい。さらに、本明細書に記載されている主題は、1つ以上のコンピュータプログラム製品として、すなわちデータ処理装置によって実行するため、またはデータ処理装置の動作を制御するためにコンピュータ読取可能な媒体上で符号化されるコンピュータプログラム命令の1つ以上のモジュールとして実現されてもよい。コンピュータ読取可能な媒体は、マシン読取可能な記憶装置、マシン読取可能な記憶基板、メモリ装置、マシン読取可能な伝播信号に影響を及ぼす組成物、またはそれらのうちの1つ以上の組み合わせであってもよい。「データ処理装置」、「コンピューティング装置」および「コンピューティングプロセッサ」という表現は、データを処理するための全ての装置、デバイスおよびマシンを包含し、一例として、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む。当該装置は、ハードウェアに加えて、当該コンピュータプログラムのための実行環境を作り出すコード、例えばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの1つ以上の組み合わせを構成するコードを含み得る。伝播信号は、人工的に生成される信号、例えば好適な受信機装置に送信される情報を符号化するために生成されるマシン生成電気信号、光信号または電磁信号である。
【0102】
コンピュータプログラム(アプリケーション、プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプトまたはコードとしても知られている)は、コンパイラ型言語またはインタープリタ型言語を含む任意の形態のプログラミング言語で書込まれてもよく、スタンドアロンのプログラムとして、またはコンピューティング環境での使用に適したモジュール、コンポーネント、サブルーチンまたは他のユニットとしてなどの任意の形態で配備されてもよい。コンピュータプログラムは、必ずしもファイルシステム内のファイルに対応していない。プログラムは、他のプログラムまたはデータ(例えばマークアップ言語文書に格納された1つ以上のスクリプト)を保持するファイルの一部に格納されてもよく、当該プログラムに専用の単一のファイルに格納されてもよく、または複数の調整されたファイル(例えば1つ以上のモジュール、サブプログラム、またはコードの一部を格納するファイル)に格納されてもよい。コンピュータプログラムは、1つのコンピュータ、または、一箇所に位置するかもしくは複数の箇所にまたがって分散されて通信ネットワークによって相互接続されている複数のコンピュータ上で実行されるように配備されてもよい。
【0103】
本明細書に記載されているプロセスおよび論理フローは、入力データ上で動作して出力を生成することによって機能を実行するように1つ以上のコンピュータプログラムを実行する1つ以上のプログラム可能なプロセッサによって実行され得る。また、プロセスおよび論理フローは、特殊用途論理回路、例えばFPGA(フィールド・プログラマブル・ゲート・アレイ)またはASIC(特殊用途向け集積回路)によって実行されてもよく、装置も、特殊用途論理回路、例えばFPGAまたはASICとして実現されてもよい。
【0104】
コンピュータプログラムの実行に適したプロセッサは、一例として、汎用マイクロプロセッサおよび特殊用途マイクロプロセッサを両方とも含み、任意の種類のデジタルコンピュータの任意の1つ以上のプロセッサを含む。一般に、プロセッサは、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信するであろう。コンピュータの必須の要素は、命令を実行するためのプロセッサと、命令およびデータを格納するための1つ以上のメモリ装置とである。一般に、コンピュータは、データを格納するための1つ以上の大容量記憶装置、例えば磁気ディスク、光磁気ディスクまたは光ディスクも含み、または、当該1つ以上の大容量記憶装置からデータを受信するもしくは当該1つ以上の大容量記憶装置にデータを転送するように、もしくは受信も転送もするように動作可能に結合されるであろう。しかし、コンピュータは、このような装置を有する必要はない。さらに、コンピュータは、別の装置、例えば数例を挙げると、携帯電話、パーソナルデジタルアシスタント(personal digital assistant:PDA)、携帯型オーディオプレーヤ、グローバル・ポジショニング・システム(Global Positioning System:GPS)受信機に組み込まれてもよい。コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能な媒体は、全ての形態の不揮発性メモリ、媒体およびメモリ装置を含み、一例として例えばEPROM、EEPROMおよびフラッシュメモリ装置といった半導体メモリ装置、例えば内蔵ハードディスクまたは取外し可能なディスクといった磁気ディスク、光磁気ディスク、ならびにCD ROMおよびDVD−ROMディスクを含む。プロセッサおよびメモリは、特殊用途論理回路によって補完されてもよく、または特殊用途論理回路に組み入れられてもよい。
【0105】
ユーザとの対話を提供するために、本開示の1つ以上の局面は、情報をユーザに表示するための表示装置、例えばCRT(陰極線管)、LCD(液晶表示)モニタまたはタッチスクリーンと、任意にユーザが入力をコンピュータに提供することができるキーボードおよびポインティング装置、例えばマウスまたはトラックボールとを有するコンピュータ上で実現され得る。ユーザとの対話を提供するために他の種類の装置も使用されてもよく、例えば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、例えば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触知入力を含む任意の形態で受信されてもよい。また、コンピュータは、ユーザによって使用される装置に文書を送り、ユーザによって使用される装置から文書を受信することによって、例えばウェブブラウザから受信された要求に応答してユーザのクライアント装置上でウェブブラウザにウェブページを送ることによって、ユーザと対話し得る。
【0106】
本開示の1つ以上の局面は、例えばデータサーバとしてのバックエンドコンポーネントを含むコンピューティングシステムにおいて実現されてもよく、またはミドルウェアコンポーネント、例えばアプリケーションサーバを含むコンピューティングシステムにおいて実現されてもよく、またはフロントエンドコンポーネント、例えばユーザが本明細書に記載されている主題の実現例と対話できるようにするグラフィカルユーザインターフェースまたはウェブブラウザを有するクライアントコンピュータを含むコンピューティングシステムにおいて実現されてもよく、または1つ以上のこのようなバックエンド、ミドルウェアまたはフロントエンドコンポーネントの任意の組み合わせにおいて実現されてもよい。システムの構成要素は、デジタルデータ通信の任意の形態または媒体、例えば通信ネットワークによって相互接続され得る。通信ネットワークの例としては、ローカルエリアネットワーク(local area network:「LAN」)およびワイドエリアネットワーク(wide area network:「WAN」)、インターネットワーク(例えばインターネット)、ならびにピアツーピアネットワーク(例えばアドホックピアツーピアネットワーク)が挙げられる。
【0107】
コンピューティングシステムは、クライアントと、サーバとを含み得る。クライアントおよびサーバは、一般に互いに離れており、典型的には通信ネットワークを介して相互作用する。クライアントおよびサーバの関係は、それぞれのコンピュータで実行されて互いに対してクライアント−サーバ関係を有するコンピュータプログラムによって生じる。いくつかの実現例では、サーバは、(例えば、クライアント装置と対話するユーザにデータを表示して、クライアント装置と対話するユーザからユーザ入力を受信する目的で)データ(例えばHTMLページ)をクライアント装置に送信する。クライアント装置において生成されたデータ(例えばユーザ対話の結果)は、サーバにおけるクライアント装置から受信され得る。
【0108】
本明細書は多くの具体例を含んでいるが、これらは、本開示またはクレームされ得るものの範囲を限定するものとして解釈されるべきではなく、むしろ本開示の特定の実現例に特有の特徴の説明であると解釈されるべきである。また、別々の実現例の文脈において本明細書に記載されている特定の特徴は、単一の実現例において組み合わせて実現されてもよい。また、逆に、単一の実現例の文脈において記載されているさまざまな特徴は、複数の実現例において別々に、または任意の好適なサブコンビネーションで実現されてもよい。さらに、特徴は特定の組み合わせで作用するものとして上記され、さらにはそのようなものとして最初はクレームされ得るが、クレームされている組み合わせからの1つ以上の特徴は、場合によっては、当該組み合わせから削除されてもよく、クレームされている組み合わせは、サブコンビネーションまたはサブコンビネーションの変形例に向けられてもよい。
【0109】
同様に、動作は特定の順序で図面に示されているが、これは、このような動作が、望ましい結果を達成するために、示されている特定の順序もしくはシーケンシャルな順序で実行されなければならないと理解されるべきではなく、または、望ましい結果を達成するために、全ての示されている動作が実行されなければならないと理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利である場合がある。さらに、上記の実施例におけるさまざまなシステム構成要素の分離は、全ての実施例においてこのような分離が必要であると理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムが、一般に単一のソフトウェア製品に一体化されてもよく、または複数のソフトウェア製品にパッケージングされてもよいということが理解されるべきである。
【0110】
多数の実現例が記載されてきた。しかし、本開示の精神および範囲から逸脱することなくさまざまな変形がなされ得ることが理解されるであろう。したがって、他の実現例は、以下の特許請求の範囲の範囲内である。例えば、特許請求の範囲に記載されている動作は、異なる順序で実行されて、依然として望ましい結果を達成することができる。