説明

コンテンツ配信システム、受信装置及び再生プログラム

【課題】バッファリングによる遅延を抑制でき、かつ、パケットロスによるコンテンツデータの抜けも抑制できるコンテンツ配信システムを提供する。
【解決手段】
受信装置1内の制御部13は、FECブロックを構成するパケットを受信バッファ12に格納するごとに、パケットロスの有無を判断する。そして、パケットロスがなければ、格納されたパケットのデータブロックを再生バッファ19に渡す。一方、パケットロスが発生していれば、再生バッファ19に格納されているデータ量と、FECブロックのうち受信装置1が今後受信する予定のパケット(未到着パケット)のデータ量とに基づいて、ロスパケットを復元するか否かを決める。復元する場合、未到着パケットを全て受信バッファ12に格納した後、ロスパケットを復元し、復元されたロスパケット以降のパケットのデータブロックを順次再生バッファ19に渡す。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンテンツ配信システム、受信装置及び再生プログラムに関し、さらに詳しくは、コンテンツデータをパケット化及び冗長符号化してFEC(Forward Error Correction)ブロックを生成し、生成されたFECブロックを配信する送信装置と、FECブロックを構成する複数のパケットを順次受信する受信装置とを備えたコンテンツ配信システム、そのコンテンツ配信システムを構成する受信装置及び受信装置に実装される再生プログラムに関する。
【背景技術】
【0002】
近年、音声データや映像データ等のコンテンツデータをインターネットプロトコル(IP)を利用してネットワーク上でストリーミング配信するサービスが登場している。ストリーミング配信では、送信装置が、コンテンツデータをパケット化して複数のデータパケットを生成し、再生時間順にデータパケットを順次配信する。そして、受信装置がデータパケットを順次受信して再生する。
【0003】
上述のストリーミング型伝送方式ではしばしばパケットロスが発生する。パケットロスとは、コンテンツデータを構成する複数のデータパケットのうち1又は複数のデータパケットが受信装置に届かないことをいう。このようなロスしたデータパケット(以下、ロスパケットという)を受信装置側で復元する技術として、前方誤り訂正(Forward Error Correction:以下、FECという)がある。FECでは、送信装置が複数のデータパケットを再生時間順に所定数ごとにグループ化する。そして、同じグループに属するデータパケットに対してRS(Reed Solomon)符号やハミング(Hamming)符号等の誤り訂正符号を用いて冗長符号化し、グループごとに冗長パケットを生成する。送信装置は、グループ内の複数のデータパケットと、対応する冗長パケットとを1つのFECブロックとし、FECブロックのデータパケット及び冗長パケットを順次送信する。
【0004】
受信装置は、FECブロック内の複数のパケット(データパケット及び冗長パケット)をバッファに格納する。そして、1つのFECブロック内の全てのパケットをバッファに格納した後、データパケット内のデータブロックを再生時間順に順次抽出してデコードする。データブロックはコンテンツデータの一部を構成するデータであり、受信装置はデータブロックを順次デコードすることでコンテンツを再生できる。さらに、FECブロック内でパケットロスが発生した場合、つまり、受信装置がFECブロック内の一部のデータパケットを受信できなかった場合、受信装置は、同じFECブロックに属する他のデータパケット及び冗長パケットを用いてロスパケットを復元できる。つまり、送信装置にロスパケットの再送を要求することなく、受信装置でロスパケットを復元できる。
【0005】
しかしながら、受信装置は、FECブロックを構成する全てのパケットを受信した後でなければ、各データパケットのデータブロックを抽出して再生することができない。そのため、FECブロック内にパケットロスが発生していない場合であっても、FECブロック内の全てのパケットを受け取った後、データブロックが順次抽出される。FECブロック内の複数のパケットのバッファリングにはある程度の時間が必要であるため、バッファリングに起因した遅延が発生する。
【0006】
このようなFEC処理に起因した遅延を抑制するために、特開2008−160499号公報では、転送データのデータレートに応じてパケットサイズを変更する技術が開示されている。しかしながら、パケットサイズを小さくしても、FECブロック内の全てのパケットをバッファに格納する必要があるため、ある程度の遅延が発生する。
【特許文献1】特開2008−160499号公報
【特許文献2】特開2001−184808号公報
【特許文献3】特許第3715332号
【特許文献4】特表2006−520954号公報
【特許文献5】特開2006−178987号公報
【発明の開示】
【発明が解決しようとする課題】
【0007】
本発明の目的は、バッファリングによる遅延を抑制でき、かつ、パケットロスによるコンテンツデータの抜けも抑制できるコンテンツ配信システム及び受信装置を提供することである。
【課題を解決するための手段及び発明の効果】
【0008】
本発明によるコンテンツ配信システムは、送信装置と、受信装置とを備える。送信装置は、ブロック生成手段と、送信手段とを備える。ブロック生成手段は、コンテンツデータをパケット化及び冗長符号化し、複数のFEC(Forward Error Correction)ブロックを生成する。FECブロックは、コンテンツデータを分割した複数のデータブロックを含むデータパケットと冗長パケットとを含む。送信手段は、FECブロックを構成する複数のパケットを順次送信する。受信装置は、受信手段と、受信バッファ手段と、再生バッファ手段と、再生手段と、パケットロス判断手段と、検知手段と、復元判断手段と、復元手段と、データ抽出手段とを備える。受信手段は、送信装置から送信されたパケットを受信する。受信バッファ手段は、受信手段により受信されたパケットを格納する。再生バッファ手段は、受信バッファ手段に格納されたデータパケットから抽出されたデータブロックを格納する。再生手段は、再生バッファ手段に格納された順に、データブロックを再生する。パケットロス判断手段は、パケットが受信バッファ手段に格納されるごとに、格納されたパケットが属するFECブロックでパケットロスが発生しているか否かを判断する。検知手段は、再生バッファ手段に格納されているデータブロックのデータ量を検知する。復元判断手段は、パケットロスが発生したとき、再生バッファ手段のデータ量と、FECブロック内のパケットのうち受信バッファ手段に格納されたパケット以降に受信装置が受信する予定のパケットのデータ量とに基づいて、ロスパケットを復元するか否か判断する。復元手段は、ロスパケットを復元するとき、FECブロックのロスパケット以外の他のパケットが受信バッファ手段に格納された後、他のパケットを用いてロスパケットを復元する。データ抽出手段は、パケットロスが発生していないとき、及び、ロスパケットを復元しないとき、受信バッファ手段に格納されたデータパケットのデータブロックを抽出して再生バッファ手段に出力する。また、ロスパケットを復元するとき、ロスパケットを復元した後、復元されたロスパケット以降のデータパケットからデータブロックを順次抽出して再生バッファ手段に出力する。
【0009】
本発明によるコンテンツ配信システムでは、受信装置は、パケットロスが発生していなければ、データパケットを受信バッファ手段に格納するごとに、格納されたデータパケットからデータブロックを抽出して再生する。そのため、従来のFEC処理のようなバッファリングによる遅延の発生を抑制できる。
【0010】
また、受信装置は、パケットロスが発生している場合、再生バッファ手段が格納しているデータ量と、受信装置が受け取る予定のFECブロックの残りのパケット(以下、未到達パケットという)のデータ量とに基づいて、ロスパケットを復元するか否かを決める。そのため、パケットロスによるコンテンツの部分的な抜けを抑制でき、仮に、コンテンツの部分的な抜けが生じても、再生の中断時間を抑制できる。
【0011】
好ましくは、受信装置はさらに、パケット消去手段を備える。パケット消去手段は、受信手段により受信されたパケットの属するFECブロックが受信バッファ手段に格納されているパケットの属するFECブロックと異なるとき、受信バッファ手段に格納されたパケットを消去する。
【0012】
これにより、受信バッファ手段はFECブロック単位で複数のパケットを保持でき、異なるFECブロックのパケットが混在して格納されるのを防止できる。
【0013】
好ましくは、受信装置はさらに、データブロック消去手段を備える。データブロック消去手段は、新たなコンテンツデータの再生指示を受けたとき、再生バッファ手段に格納されているデータブロックを消去する。
【0014】
好ましくは、復元手段はさらに、検知手段により検知されたデータ量が基準値未満の場合、ロスパケットを復元しない。
【0015】
たとえば、コンテンツデータの再生指示を受ければ、再生バッファ手段はリセットされるため、再生バッファ手段のデータ量は基準値未満となる。そのため、復元手段はロスパケットを復元せず、受信バッファ手段にデータパケットが格納されるごとに、データブロックを抽出して再生する。したがって、新たなコンテンツデータの再生指示を受けたとき、バッファリングによる遅延の発生を抑制でき、新たなコンテンツデータの再生を迅速に開始できる。
【0016】
本発明による受信装置は、上述のコンテンツ配信システムに利用される。また、本発明による再生プログラムは、上述の受信装置内に格納されることにより、受信装置に上述の手段を実現させる。
【発明を実施するための最良の形態】
【0017】
以下、図面を参照し、本発明の実施の形態を詳しく説明する。図中同一又は相当部分には同一符号を付してその説明は繰り返さない。
【0018】
[全体構成]
図1に本実施の形態によるコンテンツ配信システムの機能ブロック図を示す。コンテンツ配信システムは、送信装置100と受信装置1とを備える。受信装置1は送信装置100とネットワークを介して接続される。送信装置100は、映像データや音声データといったコンテンツデータを図示しないハードディスクドライブに蓄積する。以降の説明では、一例として、コンテンツデータを音声データとする。送信装置100は、コンテンツデータをFEC符号化処理し、FEC符号化されたコンテンツデータをストリーム配信する。受信装置1は、ストリーム配信されたコンテンツデータを順次受け取り、FEC復号化して再生する。
【0019】
[送信装置]
受信装置1の詳細を説明する前に、送信装置100について説明する。送信装置100は、FECブロック生成部101と、通信部102とを備える。FECブロック生成部101は、圧縮符号化されたコンテンツデータをパケット化して複数のパケットを生成する。具体的には、コンテンツデータを所定のデータ長の複数のデータブロックに分割する。そして、分割されたデータブロックにパケットヘッダを付与してデータパケットを生成する。パケットヘッダはデータブロックの位置情報を含む。位置情報は、データブロックのコンテンツデータにおける再生位置を示す。位置情報はたとえば、タイムスタンプである。
【0020】
FECブロック生成部101はさらに、再生位置順に配列されたK個のデータパケットを1つのグループとし、グループ化された複数のデータパケットに対して冗長符号化処理を実行する。冗長符号化処理は、たとえば、RS符号等の公知の誤り訂正符号を用いる。冗長符号化処理により、N−K個(N>K)の冗長パケットが生成される。
【0021】
送信装置100は、グループ化したK個の分割パケットとN−K個の冗長パケットとを1つのFECブロックとして定義する。つまり、1つのFECブロックは、図2に示すとおり、K個のデータパケットとN−K個の冗長パケットとを含む。
【0022】
パケットロスが発生している場合、受信装置1は、1つのFECブロックを構成するロスパケット以外の全てのパケットを受信した後、FEC復号処理を実行する。このとき受信装置1は、1つのFECブロックを構成するN個のパケットのうち、K個のパケット(冗長パケットを含む)を受信していれば、全てのデータパケット(つまりK個)を復元することができる。
【0023】
以降の説明では説明を容易にするために、一例として、N=10とし、K=9とする。つまり、1つのFECブロックは、9個のデータパケットと、1個の冗長パケットとからなる。以降、1つのFECブロックを構成する10個のパケット(データパケット及び冗長パケット)をパケットPTn(n=1〜10)と称する。
【0024】
図3にFECブロックを構成する各パケットPTn(n=1〜10)のデータ構造を示す。パケットPTnは、ヘッダ情報とペイロードとを含む。ペイロードには、データパケット又は冗長パケットが含まれる。ヘッダ情報は、FECブロックIDと、位置情報とを含む。FECブロックIDがそのパケットPTnが属するFECブロックの識別子である。位置情報は、FECブロック内でのパケットPTnの配列位置を示す。本例では、位置情報は、FECブロック内での先頭からの配列番号とする。図2に示すとおり、データパケットは、再生位置順に、FECブロックの先頭から順に配列される。そして、データパケットの後に冗長パケットが配列される。したがって、FECブロックの末尾のパケットPT10は冗長パケットである。本例では、パケットPTnの配列番号は、FECブロックの先頭から順に、1、2、3…と付与される。なお、位置情報は配列番号ではなく、たとえばFECブロックの先頭からのオフセットでもよい。
【0025】
送信装置100内の通信部102は、生成した複数のFECブロックを構成する複数のパケットを順次送信する。具体的には、あるFECブロックのパケットPT1〜PT10を先頭から順に送信する。送信が完了したのち、次のFECブロックのパケットを順次配信する。
【0026】
本実施の形態による送信装置100はインターリーブ処理を実行しない。そのため、パケットPT1〜PT9に相当するデータパケットは、再生位置順に配列されており、再生位置順に順次送信される。
【0027】
[受信装置]
次に、受信装置1について説明する。受信装置1は、通信部10と、受付部11と、受信バッファ12と、制御部13と、再生バッファ19と、検知部20と、再生部21とを備える。
【0028】
通信部10は、送信装置100から送信されるパケットを順次受信し、受信バッファ12に渡す。受付部11は、ユーザ所望のコンテンツデータの再生指示を受け付ける。通信部10は、受付部11が再生指示を受けたとき、所望のコンテンツデータのストリーミング配信要求を送信装置100に送信する。送信装置100は、新たなコンテンツデータのストリーミング配信要求を受けたとき、現在配信中のコンテンツデータのストリーミング配信を中止し、新たなコンテンツデータのストリーミング配信を開始する。
【0029】
受信バッファ12は、通信部10から順次渡されるパケットPTnを順次格納する。受信バッファ12は、1つのFECブロックを構成する全てのパケットPT1〜PT10を格納できる容量を少なくとも有する。つまり、受信バッファ12は、同じFECブロックを構成する全てのパケットPT1〜PT10を格納できる。
【0030】
再生バッファ19は、受信バッファ12に格納されたパケットPTnから抽出されたデータブロックを順次格納する。このとき、再生バッファ19は、データブロックを再生位置順に順次格納する。再生部21は、再生バッファ19に格納されたデータブロックを格納時期が古い順に順次読み出す。データブロックは圧縮符号化されているため、再生部21はデータブロックをデコードして出力する。これにより、データブロックは再生位置順にデコードされる。再生部21から出力されたデータは、図示しないD/A変換回路によりアナログ信号となり、図示しない出力端子を介して外部に出力される。出力された信号は図示しないスピーカにより音声として出力される。
【0031】
検知部20は、所定時間毎に、再生バッファ19に格納されているデータブロックのデータ量(以下、バッファ量という)を検知する。
【0032】
制御部13は、パケットPTnからのデータブロックの抽出処理と、FEC復号処理とを実行する。制御部13は、復元部14と、パケットロス判断部15と、復元判断部16と、データ抽出部17と、データ消去部18とを含む。
【0033】
データ抽出部17は、受信バッファ12に格納されたパケットPTnを読み出してデータブロックを抽出する。そして、抽出されたデータブロックを再生バッファ19に渡す。
【0034】
パケットロス判断部15は、受信バッファ12がパケットPTnを格納するごとに、対応するFECブロック内でパケットロスが発生しているか否かを判断する。復元部14は、パケットロスが発生しているとき、ロスパケットを復元する。このとき、復元部14は、FECブロックを構成するロスパケット以外の他の全てのパケットPTnが受信バッファ12に格納された後、ロスパケット以外の他のデータパケット及び冗長パケットを利用してロスパケットを復元する。
【0035】
データ消去部18は、通信部10が新たなFECブロックに属するパケットPTnを受信したとき、受信バッファ12に格納されているパケットPTnを消去する。つまり、受信バッファ12は、通信部10が新たなFECブロックに属するパケットPTnを受信するまで、格納したパケットPTnを保持する。データ消去部18はさらに、受付部11が新たなコンテンツデータの再生指示を受けたとき、再生バッファ19内に格納されたデータブロックを消去する。要するに、データ消去部18は、受信バッファ12及び再生バッファ19をリセットする。
【0036】
[受信装置のハードウェア構成]
図4に示すとおり、受信装置1は、中央演算処理装置(CPU)70と、メモリ80と、受付部11と、ハードディスクドライブ(HDD)90と、通信部10とを備える。受付部11は、マウスやキーボード、操作キー、リモコン受光器等である。HDD90には再生プログラムが格納されている。再生プログラムがメモリ80にロードされ、CPU70で実行されることにより、受信装置1は上述及び以降に説明する動作を実行する。このとき、受信バッファ12及び再生バッファ19はメモリ80に対応する。また、制御部13、検知部20及び再生部21はCPU70に対応する。なお、送信装置100のハードウェア構成も図4と同様である。
【0037】
[受信装置の動作概要]
受信装置1は、コンテンツデータを再生している間、原則として、パケットPTnが受信バッファ12に格納されるごとに、格納されたパケットPTnのデータブロックを抽出して再生バッファ19に出力する。図5に示すとおり、あるFECブロックの先頭のパケットPT1が受信バッファ12に格納されたとき、データ抽出部17は、パケットPT1のデータブロックを抽出する(図5(a))。同様に、パケットPT2が受信バッファ12に格納されたとき、データ抽出部17はパケットPT2のデータブロックを抽出し(図5(b))、パケットPT3が受信バッファ12に格納されたとき、パケットPT3のデータブロックを抽出する(図5(c))。
【0038】
つまり、受信装置1は、従来のFEC復号化処理のように、FECブロック内の全てのパケットPT1〜PT10が受信バッファ12に格納されるのを待ってから各パケットPTn(n=1〜N)のデータブロックを抽出するのではなく、パケットPTnが受信バッファ12に格納されるごとにデータブロックを抽出して再生する。そのため、従来のように、FECブロック内の全パケットPTnが到着するのを待ってからデータブロックを抽出する場合よりも、バッファリングによる遅延時間を短縮できる。
【0039】
さらに、パケットロスが発生した場合、受信装置1は、再生バッファ19に蓄積されたデータ量(バッファ量)に応じて、データブロックの抽出及びロスしたパケットPTnの復元を実行する。
【0040】
図6に示すように、受信バッファ12がパケットPT7を受信したときにパケットロス判断部15が、パケットPT6をロスしていると判断したと仮定する。この場合、制御部13が採り得るパターンは2通りある。第1のパターンは、図7に示すように、復元部14がロスパケットPT6を復元することなく、パケットPT7以降のパケットPTnのデータブロックを抽出するパターンである。この場合、パケットPT6のデータブロックがないままパケットPT7のデータブロックが再生されるため、パケットPT6のデータブロックが再生されず、音切れが発生する。
【0041】
第2のパターンは、復元部14が、パケットPT6を復元するパターンである。この場合、図8に示すように、データ抽出部17は、パケットPT10(冗長パケット)が受信バッファ12に到達するまでパケットPT7以降のデータパケット(パケットPT7〜PT9)のデータ抽出を中止する。そして、パケットPT10を受信バッファ12に格納した後、復元部14が、ロスパケットPT6以外の全てのパケットPTnを利用してロスパケットPT6を復元する。パケットPT6を復元したのち、パケットPT6のデータブロック以降のデータブロックを配列番号順に順次抽出して再生する。
【0042】
第2のパターンを採用する場合、第1のパターンのようにロスパケットによる音切れは発生しない。しかしながら、FECブロック内の末尾のパケットPT10が到着しなければ復元はできないため、パケットPT10が到着するまで、パケットPT7以降のデータブロックを再生バッファ19に渡せない。要するに、第2のパターンは、データブロックを再生バッファ19に格納するまでに時間が掛かる。そのため、最後のパケットPT10が到着するまでの時間が長ければ、再生バッファ19のバッファ量が低下してデータが枯渇し、無音時間が発生する。
【0043】
そこで、可能な限り音切れや無音時間の発生を抑制するために、制御部13は、再生バッファ19のバッファ量に基づいて、第1及び第2のパターンのうちいずれのパターンを採用するか決定する。具体的には、検知部20が所定時間ごとに検知するバッファ量に基づいて余裕度Yを算出する。本例では、余裕度Yはパケット数で示される。バッファ量が多いほど余裕度Yは大きく、バッファ量が少ないほど余裕度は小さくなる。
【0044】
図6において、制御部13内の復元判断部16は、パケットPT7より後で受信装置1が受信する予定のパケット(以下、未到達パケットという)のデータ量に関する情報を利用する。本例では、未到達パケットのデータ量に関する情報として、未到達パケット数Rを求める。本例では、未到達パケットはPT8〜PT10であるため、未到達パケット数Rは3である。
【0045】
次に、復元判断部16は、余裕度Yと未到達パケット数Rとを比較する。仮に、余裕度Yが4である場合、Y>Rとなる。この場合、第2パターンを採用しても、再生バッファ19のバッファ量は枯渇する可能性が低い。そのため、復元判断部16はロスパケットを復元すると判断する。つまり、制御部13は第2パターンを採用する。一方、余裕度が2である場合、Y<Rとなる。この場合、第2パターンを採用すれば、再生バッファ19のバッファ量が枯渇し、音切れ時間(無音時間)が長引く可能性が高い。そのため、復元判断部16は、復元しないと判断する。その結果、制御部13は第1パターンを採用する。
【0046】
要するに、制御部13は、パケットロスを発見したとき、再生バッファのバッファ量と未到達パケットのデータ量(未到達パケット数)とに基づいて、第1及び第2パターンのいずれを採用するかを決定する。これにより、パケットロスを発生した場合でも、音切れの発生を抑制でき、かつ、仮に音切れが発生しても、音切れ時間を短縮できる。
【0047】
[受信装置の動作の詳細]
以下、上述した受信装置1の動作の詳細をフロー図を用いて説明する。受信装置1は、余裕度Yを決定する余裕度設定処理と、ユーザ操作により新たなコンテンツの再生指示を受けたときに実行されるコマンド処理と、送信装置100から配信されるパケットPTnを受信バッファ12に格納するごとに実行されるデータブロック抽出処理とを実行する。以下、それぞれの処理について詳述する。
【0048】
[余裕度実行処理]
図9を参照して、検知部20は所定時間毎に再生バッファ19のバッファ量BM(bytes)を検出する(S1)。検知部20はこのとき、1パケット当たりのデータブロックのデータ量DBref(bytes/個)に基づいて、以下の式(1)によりバッファ量BM(bytes)をパケット数(個)に換算する(S2)。
【0049】
バッファ量BM(個)=BM(bytes)/DBref(bytes/個) (1)
続いて、バッファ量BM(個)を用いて、以下の式(2)から余裕度Y(個)を算出する(S2)。
【0050】
余裕度Y(個)=BM(個)−Ref(個) (2)
ここで、Refは、コンテンツデータを再生するときに再生バッファ19内に最低限格納されている必要のあるデータ量(以下、基準バッファ量という)である。基準バッファ量Refはパケット数(個)で定義される。基準バッファ量Refはメモリ80又はHDD90に予め格納されている。
【0051】
検知部20は、所定期間毎に上述の式(2)に基づいて余裕度Y(個)を求め、メモリ80に格納する。
【0052】
[コマンド処理]
図10を参照して、受信装置1がコンテンツデータを再生している途中で、受付部11がユーザ操作に応じて新たな所望のコンテンツデータの再生指示を受けたとき(S11でYES)、データ消去部18は、再生バッファ19内に格納されているデータブロックを消去する(S12)。再生バッファ19に格納されているデータブロックは、新たなコンテンツデータと異なる他のコンテンツデータのデータブロックであるためである。制御部13はさらに、ユーザ所望のコンテンツデータのストリーミング配信を送信装置100に要求する(S13)。送信装置100は、ストリーミング配信要求を受けたとき、それまで配信していたコンテンツデータのストリーミング配信を中止し、所望のコンテンツデータの配信を開始する。
【0053】
[データブロック抽出処理]
送信装置100は受信装置1からの要求に応じて、所望のコンテンツデータのパケットPTnを順次ストリーミング配信する。受信装置1は、パケットPTnを受信するごとに、データブロック抽出処理を実行する。
【0054】
図11を参照して、通信部10が送信装置100から送信されたパケットPTnを受信したとき、制御部13はパケットPTnのヘッダ情報を読み出す(S21)。そして、読み出されたヘッダ情報内のFECブロックIDが、現在受信バッファ12に格納されているパケットPTnのFECブロックIDと同じであるか否かを判断する(S22)。
【0055】
受信したパケットPTnのFECブロックIDが受信バッファ12内のパケットPTnのFECブロックIDと異なる場合(S22でYES)、受信したパケットPTnは、受信バッファ12に既に格納されている他のパケットPTnと異なるFECブロックに属する。この場合、たとえば、受信バッファ12には、既にデータ抽出が完了したFECブロックのパケットPT1〜PT10が格納されている。そのため、データ消去部18は、受信バッファ12をリセットし、受信バッファ12内に格納されていたパケットPTnを全て消去する(S23)。そして、制御部13は、受信したパケットPTnをリセット後の受信バッファ12内の対応する番地に格納する(S24)。受信バッファ12は、パケットPTnの位置情報として登録された配列番号n(n=1〜10)に対応した番地(1〜10)で区切られている。制御部13は、受信したパケットPTn(n=1〜10)を、その配列番号nに対応した番地nに格納する。たとえば、受信したパケットPTnの配列番号が「1」である場合、受信バッファ12内の番地「1」に格納する。
【0056】
一方、ステップS22で判断した結果、受信したパケットPTnのFECブロックIDが受信バッファ12に現在格納されているパケットPTnのFECブロックIDと同じである場合(S22でNO)、制御部13は、受信バッファ12をリセットすることなく、受信した新たなパケットPTnを対応する番地nに格納する(S24)。
【0057】
続いて、パケットロスの有無を確認する(S25)。具体的には、制御部13内のパケットロス判断部15は、ステップS24でパケットPTnを格納した番地よりも番号が小さい番地のうち、パケットPTnが格納されていない番地が存在するか否かを確認する。パケットPTnが格納されていない番地が存在しなければ、パケットロスは発生していないと判断する(S25でNO)。一方、パケットPTnが格納されていない番地が存在すれば、パケットロスが発生していると判断する(S25でYES)。以下、パケットロスが発生していない場合と、パケットロスが発生した場合とに分けて、それぞれ説明する。
【0058】
[パケットロスが発生していない場合]
ステップS25での判断の結果、パケットロスが発生していない場合(S25でNO)、データ抽出部17は、ステップS24で受信バッファ12に格納されたパケットPTnからデータブロックを抽出する。そして、抽出されたデータブロックを再生バッファ19に出力する(S30)。要するに、パケットロスが発生していない場合、データ抽出部17は、パケットPTnが格納されるごとに、格納されたパケットPTnのデータブロックを抽出して再生バッファ19に渡す。そのため、従来のFECブロックのように、FECブロックを構成する全てのパケットPT1〜PT10の到着を待つことなく、再生を実行することができ、FECブロックのバッファリングに伴う遅延を抑制できる。なお、抽出されたパケットPTnの配列番号はメモリ80に記録される。そのため、FECブロック内のどのパケットPTnまでデータブロックを抽出したかを確認できる。
【0059】
データブロックを受けた再生バッファ19は、データブロックを格納する。そして、再生部21の要求に応じて、格納時期が古い順にデータブロックを順次再生部21に出力する。そのため、再生部21は、データブロックを欠落することなく再生位置順に順次再生することができる。
【0060】
[パケットロスが発生した場合]
たとえば、図6に示すように、パケットPT7を受信バッファ12に格納したとき、制御部13内のパケットロス判断部15は、パケットPT6が受信バッファ12の第6番地に格納されておらず、パケットロスが発生していると判断する(S25でYES)。このとき、復元判断部16は、ロスパケットの数を算出する。本例ではロスパケットはPT6のみであるため、ロスパケット数は「1」である。
【0061】
続いて、復元判断部16は、ロスパケット数が、FECブロックの冗長パケットPT10により復元できるパケット数(復元可能パケット数という)よりも大きいか否かを判断する(S26)。復元可能パケット数はFEC処理方式により予め決定されており、メモリ80又はHDD90に予め登録されている。本例では復元可能パケット数を「1」とする。
【0062】
ステップS26の判断の結果、ロスパケット数が復元可能パケット数よりも大きい場合(S26でYES)、たとえば、ロスパケット数が2である場合、復元判断部は、もはやロスパケットを復元できないと判断する。このとき、制御部13は復元をあきらめ、データ抽出部17は、ステップS24で受信バッファ12に格納されたパケットPT7のデータブロックを抽出して再生バッファ19に手渡す。この場合、ロスパケットのデータブロックは欠落したまま再生が継続される。そのため、欠落したデータブロックに相当する音切れが発生する。
【0063】
一方、図6の例のように、ロスパケット数(=1)が復元可能パケット数(=1)と同じである場合(S26でNO)、復元判断部16は、ロスパケットPT6を復元可能である判断する。この場合、復元判断部16はさらに、未到達パケット数Rを算出する(S27)。FECブロック内のパケット数N=10であり、ステップS24で格納したパケットはPT7(n=7)であるため、未到達パケットは10−7=3となる。
【0064】
未到達パケット数Rが0でないため(S28でNO)、同一FECブロック内の最後のパケットPT10(冗長パケット)はまだ受信バッファ12に格納されていない。そこで、復元判断部16は、未到達パケット数Rと余裕度Yとを比較する(S29)。未到達パケット数Rが余裕度Yよりも大きい場合(S29でYES)、たとえば、未到達パケット数Rが「3」であり、余裕度Yが「2」である場合、再生バッファ19内のバッファ量が少な過ぎるため、FECブロック内の最後のパケットPT10が受信バッファ12に格納されるまで待って復元が実行される前に、再生バッファ19のデータが枯渇する可能性が高い。このような場合、データの枯渇により発生する音切れ時間が長くなる可能性がある。そこで、復元判断部16はロスパケットPT6の復元を行わないと判断する。データ抽出部17はステップS29の判断結果に基づいて、ステップS24で格納したパケットPT7のデータブロックを抽出して再生バッファ19に渡す。つまり、ロスパケットPT6の復元をあきらめる。ロスパケットPT6の復元をあきらめれば、そのデータブロック分の時間の音切れが発生する。しかしながら、復元するためにパケットPT10の到着を待つことにより音切れ時間が長くなるのを抑制できる。
【0065】
一方、余裕度Yが4であれば、制御部13はステップS29で未到達パケット数Rが余裕度Yよりも小さいため、復元判断部16は、復元処理を行うと判断する(S29でNO)。この場合、最後のパケットTP10の到着を待ってパケットPT6を復元するまでに再生バッファ19内のバッファ量が枯渇する可能性は低い。そのため、データ抽出部17はパケットPT7のデータブロックを抽出せずに動作を終了する。そして、パケットPT10を受信バッファ12に格納したとき(S24)、制御部13は、未到達パケット数R=0と判断する(S28でYES)。つまり、FECブロックの末尾のパケットPT10を格納したと判断する。そのため、復元部14はFEC処理を実行してロスパケットPT6を復元する(S31)。そして、パケットPT6から配列番号順に、パケットPT6〜PT9内のデータブロックを順次抽出して再生バッファ19に順次渡す。この動作により、パケットPT6のデータブロックは復元され、かつ、復元されたデータブロックから再生位置順にデータブロックが再生バッファ19に順次格納される。そのため、再生部21はデータブロックを再生位置順に順次デコードでき、音切れは発生しない。
【0066】
[新たなコンテンツの再生指示を受けたときのデータブロック抽出処理]
ユーザ操作により新たなコンテンツデータの再生指示を受けたとき(S11でYS)、再生バッファ19内に格納されていたデータブロックは削除される。つまり、再生バッファ19はリセットされる。コンテンツの指定が切り換えられたためである。このとき、再生バッファ19のバッファ量は0であるため、余裕度Y=−Refとなる(S3)。したがって、この場合、たとえパケットロスが発生しても、データ抽出処理におけるステップS29で、復元判断部16はロスパケットを復元しないと判断する(S29でYES)。つまり、バッファ量が基準バッファ量Refよりも小さい場合、データ抽出部17は、パケットPTnが受信バッファ12に格納されるごとにデータブロックを抽出して再生バッファ19に渡す。これにより、再生すべきコンテンツが切り換えされたときに新たなコンテンツが再生されるまでの遅延を短縮できる。
【0067】
以上、本実施の形態によるコンテンツ配信システムでは、受信装置1は、パケットロスが発生していないときはパケットPTnを受信するごとに、そのパケットPTnからデータブロックを抽出して再生する。そのため、受信バッファでのバッファリングによる遅延は生じない。また、パケットロスが発生した場合、未到達パケット数と余裕度(バッファ量)とを比較する。これにより、バッファ量に余裕がある場合はFECブロックの末尾パケットPT10を受信するまでデータブロックの抽出を中止してロスパケットを復元することができ、バッファ量に余裕がない場合は、ロスパケットの復元をせずに受信したパケットPTnのデータブロックを順次抽出することができる。そのため、受信装置1は、パケットロスが発生した場合であっても、音切れの発生を抑制でき、仮に発生しても音切れ時間を最小限に抑えることができる。
【0068】
上述の本実施の形態では、再生バッファ19のバッファ量をパケット相当数に換算し、未到達パケット数と比較したが、たとえば、未到達パケット数R、余裕度Y、バッファ量BMをそれぞれデータ量(bytes)で定義してもよい。受信装置1は、FECブロック当たりのデータ量に関する情報を予めHDD90に格納している。受信装置1は、ステップS27で、1FEC当たりのデータ量から受信バッファ12に格納済みのバッファ量(データ量)を差分して、未到達パケットのデータ量を算出する。そして、ステップS29でデータ量と余裕度Yとを比較してもよい。この場合、余裕度Yはデータ量(bytes)で示される。
【0069】
さらに、受信装置1は、未到達パケットのデータ量に基づいて、受信装置1が未到達パケットを全て受信するまでに掛かる予想時間T1と、バッファ量BMに基づいて再生バッファ19に格納されているデータを再生し終えるまでに掛かる予想時間T2とを求め、予想時間T1及びT2に基づいて第1及び第2のパターンのいずれを採用するかを決定してもよい。具体的には、検知部20はステップS3で予想時間T2から基準値Ref(ここでは時間)を差し引いて余裕度Y(時間)を算出する。そして、復元判断部16はステップS29で、予想時間T1と余裕度Yとを比較し、第1及び第2のパターンのいずれを採用するかを決める。受信装置1は、バッファ量BMと再生速度とに基づいて予想時間T2を算出する。
【0070】
受信装置1は、送信装置100と受信装置1との間の伝送レートに関する情報を保持しており、未到達パケットのデータ量と伝送レートとに基づいて予想時間T1を算出する。受信装置1は、他の方法で予想時間T1を求めてもよい。一般的に、パケットPTnは等間隔で配信されるため、受信装置1も等間隔でパケットPTnを受信する。そのため、受信装置1は、パケットPTnの受信間隔に関する情報を持つ。この場合、受信装置1は、未到達パケットのデータ量に関する情報として未到達パケット数Rを用いて、未到達パケット数Rと受信間隔とに基づいて、予想時間T1を求めてもよい。なお、送信装置100がデータパケットPT9直後に間隔を空けずに冗長パケットPT10を送信する場合もある。この場合、受信装置1は、パケットPT9を受信した後、受信間隔を空けずに冗長パケットPT10を受信するため、この点も考慮して予想時間T1を算出してもよい。
【0071】
いずれにしても、本発明では、受信装置1は未到達パケットのデータ量に関する情報と、バッファ量に関する情報とに基づいて、第1及び第2のパターンのいずれを採用するかを決定する。
【0072】
上述の例では、受信装置1がユーザ所望のコンテンツのストリーミング配信を送信装置100に要求したが、送信装置100がマルチキャスト配信を行っており、受信装置1が複数のチャンネルから所望のチャンネルに適宜切り換えるようにしてもよい。この場合であっても、チャンネルの切り換え時の動作は、上述の新たなコンテンツの再生指示を受けた場合の動作と同じである。
【0073】
以上、本発明の実施の形態を説明したが、上述した実施の形態は本発明を実施するための例示に過ぎない。よって、本発明は上述した実施の形態に限定されることなく、その趣旨を逸脱しない範囲内で上述した実施の形態を適宜変形して実施することが可能である。
【図面の簡単な説明】
【0074】
【図1】本発明の実施の形態にコンテンツ配信システムの全体構成を示す機能ブロック図である。
【図2】図1に示した送信装置で生成されるFECブロックのデータ構造を示す図である。
【図3】図1に示した送信装置で生成されるFECブロックを構成するパケットのデータ構造を示す図である。
【図4】図1に示した受信装置のハードウェア構成を示すブロック図である。
【図5】図1に示した受信装置の動作概要を説明するための図である。
【図6】図5に引き続き、図1に示した受信装置の動作概要を説明するための図である。
【図7】図6に引き続き、図1に示した受信装置の動作概要を説明するための図である。
【図8】図7に引き続き、図1に示した受信装置の動作概要を説明するための図である。
【図9】図1に示した受信装置の余裕度設定処理の詳細を示すフロー図である。
【図10】図1に示した受信装置のコマンド処理の詳細を示すフロー図である。
【図11】図1に示した受信装置のデータ抽出処理の詳細を示すフロー図である。
【符号の説明】
【0075】
1 受信装置
10,102 通信部
11 受付部
12 受信バッファ
13 制御部
14 復元部
15 パケットロス判断部
16 復元判断部
17 データ抽出部
18 データ消去部
19 再生バッファ
20 検知部
21 再生部
100 送信装置
101 ブロック生成部

【特許請求の範囲】
【請求項1】
送信装置と、受信装置とを備えたコンテンツ配信システムであって、
前記送信装置は、
コンテンツデータをパケット化及び冗長符号化し、前記コンテンツデータを分割した複数のデータブロックを含む複数のデータパケットと冗長パケットとで構成される複数のFEC(Forward Error Correction)ブロックを生成するブロック生成手段と、
前記FECブロックを構成する複数の前記パケットを順次送信する送信手段とを備え、
前記受信装置は、
前記送信装置から送信された前記パケットを受信する受信手段と、
前記受信手段により受信された前記パケットを格納する受信バッファ手段と、
前記受信バッファ手段に格納された前記データパケットから抽出された前記データブロックを格納する再生バッファ手段と、
前記再生バッファ手段に格納された順に、前記データブロックを再生する再生手段と、
前記パケットが前記受信バッファ手段に格納されるごとに、前記格納されたパケットが属するFECブロックでパケットロスが発生しているか否かを判断するパケットロス判断手段と、
前記再生バッファ手段に格納されているデータブロックのデータ量を検知する検知手段と、
前記パケットロスが発生したとき、前記再生バッファ手段のデータ量と、前記FECブロック内のパケットのうち前記受信バッファ手段に格納されたパケット以降に前記受信装置が受信する予定のパケットのデータ量とに基づいて、ロスパケットを復元するか否か判断する復元判断手段と、
前記ロスパケットを復元するとき、前記FECブロックのロスパケット以外の他のパケットが前記受信バッファ手段に格納された後、前記他のパケットを用いて前記ロスパケットを復元する復元手段と、
前記パケットロスが発生していないとき、及び、前記ロスパケットを復元しないとき、前記受信バッファ手段に格納されたデータパケットのデータブロックを抽出して前記再生バッファ手段に出力し、前記ロスパケットを復元するとき、前記ロスパケットを復元した後、前記復元されたロスパケット以降のデータパケットからデータブロックを順次抽出して前記再生バッファ手段に出力するデータ抽出手段とを備えることを特徴とするコンテンツ配信システム。
【請求項2】
コンテンツデータを分割した複数のデータブロックを含む複数のデータパケットと、冗長パケットとで構成される複数のFEC(Forward Error Correction)ブロックの前記複数のパケットを順次受信する受信手段と、
前記受信手段により受信された前記パケットを格納する受信バッファ手段と、
前記受信バッファ手段に格納された前記データパケットから抽出された前記データブロックを格納する再生バッファ手段と、
前記再生バッファ手段に格納された順に、前記データブロックを再生する再生手段と、
前記パケットが前記受信バッファ手段に格納されるごとに、前記格納されたパケットが属するFECブロックでパケットロスが発生しているか否かを判断するパケットロス判断手段と、
前記再生バッファ手段に格納されているデータブロックのデータ量を検知する検知手段と、
前記パケットロスが発生したとき、前記再生バッファ手段のデータ量と、前記FECブロック内のパケットのうち前記受信バッファ手段に格納されたパケット以降に前記受信装置が受信する予定のパケットのデータ量とに基づいて、ロスパケットを復元するか否か判断する復元判断手段と、
前記ロスパケットを復元するとき、前記FECブロックのロスパケット以外の他のパケットが前記受信バッファ手段に格納された後、前記他のパケットを用いて前記ロスパケットを復元する復元手段と、
前記パケットロスが発生していないとき、及び、前記ロスパケットを復元しないとき、前記受信バッファ手段に格納されたデータパケットのデータブロックを抽出して前記再生バッファ手段に出力し、前記ロスパケットを復元するとき、前記ロスパケットを復元した後、前記復元されたロスパケット以降のデータパケットからデータブロックを順次抽出して前記再生バッファ手段に出力するデータ抽出手段とを備えることを特徴とする受信装置。
【請求項3】
請求項2に記載の受信装置であってさらに、
前記受信手段により受信されたパケットの属するFECブロックが前記受信バッファ手段に格納されているパケットの属するFECブロックと異なるとき、前記受信バッファ手段に格納されたパケットを消去するパケット消去手段を備えることを特徴とする受信装置。
【請求項4】
請求項2又は請求項3に記載の受信装置であってさらに、
新たなコンテンツデータの再生指示を受けたとき、前記再生バッファ手段に格納されているデータブロックを消去するデータブロック消去手段を備えることを特徴とする受信装置。
【請求項5】
請求項2〜請求項4のいずれか1項に記載の受信装置であって、
前記復元手段はさらに、前記検知手段により検知されたデータ量が基準値未満の場合、ロスパケットを復元しないことを特徴とする受信装置。
【請求項6】
コンテンツデータを分割した複数のデータブロックを含む複数のデータパケットと、冗長パケットとで構成される複数のFEC(Forward Error Correction)ブロックの前記複数のパケットを順次受信する受信装置内のコンピュータに、
前記受信された前記パケットを受信バッファ手段に格納するステップと、
前記受信バッファ手段に格納された前記データパケットから抽出された前記データブロックを再生バッファ手段に格納するステップと、
前記再生バッファ手段に格納された順に、前記データブロックを再生するステップと、
前記パケットが前記受信バッファ手段に格納されるごとに、前記格納されたパケットが属するFECブロックでパケットロスが発生しているか否かを判断するステップと、
前記再生バッファ手段に格納されているデータブロックのデータ量を検知するステップと、
前記パケットロスが発生したとき、前記検知されたデータ量と、前記FECブロック内のパケットのうち前記受信バッファに格納されたパケット以降に前記受信装置が受信する予定のパケットのデータ量とに基づいて、ロスパケットを復元するか否か判断するステップと、
前記ロスパケットを復元するとき、前記FECブロックのロスパケット以外の他のパケットが前記受信バッファ手段に格納された後、前記他のパケットを用いて前記ロスパケットを復元するステップと、
前記パケットロスが発生していないとき、及び、前記ロスパケットを復元しないとき、前記受信バッファ手段に格納されたデータパケットのデータブロックを抽出して前記再生バッファ手段に出力し、前記ロスパケットを復元するとき、前記ロスパケットを復元した後、前記復元されたロスパケット以降のデータパケットからデータブロックを順次抽出して前記再生バッファ手段に出力するステップとを実行させる再生プログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate

【図9】
image rotate

【図10】
image rotate

【図11】
image rotate


【公開番号】特開2010−119009(P2010−119009A)
【公開日】平成22年5月27日(2010.5.27)
【国際特許分類】
【出願番号】特願2008−292129(P2008−292129)
【出願日】平成20年11月14日(2008.11.14)
【出願人】(000000273)オンキヨー株式会社 (502)
【Fターム(参考)】