説明

コンテンツ配信システム、クライアント及びクライアントプログラム

【課題】コンテンツの所定の位置で再生ビットレートの変更が可能なコンテンツ配信システムを提供する。
【解決手段】サーバ10は、同じコンテンツに関し、互いに異なるビットレートを有し、複数のパートに分割されたストリームデータSTi(i=1〜3)を有する。クライアント20は、サーバ10から配信されたストリームデータSTiを受信しながら再生する。このとき、クライアント20は、各パートの再生を完了するごとに、次のパートのデータ量が既にバッファ領域27A及び27Bに蓄積されているか否かを判断する。蓄積されている場合、次のパートの再生時間中にバッファ領域27A及び27Bに蓄積可能なデータ量を算出し、その算出結果に基づいて、サーバ10に要求するストリームデータSTiを選択する。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、コンテンツ配信システム、クライアント及びクライアントプログラムに関し、さらに詳しくは、サーバからクライアントにコンテンツをストリーム配信するコンテンツ配信システム、クライアント及びクライアントプログラムに関する。
【背景技術】
【0002】
ストリーミング型コンテンツ配信システムは、動画等のコンテンツに関する複数のストリームデータを有するサーバと、サーバからストリームデータの配信を受けながらコンテンツを再生するクライアントとを備える。
【0003】
このようなストリーミング型のコンテンツ配信システムでは、ネットワークのトラフィック状態が変化しても、クライアントで再生が途切れないようにする必要がある。
【0004】
この問題を解決すべく、特開2004−215074号公報(特許文献1)では、サーバに予め異なるビットレートの複数のストリームデータを準備し、ネットワークのトラフィック状態に応じて、適切な再生ビットレートのストリームデータを配信できるマルチビットレート方式が開示されている。また、特開2003−259333号公報(特許文献2)では、ネットワークの状況に応じてサーバがコンテンツの圧縮率やフレームレートを変更できるコンテンツ配信システムが開示されている。これらの方法によれば、ストリーム配信中にクライアントで再生が途切れるのを防止できるとしている。
【0005】
しかしながら、これらの方法では、再生ビットレートや圧縮率、フレームレートの変更タイミング時に、クライアントが蓄積するデータが枯渇して再生が途切れる可能性がある。さらに、これらの方法では、再生中のコンテンツの内容に依存せずに、ネットワークの状況に依存してビットレートを変更する。つまり、再生中の動画がどのような場面であっても、ビットレートを変更して画質を変化させる。そのため、画質の変化が唐突に発生し、コンテンツを視聴する利用者に違和感を与えてしまう。
【特許文献1】特開2004−215074号公報
【特許文献2】特開2003−259333号公報
【発明の開示】
【発明が解決しようとする課題】
【0006】
本発明の目的は、ストリーム配信中の再生の途切れを防止するコンテンツ配信システムを提供することである。
本発明の他の目的は、コンテンツの所定の位置で再生ビットレートの変更が可能なコンテンツ配信システムを提供することである。
【課題を解決するための手段及び発明の効果】
【0007】
本発明によるコンテンツ配信システムは、サーバと、サーバに接続されたクライアントとを備える。サーバは、ストリームデータ蓄積手段と、配信手段とを備える。ストリームデータ蓄積手段は、複数のストリームデータを蓄積する。複数のストリームデータは、各々が、同一のコンテンツに関し、互いに異なる再生ビットレートを有し、連続して配列される複数のパートに分割される。配信手段は、クライアントの要求に対応してストリームデータのパートを配列順にストリーム配信する。クライアントは、バッファ手段と、再生手段と、判断手段と、データ量算出手段と、選択手段と、要求手段とを備える。バッファ手段は、ストリーム配信されたパートを順次蓄積する。再生手段は、バッファ手段に蓄積されたパートを順次再生する。判断手段は、パートの再生が完了したとき、未再生のパートがバッファ手段に蓄積されているか否かを判断する。データ量算出手段は、判断の結果、未再生のパートが蓄積されているとき、未再生のパートの再生時間でバッファ手段に蓄積可能なデータ量を算出する。選択手段は、算出結果に基づいて、サーバに要求するストリームデータ及び配信開始パートを選択する。要求手段は、選択されたストリームデータを、配信開始パートからストリーム配信するよう要求する。
【0008】
このコンテンツ配信システムでは、クライアントは、予め未再生のパートを蓄積し、未再生のパートの再生時間に蓄積可能なデータ量に基づいてストリームデータを選択し、その未再生のパートを再生している間、選択したストリームデータを順次取得する。そのため、再生すべきデータが枯渇するのを防止でき、コンテンツの再生が途切れるのを防止できる。さらに、ストリームデータをパート単位で順次受信し、再生するため、再生ビットレートをパート単位で変更できる。つまり、再生ビットレートの変更位置を所定の位置(パートとパートとの区切りの位置)とすることができる。各パートを、画質や音質が変化しても視聴への影響が少ない再生位置、たとえば、動画の場合であれば、場面設定が変更する位置等で区切れば、再生ビットレートが変更しても、画質や音質の変化による違和感を抑えることができる。
【0009】
好ましくは、データ量算出手段は、配信ビットレート特定手段を備える。配信ビットレート特定手段は、パートの再生が完了したとき、サーバから配信されるストリームデータの配信ビットレートを特定する。データ量算出手段は、特定した配信ビットレートと、未再生のパートの再生時間とに基づいて、データ量を算出する。
【0010】
この場合、パートの再生が完了した時点の配信ビットレートを特定し、データ量を算出する。そのため、データ量算出手段により算出した値を実際に蓄積されるデータ量に近づけることができ、蓄積されるデータ量の予測精度を上げることができる。
【0011】
好ましくは、クライアントは、ストリーム情報蓄積手段を備える。ストリーム情報蓄積手段は、ストリームデータの各パートのデータ量及び再生時間と、各パートに対応する他のストリームデータのパートとに関するストリーム情報を蓄積する。選択手段は、算出結果とストリーム情報とに基づいて、ストリームデータ及び配信開始パートを選択する。
【0012】
この場合、ストリーム情報に基づいて、データ量算出手段により算出されたデータ量を
各パートのデータ量と比較し、ストリームデータ及び配信開始パートを選択できる。
【0013】
好ましくは、判断手段が判断した結果、未再生のパートがバッファ手段に蓄積されていないとき、選択手段は、複数のストリームデータのうち、再生ビットレートが最も低いストリームデータを選択する。
【0014】
この場合、未再生のパートがバッファ手段に蓄積されていなくても、再生ビットレートが最も低いストリームデータを取得することにより、再生の途切れをある程度防止できる。
【0015】
本発明によるクライアントプログラムは、各々が、同一のコンテンツに関し、互いに異なる再生ビットレートを有し、連続して配列される複数のパートに分割された複数のストリームデータを蓄積するサーバに接続可能なクライアントコンピュータに実行させるプログラムである。クライアントプログラムは、サーバからストリーム配信されたパートを順次蓄積するステップと、蓄積されたパートを順次再生するステップと、パートの再生が完了したとき、未再生のパートが蓄積されているか否かを判断するステップと、判断の結果、未再生のパートが蓄積されているとき、未再生のパートの再生時間で蓄積可能なデータ量を算出するステップと、算出結果に基づいて、サーバに要求するストリームデータ及び配信開始パートを選択するステップと、選択されたストリームデータを、配信開始パートからストリーム配信するよう要求するステップとをクライアントコンピュータに実行させる。
【0016】
このクライアントプログラムは、予め未再生のパートを蓄積し、未再生のパートの再生時間に蓄積可能なデータ量に基づいてストリームデータを選択し、その未再生のパートを再生している間、選択したストリームデータを順次取得する。そのため、再生すべきデータが枯渇するのを防止でき、コンテンツの再生が途切れるのを防止できる。さらに、ストリームデータをパート単位で順次受信し、再生するため、再生ビットレートをパート単位で変更できる。つまり、再生ビットレートの変更位置を所定の位置(パートとパートとの区切りの位置)とすることができる。
【発明を実施するための最良の形態】
【0017】
以下、図面を参照し、本発明の実施の形態を詳しく説明する。図中同一又は相当部分には同一符号を付してその説明は繰り返さない。
【0018】
1.構成
図1を参照して、コンテンツ配信システムは、サーバ(コンピュータ)10と、複数のクライアント(コンピュータ)20とを備える。サーバ10とクライアント20とは、インターネット30経由で接続されるが、LAN(Local Area Network)、WAN(Wide Area Network)、その他のコンピュータネットワークで接続されてもよい。
【0019】
サーバ10は、動画や音楽等のコンテンツに関する複数のストリームデータを蓄積し、クライアント20からの要求に応答して、ストリームデータをストリーム配信する。要するに、このシステムは、ストリーミング型のコンテンツ配信システムである。
【0020】
[サーバの構成]
図1を参照して、サーバ10は、ハードディスクドライブ(HDD)11と、CPU12と、メモリ13とを備える。これらは、バス17で互いに接続される。
【0021】
HDD11は、複数のストリームデータST1〜ST3を蓄積する。ストリームデータST1〜ST3は、同一コンテンツに関するストリームデータであり、互いに異なる再生ビットレートを有する。ストリームデータST1〜ST3の構造については後述する。HDD11は、ストリームデータST1〜ST3と異なるコンテンツに関する複数のストリームデータも蓄積する。
【0022】
HDD11はさらに、ストリーム情報データベース15とサーバアプリケーション(プログラム)16とを記憶する。ストリーム情報データベース15は、上述した複数のストリームデータに関する情報を登録する。ストリーム情報データベース15については後述する。
【0023】
サーバアプリケーション(プログラム)16は、クライアント20からの要求に対応したストリームデータをストリーミング配信する。CPU12は、サーバアプリケーション16をメモリ13に読み出して、上記のサーバアプリケーション16の動作を実行する。
【0024】
[ストリームデータの構造]
図2にストリームデータST1〜ST3のデータ構造を示す。横軸は再生時間を示す。また、各ストリームデータST1〜ST3の面積は、データ量を示す。
【0025】
ストリームデータST1〜ST3は、互いに異なる再生ビットレートBR1〜BR3を有する。ストリームデータST1の再生ビットレートBR1が最も低く、ストリームデータST2の再生ビットレートBR2は再生ビットレートBR1よりも高く、ストリームデータST3の再生ビットレートBR3が最も高い。したがって、ストリームデータST3のデータ量が最も多く、ストリームデータST1のデータ量が最も少ない。
【0026】
ストリームデータST1〜ST3のデータ量は互いに異なるものの、その再生時間は同じである(時刻t0〜時刻t8)。同一のコンテンツに基づいて作成されているためである。
【0027】
各ストリームデータST1〜ST3は、連続的に配列された複数のパート(P0〜P7)に分割される。このとき、各パートPj(パート番号j=0〜7)は、画質や音質が変化しても視聴への影響が少ない再生位置(時刻t1〜t7)で区切られる。たとえば、動画の場合であれば、場面設定が変更される位置等で区切られる。そのため、各パートP0〜P7の再生時間(D0〜D7)は互いに異なる。
【0028】
ストリームデータST1〜ST3は、同じ再生位置(t1〜t7)で分割されるため、各ストリームデータの同じパートPjは同じ再生時間Djを有する。たとえば、ストリームデータST1のパートP0と、ストリームデータST2のパートP0と、ストリームデータST3のパートP0とは、同じ再生時間D0を有する。
【0029】
[ストリーム情報データベース]
図3を参照して、ストリーム情報データベース15は、各ストリームデータSTi(レート番号i=1〜3)に関する情報が登録されるデータブロック151で構成される。
【0030】
各データブロック151は、ストリームデータの識別子STi(たとえばST1)と、再生ビットレート情報BRi(たとえばBR1)とを有する。データブロック151はさらに、パートリストを有する。パートリストは、各ストリームデータSTiのパートPjに関する情報を登録する。具体的には、パートリストは、そのストリームデータSTiが有するパート数分のレコードを有する。各レコードは、パート識別子(たとえばP0、P1等)を登録するフィールドと、再生時間Djを登録するフィールドと、対応するパートPjのデータ量SZ(i,j)を登録するフィールドとを有する。
【0031】
ストリームデータST1〜ST3のデータブロック151を参照して、各データブロック151の同じ番号のパート識別子は互いに対応する。たとえば、ストリームデータST1のパートP1はストリームデータST2及びST3のパートP1に対応する。上述したとおり、各パート識別子の再生時間は同じであるが、データ量は異なる。
【0032】
このように、ストリーム情報データベース15は、ストリームデータに関する情報と、各ストリームデータ内の各パートの再生時間、データ量に関する情報と、各ストリームデータのパートに対応する他のストリームデータのパートに関する情報とを含む。
【0033】
[クライアントの構成]
再び図1を参照して、クライアント20は、HDD21と、CPU22と、メモリ23と、ディスプレイ24とを備える。これらはバス26で相互に接続される。
【0034】
HDD21は、クライアントアプリケーション(プログラム)25を記憶する。クライアントアプリケーション25は、サーバ10にストリームデータSTiを要求したり、受信したストリームデータSTiのパートPjに基づくコンテンツを再生したりする。クライアントアプリケーション25はさらに、再生中にサーバ10に要求するストリームデータSTiを選択する。詳細は後述する。
【0035】
HDD21はさらに、内部にバッファ領域27A、27B(これらをまとめてバッファ領域27とも称する)を含む。バッファ領域27は、サーバ10からストリーム配信されたストリームデータSTiを順次蓄積する。バッファ領域27A及び27Bは、互いに異なる再生ビットレートBRiのストリームデータSTiを蓄積する。
なお、HDD21はサーバ10から送信されたストリーム情報データベース15を記憶する。
【0036】
CPU22は、クライアントアプリケーション25をメモリ23に読み出して、以下に説明するクライアント20の動作を実行する。
【0037】
2.動作
2.1.概要
本実施の形態によるコンテンツ配信システムでは、クライアント20が、サーバ10から配信されたストリームデータSTiを受信しながら再生する。このとき、クライアント20は、各パートPjの再生を完了するごとに、次のパートPj+1のデータ量SZ(i,j+1)が既にバッファ領域27に蓄積されているか否かを判断する。蓄積されている場合、次のパートPj+1の再生時間中にバッファ領域27に蓄積可能なデータ量を算出し、その算出結果に基づいて、サーバに要求するストリームデータSTiを選択する。
【0038】
図4は、クライアント20がサーバ10からストリームデータSTiを受信しながら再生しているときの、配信ビットレートBRcurの変動と、時刻tにバッファ領域27に蓄積されるデータ量DL(t)とを示すグラフである。配信ビットレートBRcurとは、サーバ10からクライアント20にストリーム配信されるデータの配信時のビットレート(bit/sec)である。図4中の上部グラフが配信ビットレートBRcurの変動を示し、縦軸はビットレート(bit/sec)である。図4中の下部のグラフは、バッファ領域27に蓄積されるデータ量DL(t)を示し、縦軸はデータ量(bytes)である。グラフ中のDST1〜DST3は、各ストリームデータST1〜ST3の再生に必要なデータ量を示す。なお、いずれのグラフも、横軸は時間(sec)である。
【0039】
図4を参照して、クライアント20は、初めにストリームデータSTi(たとえばST3)をサーバ10に要求する。クライアント20は、サーバ10からストリームデータST3を受け、バッファ領域27に蓄積する。蓄積したデータ量が所定のデータ量DL(t0)となったとき、クライアント20は再生を開始する。時刻t0〜時刻t2において、配信ビットレートBRcurは、再生ビットレートBR3よりも高い。そのため、再生するデータ量よりも受信するデータ量の方が多くなる。つまり、図4中のDL(t)の傾きの方が、DST3の傾きよりも大きくなる。そのため、バッファ領域27にデータが順次蓄積される。
【0040】
クライアント20は、パートP0の再生が終了した時刻t1において、サーバに要求するストリームデータSTiを選択する(データ要求処理:図6)。データ要求処理では、次のパート(パートP1)の全データ量SZ(3,1)が既にバッファ領域27に蓄積されているか判断し、既に蓄積されている場合、パートP1の再生時間D1中にバッファ領域27に蓄積可能なデータ量に基づいて、再生ビットレートBR3(ストリームデータST3)を変更するか否かを判断する。時刻t1では、データ量SZ(3,1)が既にバッファ領域27に蓄積されており、かつ、再生ビットレートBR3のまま維持すると判断し、そのまま再生を継続する。
【0041】
時刻t21で配信ビットレートBRcurは低下し、再生ビットレートBR3よりも低くなる。そのため、時刻t21以降、バッファ領域27に蓄積されているデータ量DL(t)は減少する。つまり、図4中のDL(t)の傾きの方が、DST3の傾きよりも小さくなる。
クライアント20は、時刻t3でデータ要求処理を実施し、次のパートP3のデータ量SZ(3,3)は既に蓄積しているものの、このまま再生を続けると、パートP4の再生中に蓄積したデータが枯渇する(図4中のDL(t)がDST3よりも低くなる)と判断する。このとき、クライアント20は、再生するデータをストリームデータST2(ビットレートBR2)に切り替えればパートP4以降も再生が途切れないと判断し、サーバ10にストリームデータST2をパートP4から配信するよう要求する。この動作により、クライアント20は時刻t4(パートP4)以降ストリームデータST2を再生する。
【0042】
時刻t51で配信ビットレートBRcurは再び上昇し、再生ビットレートBR3よりも高くなる。クライアント20は、時刻t6で、ストリームデータST2のパートP6のデータSZ(2,6)を既に蓄積していると判断し、さらに、パートP6の再生時間D6中にストリームデータST3(再生ビットレートBR3)のパートP7のデータSZ(3,7)を蓄積できると判断する。その結果、時刻t6でクライアント20は、サーバ10にストリームデータST3をパートP7から配信するよう要求する。クライアント20は、再生時間D6中にストリームデータST3のパートP7のデータSZ(3,7)を取得し、時刻t7以降にそのデータを再生する。
【0043】
以上のとおり、クライアント20は、パートPjの再生を完了したとき、原則として、次に再生すべきパートPj+1を蓄積する。さらに、パートPj+1の再生時間Dj+1中に蓄積可能なデータ量に基づいて、次のパートPj+2のデータをどの再生ビットレートBRi(ストリームデータSTi)にするか選択し、選択したストリームデータSTiのパートPj+2を取得する。そのため、コンテンツの再生が途切れるのを防止できる。
さらに、再生ビットレートBRiを切り替える場合、クライアント20は、パートPj単位で切り替える。各パートPjは、画質や音質が変更しても違和感が少ない位置で予め区切られているため、画質や音質が変化することによる視聴への影響を極力抑えることができる。また、再生ビットレートBRi(ストリームデータSTi)の変更をクライアント20で判断するため、サーバの負荷が軽減される。以下、フロー図を用いてコンテンツ配信システムの動作を詳述する。
【0044】
2.2.全体動作
図5を参照して、まず、クライアント20は、所望のコンテンツのストリーム情報データベース15を要求する(S1)。サーバ10は、クライアント20からの要求を監視し(S2)、要求を受けたとき(S2でYES)、対応するストリーム情報データベース15を送信する(S3)。
【0045】
クライアント20はストリーム情報データベース15を受け、各ストリームデータST1〜ST3の再生ビットレートBR1〜BR3に関する情報をディスプレイ24に表示する。クライアント20のユーザは、ディスプレイ24を参照し、再生ビットレート(たとえばBR3)を選択する。クライアント20は、ユーザ操作に基づいて、選択された再生ビットレートBR3のストリームデータST3をパートP0から配信するようサーバ10に要求する(S4)。具体的には、クライアント20は、ストリーム情報データベース15を参照し、ビットレート情報BR3に対応したストリームデータ識別子=ST3と、パート識別子=P0とを含む配信要求コマンドをサーバ10に送信する。
【0046】
サーバ10は、クライアント20からの配信要求を監視し(S5)、配信要求コマンドを受けたとき(S5でYES)、配信要求コマンドに基づいてストリームデータST3をパートP0からストリーム配信する(S6)。
【0047】
クライアント20は、サーバ10からデータを受信したか否かを監視し(S7)、データを受信したとき(ステップS7でYES)、受信したデータをバッファ領域27に順次蓄積する(S8)。このとき、クライアント20は、バッファ領域27A、27Bのいずれか(たとえば27A)を受信バッファに指定し、受信バッファに指定されたバッファ領域27Aにデータを蓄積する。以降、受信バッファに指定されたバッファ領域27を単に受信バッファとも称する。
【0048】
クライアント20は、受信バッファに蓄積されたデータ量DL(t)がパートP0のデータ量SZ(3,0)を超えたか否かを判断し(S9)、超えたとき(S9でYES)、パートP0の再生を開始する(S10)。このとき、クライアント20はデータ量DL(t)を有するバッファ領域27Aを再生バッファに指定し、指定された再生バッファからデータを読み出し、パートP0の再生を開始する。この場合、1つのバッファ領域27Aが受信バッファ及び再生バッファとして機能する。以降、再生バッファに指定されたバッファ領域17を単に再生バッファとも称する。
【0049】
再生後、クライアント20は、各パートPjの再生を完了するごとに、サーバ10に要求するストリームデータSTiを選択し、選択したストリームデータSTiの配信を要求する(S11:データ要求処理)。サーバ10は、クライアント20の要求に応答して、ストリームデータSTiを配信する(S12)。サーバ10は、ストリームデータSTiの最後のパートP7の配信を完了したとき(S14でYES)、動作を終了する。
【0050】
クライアント20は、サーバ10から受信したストリームデータSTiの再生を継続し(S13:再生処理)、ストリームデータSTiを全て再生したときに動作を終了する。
【0051】
ステップS11のデータ要求処理と、ステップS13の再生処理とは、各パートPjの再生が完了するごとに実施される。以下、データ要求処理及び再生処理について説明する。
【0052】
2.3.データ要求処理
データ要求処理は、各パートPjの再生が完了するごとに実行される。データ要求処理は、まず、要求するストリームデータSTi及び配信を開始するパート(配信開始パート)Pjを選択する(図6:ストリームデータ選択処理)。続いて、選択したストリームデータSTiを配信開始パートPjから配信するよう要求する(図7:要求処理)。
【0053】
2.3.1.ストリームデータ選択処理
クライアント20は、パートPjの再生を完了したとき、次のパートPjの全データを既に蓄積しているか否かを判断する。蓄積している場合、次のパートPjの再生時間Dj中に受信バッファに蓄積可能な受信データ量に基づいて、再生ビットレートBRiを変更するか否か判断し、要求するストリームデータSTiを選択する。以下、詳細を説明する。
【0054】
図6を参照して、パートPj(たとえばj=0)の再生が完了し(S21でYES)、かつ、パートPjが最終パートP7でない場合(S22でNO)、クライアント20は、現在の配信ビットレートBRcurを特定する(S23)。具体的には、以下の式(1)に基づいて、現在の配信ビットレートBRcur(bit/sec)を算出する。
【0055】
BRcur=(DL(tj+1)−DL(tj))×8/Dj (1)
j=0の場合、BRcur=(DL(t1)−DL(t0)/D0となる。要するに、再生が完了したパートPjの再生時間Dj(sec)と、その再生時間中にバッファに蓄積された受信データ量DL(tj+1)−DL(tj)(bytes)とに基づいて、配信ビットレートBRcurを算出する。配信ビットレートBRcurは再生ビットレートを変更するか否かを判断するときに利用される。
【0056】
次に、クライアント20はパート番号jをインクリメントし、(S24、j=1とする)、次に再生する予定のパートPj(パートP1)がバッファ領域27に蓄積されているか否かを判断する(S25)。具体的には、クライアント20は、以下の式(2)を満たすか否かを判断する。
【0057】
DLunused(tj)≧SZ(i,j) (2)
ここで、DLunused(tj)は、時刻tjにバッファ領域27に蓄積されたストリームデータSTiの未再生データ量を示す。たとえば、時刻t1におけるステップS25の判断では、DLunused(t1)≧SZ(i,1)を満たすか否かを判断する。クライアント20は、ストリーム情報データベース15に基づいて各パートPjのデータ量SZ(i,j)を特定する。
【0058】
判断の結果、式(2)を満たさない場合(S25でNO)、クライアント20は、次に再生する予定のパートPjの全データ量を蓄積しておらず、パートPjの一部のデータのみ蓄積している。そのため、クライアント20は、受信バッファに蓄積されたパートPjの部分データを再生せず、代わりに再生するデータとして、最も低い再生ビットレートBR1を有するストリームデータST1を選択し、配信開始パートをPjとする(S35)。ストリームデータST1は、各パートPjのデータ量SZ(1,j)が最も少ないため、サーバ10からデータを受信しながら再生しても、再生の途切れを可能な限り防止できるためである。
【0059】
一方、ステップS25での判断の結果、式(2)を満たす場合(S25でYES)、クライアント20は、次に再生するパートPjのデータ量SZ(i,j)を既に受信バッファに蓄積している。そのため、パートPjの再生時間Dj中に、次のパートPj+1のデータを順次蓄積することができる。そこで、クライアント20は、ストリームデータST1〜ST3のうち、いずれのストリームデータSTiのパートPj+1を要求するか検討する(S20)。
【0060】
まず、クライアント20は、既に蓄積されたストリームデータSTiのパートPjの再生が完了したときに、ストリームデータSTiのパートPj+1の全データを蓄積できるか否かを判断する(S26)。このとき、クライアント20は、以下の式(3)を満たすか否かを判断する。
【0061】
DLunused(tj)+(BRcur×Dj/8)≧SZ(i,j)+SZ(i,j+1) (3)
ここで、クライアント20は、ストリーム情報データベース15に基づいて、各パートPjの再生時間Djを特定する。
式(3)を満たさない場合(S26でNO)、クライアント20は、パートPjの再生完了時に次のパートPj+1の全データを蓄積できない。そのため、クライアント20は再生ビットレートBRiを下げる検討を行う(S27〜S29)。一方、式(3)を満たす場合(S26でYES)、パートPjの再生完了時に、次のパートPj+1の全データを蓄積できる。つまり、少なくとも今の再生ビットレートBRiで再生を継続できる。したがってこの場合、再生ビットレートBRiをさらに上げることができるか否かを検討する(S30〜S33)。以下、再生ビットレートBRiを下げる場合(S27〜S29)と、上げる場合(S30〜S33)とについて、具体例を挙げながら説明する。
【0062】
[再生ビットレートを下げる検討(S27〜S29)]
ストリームデータST3を受信しながら再生を実行している場合であって、図4中の時刻t3においてデータ要求処理を実行したとき、クライアント20は、ステップS26で式(3)を満たさないと判断する(S26でNO)。つまり、パートP3の再生終了時にパートP4の全データ量SZ(3,4)を蓄積できないと判断する。
このとき、クライアント20は再生ビットレートBRiを下げる検討を行う。具体的には、再生時間D3中にパートP4のデータ量SZ(i,4)を取得できるストリームデータSTiを選択する。
【0063】
クライアント20は、レート番号i=i−1(つまりレート番号i=2)にデクリメントする(S27)。デクリメントしたレート番号2は最小値=1でないため(S28でNO)、クライアント20は、ストリームデータST2のパートPj+1(つまりパート4)が、以下の式(4)を満たすか否かを判断する(S29)。
【0064】
BRcur×Dj/8≧SZ(i,j+1) (4)
BRcur×D3/8≧SZ(2,4)となり、式(4)を満たす場合(S29でYES)、再生時間D3内にストリームデータST2のパートP4のデータ量SZ(2,4)を取得できるため、サーバ10に要求するストリームデータとしてストリームデータST2を選択し、配信開始パートをP4とする(S34)。一方、式(4)を満たさない場合(S29でNO)、ステップS27に戻り、レート番号iをさらにデクリメントしてステップS28及びS29の判断を実行し、要求するストリームデータSTiを選択する(S34)。なお、レート番号iをデクリメントした結果、ステップS28でレート番号i=1と判断したとき(S28でYES)、クライアント20は、ストリームデータST1を選択し、配信開始パートをP4とする(S34)。
【0065】
[再生ビットレートを上げる検討(S30〜S33)]
ストリームデータST2を受信しながら再生している場合であって、図4中の時刻t6においてデータ要求処理を実行したとき、クライアント20は、ステップS26で式(3)を満たすと判断する(S26でYES)。つまり、パートP6の再生完了時である時刻t7に、ストリームデータST2のパートP7の全データ量SZ(2,7)を蓄積できると判断する。
このとき、クライアント20は、現在よりも高いビットレートBRiのストリームデータSTiを要求できるか否かを検討する。
【0066】
クライアント20は、レート番号i=i+1(つまりレート番号i=3)にインクリメントする(S30)。続いて、クライアント20は、ストリームデータST3のパートPj+1(すなわちパートP7)が、式(4)を満たすか否かを判断する(S31)。
【0067】
BRcur×D6/8≧SZ(3,7)となり、式(4)を満たすとき(S31でYES)、現在よりも高いビットレートのストリームデータST3を取得できる。ここで、レート番号iが最大(=3)であるか否かを判断し(S33)、レート番号iが最大であるため(S33でYES)、クライアント20は、ストリームデータST3を選択し、配信開始パートをパートP7とする(S34)。
【0068】
なお、ステップS33で判断した結果、レート番号iが最大でない場合(S33でNO)、さらに再生ビットレートBRiを上げることができるか否かを検討するために、ステップS30に戻り、ステップS31〜S33を実行する。ステップS31で式(4)を満たさなくなったとき(S31でNO)、そのストリームデータSTiのパートPj+1のデータ量SZ(i,j+1)を再生時間Dj中に蓄積できないため、レート番号iをデクリメントして1つ下のレート番号iに戻し(S32)、戻したレート番号iのストリームデータSTiを選択し、パートPj+1を配信開始パートにする(ステップS34)。
以上のストリーム選択処理により、次に再生するパートPjの再生時間Dj中にパートPj+1の全データSZ(i,j+1)を取得できるストリームデータSTi(再生ビットレートBRi)を選択する。そのため、再生すべきデータが途中で枯渇せず、再生の途切れを防止できる。
【0069】
2.3.2.要求処理
図7を参照して、図6で示したストリームデータ選択処理を実行後(S111)、クライアント20は、選択したストリームデータSTiが、現在受信しているストリームデータSTiと同じか否かを判断する(S51)。同じである場合(S51でYES)、クライアント20は既にそのストリームデータSTiを受信し続けているため、そのまま受信を継続する。要するに、この場合はサーバ10に配信要求コマンドを送信しない。
【0070】
一方、選択したストリームデータSTi(たとえばST2)が現在受信しているストリームデータSTi(たとえばST3)と異なる場合(S51でNO)、クライアント20は、サーバ10に対して、選択されたストリームデータST2を、配信開始パートPj+1から配信するよう要求する(S54)。具体的には、クライアント20は、ストリーム情報データベース15に基づいて、ストリームデータ識別子=ST2と、パート識別子=Pj+1とを含む新たな配信要求コマンドを送信する。
【0071】
なお、新たな配信要求を送信する前に、クライアント20は、バッファ領域27A及び27Bのうち、現在受信バッファに指定されているバッファ領域(たとえば27A)を切り替え(S52)。バッファ領域27Bを受信バッファとする。さらに、新たに受信バッファに指定されたバッファ領域27Bに蓄積されているデータを消去しておく(S53)。
【0072】
サーバ10は、新たな配信要求コマンドを受けたとき、今まで配信していたストリームデータST3の配信を停止し、選択されたストリームデータST2を、配信開始パートPj+1から配信する(S55)。
【0073】
クライアント20はサーバ10から配信されたストリームデータST2を受け、ステップS52で指定した受信バッファ(バッファ領域27B)に蓄積する。
【0074】
以上に示したとおり、今まで受信していたストリームデータST3と異なる新たなストリームデータST2を受信する場合、ストリームデータST2をストリームデータST3を蓄積しているバッファ領域27Aと異なるバッファ領域27Bに蓄積する。
異なるビットレートBRiのストリームデータSTiを同一のバッファ領域に蓄積すると、再生処理が煩雑になる。そこで、異なるビットレートBRiのストリームデータSTiを異なるバッファ領域27A及び27Bに蓄積し、受信バッファを再生バッファと分けることにより再生処理を容易にする。以下、再生処理について説明する。
【0075】
2.4.再生処理
再生処理は、各パートPjの再生が完了するごとに実施される。図8を参照して、クライアント20は、再生中のストリームデータSTi(たとえばST3)のパートPjの再生が完了したか否かを判断する(S61)。再生が完了したとき(S61でYES)、再生を完了したパートPjが最終のパートP7であるか否かを判断する(S62)。パートP7である場合(S62でYES)、コンテンツは全て再生されたため、再生を停止し(S68)、再生処理を終了する。
【0076】
再生を完了したパートPjがパートP7でない場合(S62でNO)、再生は継続される。このとき、クライアント20は、ストリームデータST3のパートPjの再生完了時に、受信バッファと再生バッファとが同一であるか否かを判断する(S63)。つまり、1つのバッファ領域(27A又は27B)が再生バッファ及び受信バッファとして機能していたか否かを判断する。
【0077】
再生バッファと受信バッファが同一でない場合(S63でNO)、クライアント20は、ストリームデータST3のパートPjの再生時間Dj中に、異なるストリームデーSTi(たとえばST2)のデータを取得している。そのため、次に再生するパートPjは、今までの再生バッファ(たとえばバッファ領域27A)と異なるバッファ領域(たとえば27B)に蓄積されている。したがって、再生バッファを切り替え(S65)、今までと異なるバッファ領域27Bを再生バッファに指定する。さらに、次に再生するパートPjは、今までの再生ビットレートBR3と異なる再生ビットレートBR2であるため、再生ビットレートをBR3からBR2に変更し(S66)、再生を開始する(S67)。
【0078】
一方、パートPjの再生完了時に、再生バッファと受信バッファとが同一である場合(S63でYES)、パート番号jをインクリメントし(S69)、次に再生するストリームデータST3のパートPjのデータ量SZ(3,j)が蓄積されているか否かを判断する(S64)。
【0079】
ここで、データ量SZ(3,j)が蓄積されていない場合(S64でNO)とは、図6中のステップS25で式(2)を満たさない場合に相当し、最も低いビットレートBR1のストリームデータST1のパートPjを受信と同時に再生する場合である。この場合、受信と同時に再生を行うため、受信バッファと再生バッファとを同じバッファ領域27にする必要がある。そのため、再生バッファを切り替え(S65)、図7に示した要求処理中のステップS52で切り替えられた受信バッファと再生バッファとを同じバッファ領域27とする。続いて、再生ビットレートBRiをBR1として(S66)、再生を開始する(S67)。これにより、ストリームデータST1を受信と同時に再生できる。
【0080】
ステップS64の判断の結果、次に再生するパートPj(ストリームデータST3)のデータ量SZ(3,j)が蓄積されている場合(S64でYES)、次に再生されるパートPjは、今まで再生してきたデータと同じ再生ビットレートBR3であるため、今までと同じ再生ビットレートBR3で再生を開始する(S67)。
以上のとおり、受信バッファと再生バッファとが同一であるか否かの判断と、再生バッファ中に次に再生するパートPjが蓄積されているか否かの判断を実行すれば、次に再生するパートPjの再生ビットレートBRiを判断できる。
【0081】
上述したコンテンツ配信システムでは、式(1)に基づいて配信ビットレートBRcurを特定したが、他の方法により配信ビットレートBRcurを特定してもよい。たとえば、各再生時間Dj中の配信ビットレートの変動を測定し、その測定値に基づいて、次に再生するパートPjの再生中の配信ビットレートBRcurの変動を予測してビットレートBRcurを特定してもよい。
【0082】
また、ストリームデータ選択処理(図6)において、ステップS31の判断基準を厳しくしてもよい。たとえば、ステップS31において、式(4)の代わりに以下の式(5)を用いてもよい。
【0083】
BRcur×Dj/8≧SZ(i,j+1)+SZ(i,j+2) (5)
この場合、再生ビットレートBRiは上がりにくくなるが、ストリームデータSTiの選択の変更頻度は低下するため、コンテンツの画質や音質の変更頻度を抑えることができる。
【0084】
以上、本発明の実施の形態を説明したが、上述した実施の形態は本発明を実施するための例示に過ぎない。よって、本発明は上述した実施の形態に限定されることなく、その趣旨を逸脱しない範囲内で上述した実施の形態を適宜変形して実施することが可能である。
【図面の簡単な説明】
【0085】
【図1】本発明の実施の形態によるコンテンツ配信システムの構成を示す機能ブロック図である。
【図2】図1に示したサーバに蓄積されるストリームデータの構造の詳細を示す図である。
【図3】図1に示したサーバ及びクライアントに蓄積されるストリーム情報データベースのデータ構造の詳細を示す図である。
【図4】図1に示したコンテンツ配信システムにおける配信ビットレートとクライアントに蓄積されるデータ量との関係を示す図である。
【図5】図1に示したコンテンツ配信システムの動作を示すフロー図である。
【図6】図5中のステップS11の動作のうち、ストリームデータ選択処理の詳細を示すフロー図である。
【図7】図5中のステップS11の動作のうち、図6のストリームデータ選択処理以降に実施される要求処理の動作を示すフロー図である。
【図8】図5中のステップS13の動作を示すフロー図である。
【符号の説明】
【0086】
10 サーバ
11、21 ハードディスクドライブ
15 ストリーム情報データベース
16 サーバアプリケーション
20 クライアント
23 メモリ
25 クライアントアプリケーション
27、27A、27B バッファ領域

【特許請求の範囲】
【請求項1】
サーバと、前記サーバに接続されたクライアントとを備えたコンテンツ配信システムであって、
前記サーバは、
各々が、同一のコンテンツに関し、互いに異なる再生ビットレートを有し、連続して配列される複数のパートに分割された複数のストリームデータを蓄積するストリームデータ蓄積手段と、
前記クライアントの要求に対応して前記ストリームデータのパートを配列順にストリーム配信する配信手段とを備え、
前記クライアントは、
前記ストリーム配信された前記パートを順次蓄積するバッファ手段と、
前記バッファ手段に蓄積された前記パートを順次再生する再生手段と、
前記パートの再生が完了したとき、未再生のパートが前記バッファ手段に蓄積されているか否かを判断する判断手段と、
判断の結果、前記未再生のパートが蓄積されているとき、前記未再生のパートの再生時間で前記バッファ手段に蓄積可能なデータ量を算出するデータ量算出手段と、
前記算出結果に基づいて、前記サーバに要求するストリームデータ及び配信開始パートを選択する選択手段と、
前記選択されたストリームデータを、前記配信開始パートからストリーム配信するよう要求する要求手段とを備えることを特徴とするコンテンツ配信システム。
【請求項2】
請求項1に記載のコンテンツ配信システムであって、
前記データ量算出手段は、
前記パートの再生が完了したとき、前記サーバから配信される前記ストリームデータの配信ビットレートを特定する配信ビットレート特定手段を備え、
前記特定した配信ビットレートと、前記未再生のパートの再生時間とに基づいて、前記データ量を算出することを特徴とするコンテンツ配信システム。
【請求項3】
請求項1又は請求項2に記載のコンテンツ配信システムであって、
前記クライアントは、
前記ストリームデータの各パートのデータ量及び再生時間と、前記各パートに対応した他のストリームデータのパートとに関するストリーム情報を蓄積するストリーム情報蓄積手段を備え、
前記選択手段は、前記算出結果と前記ストリーム情報とに基づいて、前記ストリームデータ及び配信開始パートを選択することを特徴とするコンテンツ配信システム。
【請求項4】
請求項1〜請求項3のいずれか1項に記載のコンテンツ配信システムであって、
前記判断の結果、前記未再生のパートが前記バッファ手段に蓄積されていないとき、前記選択手段は、前記複数のストリームデータのうち、前記再生ビットレートが最も低いストリームデータを選択することを特徴とするコンテンツ配信システム。
【請求項5】
各々が、同一のコンテンツに関し、互いに異なる再生ビットレートを有し、連続して配列される複数のパートに分割された複数のストリームデータを蓄積するサーバに接続可能なクライアントであって、
前記サーバからストリーム配信された前記パートを順次蓄積するバッファ手段と、
前記バッファ手段に蓄積された前記パートを順次再生する再生手段と、
前記パートの再生が完了したとき、未再生のパートが前記バッファ手段に蓄積されているか否かを判断する判断手段と、
判断の結果、前記未再生のパートが蓄積されているとき、前記未再生のパートの再生時間で前記バッファ手段に蓄積可能なデータ量を算出するデータ量算出手段と、
前記算出結果に基づいて、前記サーバに要求するストリームデータ及び配信開始パートを選択する選択手段と、
前記選択されたストリームデータを、前記配信開始パートからストリーム配信するよう要求する要求手段とを備えることを特徴とするクライアント。
【請求項6】
請求項5に記載のクライアントであって、
前記データ量算出手段は、
前記パートの再生が完了したとき、前記サーバから配信される前記ストリームデータの配信ビットレートを特定する配信ビットレート特定手段を備え、
前記特定した配信ビットレートと、前記未再生のパートの再生時間とに基づいて、前記データ量を算出することを特徴とするクライアント。
【請求項7】
請求項5又は請求項6に記載のクライアントであって、
前記ストリームデータの各パートのデータ量及び再生時間と、前記各パートに対応した他のストリームデータのパートとに関するストリーム情報を蓄積可能なストリーム情報蓄積手段を備え、
前記選択手段は、前記算出結果と前記ストリーム情報とに基づいて、前記ストリームデータ及び配信開始パートを選択することを特徴とするクライアント。
【請求項8】
請求項5〜請求項7のいずれか1項に記載のクライアントであって、
前記判断の結果、前記未再生のパートが前記バッファ手段に蓄積されていないとき、前記選択手段は、前記複数のストリームデータのうち、前記再生ビットレートが最も低いストリームデータを選択することを特徴とするクライアント。
【請求項9】
各々が、同一のコンテンツに関し、互いに異なる再生ビットレートを有し、連続して配列される複数のパートに分割された複数のストリームデータを蓄積するサーバに接続可能なクライアントコンピュータに実行させるクライアントプログラムであって、
前記サーバからストリーム配信された前記パートを順次蓄積するステップと、
前記蓄積された前記パートを順次再生するステップと、
前記パートの再生が完了したとき、未再生のパートが蓄積されているか否かを判断するステップと、
判断の結果、前記未再生のパートが蓄積されているとき、前記未再生のパートの再生時間で蓄積可能なデータ量を算出するステップと、
前記算出結果に基づいて、前記サーバに要求するストリームデータ及び配信開始パートを選択するステップと、
前記選択されたストリームデータを、前記配信開始パートからストリーム配信するよう要求するステップとをクライアントコンピュータに実行させるクライアントプログラム。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2007−36666(P2007−36666A)
【公開日】平成19年2月8日(2007.2.8)
【国際特許分類】
【出願番号】特願2005−217031(P2005−217031)
【出願日】平成17年7月27日(2005.7.27)
【出願人】(000000273)オンキヨー株式会社 (502)
【Fターム(参考)】