(57)【要約】ポータブルデバイス（２６）上に電子番組ガイドをキャッシュする方法は、ローカルキャッシュが関連する情報を含むとき、ローカルキャッシュ（２２）からポータブルにチャンネル情報および番組情報をダウンロードすることによって開始する。しかし、ローカルキャッシュがそのような情報を欠いている場合、ポータブルデバイスは、サーバー（１２）からチャンネル情報および番組情報をダウンロードする。次いで、ポータブルデバイスは、ダウンロードしたチャンネル情報および番組情報から、それぞれチャンネル索引および番組索引を構築し、ポータブルデバイス上で電子番組ガイドを確立する。
2014525700.tif 000002
【特許請求の範囲】
【請求項１】
ポータブルデバイス上に電子番組ガイドをキャッシュする方法であって、
ローカルキャッシュが関連する情報を含むとき、前記ローカルキャッシュから前記ポータブルにチャンネル情報および番組情報をダウンロードするステップと、そうでない場合、
サーバーから前記ポータブルデバイスに前記チャンネル情報および番組情報をダウンロードするステップと、
前記ダウンロードしたチャンネル情報および番組情報から、それぞれチャンネル索引および番組索引を構築し、前記ポータブルデバイス上で前記電子番組ガイドを確立するステップと、
を含む、前記方法。
【請求項２】
ローカルキャッシュから前記ポータブルにチャンネル情報および番組情報をダウンロードする前記ステップは、ホームネットワーク内のセットトップボックスから前記チャンネル情報および番組情報をダウンロードするステップを含む、請求項１に記載の方法。
【請求項３】
ローカルキャッシュから前記ポータブルにチャンネル情報および番組情報をダウンロードする前記ステップは、ホームネットワーク内のゲートウェイからチャンネル情報および番組情報をダウンロードするステップを含む、請求項１に記載の方法。
【請求項４】
前記ダウンロードしたチャンネル情報は、それぞれ特定のチャンネル番号によって識別されるブロックのシーケンスを含む、請求項１に記載の方法。
【請求項５】
前記ダウンロードした番組情報は、前記チャンネル情報の各ブロック内に番組の開始時間および番組長さ情報を含む、請求項４に記載の方法。
【請求項６】
関連する情報は、最近更新されたＥＰＧ情報を含む、請求項１に記載の方法。
【請求項７】
電子番組ガイドをキャッシュするポータブルデバイスであって、
ローカルキャッシュが関連する情報を含むとき、前記ローカルキャッシュから前記ポータブルにチャンネル情報および番組情報をダウンロードする手段と、そうでない場合、
サーバーから前記ポータブルデバイスに前記チャンネル情報および番組情報をダウンロードする手段と、
前記ダウンロードしたチャンネル情報および番組情報から、それぞれチャンネル索引および番組索引を構築し、前記ポータブルデバイス上で前記電子番組ガイドを確立する手段と、
を備える、前記ポータブルデバイス。
【請求項８】
前記ダウンロードしたチャンネル情報は、それぞれ特定のチャンネル番号によって識別されるブロックのシーケンスを含む、請求項７に記載のポータブルデバイス。
【請求項９】
前記ダウンロードした番組情報は、前記チャンネル情報の各ブロック内に番組の開始時間および番組長さ情報を含む、請求項８に記載のポータブルデバイス。
【請求項１０】
関連する情報は、最近更新されたＥＰＧ情報を含む、請求項７に記載のポータブルデバイス。
【発明の詳細な説明】
【技術分野】
【０００１】
関連出願の相互参照
本願は、米国特許法第１１９条（ｅ）に基づき、２０１１年８月１０日出願の米国特許仮出願第６１／５２１９７１号明細書の優先権を主張し、その教示が本明細書に組み込まれる。
【０００２】
本発明は電子番組ガイド（ＥＰＧ）に関する。
【背景技術】
【０００３】
技術の進歩は、テレビジョン視聴者およびラジオ聴取者に多数の番組をもたらした。その目的で、テレビジョンおよびラジオコンテンツのプロバイダは通常、現在の番組および近く公開される番組に関するスケジューリング情報を表示する、継続的に更新されるメニューを有する電子番組ガイド（ＥＰＧ）および対話型番組ガイドをその消費者に提供する。ＩＴＶなどのいくつかのＥＰＧは、ユーザがコンテンツに遅れずついて行くことを可能にするために、後方スクローリングをも特徴としている。
【０００４】
ほとんどの場合、セットトップボックス（ＳＴＢ）は、視聴者がそれを介してケーブルテレビまたは衛星テレビプロバイダまたは他のネットワークサービスオペレータによって提供されるコンテンツに同調する（すなわち、コンテンツを選択する）機構として働く。視聴者にとって利用可能なコンテンツを識別するために、ＳＴＢは、ネットワークサービスオペレータによって維持されるバックエンドサーバーからＥＰＧを取り出す。あるいは、ＳＴＢは、ネットワークサービスオペレータから受信したトランスポートストリーム（ＴＳ）中の符号化情報を復号化することによってＥＰＧを得ることができる。ＳＴＢは、ＥＰＧインストールと呼ばれるプロセス中にＥＰＧをハードディスク上などに保存するが、そのプロセスは非常に長くなることがある。実際には、ネットワークサービスオペレータは、番組およびチャンネル割当ての変化に基づいてＥＰＧを頻繁に更新する。したがって、ＳＴＢは、ユーザに最新のＥＰＧを提供するために、バックグラウンドでＥＰＧを更新する必要がある。
【０００５】
Ａｐｐｌｅ  ｉＰａｄ（登録商標）などのタブレットコンピュータ、ならびにスマートフォンなどの他のポータブルデバイスは、ホームネットワーク内のホームゲートウェイまたはＳＴＢと対話して、テレビジョンセットなどの１次ディスプレイデバイス上に表示されるコンテンツに関連する、通常はメタデータの形態の情報を表示する第２の画面を提供することができる。ＳＴＢとのそのようなタブレットコンピュータおよびスマートフォンの対話は、チャンネルザッピング、音量調節、コンテンツ同調、関連および補足情報ナビゲーション、視聴などの機能を含むことができる。タブレットコンピュータまたはスマートフォンからバックエンドサーバーへの冗長なネットワーク要求を回避するために、ＥＰＧのキャッシングが必要となる。そのようなキャッシングは、ＥＰＧのローカル検索を可能にし、それは、チャンネル、番組、およびスケジュール情報の円滑なブラウジングを可能にする。
【０００６】
既存のＥＰＧキャッシング方法は、どのようにＥＰＧをＸＭＬファイルフォーマットの方式でハードディスクに保存するか、およびどのようにファイル名に従ってファイルを読み込み、書き込み、次いでＸＭＬファイルを解析して特定の情報を得るかに焦点を当てている。この種の解決策の欠点は以下を含む。
１．ＸＭＬファイルは、要素名、属性名、タグなどを記憶するために大量の冗長な記憶空間を消費する。
２．すべてのチャンネル、番組、およびスケジュール情報を単一のＸＭＬファイルで保存することは、非常に難しいことが判明することがある。そのような情報を別々のＸＭＬファイル内に記憶することは、特定のディレクトリ内のすべてのＸＭＬファイルをロードするための冗長なファイルＩ／Ｏおよび冗長な時間を必要とする。
【０００７】
ＸＭＬフォーマットの代わりにＪａｖａＳｃｒｉｐｔ（登録商標）オブジェクト表記法（ＪＳＯＮ）メッセージフォーマットを使用することは、限られた時間および記憶容量の節約をもたらす。しかし、ＪＳＯＮメッセージフォーマットはテキストベースであり、キーと値の対を示すためにやはり何らかのタグを必要とする。ローカルディスク上でＥＰＧデータをバイナリフォーマットにシリアル化することは、ある程度の改善をもたらすことができるが、やはり別々の異なる番組を異なるファイルに編成することを必要とし、したがって索引付けおよびナビゲーションは、依然として時間がかかり、非効率である。
【発明の概要】
【発明が解決しようとする課題】
【０００８】
したがって、上述の困難を克服する、ポータブルデバイス上にＥＰＧをキャッシュする技法が必要とされている。
【課題を解決するための手段】
【０００９】
簡潔に言えば、本原理の好ましい実施形態によれば、ポータブルデバイス上に電子番組ガイドをキャッシュする方法は、ローカルキャッシュが関連する情報を含むとき、ローカルキャッシュからポータブルデバイスにチャンネル情報および番組情報をダウンロードすることによって開始する。しかし、ローカルキャッシュがそのような情報を欠いている場合、ポータブルデバイスは、サーバーからチャンネル情報および番組情報をダウンロードする。次いで、ポータブルデバイスは、ダウンロードしたチャンネル情報および番組情報から、それぞれチャンネル索引および番組索引を構築し、ポータブルデバイス上で電子番組ガイドを確立する。
【図面の簡単な説明】
【００１０】
【図１】本原理による、ローカルキャッシュまたはバックエンドシステムの１つから電子番組ガイドをキャッシュする少なくとも１つのポータブルデバイスを含むホームネットワークのブロック図である。
【図２】本原理による、電子番組ガイドをキャッシュする図１のポータブルデバイスに関連するイベントの時間シーケンスを示す図である。
【図３】個々の日の個々のチャンネルに関する番組のシーケンスを示す表である。
【図４】所与の日の所与のチャンネルに関する番組セグメントの構築を示す図３の拡大図である。
【図５】番組情報のバイナリ記憶を示す表である。
【発明を実施するための形態】
【００１１】
図１は、ネットワーク１４を介してバックエンドシステム１２からコンテンツと番組ガイド情報のどちらも受信するホームネットワーク１０のブロック図を示す。図１の図示する実施形態では、ネットワーク１４はインターネットを構成する。しかし、ネットワーク１４は、ケーブルテレビジョン、衛星テレビジョンプロバイダ、または他のネットワークシステムオペレータによって維持されるプロプライエタリネットワークなどの他の形態を取ることができる。さらに、ネットワーク１４は、広域ネットワーク、ローカルエリアネットワーク、またはワイヤレスネットワーク、あるいはそれらとパブリックまたはプライベートアクセスとの組合せの形態を取ることができる。
【００１２】
バックエンドシステム１２は通常、少なくとも１つのデータベース１８からの情報を提供するネットワーク１４に結合された少なくとも１つのサーバー１６を含む。情報は、例えば映画またはテレビジョン番組を表すオーディオビジュアルファイルの形態のコンテンツを含むことができる。さらに、情報は、電子番組ガイドを作成するのにホームネットワーク内の装置によって利用されるチャンネル情報および番組情報でよい。図１は、単一のサーバー１６および単一のデータベース１８からなるバックエンドシステムを示すが、実際には、バックエンドシステムは、複数のサーバーおよび／または複数のデータベースを含むことができる。
【００１３】
ホームネットワーク１０はホームゲートウェイ２０を含み、それは、ネットワーク１４と、例えば、テレビジョンセット２４上に表示するためのコンテンツ（例えば、テレビジョン番組）を選択するセットトップボックス（ＳＴＢ）２２などのホームネットワーク内の他の装置との間の１次インターフェースを提供する。図１は単一のＳＴＢ２２を示すが、バックエンドシステム１２または他のシステム（図示せず）がホームネットワーク１０に対するインターネット接続性を提供することを条件として、ホームゲートウェイ２０は、複数のＳＴＢならびにパーソナルコンピュータなどの他の装置にサービスする能力を有する。
【００１４】
ホームネットワーク１０は、１つまたは複数のプロセッサー（図示せず）を有する例えばＡｐｐｌｅ  ｉＰａｄ（登録商標）などのポータブルコンピュータの形態を取ることのできるポータブルデバイス２６によって実例として示される１つまたは複数のポータブルデバイスを含むことができる。実際には、ポータブルデバイス２６は、それに接続されたゲートウェイまたはワイヤレスルータ（図示せず）によって提供されるＷｉ−Ｆｉリンクなどのワイヤレスリンクを介してホームゲートウェイ２０と通信する。ポータブルデバイス２６がゲートウェイ２０と通信する能力は、タブレットコンピュータがＳＴＢ２２と対話することを可能にする。このようにして、ポータブルデバイス２６は、チャンネルザッピング、音量調整、コンテンツ同調、関連および補足情報ナビゲーション、視聴などの実施することができる。
【００１５】
ユーザがポータブルデバイス２６を利用して、例えばチャンネル同調などの機能を実施するために、ポータブルデバイスは、通常はＳＴＢ２２によって提供される電子番組ガイドと類似の電子番組ガイドを表示する能力を所有すべきである。ＥＰＧを表示するためにＳＴＢ２２は、ホームゲートウェイ２０を通じてバックエンドシステムからＥＰＧを取り出すことができる。あるいは、ＳＴＢは、ホームゲートウェイ２０を通じてバックエンドシステム１２から受信したコンテンツを含むトランスポートストリーム（ＴＳ）中の符号化情報を復号化することによってＥＰＧを得ることができる。ＳＴＢ２２は、ＥＰＧをハードディスク上など（図示せず）に保存する。実際には、ネットワークサービスオペレータは、番組およびチャンネル割当ての変化に基づいてＥＰＧを頻繁に更新する。
【００１６】
ポータブルデバイス上にＥＰＧをキャッシュする現在の技法は一般に、ポータブルデバイスがそれ自体を更新する必要があるごとに、ポータブルデバイスが直接的にバックエンドシステム１２から必要な情報を直接的にダウンロードすることを必要とする。ホームネットワーク１０内に存在するポータブルデバイスが多いほど、バックエンドシステムに対する要求が多くなり、それによってネットワーク１４上のトラフィックが増大する。
【００１７】
本原理によれば、ポータブルデバイス２６に対するＥＰＧのキャッシングは、以下で説明するように、有利にはプログラム命令のセットをポータブルデバイスに実行させることによって行われる。プログラム命令のセットは、ポータブルデバイス２６によって実行されるとき、装置に、「関連」するＥＰＧ情報について図のセットトップボックス２２にまず問合わせをさせ、そのような情報がＳＴＢに存在する場合、ポータブルデバイスは、それからデータをダウンロードする。しかし、ＳＴＢ２２がそのような情報を欠いている場合、ポータブルデバイス２６は、バックエンドシステム１２から情報をダウンロードする。「関連する」という用語は、一定の間隔以内に最近更新されたＥＰＧ情報（通常はチャンネルおよび番組情報）を指す。実際には、図１のバックエンドシステム１２は、ＳＴＢ２２を規則的な間隔で、例えば１０分ごとに更新することになる。１０分ごとの更新頻度を仮定すると、ポータブルデバイス２６が関連するＥＰＧ情報についてＳＴＢに問合わせるとき、１０分より古いＳＴＢ２２のＥＰＧ情報は、関連性を持たない。
【００１８】
図２は、本原理による、電子番組ガイドをキャッシュする図１のポータブルデバイス２６に関連するイベントのシーケンスを示す。図２の更新間隔３０によって例示される規則的な間隔で、図のポータブルデバイス２６は、まず初期化ステップ３２を実行してステップ３４の準備をすることによってＥＰＧをキャッシュすることになり、ステップ３４の間に、ポータブルデバイス２６はまず、関連するＥＰＧ情報を格納する図１のホームネットワーク１０内のローカルキャッシュに問合わせる。実際には、ＥＰＧ情報のローカルキャッシュは、図１のＳＴＢ２２内に常駐する。しかし、ある場合には、ホームゲートウェイ２０などの、ホームネットワーク内の別の装置がＥＰＧ情報を保存すると仮定して、ローカルキャッシュは、そのような装置内に常駐することがある。
【００１９】
ポータブルデバイス２６からの問合わせに応答して、ローカルキャッシュ（例えば、ＳＴＢ２２）は、その状態、すなわちローカルキャッシュが関連するＥＰＧ情報を現在含むかどうかで応答することになる。ローカルキャッシュが関連するＥＰＧ情報を有すると仮定すると、ポータブルデバイス２６は、ローカルキャッシュからそのような情報をダウンロードし、そのような関連ＥＰＧ情報を、通常はポータブルデバイス内のハードドライブまたは他の記憶機構上に格納することになる。ローカルキャッシュがＥＰＧ情報を持たない場合、例えば、キャッシュされたＥＰＧ情報がもはや最新ではない場合、ポータブルデバイス２６は、ポータブルデバイスに格納するために、図１のバックエンドサーバー１２からＥＰＧ情報をダウンロードする。
【００２０】
図２のブロック３８は、ポータブルデバイス２６によってＥＰＧ情報をキャッシュすることに関連するステップのより詳細な例示を示す。先に論じたように、キャッシングプロセスは、ローカルキャッシュに問合わせるステップを含み、ローカルキャッシュはその状態で応答する。ローカルキャッシュが関連するＥＰＧ情報を有する場合、ポータブルデバイス２６は、ポータブルデバイス上に格納するために、ローカルキャッシュからそのような情報をダウンロードする。そうでない場合、ポータブルデバイス２６は、ポータブルデバイス上に格納するために、バックエンドシステム１２からその情報をダウンロードすることになる。
【００２１】
実際には、ＥＰＧ情報は、１００メガバイトを超えるサイズとなる可能性があり、したがって単一の要求でＥＰＧ情報をキャッシュ（すなわちダウンロード）することは実際的ではなくなる。その理由で、ポータブルデバイス２６はブロック３８でステップを実行し、ＥＰＧ情報を次々に読み込む。実際には、ポータブルデバイス２６は、第１のループ４０を実行して、前述のようにローカルキャッシュまたはバックエンドシステム１２のどちらかからチャンネル情報を次々に読み込み、次いでポータブルデバイス上に格納するためにチャンネル情報をダウンロードすることになる。チャンネル情報をダウンロードおよび格納した後、ポータブルデバイス２６はチャンネル索引を構築することになる。ポータブルデバイス２６は、第２のループ４２を実行して、番組情報を次々に読み込み、次いでポータブルデバイス上に格納するために番組情報をダウンロードすることになる。チャンネル情報をダウンロードおよび格納した後、ポータブルデバイス２６は番組索引を構築することになる。チャンネル索引および番組索引から、ポータブルデバイス２６は、ステップ４３の間に、ユーザからのＥＰＧグラフィカルユーザインターフェースを求める要求に応答して、表示するためにＥＰＧを作成することになる。
【００２２】
各チャンネルは、それ自体のスケジュールをそれぞれ有する、少なくとも１つの、好ましくは、複数の番組を含む。開始および停止時間は、各番組スケジュールに関する重要なプロパティを構成する。以下は、番組スケジュールの時間ブロックを計算するための例示的なＣ言語番組コードを含む。
void cacheBuildBlocks(ChannelIndex chlIdx, EpgProgram[]programs)
{
try
{
for (int i=0; i < programs.Length; i++)
{
chlIdx.ids[i] = programs[i].id;
Schedule schedule = programs[i].schedule;
long schStart = schedule.startTime;
long schEnd = schedule.endTime;
DateTime startDate = DateTimeUtil.getDate(m_epgCacheDate.start);
DateTime schStaitDate = DateTimeUtil.getDate(schStart);
DateTime schEndDate = DateTimeUtil.getDate(schEnd);
int startBlock = getBlock(SchStart);
DateTime bDate = chlIdx.blockDates[startBlock];
DateTime programBlockDate = blockDate(startBlock);
if (startBlock <0)
{
throw new Exception("Invalid range of EPG date & time.");
}
if (Math.Abs(DateTimeUtil.getTime(bDate) - schStart)>(min_unit * interval))
{
throw new Exception("lnvalid range of EPG date &. time.");
}
int endBlock=getBlock(schedule.endTime);
for (int k = startBlock; k <= endBlock; k++)
{
chlIdx.blocks[k] = i;
}
}
}
catch (Exception e)
{
logger.Error(e.Message);
}
}
int getBlock(long schStart)
{
long lngOffset=schStart - m_epgCacheDate.start;
Double potentialBlock = (Double)(lngOffset / min_unit / interval);
return (int)Math.Ceiling(potentialBlock);
}
DateTimeblockDate(int block)
{
long blockTime = m_epgCacheDate.start +(long)(block * min_unit * interval);
return DateTimeUtil.getDate(blockTime);
}
【００２３】
ＥＰＧデータを取り出すためのＣプログラミング言語でのプログラミング命令の例示的なセットが以下で現れる。図１のポータブルデバイス２６内のプロセッサー（図示せず）によって実行されるとき、以下で列挙されるプログラミング命令は、入力パラメータ「ｓｔａｒｔＤａｔｅＴｉｍｅ」および「ｄｕｒａｔｉｏｎ」に従って時間ブロックを計算する。変数「ｓｔａｒｔＤａｔｅＴｉｍｅ」は、単一の問合わせに関するＥＰＧ内の番組の特定の開始日および時刻を示す。ポータブルデバイス内のローカルディスクまたは他の記憶機構上に保存される番組情報のオフセットおよび長さの計算は、「ｓｔａｒｔＢｌｏｃｋ」および「ｅｎｄＢｌｏｃｋ」を含む時間ブロック変数を利用する。オフセットおよび長さは、記憶装置からの番組情報の読取りを容易にする。
EpgChannel[] CacheRetrieve(int startChannelIndex, int count, long startDateTime, int
duration, bool includePrograms)
{
EpgChannel[] resultChannels = null;
try
{
／／カウント項目に関するｓｔａｒｔＣｈａｎｎｅｌＩｎｄｅｘで始まるｃｈａｎｎｅｌＭａｐ配列をコピーする。
resultChannels = new EpgChannel[count];
／／ｃｈａｎｎｅｌＭａｐからｒｅｓｕｌｔＣｈａｎｎｅｌにチャンネル配列をコピーする。
Array.Copy(channelMap, startChannelIndex, resultChannels, 0, count);
if (includePrograms)
{
／／開始および終了ブロックを計算する
int startBlock = getBlock(startDateTime);
int endBlock = getBlock(startDateTime + duration);
DateTime blockDate = channelIndex[0].blockDates[startBlock];
for (int i = startChannelIndex; i < (startChannelIndex + count) && i <
channelIndex.Length; i++)
{
int programStart = startBlock;
int programEnd = endBlock;
if (programStart < channelIndex[i].blocks.Length && programEnd > 0)
{
if (programStart < 0)
{
programStart = startBlock = 0;
}
int findStart programStart;
if (findStart < channelIndex[i].blocks.Length && findStart <
endBlock)
{
int pOff=channelIndex[i].blocks[findStart};
int lastBlock = endBlock;
while (pOff == -1 && (findStart - 1) >0)
{
findStart--;
pOff = channelIndex[i].blocks[findStart];
}
if (pOff != -1)
{
int findEnd = channelIndex[i].blocks[programEnd];
while (findEnd == -1 && ((programEnd + 1) <
channelIndex[i].blocks.Length))
{
programEnd++;
findEnd = channelIndex[i].blocks[programEnd];
}
if  (findEnd == -1)
{
programEnd = findStart;
}
int pLen = (channelIndex[i].blocks[programEnd] -
channelIndex[i].blocks[findStart]) + 1;
／／ファイル「ｃｈａｎｎｅｌＰｒｏｇｒａｍｓ」からチャンネル配列内の番組配列をコピーする
／／ｒｅｓｕｌｔＣｈａｎｎｅｌｓに対するｃｈａｎｎｅｌＩｎｄｅｘによって示される。
EpgProgrm[]pTmp=new EpgProgram[pLen];
for (int j = channelIndex[i].blocks[findStart]; j <=
channelIndex[i].blocks[programEnd] && j < channelIndex[i].programs.Length; j++)
{
long stt = channelIndex[i].programs[j] off;
int len = channelIndex[i].programs[j].len;
pTmp[j - pOff] =
(EpgProgram)m_file_programs.readObject(stt, len);
}
if (pLen > 0)
{
DateTime firstProgram =
DateTimeUtil.getDate(pTmp[0].schedule.startTime);
}
resultChannels[i - startChannelIndex].programs = new
EpgProgram [pLen];
Ary.Copy(pTmp, 0, resultChannels[i -
startChannelIndex].programs, 0, pLen);
}
}
}
}
}
}
catch (Exception e)
{
logger.Error(e.Message);
}
return resultChannels;
}
int getBlock(long schStart)
{
long lngOffset = schStart - m_epgCacheDate.start;
Double potentialBlock = (Double)(lngOffset / min_unit / interval);
return (int)Math.Ceiling(potentialBlock);
【００２４】
図３は、本原理によるキャッシング方法の概要を与える、個々の日の個々のチャンネルに関する番組のシーケンスを示す表を示す。例示しやすいように、図３は、０からＭ−１までの日範囲を示し、チャンネル範囲は０からＮ−１までである。ＥＰＧ番組情報は、タイムスケジュールのシーケンスに従う構成を有する。一例を挙げると、Ｄａｙ（ｉ）およびＣｈａｎｎｅｌ（ｊ）に関するＥＰＧ内の番組ブロックは、異なる濃淡でそれぞれマークされた３つの番組を含む。
【００２５】
図４は、それぞれ番組（ｋ）、番組（ｋ＋１）、および番組（ｋ＋２）と示される３つの番組のそれぞれについての番組セグメントの構築を示す図３の拡大図を示す。番組（ｋ）は、ｂｌｏｃｋ［ｐ］、ｂｌｏｃｋ［ｐ＋１］．．．ｂｌｏｃｋ［ｑ−１］によって表されるセグメントのシーケンスを含む。番組（ｋ＋１）は、ｂｌｏｃｋ［ｑ］、ｂｌｏｃｋ［ｑ＋１］．．．ｂｌｏｃｋ［ｒ−１］によって表されるセグメントのシーケンスを含む。最後に、番組（ｋ＋２）は、ｂｌｏｃｋ［ｒ］、ｂｌｏｃｋ［ｒ＋１］．．．ｂｌｏｃｋ［ｓ−１］によって表されるセグメントのシーケンスを含む。各ブロックは番組スケジュールに依存する。
【００２６】
データ構造「ＣｈａｎｎｅｌＩｎｄｅｘ」および「ＰｒｏｇｒａｍＩｎｄｅｘ」は、図４に示すＥＰＧガイド部分で重要な役割を果たす。「ＣｈａｎｎｅｌＩｎｄｅｘ」データ構造内で、「ｃｈａｎｎｅｌ  Ｎｕｍｂｅｒ」という表記を有する要素は、チャンネル番号に対応し、特定のチャンネルの一意の識別として働く。番組セグメントは整数配列を構成し、それは、関連するチャンネル内の特定の番組内の時点に対する参照を可能にする。先に論じたように、番組セグメントは、番組の開始時間および終了時間を含む番組スケジュールに依存する。データ構造「ＰｒｏｇｒａｍＩｎｄｅｘ」は、「ＰｒｏｇｒａｍＩｎｄｅｘ」という表記をそれぞれ有する値の配列を構成する。データ構造「ＰｒｏｇｒａｍＩｎｄｅｘ」について、変数「ｏｆｆ」および「ｌｅｎ」は、図１のポータブルデバイス２６のローカルディスク上に保存された、番組情報の記録されたオフセットおよび長さをそれぞれ特定する働きをする。これらの２つのデータ構造から、ＥＰＧ開始および終了時間は、ブロックの計算を可能にし、それは、指し示された番組の計算を可能にする。指し示された番組を、そのオフセットおよび長さに従ってローカルディスクから読み込むことができる。
【００２７】
図５は、別々のメモリブロック内に格納された各番組の個々のセグメントのそれぞれを示す、番組情報のバイナリ記憶を示す表を示す。先に論じたように、「ＰｒｏｇｒａｍｍｉｎｇＩｎｄｅｘ」データ構造に関連する変数「ｏｆｆ」および「ｌｅｎ」は、番組情報の記録されたオフセットおよび長さをそれぞれ特定する。オフセットおよび「長さ」は整数値を構成し、保存した番組情報に関するバイナリバイトオフセットおよび長さを表す。
【００２８】
上記は、ポータブルデバイス上に電子番組ガイド（ＥＰＧ）情報を保存する技法を説明する。
【図１】
2014525700.tif 000003
【図２】
2014525700.tif 000004
【図３】
2014525700.tif 000005
【図４】
2014525700.tif 000006
【図５】
2014525700.tif 000007
【国際調査報告】
2014525700.tif 000008
2014525700.tif 000009