(57)【要約】  方法（６００）は、入力メディアストリーム（２３２）を受信するステップと、入力メディアストリームの残余部分を受信している間に、入力メディアストリームの受信された部分の映像部分（２３２′）を入力映像チャンク（２３３）に分割するステップとを含む。入力メディアストリームの映像部分の各入力映像チャンクについて、当該方法は、入力映像チャンクを１つ以上のスレーブトランスコーダ（２２０）に割当てるステップと、入力映像チャンクを映像サブチャンク（２３４）に分割するステップと、トランスコーダの各々に各入力映像サブチャンクを別々に送るステップとを含む。当該方法は、スレーブトランスコーダから出力映像サブチャンク（２３５）を別々に受信するステップを含む。各出力映像サブチャンクは、入力映像サブチャンクのうちの１つにそれぞれ対応する。また、当該方法は、出力映像サブチャンクを、入力映像チャンクに対応する出力映像チャンク（２３６）にアセンブルするステップと、出力映像チャンクを出力メディアストリーム（２３９）にアセンブルするステップとを含む。
2016541178.tif 000002
【特許請求の範囲】
【請求項１】
方法（６００）であって、
符号化パラメータの第１の組に従って符号化された入力メディアストリーム（２３２）を受信するステップと、
前記入力メディアストリーム（２３２）の残余部分を受信している間に、前記入力メディアストリーム（２３２）の受信された部分の映像部分（２３２′）を入力映像チャンク（２３３）に分割するステップと、
前記入力メディアストリーム（２３２）の前記映像部分（２３２′）の各入力映像チャンク（２３３）について、
前記入力映像チャンク（２３３）を１つ以上のスレーブトランスコーダ（２２０）に割当てるステップと、
前記入力映像チャンク（２３３）を入力映像サブチャンク（２３４）に分割するステップと、
前記符号化パラメータの第１の組から符号化パラメータの第２の組にデータをトランスコードする前記１つ以上のスレーブトランスコーダ（２２０）の各々に各入力映像サブチャンク（２３４）を別々に送るステップと、
各入力映像サブチャンク（２３４）を対応する出力映像サブチャンク（２３５）にトランスコードするステップと、
前記出力映像サブチャンク（２３５）を、前記入力映像チャンク（２３３）に対応する出力映像チャンク（２３６）にアセンブルするステップと、
前記出力映像チャンク（２３６）を出力メディアストリーム（２３９）にアセンブルするステップとを備える、方法（６００）。
【請求項２】
前記入力映像チャンク（２３３）の残余部分を依然として受信している間に、前記入力映像チャンク（２３３）の受信された部分を入力映像サブチャンク（２３４）に分割するステップと、
前記入力映像チャンク（２３３）の前記残余部分を依然として受信している間に、少なくとも１つの入力映像サブチャンク（２３４）を前記１つ以上のスレーブトランスコーダ（２２０）に送るステップとをさらに備える、請求項１に記載の方法（６００）。
【請求項３】
各スレーブトランスコーダは、スレーブデコーダ（５１０）とスレーブエンコーダ（５１２）とを含み、前記スレーブエンコーダ（５１２）は、第１の入力映像サブチャンク（２３４）を符号化する一方、前記スレーブデコーダ（５１０）は、第２の入力映像サブチャンク（２３４）を復号する、請求項１に記載の方法（６００）。
【請求項４】
前記入力メディアストリーム（２３２）の前記映像部分（２３２′）の任意の残余部分を入力映像チャンク（２３３）に分割している間に、前記出力映像チャンク（２３６）を前記出力メディアストリーム（２３９）にアセンブルするステップをさらに備える、請求項１に記載の方法（６００）。
【請求項５】
前記入力映像チャンク（２３３）を複数のスレーブトランスコーダ（２２０）に割当てるステップと、
前記複数のスレーブトランスコーダ（２２０）のうちの１つが前記入力映像チャンク（２３３）のトランスコーディングを完了したときに、前記入力映像チャンク（２３３）の前記入力映像サブチャンク（２３４）のトランスコーディングを停止させるように前記複数のトランスコーダ（２２０）の他のスレーブトランスコーダ（２２０）に命令するステップとをさらに備える、請求項４に記載の方法（６００）。
【請求項６】
トランスコーディングを停止させるように前記複数のトランスコーダ（２２０）の他のスレーブトランスコーダ（２２０）に命令した後、全ての前記スレーブトランスコーダ（２２０）を別の入力映像チャンク（２３３）の受信に利用可能であると特定するステップをさらに備える、請求項５に記載の方法（６００）。
【請求項７】
前記入力メディアストリーム（２３２）を前記入力メディアストリーム（２３２）の前記映像部分（２３２′）および音声部分（２３２″）に多重分離するステップと、
前記入力メディアストリーム（２３２）の前記音声部分（２３２″）を入力音声チャンク（２３７）に分割するステップとをさらに備え、各入力音声チャンク（２３７）は、前記映像部分（２３２′）の前記入力映像チャンク（２３３）のうちの１つにそれぞれ対応する、請求項１に記載の方法（６００）。
【請求項８】
入力音声チャンク（２３７）および入力映像チャンク（２３３）の対応する各対は、前記入力メディアストリーム（２３２）内で同時に開始し、実質的に同一の時間の長さを有する、請求項７に記載の方法（６００）。
【請求項９】
各入力音声チャンク（２３７）について、
前記入力音声チャンク（２３７）を音声サンプルに復号するステップと、
前記入力音声チャンク（２３７）内の失われた音声パケットが検出されたときに、前記失われた音声パケットに対応する場所でサイレント音声サンプルを前記音声サンプルに挿入するステップと、
前記音声サンプルを出力音声チャンク（２３８）に符号化するステップとをさらに備える、請求項８に記載の方法（６００）。
【請求項１０】
前記出力映像チャンク（２３６）を前記出力メディアストリーム（２３９）にアセンブルするステップは、各出力音声チャンク（２３８）を対応する出力映像チャンク（２３６）と位置合わせするステップを備える、請求項９に記載の方法（６００）。
【請求項１１】
利用可能なトランスコーダのキュー（２２０′）から前記１つ以上のスレーブトランスコーダ（２２０）を検索するステップと、
前記１つ以上のスレーブトランスコーダ（２２０）が割当てられた入力映像チャンク（２３３）のトランスコーディングを完了したときに、前記１つ以上のトランスコーダ（２２０）を解放して前記トランスコーダ（２２０）のキュー（２２０′）に戻すステップとをさらに備える、請求項１に記載の方法（６００）。
【請求項１２】
各入力映像チャンク（２３３）について、
前記入力映像チャンク（２３３）の直前の先行する入力映像チャンク（２３３）の少なくとも１つの先行する入力映像サブチャンク（２３４）を取得するステップと、
前記入力映像チャンク（２３３）の前記入力映像サブチャンク（２３４）を送る前に、前記少なくとも１つの先行する入力映像サブチャンク（２３４）を前記１つ以上のスレーブトランスコーダ（２２０）に送るステップとをさらに備える、請求項１に記載の方法（６００）。
【請求項１３】
前記出力メディアストリーム（２３９）を発行するステップをさらに備える、請求項１に記載の方法（６００）。
【請求項１４】
前記出力メディアストリーム（２３９）をユーザ装置（１００）に送信するステップをさらに備える、請求項１に記載の方法（６００）。
【請求項１５】
トランスコーディングサーバ（２００）であって、
コンピュータ読取可能な命令を格納する非一時的なコンピュータ読取可能な媒体（２３０）と、
符号化パラメータの第１の組から符号化パラメータの第２の組にデータをトランスコードする複数のスレーブトランスコーダ（２２０）と、
前記コンピュータ読取可能な媒体（２３０）と通信し、前記コンピュータ読取可能な命令を実行する処理装置（２１０）とを備え、前記コンピュータ読取可能な命令は、
前記処理装置（２１０）に、前記符号化パラメータの第１の組に従って符号化された入力メディアストリーム（２３２）を受信させ、
前記処理装置（２１０）に、前記入力メディアストリーム（２３２）の残余部分を受信している間に、前記入力メディアストリーム（２３２）の受信された部分の映像部分（２３２′）を入力映像チャンク（２３３）に分割させ、
前記入力メディアストリーム（２３２）の前記映像部分（２３２′）の各入力映像チャンク（２３３）について、
前記処理装置（２１０）に、前記入力映像チャンク（２３３）を１つ以上のスレーブトランスコーダ（２２０）に割当てさせ、
前記処理装置（２１０）に、前記入力映像チャンク（２３３）を入力映像サブチャンク（２３４）に分割させ、
前記処理装置（２１０）に、前記入力映像サブチャンク（２３４）を出力映像サブチャンク（２３５）にトランスコードする前記１つ以上のスレーブトランスコーダ（２２０）の各々に各入力映像サブチャンク（２３４）を別々に送らせ、前記１つ以上のスレーブトランスコーダ（２２０）のうちの１つが前記入力映像チャンク（２３３）の全ての前記入力映像サブチャンク（２３４）を出力映像サブチャンク（２３５）にトランスコードしたときに、前記スレーブトランスコーダ（２２０）は、前記出力映像サブチャンク（２３５）を出力映像チャンク（２３６）にアセンブルし、
前記処理装置（２１０）に、前記入力映像チャンク（２３３）に対応する前記出力映像チャンク（２３６）を前記１つのスレーブトランスコーダ（２２０）から受信させ、
前記処理装置（２１０）に、前記出力映像チャンク（２３６）を出力メディアストリーム（２３９）にアセンブルさせる、トランスコーディングサーバ（２００）。
【請求項１６】
前記処理装置（２１０）は、
前記入力映像チャンク（２３３）の残余部分を依然として受信している間に、前記入力映像チャンク（２３３）の受信された部分を入力映像サブチャンク（２３４）に分割し、
前記入力映像チャンク（２３３）の前記残余部分を依然として受信している間に、少なくとも１つの入力映像サブチャンク（２３４）を前記１つ以上のスレーブトランスコーダ（２２０）に送る、請求項１５に記載のトランスコーディングサーバ（２００）。
【請求項１７】
各スレーブトランスコーダ（２２０）は、スレーブデコーダ（５１０）とスレーブエンコーダ（５１２）とを含み、前記スレーブエンコーダ（５１２）は、第１の入力映像サブチャンク（２３４）を符号化する一方、前記スレーブデコーダ（５１０）は、第２の入力映像サブチャンク（２３４）を復号する、請求項１５に記載のトランスコーディングサーバ（２００）。
【請求項１８】
前記処理装置（２１０）は、前記入力メディアストリーム（２３２）の前記映像部分（２３２′）の任意の残余部分を入力映像チャンク（２３３）に分割している間に、前記出力映像チャンク（２３６）を前記出力メディアストリーム（２３９）にアセンブルする、請求項１５に記載のトランスコーディングサーバ（２００）。
【請求項１９】
前記処理装置（２１０）は、
前記入力映像チャンク（２３３）を複数のスレーブトランスコーダ（２２０）に割当て、
前記複数のスレーブトランスコーダ（２２０）のうちの１つが前記入力映像チャンク（２３３）のトランスコーディングを完了したときに、前記入力映像チャンク（２３３）の前記入力映像サブチャンク（２３４）のトランスコーディングを停止させるように前記複数のトランスコーダ（２２０）の他のスレーブトランスコーダ（２２０）に命令する、請求項１８に記載のトランスコーディングサーバ（２００）。
【請求項２０】
トランスコーディングを停止させるように前記複数のトランスコーダ（２２０）の他のスレーブトランスコーダ（２２０）に命令した後、前記処理装置（２１０）は、全ての前記スレーブトランスコーダ（２２０）を別の入力映像チャンク（２３３）の受信に利用可能であると特定する、請求項１９に記載のトランスコーディングサーバ（２００）。
【請求項２１】
前記処理装置（２１０）は、
前記入力メディアストリーム（２３２）を前記入力メディアストリーム（２３２）の前記映像部分（２３２′）および音声部分（２３２″）に多重分離し、
前記入力メディアストリーム（２３２）の前記音声部分（２３２″）を入力音声チャンク（２３７）に分割し、各入力音声チャンク（２３７）は、前記映像部分（２３２′）の前記入力映像チャンク（２３３）のうちの１つにそれぞれ対応する、請求項１５に記載のトランスコーディングサーバ（２００）。
【請求項２２】
入力音声チャンク（２３７）および入力映像チャンク（２３３）の対応する各対は、前記入力メディアストリーム（２３２）内で同時に開始し、実質的に同一の時間の長さを有する、請求項２１に記載のトランスコーディングサーバ（２００）。
【請求項２３】
各入力音声チャンク（２３７）について、前記処理装置（２１０）は、
前記入力音声チャンク（２３７）を音声サンプルに復号し、
前記入力音声チャンク（２３７）内の失われた音声パケットが検出されたときに、前記失われた音声パケットに対応する場所でサイレント音声サンプルを前記音声サンプルに挿入し、
前記音声サンプルを出力音声チャンク（２３８）に符号化する、請求項２２に記載のトランスコーディングサーバ（２００）。
【請求項２４】
前記処理装置（２１０）が前記出力映像チャンク（２３６）を前記出力メディアストリーム（２３９）にアセンブルすることは、各出力音声チャンク（２３８）を対応する出力映像チャンク（２３６）と位置合わせすることを含む、請求項２３に記載のトランスコーディングサーバ（２００）。
【請求項２５】
前記処理装置（２１０）は、
利用可能なトランスコーダ（２２０）のキュー（２２０′）から前記１つ以上のスレーブトランスコーダ（２２０）を検索し、
前記１つ以上のスレーブトランスコーダ（２２０）が割当てられた入力映像チャンク（２３３）のトランスコーディングを完了したときに、前記１つ以上のトランスコーダ（２２０）を解放して前記トランスコーダ（２２０）のキュー（２２０′）に戻す、請求項１５に記載のトランスコーディングサーバ（２００）。
【請求項２６】
各入力映像チャンク（２３３）について、前記処理装置（２１０）は、
前記入力映像チャンク（２３３）の直前の先行する入力映像チャンク（２３３）の少なくとも１つの先行する入力映像サブチャンク（２３４）を取得し、
前記入力映像チャンク（２３３）の前記入力映像サブチャンク（２３４）を送る前に、前記少なくとも１つの先行する入力映像サブチャンク（２３４）を前記１つ以上のトランスコーダ（２２０）に送る、請求項１５に記載のトランスコーディングサーバ（２００）。
【請求項２７】
前記処理装置（２１０）は、前記出力メディアストリーム（２３９）を発行する、請求項１５に記載のトランスコーディングサーバ（２００）。
【請求項２８】
前記処理装置（２１０）は、前記出力メディアストリーム（２３９）をユーザ装置（１００）に送信する、請求項１５に記載のトランスコーディングサーバ（２００）。
【請求項２９】
前記処理装置（２１０）は、前記スレーブトランスコーダ（２２０）を実行する、請求項１５に記載のトランスコーディングサーバ（２００）。
【請求項３０】
前記スレーブトランスコーダ（２２０）は、前記処理装置（２１０）と通信する１つ以上の他の処理装置（２１０）上で実行される、請求項１５に記載のトランスコーディングサーバ（２００）。
【請求項３１】
トランスコーディングサーバ（２００）であって、
コンピュータ読取可能な命令を格納する非一時的なコンピュータ読取可能な媒体（２３０）と、
符号化パラメータの第１の組から符号化パラメータの第２の組にデータをトランスコードする複数のスレーブトランスコーダ（２２０）と、
前記コンピュータ読取可能な媒体（２３０）と通信し、前記コンピュータ読取可能な命令を実行する処理装置（２１０）とを備え、前記コンピュータ読取可能な命令は、
前記処理装置（２１０）に、前記符号化パラメータの第１の組に従って符号化された入力メディアストリーム（２３２）を受信させ、
前記処理装置（２１０）に、前記入力メディアストリーム（２３２）の残余部分を受信している間に、前記入力メディアストリーム（２３２）の受信された部分の映像部分（２３２′）を入力映像チャンク（２３３）に分割させ、
前記入力メディアストリーム（２３２）の前記映像部分（２３２′）の各入力映像チャンク（２３３）について、
前記処理装置（２１０）に、前記入力映像チャンク（２３３）を１つ以上のスレーブトランスコーダ（２２０）に割当てさせ、
前記処理装置（２１０）に、前記入力映像チャンク（２３３）を入力映像サブチャンク（２３４）に分割させ、
前記処理装置（２１０）に、各入力映像サブチャンク（２３４）を前記１つ以上のスレーブトランスコーダ（２２０）の各々に別々に送らせ、
前記処理装置（２１０）に、前記１つ以上のスレーブトランスコーダ（２２０）から出力映像サブチャンク（２３５）を別々に受信させ、各出力映像サブチャンク（２３５）は、前記入力映像サブチャンク（２３４）のうちの１つにそれぞれ対応し、
前記処理装置（２１０）に、前記出力映像サブチャンク（２３５）を、前記入力映像チャンク（２３３）に対応する出力映像チャンク（２３６）にアセンブルさせ、
前記処理装置（２１０）に、前記出力映像チャンク（２３６）を出力メディアストリーム（２３９）にアセンブルさせる、トランスコーディングサーバ（２００）。
【発明の詳細な説明】
【技術分野】
【０００１】
技術分野
本開示は、サブチャンキングを用いてメディアストリームをトランスコードするための技術に関する。
【背景技術】
【０００２】
背景
スマートフォンおよびタブレットなどのユーザ装置においてライブテレビジョンストリームを受信したいという需要が高まっている。しかし、短いエンドツーエンド待ち時間でモバイル装置がライブテレビジョンストリームを入手できるようにすることは、コンテンツプロバイダに課題を突きつける。現在の解決策は、６０秒を超え得るエンドツーエンド待ち時間を提供する。このような待ち時間の長さは、顧客にとって魅力がない。
【発明の概要】
【課題を解決するための手段】
【０００３】
概要
本開示の一局面は、方法を提供し、上記方法は、符号化パラメータの第１の組に従って符号化された入力メディアストリームを受信するステップを含む。また、上記方法は、上記入力メディアストリームの残余部分を受信している間に、上記入力メディアストリームの受信された部分の映像部分を入力映像チャンクに分割するステップを含む。上記入力メディアストリームの上記映像部分の各入力映像チャンクについて、上記方法は、上記入力映像チャンクを１つ以上のスレーブトランスコーダに割当てるステップと、上記入力映像チャンクを入力映像サブチャンクに分割するステップと、上記符号化パラメータの第１の組から符号化パラメータの第２の組にデータをトランスコードする上記１つ以上のスレーブトランスコーダの各々に各入力映像サブチャンクを別々に送るステップとをさらに含む。上記方法は、各入力映像サブチャンクを対応する出力映像サブチャンクにトランスコードするステップと、上記出力映像サブチャンクを、上記入力映像チャンクに対応する出力映像チャンクにアセンブルするステップとをさらに含む。また、上記方法は、上記出力映像チャンクを出力メディアストリームにアセンブルするステップを含む。
【０００４】
本開示の実現例は、以下の特徴のうちの１つ以上を含み得る。いくつかの実現例では、上記方法は、上記入力映像チャンクの残余部分を依然として受信している間に、上記入力映像チャンクの受信された部分を入力映像サブチャンクに分割するステップを含む。また、上記方法は、上記入力映像チャンクの上記残余部分を依然として受信している間に、少なくとも１つの入力映像サブチャンクを上記１つ以上のスレーブトランスコーダに送るステップを含み得る。各スレーブトランスコーダは、スレーブデコーダとスレーブエンコーダとを含み得る。上記スレーブエンコーダは、第１の入力映像サブチャンクを符号化する一方、上記スレーブデコーダは、第２の入力映像サブチャンクを復号する。上記方法は、上記入力メディアストリームの上記映像部分の任意の残余部分を入力映像チャンクに分割している間に、上記出力映像チャンクを上記出力メディアストリームにアセンブルするステップを含み得る。
【０００５】
いくつかの例では、上記方法は、上記入力映像チャンクを複数のスレーブトランスコーダに割当てるステップを含む。さらにまたは代替的に、上記複数のスレーブトランスコーダのうちの１つが上記入力映像チャンクのトランスコーディングを完了し得たときに、上記入力映像チャンクの上記入力映像サブチャンクのトランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令する。さらにまたは代替的に、上記方法は、トランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令した後、全ての上記スレーブトランスコーダを別の入力映像チャンクの受信に利用可能であると特定するステップを含み得る。
【０００６】
いくつかの実現例では、上記方法は、上記入力メディアストリームを上記入力メディアストリームの上記映像部分および音声部分に多重分離するステップと、上記入力メディアストリームの上記音声部分を入力音声チャンクに分割するステップとを含む。各入力音声チャンクは、上記映像部分の上記入力映像チャンクのうちの１つにそれぞれ対応する。さらにまたは代替的に、入力音声チャンクおよび入力映像チャンクの対応する各対は、上記入力メディアストリーム内で同時に開始し得て、実質的に同様または同一の時間の長さを有し得る。
【０００７】
各入力音声チャンクについて、上記方法は、上記入力音声チャンクを音声サンプルに復号するステップを含み得る。上記入力音声チャンク内の失われた音声パケットが検出されたときに、上記方法は、上記失われた音声パケットに対応する場所でサイレント音声サンプルを上記音声サンプルに挿入するステップと、上記音声サンプルを出力音声チャンクに符号化するステップとを含み得る。さらにまたは代替的に、上記方法は、各出力音声チャンクを対応する出力映像チャンクと位置合わせするステップを含む、上記出力映像チャンクを上記出力メディアストリームにアセンブルするステップを含み得る。
【０００８】
いくつかの実現例では、上記方法は、利用可能なトランスコーダのキューから上記１つ以上のスレーブトランスコーダを検索するステップを含む。１つ以上のスレーブトランスコーダが割当てられた入力映像チャンクのトランスコーディングを完了したときに、上記方法は、上記１つ以上のトランスコーダを解放して上記トランスコーダのキューに戻すステップを含み得る。
【０００９】
各入力映像チャンクについて、上記方法は、上記入力映像チャンクの直前の先行する入力映像チャンクの少なくとも１つの先行する入力映像サブチャンクを取得するステップを含み得る。上記方法は、上記入力映像チャンクの上記入力映像サブチャンクを送る前に、少なくとも１つの先行する入力映像サブチャンクを上記１つ以上のスレーブトランスコーダに送るステップを含み得る。上記方法は、上記出力メディアストリームを発行するステップと、上記出力メディアストリームをユーザ装置に送信するステップとをさらに含み得る。
【００１０】
本開示の別の局面は、トランスコーディングサーバを提供し、上記トランスコーディングサーバは、非一時的なコンピュータ読取可能な媒体と、複数のスレーブトランスコーダと、処理装置とを含む。上記非一時的なコンピュータ読取可能な媒体は、コンピュータ読取可能な命令を格納する。上記複数のスレーブトランスコーダは、符号化パラメータの第１の組から符号化パラメータの第２の組にデータをトランスコードする。上記処理装置は、上記コンピュータ読取可能な媒体と通信し、上記コンピュータ読取可能な命令を実行する。上記コンピュータ読取可能な命令は、上記処理装置に、上記符号化パラメータの第１の組に従って符号化された入力メディアストリームを受信させる。また、上記コンピュータ読取可能な命令は、上記処理装置に、上記入力メディアストリームの残余部分を受信している間に、上記入力メディアストリームの受信された部分の映像部分を入力映像チャンクに分割させる。上記入力メディアストリームの上記映像部分の各入力映像チャンクについて、上記処理装置は、上記入力映像チャンクを１つ以上のスレーブトランスコーダに割当て、上記入力映像チャンクを入力映像サブチャンクに分割し、上記入力映像サブチャンクを出力映像サブチャンクにトランスコードする上記１つ以上のスレーブトランスコーダの各々に各入力映像サブチャンクを別々に送る。上記１つ以上のスレーブトランスコーダのうちの１つが上記入力映像チャンクの全ての上記入力映像サブチャンクを出力映像サブチャンクにトランスコードしたときに、上記スレーブトランスコーダは、上記出力映像サブチャンクを出力映像チャンクにアセンブルする。上記処理装置は、上記入力映像チャンクに対応する上記出力映像チャンクを上記１つのスレーブトランスコーダから受信し、上記出力映像チャンクを出力メディアストリームにアセンブルする。
【００１１】
いくつかの実現例では、上記処理装置は、上記入力映像チャンクの残余部分を依然として受信している間に、上記入力映像チャンクの受信された部分を入力映像サブチャンクに分割する。上記処理装置はさらに、上記入力映像チャンクの上記残余部分を依然として受信している間に、少なくとも１つの入力映像サブチャンクを上記１つ以上のスレーブトランスコーダに送る。上記処理装置は、上記入力メディアストリームの上記映像部分の任意の残余部分を入力映像チャンクに分割している間に、上記出力映像チャンクを上記出力メディアストリームにアセンブルし得る。
【００１２】
各スレーブトランスコーダは、スレーブデコーダとスレーブエンコーダとを含み得る。上記スレーブエンコーダは、第１の入力映像サブチャンクを符号化する一方、上記スレーブデコーダは、第２の入力映像サブチャンクを復号する。上記処理装置はさらに、上記入力映像チャンクを複数のスレーブトランスコーダに割当て得る。さらにまたは代替的に、上記複数のスレーブトランスコーダのうちの１つが上記入力映像チャンクのトランスコーディングを完了したときに、上記処理装置は、上記入力映像チャンクの上記入力映像サブチャンクのトランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令し得る。さらにまたは代替的に、トランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令した後、上記処理装置は、全ての上記スレーブトランスコーダを別の入力映像チャンクの受信に利用可能であると特定し得る。
【００１３】
いくつかの例では、上記処理装置は、上記入力メディアストリームを上記入力メディアストリームの上記映像部分および音声部分に多重分離し、上記入力メディアストリームの上記音声部分を入力音声チャンクに分割する。各入力音声チャンクは、上記映像部分の上記入力映像チャンクのうちの１つにそれぞれ対応する。入力音声チャンクおよび入力映像チャンクの対応する各対は、上記入力メディアストリーム内で同時に開始し得て、実質的に同様または同一の時間の長さを有し得る。
【００１４】
各入力音声チャンクについて、上記処理装置は、上記入力音声チャンクを音声サンプルに復号し得る。上記入力音声チャンク内の失われた音声パケットが検出されたときに、上記処理装置は、上記失われた音声パケットに対応する場所で１つ以上のサイレント音声サンプルを上記音声サンプルに挿入し得る。上記処理装置はさらに、上記音声サンプルを出力音声チャンクに符号化し得る。さらにまたは代替的に、上記サーバは、上記出力映像チャンクを上記出力メディアストリームにアセンブルし得て、各出力音声チャンクを対応する出力映像チャンクと位置合わせすることを含む。いくつかの例では、上記サーバは、複数の出力ストリームをアセンブルし、各出力ストリームは、出力映像チャンクまたは出力音声チャンクを別々に含むが、それら両方は含まない。
【００１５】
いくつかの例では、上記処理装置は、利用可能なトランスコーダのキューから上記１つ以上のスレーブトランスコーダを検索する。上記１つ以上のスレーブトランスコーダが割当てられた入力映像チャンクのトランスコーディングを完了したときに、上記処理装置は、上記１つ以上のトランスコーダを解放して上記トランスコーダのキューに戻す。上記処理装置は、上記出力メディアストリームを発行し、上記出力メディアストリームをユーザ装置に送信し得る。上記処理装置は、上記スレーブトランスコーダを実行し得て、上記スレーブトランスコーダは、上記処理装置と通信する１つ以上の他の処理装置上で実行され得る。
【００１６】
本開示の別の局面は、トランスコーディングサーバを提供し、上記トランスコーディングサーバは、非一時的なコンピュータ読取可能な媒体と、複数のスレーブトランスコーダと、処理装置とを含む。上記非一時的なコンピュータ読取可能な媒体は、コンピュータ読取可能な命令を格納する。上記複数のスレーブトランスコーダは、符号化パラメータの第１の組から符号化パラメータの第２の組にデータをトランスコードする。上記処理装置は、上記コンピュータ読取可能な媒体と通信し、上記コンピュータ読取可能な命令を実行する。上記コンピュータ読取可能な命令は、上記処理装置に、上記符号化パラメータの第１の組に従って符号化された入力メディアストリームを受信させる。また、上記コンピュータ読取可能な命令は、上記処理装置に、上記入力メディアストリームの残余部分を受信している間に、上記入力メディアストリームの受信された部分の映像部分を入力映像チャンクに分割させる。上記入力メディアストリームの上記映像部分の各入力映像チャンクについて、上記処理装置は、上記入力映像チャンクを１つ以上のスレーブトランスコーダに割当て、上記入力映像チャンクを入力映像サブチャンクに分割し、各入力映像サブチャンクを上記１つ以上のスレーブトランスコーダの各々に別々に送る。また、上記処理装置は、上記１つ以上のスレーブトランスコーダから出力映像サブチャンクを受信し、上記出力映像サブチャンクを、上記入力映像チャンクに対応する出力映像チャンクにアセンブルする。各出力映像サブチャンクは、上記入力映像サブチャンクのうちの１つにそれぞれ対応する。上記処理装置はさらに、上記出力映像チャンクを出力メディアストリームにアセンブルすることを含む。
【００１７】
いくつかの実現例では、上記処理装置は、上記入力映像チャンクの残余部分を依然として受信している間に、上記入力映像チャンクの受信された部分を入力映像サブチャンクに分割する。上記処理装置はさらに、上記入力映像チャンクの上記残余部分を依然として受信している間に、少なくとも１つの入力映像サブチャンクを上記１つ以上のスレーブトランスコーダに送る。上記処理装置は、上記入力メディアストリームの上記映像部分の任意の残余部分を入力映像チャンクに分割している間に、上記出力映像チャンクを上記出力メディアストリームにアセンブルし得る。
【００１８】
各スレーブトランスコーダは、スレーブデコーダとスレーブエンコーダとを含み得る。上記スレーブエンコーダは、第１の入力映像サブチャンクを符号化する一方、上記スレーブデコーダは、第２の入力映像サブチャンクを復号する。上記処理装置はさらに、上記入力映像チャンクを複数のスレーブトランスコーダに割当て得る。さらにまたは代替的に、上記複数のスレーブトランスコーダのうちの１つが上記入力映像チャンクのトランスコーディングを完了したときに、上記処理装置は、上記入力映像チャンクの上記入力映像サブチャンクのトランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令し得る。さらにまたは代替的に、トランスコーディングを停止させるように上記複数のトランスコーダの他のスレーブトランスコーダに命令した後、上記処理装置は、全ての上記スレーブトランスコーダを別の入力映像チャンクの受信に利用可能であると特定し得る。
【００１９】
いくつかの例では、上記処理装置は、上記入力メディアストリームを上記入力メディアストリームの上記映像部分および音声部分に多重分離し、上記入力メディアストリームの上記音声部分を入力音声チャンクに分割する。各入力音声チャンクは、上記映像部分の上記入力映像チャンクのうちの１つにそれぞれ対応する。入力音声チャンクおよび入力映像チャンクの対応する各対は、上記入力メディアストリーム内で同時に開始し得て、実質的に同様または同一の時間の長さを有し得る。
【００２０】
各入力音声チャンクについて、上記処理装置は、上記入力音声チャンクを音声サンプルに復号し得る。上記入力音声チャンク内の失われた音声パケットが検出されたときに、上記処理装置は、上記失われた音声パケットに対応する場所でサイレント音声サンプルを上記音声サンプルに挿入し得る。上記処理装置はさらに、上記音声サンプルを出力音声チャンクに符号化し得る。さらにまたは代替的に、上記サーバは、上記出力映像チャンクを上記出力メディアストリームにアセンブルし得て、各出力音声チャンクを対応する出力映像チャンクと位置合わせすることを含む。
【００２１】
いくつかの例では、上記処理装置は、利用可能なトランスコーダのキューから上記１つ以上のスレーブトランスコーダを検索する。上記１つ以上のスレーブトランスコーダが割当てられた入力映像チャンクのトランスコーディングを完了したときに、上記処理装置は、上記１つ以上のトランスコーダを解放して上記トランスコーダのキューに戻す。上記処理装置は、上記出力メディアストリームを発行し、上記出力メディアストリームをユーザ装置に送信し得る。上記処理装置は、上記スレーブトランスコーダを実行し得て、上記スレーブトランスコーダは、上記処理装置と通信する１つ以上の他の処理装置上で実行され得る。
【００２２】
本開示の１つ以上の実現例の詳細が、添付の図面および以下の説明に記載されている。他の局面、特徴および利点は、明細書および図面、ならびに特許請求の範囲から明らかになるであろう。
【００２３】
さまざまな図面中の同様の参照符号は、同様の要素を示す。
【図面の簡単な説明】
【００２４】
【図１】ユーザ装置にメディアストリームを配信するための例示的なシステムを示す概略図である。
【図２Ａ】トランスコーディングサーバの例示的な構成要素を示す概略図である。
【図２Ｂ】トランスコーディングサーバの例示的なデータフローを示す概略図である。
【図３】サブチャンキングモジュールの例示的な構成要素を示す概略図である。
【図４】リソースマネージャの例示的な構成要素を示す概略図である。
【図５】スレーブトランスコーダの例示的な構成要素を示す概略図である。
【図６】ユーザ装置にメディアストリームを配信するための方法の例示的な一組のオペレーションの概略図である。
【図７】入力映像チャンクをトランスコードするための方法の例示的な一組のオペレーションの概略図である。
【発明を実施するための形態】
【００２５】
詳細な説明
図１は、ユーザ装置１００にメディアストリームを配信するための例示的なシステム１０を示す。いくつかの実現例では、トランスコーディングサーバ２００は、コンテンツプロバイダ１２０から入力メディアストリーム２３２を受信する。入力メディアストリーム２３２は、メディアコンテンツを含み、符号化パラメータの第１の組（例えば１０８０ｐ  ＭＰ４符号化）に従って符号化される。トランスコーディングサーバ２００は、任意の好適なソースから入力メディアストリーム２３２を受信することができ、当該任意の好適なソースは、ネットワーク１１０を介した人工衛星１２０Ａおよび／またはコンテンツサーバ１２０Ｂからの送信によるものを含む。いくつかの例では、入力メディアストリーム２３２は、ライブテレビジョンストリーム、例えば１つ以上のユーザ装置１００に送信されるライブのテレビ放送である。さらにまたは代替的に、入力メディアストリーム２３２は、ユーザ装置から要求される要求されたメディアコンテンツ（例えばビデオ・オン・デマンドサービス）である。
【００２６】
トランスコーディングサーバ２００は、入力メディアストリーム２３２を、パラメータの第２の組（例えば７２０ｐ  ＭＰ４符号化）に従って符号化された出力メディアストリーム２３９にトランスコードする。トランスコーディングサーバ２００（または別のサーバ）は、出力メディアストリーム２３９をユーザ装置１００に送信し得る。ユーザ装置の例としては、タブレットコンピューティング装置１００Ａ、スマートフォン１００Ｂ、パーソナルコンピューティング装置１００Ｃおよびセットトップボックス１００Ｄが挙げられるが、これらに限定されるものではない。ユーザ装置１００は、１つ以上のユーザインターフェース（例えばディスプレイ装置および／またはスピーカ）を介して出力メディアストリーム２３９を再生し得る。入力または出力メディアストリーム２３２，２３９は、映像部分２３２′および／または音声部分２３２″を含み得る。ユーザ装置１００は、任意の好適な態様で出力メディアストリーム２３９を要求し得る。例えば、スマートフォンまたはタブレットタイプのユーザ装置１００の場合、ユーザは、ユーザ装置１００上の専用のアプリケーションにアクセスし得る。当該アプリケーションにおいて、ユーザは、メディアストリーム（例えばチャンネルまたは映像）を選択することができる。ユーザ装置１００は、選択されたコンテンツを要求する要求をトランスコーディングサーバ２００（またはそれに関連付けられるサーバ）に送信する。当該要求に応答して、トランスコーディングサーバ２００（または関連のサーバ）は、出力メディアストリーム２３９をユーザ装置１００に流すことができる。出力メディアストリーム２３９は、ユーザ装置１００に適したパラメータで符号化され得る。
【００２７】
動作時、トランスコーディングサーバ２００は、入力メディアストリーム２３２を映像部分２３２′および音声部分２３２″に多重分離する（これは、メディアストリームが音声部分と映像部分とを含んでいるときである）。トランスコーディングサーバ２００は、入力メディアストリーム２３２の映像部分２３２′を複数の入力映像チャンク２３３に分割し、各々の入力映像チャンク２３３を複数の入力映像サブチャンク２３４に分割する。入力映像チャンク２３３は、入力メディアストリーム２３２の映像データのセグメントである。入力映像サブチャンク２３４は、入力映像チャンク２３３のセグメントである。いくつかの実現例では、入力映像チャンク２３３の各々は、同じサイズのセグメント（例えば、５ミリ秒）に分割される。同様に、入力映像サブチャンク２３４の各々は、同じサイズのサブセグメント（例えば、．５ミリ秒）に分割される。したがって、入力映像チャンク２３３の各々は、同じ数の入力映像サブチャンク２３４を含んでいる。明瞭化するために、トランスコーディングサーバ２００によってまだトランスコードされていない映像チャンク２３３および映像サブチャンク２３４を、入力映像チャンク２３３および入力映像サブチャンク２３４と称する。
【００２８】
トランスコーディングサーバ２００は、入力メディアストリーム２３２の各入力映像チャンク２３３を１つ以上の利用可能なスレーブトランスコーダ２２０に割当てる。トランスコーディングサーバ２００は、それぞれの映像チャンク２３３の映像サブチャンク２３４を、それぞれの映像チャンク２３３が割当てられた１つ以上のスレーブトランスコーダ２２０に送る。１つ以上のスレーブトランスコーダ２２０は、入力映像サブチャンク２３４の各々を出力映像サブチャンク２３５にトランスコードする。いくつかの実現例では、１つ以上のスレーブトランスコーダ２２０は、出力映像サブチャンク２３５を用いて、それぞれの入力映像チャンク２３３に対応する出力映像チャンク２３６をアセンブルする。スレーブトランスコーダ２２０は、出力映像チャンク２３６を返し得る。いくつかの実現例では、スレーブトランスコーダ２２０は、個々の出力映像サブチャンク２３５を出力し得て、当該個々の出力映像サブチャンク２３５は、後に出力映像チャンク２３６にアセンブルされる。スレーブトランスコーダ２２０は、トランスコーディングサーバ２００の一部として実現されてもよく、またはトランスコーディングサーバ２００の外側にあってもよい。
【００２９】
いくつかの実現例では、トランスコーディングサーバ２００は、各々の入力映像チャンク２３３を複数のスレーブトランスコーダ２２０（例えば３個のスレーブトランスコーダ２２０）に割当てる。次いで、トランスコーディングサーバ２００は、入力映像チャンク２３３の入力映像サブチャンク２３４を、割当てられたスレーブトランスコーダ２２０に送る。割当てられたスレーブトランスコーダ２２０のうちの１つが出力映像チャンク２３６への入力映像チャンク２３３のトランスコーディングを完了させるまで、割当てられたスレーブトランスコーダ２２０は、入力映像サブチャンク２３４をトランスコードする。一旦完了すると、トランスコーディングサーバ２００は、他のスレーブトランスコーダ２２０を停止させ得る。トランスコーディングサーバ２００は、全ての割当てられたスレーブトランスコーダ２２０の状態を利用可能な状態に変更し得る。
【００３０】
入力メディアストリーム２３２が音声部分２３２″を含んでいるシナリオでは、トランスコーディングサーバ２００は、音声部分２３２″をトランスコードし得る。いくつかの実現例では、トランスコーディングサーバ２００は、音声部分２３２″を一連の入力音声チャンク２３７に分割し得る。トランスコーディングサーバ２００は、入力音声チャンク２３７を出力音声チャンク２３８にトランスコードする。いくつかの実現例では、入力音声チャンク２３７は、入力音声サブチャンク（図示せず）に分割され、当該入力音声サブチャンクは、出力音声サブチャンク（図示せず）にトランスコードされる。出力音声サブチャンクは、出力音声チャンク２３８にアセンブルされる。
【００３１】
トランスコーディングサーバ２００は、出力映像チャンク２３６および出力音声チャンク２３８に基づいて出力メディアストリーム２３９をアセンブルし得る。トランスコーディングサーバ２００（またはトランスコーディングサーバ２００に関連付けられる別のサーバ）は、ネットワーク１１０を介して出力メディアストリームを１つ以上のユーザ装置１００に配信し得る。
【００３２】
図２Ａおよび図２Ｂは、トランスコーディングサーバ２００の一例を示す。図２Ａは、トランスコーディングサーバ２００の構成要素を示す。図２Ｂは、トランスコーディングサーバ２００の例示的なデータフローを示す。トランスコーディングサーバ２００は、処理装置２１０と、メモリ装置２３０と、記憶装置２４０と、ネットワークインターフェース装置２５０とを含み得る。トランスコーディングサーバ２００の構成要素は、１つ以上のバスおよび／またはネットワーク１１０によって接続され得る。トランスコーディングサーバ２００は単一の場所における装置として示されているが、トランスコーディングサーバ２００は、分散した態様で実現されてもよく、そのため、構成要素は、異なる物理的場所における複数の装置として実現されてもよい。このようなシナリオでは、構成要素は、ネットワーク１１０（例えばインターネットおよび／または１つ以上のイントラネット）を介して通信し得る。
【００３３】
処理装置２１０は、コンピュータ読取可能な命令（例えば実行可能なコンピュータコード）を実行する１つ以上の物理的プロセッサを含んでいる。処理装置２１０が２つ以上のプロセッサを含んでいる実現例では、２つ以上のプロセッサは、個々の態様で動作してもよく、または分散した態様で動作してもよい。処理装置２１０は、ストリーミングエージェント２１２、サブチャンクモジュール２１４、リソースマネージャ２１６、ライブチャンクマネージャ２１８、および複数のスレーブトランスコーダ２２０を実行し得て、これらは全てコンピュータ読取可能な命令として実現され得る。上記の構成要素は、集合的にトランスコーディングパイプラインを形成する。いくつかの実現例では、実行される構成要素のうちのいくつかは、異なる物理的装置において実現される。例えば、ライブチャンクマネージャ２１８およびストリーミングエージェント２１２は、第１の場所／装置において実行されてもよく、サブチャンクモジュール２１４、リソースマネージャおよびスレーブトランスコーダ２２０は、第２の場所／装置において実行されてもよい。さらに、スレーブトランスコーダ２２０は、処理装置２１０と通信する１つ以上の他の処理装置２１０上で実行されてもよい。
【００３４】
メモリ装置２３０は、１つ以上の揮発性の非一時的なコンピュータ読取可能な媒体（例えばＲＡＭおよび／またはＲＯＭ）を含んでいる。メモリ装置２３０は、入力メディアストリーム２３２の部分および出力メディアストリーム２３９の部分を格納することができる。さらに、メモリ装置２３０は、上記のコンピュータ読取可能な命令を格納することができる。
【００３５】
記憶装置２４０は、１つ以上の不揮発性の非一時的なコンピュータ読取可能な媒体（例えばフラッシュディスク、ＨＤＤなど）を含んでいる。記憶装置２４０は、入力映像チャンク２３３およびその対応するサブチャンク２３４、出力映像チャンク２３６およびその対応するサブチャンク２３５、入力音声チャンク２３７およびその対応するサブチャンク、ならびに、出力音声チャンク２３９およびその対応するサブチャンクを含む任意の好適なデータを格納することができる。さらに、記憶装置２４０は、音声および映像データに対応するメタデータを格納することができる。
【００３６】
ネットワークインターフェース装置２５０は、ネットワーク１１０からデータを受信し、ネットワーク１１０にデータを送信する。ネットワークインターフェース装置２５０は、ネットワーク１１０と通信する１つ以上の装置を含み得る。ネットワークインターフェース装置２５０は、有線および／または無線通信を実行し得る。
【００３７】
ストリーミングエージェント２１２は、トランスコーディングパイプラインのエントリポイントである。ストリーミングエージェント２１２は、さまざまなコンテンツソース１２０から入力メディアストリーム２３２を受信する。個々の入力メディアストリーム２３２は、一連のデータパケットとして、またはアナログ信号として受信され得る。デジタル入力メディアストリーム２３２の場合には、入力メディアストリームの各パケットは、音声データおよび／または映像データ、ならびに入力メディアストリーム２３２に関するメタデータを含み得る。入力メディアストリーム２３２に関するメタデータの例としては、ストリームの名称（例えばＮＢＣ（登録商標）から受信されるライブストリームのＮＢＣＵＨＤ）、データパケットに含まれるデータのタイムスタンプ、入力メディアストリーム２３２の符号化パラメータ（例えばＨ２６４＿１０８０ｐ）が挙げられるが、これらに限定されるものではない。ストリーミングエージェント２１２は、入力メディアストリーム２３２をメモリ装置２３０に格納することができ、および／または、入力メディアストリーム２３２をサブチャンクモジュール２１４に提供することができる。入力メディアストリーム２３２がアナログ信号であるシナリオでは、ストリーミングエージェント２１２は、アナログ入力メディアストリーム２３２をデジタル入力メディアストリーム２３２に変換するアナログデジタル変換器を含み得る。
【００３８】
サブチャンクモジュール２１４は、ストリーミングエージェント２１２および／またはメモリ装置２３０から入力メディアストリーム２３２を取得する。サブチャンクモジュール２１４は、入力メディアストリーム２３２の映像部分２３２′および音声部分２３２″を取得するために入力メディアストリーム２３２を多重分離する。サブチャンクモジュール２１４は、入力メディアストリーム２３２の映像部分２３２′を一連の映像チャンク２３３に分割し、各映像チャンク２３３を一連の映像サブチャンク２３４に分割する。サブチャンクモジュール２１４は、映像サブチャンク２３４および任意に映像チャンク２３３をリソースマネージャ２１６に提供する。
【００３９】
サブチャンクモジュール２１４は、入力メディアストリーム２３２の音声部分２３２″をトランスコードするようにさらに構成され得る。サブチャンクモジュール２１４は、トランスコードされた音声部分２３２″を入力音声チャンク２３７に分割する。サブチャンクモジュール２１４は、入力音声チャンク２３７を出力音声チャンク２３８にトランスコードする。出力音声チャンク２３８は、出力メディアストリーム２３９をアセンブルするために使用され、また、格納およびデバッギングの目的でリソースマネージャ２１６に通信され得る。
【００４０】
リソースマネージャ２１６は、各入力映像チャンク２３３の入力映像サブチャンク２３４を受信する。各々の入力映像チャンク２３３について、リソースマネージャ２１６は、入力映像チャンク２３３を１つ以上のスレーブトランスコーダ２２０に割当てる。リソースマネージャ２１６が新たな映像チャンク２３３の映像サブチャンク２３４を受信し始めたときに、リソースマネージャ２１６は、当該新たな映像チャンク２３３をｍ個のスレーブトランスコーダ（ｍは１以上）に割当てる。いくつかの実現例では、利用可能なスレーブトランスコーダ２２０は、先入れ先出し（first-in-first-out：ＦＩＦＯ）キュー２２０′において待機する。リソースマネージャ２１６は、キュー２２０′の順序付けに基づいてｍ個のスレーブトランスコーダ２２０を選択する。
【００４１】
ｍが１よりも大きい実現例では、リソースマネージャ２１６は、新たな映像チャンク２３３の各映像サブチャンク２３４をｍ個のスレーブトランスコーダの各々に送る。スレーブトランスコーダ２２０は、出力映像チャンク２３６をリソースマネージャ２１６に返す。ｍ個のトランスコーダ２２０のうちの１つが映像チャンク２３３全体のトランスコーディングを終了すると、リソースマネージャ２１６は、他のｍ−１個のスレーブトランスコーダ２２０を停止させ得る。スレーブトランスコーダ２２０が入力映像チャンク２３３の入力映像サブチャンク２３４を全てトランスコードし、対応する出力映像チャンク２３６をリソースマネージャ２１６に返すと、スレーブトランスコーダ２２０は、映像チャンク２３３全体を終了する。一旦リソースマネージャがｍ−１個のスレーブトランスコーダを停止させると、ｍ個のスレーブトランスコーダ２２０の状態は、利用可能な状態に変更され、ｍ個のスレーブトランスコーダ２２０は、キュー２２０′に戻る。このようにして、映像チャンク２３３のトランスコーディングは、スローなスレーブトランスコーダ２２０によって遅延される可能性が低い。さらに、これらの実現例は、ｍ個のスレーブトランスコーダ２２０のうちの１つ以上が故障した場合に冗長性を提供する。さらに、入力映像チャンク２３３をトランスコードできない可能性が低い。
【００４２】
いくつかの実現例では、リソースマネージャ２１６は、出力映像チャンク２３６をサブチャンクモジュール２１４に返す。また、いくつかの実現例では、リソースマネージャ２１６は、その後の分析および／またはデバッギングの目的で出力映像サブチャンク２３５および出力映像チャンク２３６を記憶装置２４０に書込む。
【００４３】
サブチャンクモジュール２１４は、出力映像チャンク２３６および出力音声チャンク２３８に基づいて出力メディアストリーム２３９をアセンブルする。サブチャンクモジュール２１４は、１つ以上のプロトコルに従って出力メディアストリーム２３９をアセンブルし得る。例えば、サブチャンクモジュール２１４は、ＨＴＴＰベースのＭＰＥＧダイナミック・アダプティブ・ストリーミング（Dynamic Adaptive Streaming over HTTP：ＤＡＳＨ）プロトコルおよび／またはアップルＨＴＴＰライブストリーミング（HTTP Live Streaming：ＨＬＳ）プロトコルに従って出力メディアストリーム２３９を生成し得る。出力映像チャンク２３６および対応するトランスコードされた音声チャンク２３８が利用可能になったときに、サブチャンクモジュール２１４は、出力メディアストリーム２３９を生成し得る。サブチャンクモジュール２１４は、出力メディアストリーム２３９をライブチャンクマネージャ２１８に発行する。
【００４４】
ライブチャンクマネージャ２１８は、トランスコーディングパイプラインのエグジットポイントである。出力メディアストリーム２３９の部分がサブチャンクモジュール２１４によって発行されたときに、ライブチャンクマネージャ２１８は、当該部分を受信する。ライブチャンクマネージャ２１８は、出力メディアストリーム２３９を１つ以上のユーザ装置１００に配信し得る。ライブチャンクマネージャ２１８は、特定のメディアストリーム２３９のための要求を受信し、それにしたがって、要求を行っているユーザ装置１００に出力メディアストリーム２３９を供給する。
【００４５】
図３は、例示的なサブチャンクモジュール２１４を示す。いくつかの実現例では、サブチャンクモジュール２１４は、異なる符号化標準に従って符号化された出力メディアストリーム２３２を生成するように構成されている。示されている例では、例示的なサブチャンクモジュール２１４は、ＨＴＴＰベースのＭＰＥＧダイナミック・アダプティブ・ストリーミング（ＤＡＳＨ）またはアップルＨＴＴＰライブストリーミング（ＨＬＳ）に従って符号化された出力メディアストリーム２３２を生成し得る。さらに、示されている例では、サブチャンクモジュール２１４は、デマルチプレクサ３１０と、チャンカ３１２と、音声デコーダ３１４と、音声エンコーダ３１６と、ＭＰＥＧマルチプレクサ３１８と、ＨＬＳセグメンタ３２０と、パブリッシャ３２２と、ダッシュセグメンタ３２４と、サブチャンクマネージャ３２６とを含み得る。
【００４６】
動作時、デマルチプレクサ３１０は、入力メディアストリーム２３２を受信し、入力メディアストリーム２３２を映像部分２３２′および音声部分２３２″に多重分離する。いくつかの実現例では、デマルチプレクサ３１０は、入力メディアストリーム２３２を別々の音声部分２３２″および映像部分２３２′に多重分離するために、既存のライブラリ（例えばＦｆｍｐｅｇサードパーティライブラリ）を呼出す。デマルチプレクサ３１０は、音声部分２３２″および映像部分２３２′を一連のデータパケットとして出力する。代替的に、デマルチプレクサ３１０は、処理装置２１０と通信するハードウェアコンポーネントであってもよい。
【００４７】
チャンカ３１２は、入力メディアストリーム２３２の音声部分２３２″および映像部分２３２′を受信し、それぞれの部分を音声チャンク２３７および映像チャンク２３３に分割する。いくつかの実現例では、チャンカ３１２は、時間の長さ（例えば５秒）が実質的に同様または同等の入力映像チャンク２３３および入力音声チャンク２３７を出力する。さらに、各々の入力映像チャンク２３３は、同一の相対的時刻において開始および終了する対応する入力音声チャンク２３７を有し得る。例えば、入力映像チャンク２３３が、．１５秒のタイムスタンプで開始する場合には、チャンカ３１２は、やはり、．１５秒のタイムスタンプで開始する入力音声チャンク２３７を分割する。チャンカ３１２は、入力メディアストリーム２３２の他の入力映像チャンク２３３から入力映像チャンク２３３を識別するチャンク識別子（「チャンクＩＤ」）を各入力映像チャンク２３３に割当て得る。同様に、チャンカ３１２は、チャンク識別子を各入力音声チャンク２３７に割当て得る。いくつかの実現例では、対応する音声チャンク２３７および映像チャンク２３３は、同一のまたは対応するチャンク識別子が割当てられ得る。さらに、入力映像チャンク２３３および音声チャンク２３７は、チャンクタイプ（例えば音声または映像）によってタグ付けされ得る。
【００４８】
各々の入力映像チャンク２３３について、チャンカ３１２は、入力映像チャンク２３３を一連の入力映像サブチャンク２３４に分割し得る。チャンカ３１２は、入力映像チャンク２３３の他の入力映像サブチャンク２３４から入力映像サブチャンク２３４を識別するサブチャンク識別子（「サブチャンクＩＤ」）を各入力映像サブチャンク２３４に割当て得る。チャンカ３１２は、入力映像サブチャンク２３４を同等の時間区分に分割し、そのため、各々の入力映像チャンク２３３は、実質的に同様または同一の時間の長さを有する同一の数の入力映像サブチャンク２３４を有する。このようにして、入力メディアストリーム２３２の映像部分２３２′は、一連の映像チャンク２３３および映像サブチャンク２３４に編成される。単一の映像チャンク２３３は、映像サブチャンク２３４の順序付きリストを含んでいる。いくつかの実現例では、サブチャンク２３４は、それらのサブチャンクＩＤ（例えばタイムスタンプ）によって順序付けられ、チャンクＩＤによって一意に識別される。入力映像サブチャンク２３４の各々は、入力映像サブチャンク２３４が属している入力映像チャンク２３３およびサブチャンク２３４のタイプ（例えば映像）を識別する識別子をさらに含み得る。
【００４９】
いくつかの実現例では、チャンカ３１２は、各入力音声チャンク２３７を一連の入力音声サブチャンクに分割し得る。これらの実現例では、チャンカ３１２は、サブチャンクＩＤを各音声サブチャンクに割当て得る。入力音声サブチャンクの各々は、入力音声サブチャンクが属している入力音声チャンク２３７およびサブチャンクのタイプ（例えば音声）を識別する識別子をさらに含み得る。
【００５０】
出力映像チャンク２３６、出力音声チャンク２３８、出力映像サブチャンク２３５および出力音声サブチャンクは、入力対応物と同様のフィールドを含み得る。例えば、出力映像および音声チャンク２３６，２３８は、チャンクのタイプを示し得る。同様に、出力映像サブチャンク２３５および出力音声サブチャンクは、サブチャンクが属しているチャンクを識別する識別子を含み得る。
【００５１】
チャンカ３１２は、失われた映像パケットについて入力メディアストリーム２３２の映像部分２３２′を分析するようにさらに構成され得る。これらの実現例では、入力映像チャンク２３３における１つ以上の映像パケットが失われるかまたは損傷を受けると、チャンカ３１２は、入力映像チャンク２３３に、損傷を受けたというフラグを立て得る。動作時、チャンカ３１２は、ストリームにおける不連続性について入力ストリームの入ってくる映像部分２３２′をモニタリングする。当該不連続性は、単一の入力映像チャンク２３３内で、または２つの隣接する入力映像チャンク２３３の境界をまたいで生じ得る。いずれのシナリオでも、入力映像チャンクが不連続性を含んでいる場合には、チャンカ３１２は、サブチャンクフラグフィールドに印を付ける（例えばサブチャンクフラグフィールドに「ＢａＤ」と印を付ける）ことによって、入力映像チャンク２３３にローカルに、損傷を受けたというラベルを付ける。いくつかの実現例では、チャンカ３１２は、同様に、入力映像チャンク２３３における全ての後続のサブチャンク２３４に、損傷を受けたという印を付ける。これらのサブチャンク２３４は、後にリソースマネージャ２１６に書込まれ、リソースマネージャ２１６は、サブチャンク２３４をスレーブトランスコーダ２２０に提供する。スレーブトランスコーダ２２０が、損傷を受けたという印を付けられた入力映像サブチャンク２３４を処理するとき、スレーブトランスコーダ２２０は、そのように印を付けられた入力映像チャンク２３３の最後のサブチャンクに達するまで、損傷を受けたサブチャンク２３４を読取り続ける。この時点で、スレーブトランスコーダ２２０は、予めロードされたキー／同期フレームを用いて、（フラグが立てられた出力映像サブチャンク２３５からなる）新たな出力映像チャンク２３６を生成し、出力映像チャンク２３６にそのように印を付け、フラグが立てられた出力映像チャンク２３６をリソースマネージャ２１６に書込む。いくつかの実現例では、フラグが立てられた出力映像チャンク２３６は、繰返される多数の同一の、固定された、予めロードされたキー／同期フレームからなっている。出力映像チャンク２３６は、「ＢａＤ」と印を付けられた単一の出力映像サブチャンク２３５を含み得る。
【００５２】
音声デコーダ３１４は、入力メディアストリーム２３２の音声部分２３２″の入力音声チャンク２３７を受信および復号する。いくつかの実現例では、音声デコーダ３１４は、音声チャンクをパルス符号変調（pulse-code modulation：「ＰＣＭ」）サンプルに復号する。音声デコーダ３１４は、音声チャンク２３７において失われた音声パケットを検出するように構成され得る。音声デコーダ３１４が失われた音声パケットを検出する場合、音声デコーダ３１４は、サイレント音声ＰＣＭサンプルを音声チャンク２３７のＰＣＭサンプルに挿入する。
【００５３】
音声エンコーダ３１６は、一連のＰＣＭサンプルを受信し、ＰＣＭサンプルを出力音声チャンク２３８に符号化する。音声エンコーダ３１６は、ＰＣＭサンプルを任意の好適なフォーマット（例えばＡＡＣ）に符号化する。エンコーダ３１６は、チャンクＩＤを出力音声チャンク２３８に割当て得て、チャンクＩＤは、出力音声チャンク２３８を生成するために使用される入力音声チャンク２３７のチャンクＩＤと同一であるか、またはそれに対応する。
【００５４】
サブチャンクマネージャ３２６は、サブチャンクモジュール２１４とリソースマネージャ２１６との間のインターフェースである。サブチャンクマネージャ３２６は、チャンカ３１２から映像チャンク２３３およびサブチャンク２３４を受信し、入力映像チャンク２３３およびサブチャンク２３４をリソースマネージャ２１６に書込む。いくつかの実現例では、チャンカ３１２がデマルチプレクサ３１０からそれぞれの入力チャンク２３３，２３７の後続の音声および映像部分を受信している間に、サブチャンクマネージャ３２６は、入力映像サブチャンク２３４をリソースマネージャ２１６に書込み得る。このようにして、同一の入力映像チャンク２３３の後続の映像サブチャンク２３４がチャンカ３１２、デマルチプレクサ３１０、またはいくつかのシナリオではストリーミングエージェント２１２によって受信される前に、サブチャンクマネージャ３２６は、以前の映像サブチャンク２３４をリソースマネージャ２１６に通信する。これらの実現例では、メディアストリームの待ち時間を減少させることができる。なぜなら、トランスコーディングサーバ２００が入力映像チャンク２３３全体を受信する前に、チャンク２３３のトランスコーディングを開始することができるからである。いくつかの実現例では、サブチャンクマネージャ３２６は、出力音声チャンク２３８および／または出力音声サブチャンクをリソースマネージャ２１６に書込むようにさらに構成され得る。
【００５５】
サブチャンクマネージャ３２６は、リソースマネージャ２１６から出力映像チャンク２３６を受信する。出力映像チャンク２３６がリソースマネージャ２１６に書込まれたときに、リソースマネージャ２１６は、出力映像チャンク２３６をサブチャンクマネージャ３２６に書込み得る。サブチャンクマネージャ３２６は、出力メディアストリーム２３９の送信のためのフォーマットに応じて、受信された出力映像チャンク２３６をＭＰＥＧマルチプレクサ３１８および／またはダッシュセグメンタ３２４に提供し得る。例えば、出力メディアストリーム２３９がＨＬＳストリームとして送信される場合には、サブチャンクマネージャ３２６は、受信された出力映像チャンク２３６および対応する出力音声チャンク２３８をＭＰＥＧマルチプレクサ３１８に提供する。出力メディアストリーム２３９がＤＡＳＨストリームとして送信される場合には、サブチャンクマネージャ３２６は、受信された出力映像チャンク２３６および対応する出力音声チャンク２３８または音声サブチャンクをダッシュセグメンタ３２４に提供する。サブチャンクマネージャ３２６は、それぞれのチャンク識別子またはそれぞれのタイムスタンプに基づいて、対応する出力音声チャンク２３８および出力映像チャンク２３６を識別し得る。いくつかの実現例では、チャンカ３１２およびリソースマネージャ２１６のうちの１つ以上が、サブチャンクマネージャ３２６の機能のうちのいくつかまたは全てを実行してもよい。
【００５６】
出力メディアストリーム２３９がＨＬＳストリームである場合、ＭＰＥＧマルチプレクサ３１８は、出力メディアストリーム２３９を取得するために、出力音声チャンク２３８および対応する出力映像チャンク２３６を好適なＭＰＥＧフォーマット（例えばＭＰＥＧ−２ＴＳ）に多重化する。ＨＬＳセグメンタ３２０は、出力メディアストリーム２３９をＭＰＥＧ−２トランスポートストリームとして受信し、出力メディアストリーム２３９を一連の同じ長さのファイルとして出力する。ＨＬＳセグメンタ３２０は、セグメント化された出力メディアストリーム２３９をパブリッシャ３２２に出力する。パブリッシャ３２２は、セグメント化された出力メディアストリーム２３９をライブチャンクマネージャ２１８に発行する。パブリッシャ３２２は、出力メディアストリーム２３９のセグメントを受信された通りに発行する。このようにして、ライブチャンクマネージャ２１８は、リアルタイムで、またはリアルタイムに近い状態で、出力メディアストリーム２３９を配信することができる。
【００５７】
出力メディアストリーム２３９がＤＡＳＨストリームである場合、出力音声チャンク２３８および対応する出力映像チャンク２３６は、多重化される必要はない。したがって、出力音声チャンク２３８および対応する出力映像チャンク２３６は、ダッシュセグメンタ３２４に通信される。ダッシュセグメンタ３２４は、出力音声チャンク２３８および対応する出力映像チャンク２３６を受信し、出力メディアストリーム２３９を一連の小さなＨＴＴＰファイルセグメントとして生成する。ダッシュセグメンタ３２４は、出力メディアストリーム２３９をパブリッシャ３２２に書込む。パブリッシャ３２２は、出力メディアストリーム２３９のセグメントを受信された通りに発行する。
【００５８】
図３の例示的なサブチャンクモジュール２１４は、ＤＡＳＨメディアストリームおよびＨＬＳメディアストリームを提供するように構成されている。しかし、サブチャンクモジュール２１４は、今では公知のまたは後に開発される他の好適なタイプのメディアストリームを出力するように適合されてもよい。サブチャンクモジュール２１４は、一例として設けられており、サブチャンクモジュール２１４の変形例は、本開示の範囲内である。サブチャンクモジュール２１４は、図３に図示されていない他の構成要素を含んでいてもよい。例えば、サブチャンクモジュール２１４は、出力メディアストリーム２３９を暗号化する１つ以上の暗号化モジュールを含んでいてもよい。
【００５９】
図４は、ジョブアロケータ４１０とデータマネージャ４１２とを含む例示的なリソースマネージャ２１６を示す。ジョブアロケータ４１０は、トランスコーディングジョブ４１４を受信する。トランスコーディングジョブ４１４は、入力メディアストリーム２３２の識別子（例えばチャネル識別子またはコンテンツファイル識別子）と、出力メディアストリーム２３９のための符号化パラメータの組とを含んでいる。ジョブアロケータ４１０は、出力メディアストリーム２３９のための符号化パラメータに従って入力サブチャンク２３３を出力映像サブチャンク２３５およびチャンク２３６にトランスコードするようにスレーブトランスコーダ２２０を環境設定する。符号化パラメータは、映像解像度、目標ビットレート、映像コーデックタイプ、目標ＧＯＰサイズ、またはその他の好適なパラメータを含み得る。
【００６０】
ジョブアロケータ４１０は、入力メディアストリーム２３２の受信された入力映像チャンク２３３をｍ個のスレーブトランスコーダ２２０に割当て、ｍは、１以上の整数である。ジョブアロケータ４１０は、複数のスレーブトランスコーダ２２０からｍ個のスレーブトランスコーダ２２０を割当てる。複数のスレーブトランスコーダ２２０は、アレイまたはキュー２２０′または何らかの同様の構造で配置され得る。いくつかの実現例では、キューは、スレーブトランスコーダ２２０を利用可能な状態に維持するＦＩＦＯキューである。ジョブアロケータ４１０が新たな入力映像チャンク２３３の入力映像サブチャンク２３４を受信すると、ジョブアロケータ４１０は、ｍ個のスレーブトランスコーダ２２０をキューから取出し、取出されたスレーブトランスコーダ２２０に新たな入力映像チャンク２３３を割当てる。一旦ジョブアロケータ４１０が新たな入力映像チャンク２３３をｍ個のスレーブトランスコーダ２２０に割当てると、ジョブアロケータ４１０は、割当てられたスレーブトランスコーダ２２０に入力映像サブチャンク２３４を送り始める。ｍ個のスレーブトランスコーダ２２０の各々が入力映像サブチャンク２３４をトランスコードするときに、スレーブトランスコーダ２２０は、出力映像サブチャンク２３５からなる出力映像チャンク２３６をジョブアロケータ４１０に返す。ジョブアロケータ４１０は、出力映像チャンク２３６をサブチャンクモジュール２１４に返し得る。
【００６１】
ｍ個のスレーブトランスコーダ２２０のうちの１つが入力映像チャンク２３３全体のトランスコーディングを完了するまで、ジョブアロケータ４１０は、各入力映像サブチャンク２３４をｍ個のスレーブトランスコーダ２２０の各々に送る。ｍ個のスレーブトランスコーダ２２０のうちの１つが、割当てられた入力映像チャンク２３３の全ての映像サブチャンク２３４のトランスコーディングを完了したと判断すると、ジョブアロケータ４１０は、他のｍ−１個のスレーブトランスコーダ２２０を停止させ、ｍ個全てのスレーブトランスコーダ２２０の状態を利用可能な状態に更新し、ｍ個のスレーブトランスコーダ２２０をキュー２２０′に返し得る。
【００６２】
ジョブアロケータ４１０は、入力メディアストリーム２３２の期間中は上記の態様で動作し続けることができる。ジョブアロケータ４１０は、スレーブトランスコーダ２２０を一巡し得て、複数の組のｍ個のスレーブトランスコーダ２２０に異なる入力映像チャンク２３３を同時にトランスコードさせ得る。例えば、以前の入力映像チャンク２３３が依然として異なる一組のｍ個のスレーブトランスコーダ２２０によってトランスコードされている間に、ジョブアロケータ４１０は、一組のｍ個のスレーブトランスコーダ２２０による後続の入力映像チャンク２３３のトランスコーディングを開始してもよい。このようにして、入力メディアストリーム２３２をトランスコードするための待ち時間を減少させることができる。
【００６３】
データマネージャ４１２は、入力映像チャンク２３３および出力映像チャンク２３６をメモリ装置２３０および記憶装置２４０に格納する。ジョブアロケータ４１０は、受信された映像チャンク２３３および返された出力映像チャンク２３６をデータマネージャ４１２に提供し得る。
【００６４】
データマネージャ４１２は、各入力映像チャンク２３３の１つ以上のコピーをメモリ装置２３０に書込み得る。いくつかの実現例では、入力映像チャンク２３３は、一連の入力映像チャンク２３３として格納される。入力映像チャンク２３３を格納するとき、データマネージャ４１２は、映像チャンク２３３のチャンクＩＤを用いて、メモリ装置２３０内の入力映像チャンク２３３の各々を索引付けし得る。同様に、データマネージャ４１２は、映像サブチャンク２３４のサブチャンクＩＤを用いて、メモリ装置２３０内の入力映像サブチャンク２３４の各々を索引付けし得る。いくつかの実現例では、データマネージャ４１２は、パブリックデータ構造を用いて、サブチャンクモジュール２１４がデータをメモリ装置２３０に書込むことを可能にし、スレーブトランスコーダ２２０がメモリ装置２３０からデータを読取ることを可能にする。
【００６５】
また、データマネージャ４１２は、各出力映像チャンク２３６の１つ以上のコピーをメモリ装置２３０に書込む。いくつかの実現例では、データマネージャ４１２は、各出力映像チャンク２３６のトランスコードされたフレームおよび／またはサブチャンク２３４を格納する。データマネージャ４１２は、チャンク２３６のチャンクＩＤを用いて、メモリ装置２３０内の出力映像チャンク２３６の各々を索引付けし得る。さらに、データマネージャ４１２は、サブチャンク２３５のサブチャンクＩＤを用いて、メモリ装置２３０内の各出力映像サブチャンク２３５を索引付けし得る。いくつかの実現例では、データマネージャ４１２は、パブリックデータ構造を用いて、サブチャンクモジュール２１４がメモリ装置２３０からデータを読取ることを可能にし、スレーブトランスコーダ２２０がデータをメモリ装置２３０に書込むことを可能にする。
【００６６】
また、いくつかの実現例では、データマネージャ４１２は、各入力音声チャンク２３７および出力音声チャンク２３８の１つ以上のコピーをメモリ装置２３０に格納する。入力音声チャンク２３７および出力音声チャンク２３８は、それらのそれぞれのチャンクＩＤによって参照されることができる。さらに、データマネージャ４１２は、サブチャンクモジュール２１４が記憶装置２４０から音声データを読み書きすることを可能にするパブリックデータ構造を使用し得る。
【００６７】
デバッギングの目的で、データマネージャ４１２は、メモリ装置２３０に格納されたデータを記憶装置２４０において複製し得る。例えば、入力および出力映像チャンク２３３，２３６ならびに入力および出力音声チャンク２３７，２３８は、．ｃｎｓファイルの状態で記憶装置２４０に格納され得る。さらに、入力および出力映像チャンク２３３，２３６ならびに入力および出力音声チャンク２３７，２３８に対応するメタデータが、記憶装置２４０に格納され得る。
【００６８】
図５は、例示的なスレーブトランスコーダ２２０を示す。スレーブトランスコーダ２２０は、入力映像チャンク２３３のトランスコーディングを担当する。スレーブトランスコーダ２２０は、リソースマネージャ２１６から入力映像チャンク２３３を読取り、出力映像チャンク２３６の出力映像サブチャンク２３５をリソースマネージャ２１６に書込む。
【００６９】
各々のスレーブトランスコーダ２２０は、３つの異なる状態、すなわち「未初期化状態」、「利用可能な状態」および「ビジー状態」のうちの１つに属し得る。スレーブトランスコーダ２２０が符号化パラメータの組に従って入力映像チャンク２３３を符号化するように構成される前は、スレーブトランスコーダ２２０の状態は、未初期化状態である。一旦スレーブトランスコーダ２２０が初期化／環境設定され、キュー２２０′に入ると、リソースマネージャ２１６は、スレーブトランスコーダ２２０の状態を利用可能な状態に変更する。スレーブトランスコーダ２２０が「利用可能な」状態にあるとき、スレーブトランスコーダ２２０は、トランスコーディングを実行する準備が整っている。いくつかの実現例では、スレーブトランスコーダ２２０は、その状態を利用可能な状態として周期的に報告する。スレーブトランスコーダ２２０は、トランスコーディングジョブを受信するために、利用可能な状態になければならない。リソースマネージャ２１６が入力映像チャンク２３３をスレーブトランスコーダ２２０に割当てると、リソースマネージャ２１６は、スレーブトランスコーダ２２０の状態をビジー状態に変更する。スレーブトランスコーダ２２０がビジー状態にあるとき、スレーブトランスコーダ２２０は、入力映像チャンク２３３をトランスコードしており、別のトランスコーディングジョブを割当てられることはできない。スレーブトランスコーダ２２０が入力映像チャンク２３３のトランスコーディングを終了すると、スレーブトランスコーダ２２０は、出力映像チャンク２３６をリソースマネージャに返し、リソースマネージャ２１６は、スレーブトランスコーダの状態を利用可能な状態に更新する。
【００７０】
各々のスレーブトランスコーダ２２０は、映像デコーダ５１０と映像エンコーダ５１２とを含んでいる。いくつかの実現例では、映像デコーダ５１０は、入力映像サブチャンク２３４を未加工のＹＵＶフレームに復号する。映像エンコーダ５１２は、当該未加工のＹＵＶフレームを出力映像サブチャンク２３５に符号化する。映像エンコーダ５１２は、符号化パラメータに従って出力映像サブチャンク２３５を符号化する。これら２つの連結的な段階（復号に続く符号化）は、復号段階から出た未加工のＹＵＶフレームを符号化のための後続の符号化段階に直ちに押出すことができるように復号および符号化を並列化するために実行される。
【００７１】
動作時、リソースマネージャ２１６は、トランスコーディングジョブ（すなわちトランスコードされるべき入力映像チャンク２３３）をスレーブトランスコーダ２２０に割当てる。リソースマネージャ２１６は、トランスコードされるべき入力映像チャンク２３３のチャンクＩＤ、出力映像チャンク２３６に提供するためのチャンクＩＤ、および出力映像チャンク２３６の符号化パラメータを提供する。トランスコーディングの到来時に、リソースマネージャ２１６は、符号化パラメータに従って出力映像チャンク２３６を符号化するように全てのスレーブトランスコーダ２２０を初期化し得る。さらに、スレーブトランスコーダ２２０は、初期化されるときに、エラー処理の目的で、予め規定された同期／キーフレーム（Ｈ２６４／ＡＶＣにおけるＩＤＲ）をロードし得る。
【００７２】
スレーブトランスコーダ２２０は、リソースマネージャ２１６から入力映像チャンク２３３の入力映像サブチャンク２３４を読取り始める。スレーブトランスコーダ２２０は、映像サブチャンク２３４を映像デコーダ５１０に送り、ＹＵＶフレームをエンコーダ５１２に送る。スレーブトランスコーダ２２０は、入力映像チャンク２３３の最後のサブチャンク２３４に達するまで、リソースマネージャ２１６から入力映像サブチャンク２３４を読取り続ける。一旦スレーブトランスコーダ２２０が入力映像チャンク２３３の全てのサブチャンク２３４をトランスコードすると、スレーブトランスコーダ２２０は、出力映像サブチャンク２３５を出力映像チャンク２３６にアセンブルし得て、出力映像チャンク２３６をリソースマネージャ２１６に書込み得る。さらにまたは代替的に、スレーブトランスコーダ２２０は、トランスコードされた出力映像サブチャンク２３５をリソースマネージャ２１６に返す。いくつかの実現例では、スレーブトランスコーダ２２０は、出力映像サブチャンク２３５を返す前に全ての映像サブチャンク２３３をトランスコードするまで待機する。他の実現例では、スレーブトランスコーダ２２０は、出力映像サブチャンク２３５が利用可能になったときに出力映像サブチャンク２３５をリソースマネージャ２１６に返す。
【００７３】
いくつかの実現例では、スレーブトランスコーダ２２０は、損傷を受けた入力映像チャンク２３３を処理するように構成されている。スレーブトランスコーダ２２０が損傷を受けた入力映像サブチャンク２３４（例えば「ＢａＤ」と印を付けられた入力映像チャンク２３３）を受信すると、スレーブトランスコーダ２２０は、入力映像サブチャンク２３４のトランスコーディングを停止し、入力映像チャンク２３３、および、スレーブトランスコーダ２２０が既にトランスコードしたいかなる出力映像サブチャンク２３５も廃棄する。次いで、スレーブトランスコーダ２２０は、予め規定された同期／キーフレームを用いて代替の出力映像チャンク２３６を作成し、当該代替の映像チャンク２３６をリソースマネージャ２１６に書込む。スレーブトランスコーダ２２０は、そのように代替の出力映像チャンクにフラグを立てることができる。次いで、リソースマネージャ２１６は、スレーブトランスコーダ２２０の状態を利用可能な状態に更新する。
【００７４】
いくつかの実現例では、スレーブトランスコーダ２２０は、トランスコードされるべき入力映像チャンク２３３の直前の入力映像チャンク２３３の少なくとも一部をトランスコードし、次いで、トランスコードされるべき入力映像チャンク２３３をトランスコードすることによって、トランスコードされるべき入力映像チャンク２３３をトランスコードする。これらの実現例では、スレーブトランスコーダ２２０は、トランスコードされるべき入力映像チャンク２３３に対応する単一の出力映像チャンク２３６を出力する。動作時、リソースマネージャ２１６は、トランスコードされるべき入力映像チャンク２３３に先行する入力映像チャンク２３３の少なくとも一部をデコーダ５１２に送り、それに続いて、トランスコードされるべき入力映像チャンク２３３を送る。したがって、各々のスレーブトランスコーダ２２０は、２つの連続した入力映像チャンク２３３から入力映像サブチャンク２３４をトランスコードする。これらの実現例のうちのいくつかでは、スレーブトランスコーダ２２０は、トランスコードされるべき入力映像チャンク２３３をトランスコードする前に、トランスコードされるべき入力映像チャンク２３３に先行する入力映像チャンク２３３全体をトランスコードする。他の実現例では、スレーブトランスコーダ２２０は、トランスコードされるべき入力映像チャンク２３３をトランスコードする前に、トランスコードされるべき入力映像チャンク２３３に先行する入力映像チャンク２３３の後続の入力映像サブチャンク２３４（例えば最終的な３個のサブチャンク２３４）をトランスコードする。いずれの場合にも、スレーブトランスコーダ２２０が両方の入力映像チャンク２３３の入力映像サブチャンク２３４のトランスコーディングを終了すると、スレーブトランスコーダ２２０は、先行する入力映像チャンク２３３に対応する出力映像サブチャンク２３５を廃棄し、トランスコードされるべき入力映像チャンク２３３に対応する出力映像サブチャンク２３５を返す。スレーブトランスコーダ２２０は、単一パストランスコーディングについての出力映像チャンク２３６における最初のキーまたは同期フレームの質の突然の不連続性を回避するために、上記の技術を実行し得る。リソースマネージャ２１６は、入力メディアストリームの第１の入力映像チャンク２３３をｍ個のスレーブトランスコーダに二回送り得る。その後、リソースマネージャ２１６は、連続した入力映像チャンク２３３の第２の入力映像チャンク２３３をトランスコードするために割当てられる一組のｍ個のスレーブトランスコーダ２２０に、連続した入力映像チャンク２３３を送る。
【００７５】
図２Ａに戻って、いくつかの実現例では、トランスコーディングサーバ２００は、その構成要素のうちの１つ以上において致命的なエラーから回復するように設計されている。致命的なエラーは、スレーブトランスコーダ２２０、リソースマネージャ２１６、サブチャンクモジュール２１４、ストリーミングエージェント２１２および／またはライブチャンクマネージャ２１８において生じ得る。
【００７６】
１つのタイプのエラーは、スレーブトランスコーダ２２０の故障である。例えば、リソースマネージャ２１６は、既に故障したスレーブトランスコーダ２２０にトランスコーディングジョブを割当て得る。リソースマネージャ２１６がトランスコーディングジョブを複数のトランスコーダ２２０に割当てる実現例では、冗長な割当てが、機能しなくなったスレーブトランスコーダ２２０のいかなる問題も軽減させる。故障したトランスコーダ２２０が一旦発見されると、当該故障したトランスコーダ２２０は再起動され得る。
【００７７】
リソースマネージャ２１６が故障した場合に問題が生じ得る。例えば、スレーブトランスコーダ２２０は、リソースマネージャ２１６から入力映像サブチャンク２３４を読取ることができない可能性がある。このようなシナリオでは、スレーブトランスコーダ２２０は、現在のトランスコーディングジョブを終了させて、その状態を「利用可能な」状態に変更し、その現在の状態を報告する。別のシナリオでは、スレーブトランスコーダ２２０は、出力映像サブチャンク２３５をリソースマネージャ２１６に書込むことができない可能性がある。このようなシナリオでは、スレーブトランスコーダ２２０は、故障を無視して、トランスコーディングジョブを完了させ、その状態を利用可能な状態に更新する。別の例では、サブチャンクモジュール２１４は、入力音声チャンク２３７および／または入力映像チャンク２３３をリソースマネージャ２１６に書込むことができない可能性がある。このシナリオでは、サブチャンクモジュール２１４は、故障を無視し得て、まるで故障が発生していないかのように入力チャンク２３３，２３７をリソースマネージャ２１６に書込もうと試み続けることができる。しかし、サブチャンクモジュール２１４が所与のタイムアウト期間にわたって出力映像チャンク２３６を読取ることができなければ、サブチャンクモジュール２１４は、欠落している出力映像チャンク２３６を交換するために「ＢａＤ」出力映像チャンク２３６を生成し得る。最終的に、故障したスレーブトランスコーダ２１６は再起動され得る。再起動後、リソースマネージャ２１６は、既に処理されている入力映像チャンク２３３の一部として受信されたいかなる入力映像サブチャンク２３４も廃棄し得る。リソースマネージャ２１６は、一旦新たな入力映像チャンク２３３を受信し始めると、入力映像サブチャンク２３４を処理し始め得る。
【００７８】
別のタイプのエラーは、サブチャンクモジュール２１４の故障である。サブチャンクモジュール２１４が故障すると、トランスコーディングジョブを実行するいかなるスレーブトランスコーダ２２０も、現在のトランスコーディングジョブを終了させて、それらのそれぞれの状態を利用可能な状態に更新し得て、リソースマネージャ２１６は、スレーブトランスコーダ２２０へのトランスコーディングジョブの割当てを停止し得る。このシナリオでは、ライブチャンクマネージャ２１８は、出力メディアストリーム２３９の受信を停止し、ストリーミングエージェント２１２は、入力メディアストリーム２３２の配信を停止する。サブチャンクモジュール２１４が故障した場合、サブチャンクモジュール２１４は最終的には再起動され、他の構成要素の動作が動作を再開することができる。
【００７９】
ストリームエージェント２１２が故障した場合に問題が生じ得る。このシナリオでは、他の構成要素は、動作を継続し、入力メディアストリーム２３２をトランスコードしようと試み得る。しかし、ストリームエージェント２１２が故障状態にあるので、サブチャンクモジュール２１４は、入力メディアストリーム２３２を受信しない。残りの構成要素は、影響を受けない。一旦ストリームエージェント２１２が再起動すると、サブチャンクモジュール２１４は、入力メディアストリーム２３２を受信し始めることができ、トランスコーディングを開始することができる。
【００８０】
別のタイプのエラーは、ライブチャンクマネージャ２１８の故障である。ライブチャンクマネージャ２１８が故障すると、残りの構成要素は、入力メディアストリーム２３２を出力メディアストリーム２３４にトランスコードし続け得る。このシナリオでは、サブチャンクモジュール２１４は、出力メディアストリーム２３９の一部をライブチャンクマネージャ２１８に書込もうと試み得る。サブチャンクモジュール２１４がライブチャンクマネージャ２１８に書込むことができない場合、サブチャンクモジュール２１４は、出力メディアストリーム２３９の利用可能な部分を廃棄し得る。一旦ライブチャンクマネージャ２１８が再起動すると、サブチャンクモジュール２１４は、出力メディアストリーム２３９の配信を開始することができる。
【００８１】
上記のタイプのエラーは、一例として提供されている。トランスコーディングサーバ２００は、他のタイプのエラーにも遭遇する可能性がある。トランスコーディングサーバ２００がエラーを処理する技術もさまざまであってもよい。
【００８２】
図６は、ユーザ装置１００に出力メディアストリーム２３９を配信するための方法６００の例示的な一組のオペレーションを示す。方法６００は、上記のトランスコーディングサーバ２００の構成要素に関して説明される。しかし、方法６００は、任意の好適な装置によって実行されてもよい。
【００８３】
オペレーション６１０において、トランスコーディングサーバ２００は、トランスコーディング命令を受信する。トランスコーディング命令は、符号化すべき入力メディアストリーム２３２のストリーム識別子と、入力メディアストリーム２３２を符号化するための符号化パラメータとを含み得る。トランスコーディング命令は、ユーザ装置１００から受信されてもよく、別の装置から受信されてもよく、または内部で受信されてもよい。例えば、ユーザ装置１００は、チャネルのライブストリームを要求し得る。別の例では、トランスコーディングサーバ２００は、任意の数のチャネルおよびビデオ・オン・デマンドコンテンツを異なる符号化パラメータで利用できるようにするようにセットアップされ得る。ストリーム識別子は、トランスコードすべきチャネルフィードまたはメディアコンテンツを識別し得る。符号化パラメータは、出力メディアストリーム２３９のためのターゲット符号化を示す。
【００８４】
オペレーション６１２において、リソースマネージャ２１６は、スレーブトランスコーダ２２０を環境設定する。例えば、リソースマネージャ２１６は、スレーブトランスコーダ２２０の出力ビットレートを設定し得る。また、リソースマネージャ２１６は、スレーブトランスコーダ２２０のキュー２２０′も確立し得る。
【００８５】
オペレーション６１４において、サブチャンクモジュール２１４は、ストリーミングエージェント２１２によって入力メディアストリーム２３２を受信する。ストリーミングエージェント２１２は、任意の好適なコンテンツソース１２０から入力メディアストリーム２３２を受信し得る。例えば、ストリーミングエージェント２１２は、ケーブルプロバイダ、ネットワーク、個人、映画スタジオ、またはその他の好適なソースからコンテンツを受信してもよい。
【００８６】
オペレーション６１６において、サブチャンクモジュール２１４は、入力メディアストリーム２３２を音声部分２３２″および映像部分２３２′に多重分離する。オペレーション６１８において、サブチャンクモジュールは、音声部分２３２″を入力音声チャンク２３７に分割し、映像部分２３２′を入力映像チャンク２３３に分割する。入力映像チャンク２３３および入力音声チャンク２３７は、同じサイズのチャンク（例えば５ミリ秒）に分割される。各々の入力チャンク２３３，２３７は、チャンクＩＤを割当てられ、そのチャンクタイプでフラグを立てられ得る。
【００８７】
オペレーション６２０において、サブチャンクモジュール２１４は、入力音声チャンク２３７をトランスコードする。サブチャンクモジュール２１４は、出力メディアストリーム２３９の音声部分のための所望の符号化パラメータに従って入力音声チャンク２３７をトランスコードし得る。サブチャンクモジュール２１４は、入力音声チャンク２３７を出力音声チャンク２３８にトランスコードする。
【００８８】
オペレーション６２２において、サブチャンクモジュール２１４は、入力映像チャンク２３３を入力映像サブチャンク２３４に分割する。入力映像サブチャンク２３４は、同じ長さ（例えば．０５ミリ秒セグメント）を有している。サブチャンクモジュール２１４は、サブチャンクＩＤを各入力映像サブチャンク２３４に割当て得る。サブチャンクモジュール２１４は、入力映像サブチャンクをリソースマネージャ２１６に書込み得る。オペレーション６２４において、リソースマネージャ２１６およびスレーブトランスコーダ２２０は、入力映像チャンク２３３をトランスコードする。
【００８９】
図７は、入力映像チャンク２３３をトランスコードするための方法の一組のオペレーションを示す。オペレーション７１０において、リソースマネージャ２１６は、ｍ個のスレーブトランスコーダ２２０をキュー２２０′から取出し、ｍは、１以上の整数である。オペレーション７１２において、リソースマネージャ２１６は、入力映像チャンク２３３をｍ個のスレーブトランスコーダ２２０に割当てる。リソースマネージャ２１６は、ｍ個のスレーブトランスコーダの各々の状態をビジー状態に更新し得る。
【００９０】
いくつかの実現例では、オペレーション７１４に示されるように、ｍ個のスレーブトランスコーダ２２０は、トランスコードされるべき入力映像チャンク２３３の直前の入力映像チャンク２３３の少なくともいくつかのサブチャンク２３４を取得する。ｍ個のスレーブトランスコーダ２２０は、先行する入力映像チャンク２３３の全てのサブチャンク２３４または先行する入力映像チャンク２３３の最後の１つ以上のサブチャンク２３４をリソースマネージャ２１６から読取り得る。
【００９１】
オペレーション７１６において、ｍ個のスレーブトランスコーダ２２０は、トランスコードされるべき入力映像チャンク２３３の入力映像サブチャンク２３４を取得する。入力映像サブチャンク２３４は、シーケンシャルにリソースマネージャ２１６から読取られることができ、そのため、スレーブトランスコーダ２２０は、後続の入力映像サブチャンク２３４の前に以前の入力映像サブチャンク２３４を読取る。いくつかの実現例では、後続の入力映像サブチャンク２３４がサブチャンクモジュール２１４によって受信されている間に、ｍ個のスレーブトランスコーダ２２０は、以前の入力映像サブチャンク２３４を読取る。
【００９２】
オペレーション７１８において、ｍ個のスレーブトランスコーダ２２０は、入力映像サブチャンク２３４をトランスコードする。いくつかの実現例では、ｍ個のスレーブトランスコーダ２２０の各々は、入力映像サブチャンク２３４をＹＵＶフレームに復号し、次いで当該ＹＵＶフレームを出力映像サブチャンク２３５に符号化する。ｍ個のスレーブトランスコーダ２２０は、それら自身のそれぞれの速度で独立して動作し得る。スレーブトランスコーダ２２０が入力映像サブチャンク２３４の復号を終了すると、スレーブトランスコーダ２２０は、次の入力映像サブチャンク２３４を取得し、次の入力映像サブチャンク２３４の復号を開始し得る。同様に、スレーブトランスコーダ２２０が出力映像サブチャンク２３５を符号化すると、スレーブトランスコーダ２２０がＹＵＶフレームの復号を終了するや否や、スレーブトランスコーダ２２０は、次の利用可能な入力映像サブチャンク２３４を復号し始め得る。上記のように、いくつかの実現例では、ｍ個のスレーブトランスコーダ２２０は、トランスコードされるべき入力映像チャンク２３３の入力映像サブチャンク２３４をトランスコードする前に、先行する入力映像チャンク２３３の入力映像サブチャンク２３４をトランスコードし始める。先行する入力映像チャンク２３３の入力映像サブチャンク２３４をトランスコードするとき、スレーブトランスコーダ２２０は、それに対応する出力映像サブチャンク２３５を廃棄し得る。
【００９３】
オペレーション７２０において、リソースマネージャ２１６は、ｍ個のスレーブトランスコーダ２２０のうちの１つがトランスコーディングジョブ（すなわち入力映像サブチャンク２３４のトランスコーディング）を終了したか否かを判断する。終了していなければ、ｍ個のスレーブトランスコーダ２２０は、入力映像サブチャンクをトランスコードし続ける。
【００９４】
スレーブトランスコーダ２２０のうちの１つが入力映像チャンク２３３全体のトランスコーディングを完了すると、オペレーション７２２に示されるように、スレーブトランスコーダ２２０は、出力映像チャンク２３６を返す。一旦スレーブトランスコーダ２２０が入力映像チャンク２３３の全ての入力映像サブチャンク２３４のトランスコーディングを完了すると、スレーブトランスコーダ２２０は、出力映像サブチャンク２３５から出力映像チャンク２３６をアセンブルする。スレーブトランスコーダ２２０は、出力映像チャンク２３６をリソースマネージャ２１６に返す。いくつかの実現例では、スレーブトランスコーダ２２０は、出力映像サブチャンク２３５をリソースマネージャ２１６に返し得て、リソースマネージャ２１６は、出力映像サブチャンク２３５を出力映像チャンク２３６にアセンブルする。
【００９５】
オペレーション７２４において、リソースマネージャ２１６は、残りのｍ−１個のスレーブトランスコーダ２２０を停止させ、ｍ−１個のスレーブトランスコーダ２２０によってトランスコードされた出力映像サブチャンク２３５を廃棄する。リソースマネージャ２１６は、出力映像チャンク２３６をサブチャンクモジュール２１４に返し得る。オペレーション７２６において、リソースマネージャ２１６は、ｍ個のスレーブトランスコーダ２２０の状態を「利用可能な」状態に更新する。リソースマネージャ２１６は、ｍ個のスレーブトランスコーダ２２０をキュー２２０′に加え得る。
【００９６】
図６に戻って、入力映像チャンク２３３がサブチャンクモジュール２１４によって受信およびチャンクされると、リソースマネージャ２１６およびスレーブトランスコーダ２２０は、入力映像チャンク２３３を連続的にトランスコードする。なお、リソースマネージャ２１６およびスレーブトランスコーダ２２０が入力映像チャンク２３３をトランスコードする間に、サブチャンクモジュール２１４は、音声チャンク２３７をトランスコードし得る。
【００９７】
オペレーション６２６において、サブチャンクモジュール２１４は、出力映像チャンク２３６および出力音声チャンク２３８を出力メディアストリーム２３９にアセンブルする。上記のように、サブチャンクモジュール２１４は、１つ以上のプロトコル（例えばＨＬＳおよび／またはＤＡＳＨ）に従って出力メディアストリーム２３９を生成し得る。オペレーション６２８において、サブチャンクモジュール２１４は、出力メディアストリーム２３９をライブチャンクマネージャ２１８に発行する。ライブチャンクマネージャ２１８は、出力メディアストリーム２３９を１つ以上の下流のユーザ装置１００に送信し得る。
【００９８】
図６および図７において実行されるオペレーションの順序は、必須ではない。オペレーションの多くは、入力メディアストリーム２３２のさまざまな部分のために同時に行われる。例えば、音声および映像チャンクのトランスコーディングは、同時に実行されてもよく、複数の映像チャンク２３３が異なるスレーブトランスコーダ２２０によって同時にトランスコードされている例があってもよい。上記のオペレーションの多くは、並行しておよび／または直列的に実行されてもよい。例えば、スレーブトランスコーダ２２０は、他の入力映像サブチャンク２３４をトランスコードしている間に映像サブチャンク２３４を受信してもよい。同様に、音声チャンク２３８は、映像チャンク２３３と同時にトランスコードされてもよい。さらに、方法６００および７００は、代替的なまたは追加のオペレーションを含んでいてもよい。
【００９９】
ここに記載されているシステムおよび技術のさまざまな実現例は、デジタル電子回路および／もしくは光回路、集積回路、特別に設計されたＡＳＩＣ（特定用途向け集積回路）、コンピュータハードウェア、ファームウェア、ソフトウェア、ならびに／または、それらの組み合わせで実現可能である。これらのさまざまな実現例は、プログラム可能なシステム上で実行可能および／または解釈可能な１つ以上のコンピュータプログラムでの実現例を含み得て、当該プログラム可能なシステムは、記憶システム、少なくとも１つの入力装置および少なくとも１つの出力装置からデータおよび命令を受信し、記憶システム、少なくとも１つの入力装置および少なくとも１つの出力装置にデータおよび命令を送信するように結合された、特殊用途または汎用であり得る少なくとも１つのプログラム可能なプロセッサを含む。
【０１００】
これらのコンピュータプログラム（プログラム、ソフトウェア、ソフトウェアアプリケーションまたはコードとしても知られている）は、プログラム可能なプロセッサのためのマシン命令を含み、高級手続き型プログラミング言語および／もしくはオブジェクト指向プログラミング言語で実現されてもよく、ならびに／または、アセンブリ／マシン言語で実現されてもよい。本明細書で用いられる「マシン読取可能な媒体」および「コンピュータ読取可能な媒体」という表現は、マシン命令および／またはデータをプログラム可能なプロセッサに提供するために使用される任意のコンピュータプログラム製品、非一時的なコンピュータ読取可能な媒体、装置および／またはデバイス（例えば磁気ディスク、光ディスク、メモリ、プログラマブルロジックデバイス（Programmable Logic Device：ＰＬＤ））を指し、マシン命令をマシン読取可能な信号として受信するマシン読取可能な媒体を含む。「マシン読取可能な信号」という表現は、マシン命令および／またはデータをプログラム可能なプロセッサに提供するために使用される任意の信号を指す。
【０１０１】
本明細書に記載されている主題および機能的動作の実現例は、デジタル電子回路で実現されてもよく、または本明細書に開示されている構造およびそれらの構造的等価物を含むコンピュータソフトウェア、ファームウェアまたはハードウェアで実現されてもよく、またはそれらのうちの１つ以上の組み合わせで実現されてもよい。さらに、本明細書に記載されている主題は、１つ以上のコンピュータプログラム製品として、すなわちデータ処理装置によって実行するため、またはデータ処理装置の動作を制御するためにコンピュータ読取可能な媒体上で符号化されるコンピュータプログラム命令の１つ以上のモジュールとして実現されてもよい。コンピュータ読取可能な媒体は、マシン読取可能な記憶装置、マシン読取可能な記憶基板、メモリ装置、マシン読取可能な伝播信号に影響を及ぼす組成物、またはそれらのうちの１つ以上の組み合わせであってもよい。「データ処理装置」、「コンピューティング装置」および「コンピューティングプロセッサ」という表現は、データを処理するための全ての装置、デバイスおよびマシンを包含し、一例として、プログラム可能なプロセッサ、コンピュータ、または複数のプロセッサもしくはコンピュータを含む。当該装置は、ハードウェアに加えて、当該コンピュータプログラムのための実行環境を作り出すコード、例えばプロセッサファームウェア、プロトコルスタック、データベース管理システム、オペレーティングシステム、またはそれらのうちの１つ以上の組み合わせを構成するコードを含み得る。伝播信号は、人工的に生成される信号、例えば好適な受信機装置に送信される情報を符号化するために生成されるマシン生成電気信号、光信号または電磁信号である。
【０１０２】
コンピュータプログラム（アプリケーション、プログラム、ソフトウェア、ソフトウェアアプリケーション、スクリプトまたはコードとしても知られている）は、コンパイラ型言語またはインタープリタ型言語を含む任意の形態のプログラミング言語で書込まれてもよく、スタンドアロンのプログラムとして、またはコンピューティング環境での使用に適したモジュール、コンポーネント、サブルーチンまたは他のユニットとしてなどの任意の形態で配備されてもよい。コンピュータプログラムは、必ずしもファイルシステム内のファイルに対応していない。プログラムは、他のプログラムまたはデータ（例えばマークアップ言語文書に格納された１つ以上のスクリプト）を保持するファイルの一部に格納されてもよく、当該プログラムに専用の単一のファイルに格納されてもよく、または複数の調整されたファイル（例えば１つ以上のモジュール、サブプログラム、またはコードの一部を格納するファイル）に格納されてもよい。コンピュータプログラムは、１つのコンピュータ、または、一箇所に位置するかもしくは複数の箇所にまたがって分散されて通信ネットワークによって相互接続されている複数のコンピュータ上で実行されるように配備されてもよい。
【０１０３】
本明細書に記載されているプロセスおよび論理フローは、入力データ上で動作して出力を生成することによって機能を実行するように１つ以上のコンピュータプログラムを実行する１つ以上のプログラム可能なプロセッサによって実行され得る。また、プロセスおよび論理フローは、特殊用途論理回路、例えばＦＰＧＡ（フィールド・プログラマブル・ゲート・アレイ）またはＡＳＩＣ（特殊用途向け集積回路）によって実行されてもよく、装置も、特殊用途論理回路、例えばＦＰＧＡまたはＡＳＩＣとして実現されてもよい。
【０１０４】
コンピュータプログラムの実行に適したプロセッサは、一例として、汎用マイクロプロセッサおよび特殊用途マイクロプロセッサを両方とも含み、任意の種類のデジタルコンピュータの任意の１つ以上のプロセッサを含む。一般に、プロセッサは、リードオンリメモリまたはランダムアクセスメモリまたはそれら両方から命令およびデータを受信するであろう。コンピュータの必須の要素は、命令を実行するためのプロセッサと、命令およびデータを格納するための１つ以上のメモリ装置とである。一般に、コンピュータは、データを格納するための１つ以上の大容量記憶装置、例えば磁気ディスク、光磁気ディスクまたは光ディスクも含み、または、当該１つ以上の大容量記憶装置からデータを受信するもしくは当該１つ以上の大容量記憶装置にデータを転送するように、もしくは受信も転送もするように動作可能に結合されるであろう。しかし、コンピュータは、このような装置を有する必要はない。さらに、コンピュータは、別の装置、例えば数例を挙げると、携帯電話、パーソナルデジタルアシスタント（personal digital assistant：ＰＤＡ）、携帯型オーディオプレーヤ、グローバル・ポジショニング・システム（Global Positioning System：ＧＰＳ）受信機に組み込まれてもよい。コンピュータプログラム命令およびデータを格納するのに適したコンピュータ読取可能な媒体は、全ての形態の不揮発性メモリ、媒体およびメモリ装置を含み、一例として例えばＥＰＲＯＭ、ＥＥＰＲＯＭおよびフラッシュメモリ装置といった半導体メモリ装置、例えば内蔵ハードディスクまたは取外し可能なディスクといった磁気ディスク、光磁気ディスク、ならびにＣＤ  ＲＯＭおよびＤＶＤ−ＲＯＭディスクを含む。プロセッサおよびメモリは、特殊用途論理回路によって補完されてもよく、または特殊用途論理回路に組み入れられてもよい。
【０１０５】
ユーザとの対話を提供するために、本開示の１つ以上の局面は、情報をユーザに表示するための表示装置、例えばＣＲＴ（陰極線管）、ＬＣＤ（液晶表示）モニタまたはタッチスクリーンと、任意にユーザが入力をコンピュータに提供することができるキーボードおよびポインティング装置、例えばマウスまたはトラックボールとを有するコンピュータ上で実現され得る。ユーザとの対話を提供するために他の種類の装置も使用されてもよく、例えば、ユーザに提供されるフィードバックは、任意の形態の感覚フィードバック、例えば視覚フィードバック、聴覚フィードバックまたは触覚フィードバックであってもよく、ユーザからの入力は、音響入力、音声入力または触知入力を含む任意の形態で受信されてもよい。また、コンピュータは、ユーザによって使用される装置に文書を送り、ユーザによって使用される装置から文書を受信することによって、例えばウェブブラウザから受信された要求に応答してユーザのクライアント装置上でウェブブラウザにウェブページを送ることによって、ユーザと対話し得る。
【０１０６】
本開示の１つ以上の局面は、例えばデータサーバとしてのバックエンドコンポーネントを含むコンピューティングシステムにおいて実現されてもよく、またはミドルウェアコンポーネント、例えばアプリケーションサーバを含むコンピューティングシステムにおいて実現されてもよく、またはフロントエンドコンポーネント、例えばユーザが本明細書に記載されている主題の実現例と対話できるようにするグラフィカルユーザインターフェースまたはウェブブラウザを有するクライアントコンピュータを含むコンピューティングシステムにおいて実現されてもよく、または１つ以上のこのようなバックエンド、ミドルウェアまたはフロントエンドコンポーネントの任意の組み合わせにおいて実現されてもよい。システムの構成要素は、デジタルデータ通信の任意の形態または媒体、例えば通信ネットワークによって相互接続され得る。通信ネットワークの例としては、ローカルエリアネットワーク（local area network：「ＬＡＮ」）およびワイドエリアネットワーク（wide area network：「ＷＡＮ」）、インターネットワーク（例えばインターネット）、ならびにピアツーピアネットワーク（例えばアドホックピアツーピアネットワーク）が挙げられる。
【０１０７】
コンピューティングシステムは、クライアントと、サーバとを含み得る。クライアントおよびサーバは、一般に互いに離れており、典型的には通信ネットワークを介して相互作用する。クライアントおよびサーバの関係は、それぞれのコンピュータで実行されて互いに対してクライアント−サーバ関係を有するコンピュータプログラムによって生じる。いくつかの実現例では、サーバは、（例えば、クライアント装置と対話するユーザにデータを表示して、クライアント装置と対話するユーザからユーザ入力を受信する目的で）データ（例えばＨＴＭＬページ）をクライアント装置に送信する。クライアント装置において生成されたデータ（例えばユーザ対話の結果）は、サーバにおけるクライアント装置から受信され得る。
【０１０８】
本明細書は多くの具体例を含んでいるが、これらは、本開示またはクレームされ得るものの範囲を限定するものとして解釈されるべきではなく、むしろ本開示の特定の実現例に特有の特徴の説明であると解釈されるべきである。また、別々の実現例の文脈において本明細書に記載されている特定の特徴は、単一の実現例において組み合わせて実現されてもよい。また、逆に、単一の実現例の文脈において記載されているさまざまな特徴は、複数の実現例において別々に、または任意の好適なサブコンビネーションで実現されてもよい。さらに、特徴は特定の組み合わせで作用するものとして上記され、さらにはそのようなものとして最初はクレームされ得るが、クレームされている組み合わせからの１つ以上の特徴は、場合によっては、当該組み合わせから削除されてもよく、クレームされている組み合わせは、サブコンビネーションまたはサブコンビネーションの変形例に向けられてもよい。
【０１０９】
同様に、動作は特定の順序で図面に示されているが、これは、このような動作が、望ましい結果を達成するために、示されている特定の順序もしくはシーケンシャルな順序で実行されなければならないと理解されるべきではなく、または、望ましい結果を達成するために、全ての示されている動作が実行されなければならないと理解されるべきではない。特定の状況では、マルチタスクおよび並列処理が有利である場合がある。さらに、上記の実施例におけるさまざまなシステム構成要素の分離は、全ての実施例においてこのような分離が必要であると理解されるべきではなく、記載されているプログラムコンポーネントおよびシステムが、一般に単一のソフトウェア製品に一体化されてもよく、または複数のソフトウェア製品にパッケージングされてもよいということが理解されるべきである。
【０１１０】
多数の実現例が記載されてきた。しかし、本開示の精神および範囲から逸脱することなくさまざまな変形がなされ得ることが理解されるであろう。したがって、他の実現例は、以下の特許請求の範囲の範囲内である。例えば、特許請求の範囲に記載されている動作は、異なる順序で実行されて、依然として望ましい結果を達成することができる。
【図２Ａ】
2016541178.tif 000003
【図２Ｂ】
2016541178.tif 000004
【図３】
2016541178.tif 000005
【図４】
2016541178.tif 000006
【図５】
2016541178.tif 000007
【図６】
2016541178.tif 000008
【図７】
2016541178.tif 000009
【図１】
2016541178.tif 000010
【国際調査報告】
2016541178.tif 000011
2016541178.tif 000012