PR

 DLNAガイドラインv1.0では、コンテンツのストリーム伝送にHTTP(Hyper Text Transfer Protocol)を使うことは既に述べた。ただ、早送りや巻き戻し、指定時刻へのジャンプといった、AV機器なら当たり前の操作を実現するには工夫が必要になる。実際の再生操作の流れに沿って、どんなメッセージが行き来しているかを見ていこう。

 通常の再生操作時はシンプルだ。DMP(Digital Media Player)は、コンテンツのメタデータの中にある、再生に最適と判定した「res」(リソース、資源)のアドレス「contentURI」に対して「GET」(取得)リクエストを送る。DMS(Digital Media Server)は、コンテンツのストリーム(データの連続送信)をレスポンスとして返す。ストリームは複数のTCPパケットに分割されて伝送される。DMP側のTCPバッファーやデコーダーバッファーがオーバーフローしないように、フローコントロール(データ送信の制御)が行われている。この再生中のTCPコネクションを切断すると、いわゆる「停止」の操作になる。

トリックプレーの基本は一時停止とシーク機能

 ポーズ(一時停止)やその解除、早送り/早戻し(サーチ)、特定時刻へのジャンプ、秒数を指定してのスキップといった操作を「トリックプレー」と呼ぶ。この実装方法にはいくつかの方法があり、それぞれに長所と短所がある。いずれの場合も、コンテンツの冒頭からではなく、特定の地点から再生を開始する「シーク機能」の応用になる。

 シーク機能の実装方法には、「バイト・レンジ・シーク」と「タイム・ベース・シーク」の2種類がある。

 バイト・レンジ・シークは、HTTP 1.1の機能を利用した手法で、任意のバイト目以降のデータをGETする。DMS側の実装は容易だが、DMP側では、シーク先の時刻がデータ先頭から何バイト目に相当するかを計算した上でリクエストを送らなくてはならない。固定ビットレート(Constant Bit Rate、CBR)ならまだしも、可変ビットレート(Variable Bit Rate、VBR)のコンテンツでは予測と収束の計算が必要で、処理が複雑になってしまう。長時間にわたるコンテンツで冒頭から末尾部分にジャンプするなど時刻が離れている場合には、計算誤差などにも対応する必要が出てくる。

 一方、タイム・ベース・シークは、コンテンツ中の何分何秒へ飛ぶ、といった時刻単位でシークを行うもの。HTTPヘッダーをDLNAが拡張して実現している。時刻からバイト数へ変換を行うのはDMSの側だ。DMP側は、ユーザーインターフェース上の時刻表示やシークバー操作などと直結した形でリクエストを行えば済むため、バイト・レンジ・シークよりも単純な処理で済む。