本発明の技術分野は、パケット通信用のネットワーク、及びインターネットあるいは、IP(「インターネットプロトコル」)タイプのローカルネットワーク群のようなネットワーク内でのマルチメディアデータ(オーディオ、ビデオ、テキスト)の転送用のネットワークの技術分野である。
インターネットあるいはLAN(「ローカルエリアネットワーク」に対する頭字語)を介するマルチメディアデータストリームの送信の状況では、マルチメディアデータサーバは、1つ以上のデータストリーム(ビデオタイプ、オーディオタイプ、テキストタイプ、例えば、サブタイトル等)を1つ以上のクライアントへ同時に配信しなければならない。これらのクライアントは、それらのデータを受信して、その受信に応じてデータをプログレッシブに活用する。例えば、クライアントは、ビデオを表示して、そのビデオを受信しながらプログレシッブにオーディオを再生する。これは、「マルチメディアストリーミング」と呼ばれる。
一般的には、これらのマルチメディアストリーム(ビデオ、オーディオ、テキスト)を構築するデータは記憶することができ、また、場合によっては、前もって、データサーバ(例えば、マルチメディアハードディスク)において圧縮することができ、あるいは、一方で、キャプチャされ、かつ場合によっては、ストリーミングしながら圧縮することができる(例えば、ネットワークカメラの場合)。これらのデータは、いくつかの部分のペイロードデータに分割され、これらのペイロードデータは、可変数のヘッダ群あるいは拡張群を追加することによってパケット化される。これらのヘッダ群と拡張群は、特に、様々なプロトコルレイヤあるいは使用される様々なサービスとに関連づけられているチェック情報を含んでいる。そして、これらは、ネットワーク群を介して受信先へ転送することができるパケットを形成する。マルチメディアデータストリーム群の転送に適合されているプロトコルの例には、UDP/IPプロトコル群(「ユーザデータグラムプロトコル」に対する頭字語であるUDP)におけるRTP(「リアルタイム転送プロトコル」に対する頭字語)がある。
効率性のために、下位のプロトコルレイヤ群によるパケットのフラグメンテーションを防止しながら、これらのRTPネットワークパケット群は、一般的には、物理ネットワーク上で使用される転送プロトコルによって設定される最大有効サイズを有している。例えば、「イーサネット(登録商標)」タイプのネットワークにおいては、パケットの最大有効サイズは、一般的には1500バイトに制限される。この最大有効サイズは、ペイロードデータと、様々なプロトコルレイヤによって要求されるデータヘッダのセットとの間で共有される。例えば、追加のUDP/IPヘッダ群の後には、RTPパケットは1472バイトに制限される。
アプリケーションの観点からは、ネットワークの有効レートを最大化するためには、ネットワークパケット内の最大許容空間を占有するように、ペイロードデータを分割することが重要である。マルチメディアストリームをペイロードデータに分割することは、エンコーディングの時、あるいはパケット化の時のどちらかで動的に適合させることができる。エンコーダでの適合は、例えば、画像部分群(「スライス群」)のサイズ、あるいはオーディオ部分群(「サンプル群」)のサイズを変更することによって、ストリーミングしながら、圧縮が実行される場合に可能である。後者が同一のネットワークパケット(例えば、「H.264」パケット化によるものとしての)に、ペイロードデータのいくつかの部分をフラグメント化するあるいは組み合わせることを可能にする場合に、パケット化の時の適合が可能である。
これらのデータが一旦分割されると、当業者には周知の技術によって、ペイロードデータをバッファメモリの正規の位置に直接配置するとともに、その位置から続けてすべてのヘッダを追加することを可能にする十分な空間をバッファメモリの開始位置で残している。これらのヘッダは、ペイロードをコピーしたりあるいは移動することなく、様々なプロトコルレイヤによってプログレシッブに追加される。この技術は、メモリリソースとプロセッサリソースの観点からは有効である。
ペイロードデータに対するネットワークパケットで利用可能なサイズを判定することは課題となっており、また、バッファメモリに配置すべきデータをスタートする位置を判定することも課題となっている。
また、サーバは、いくつかのクライアントに同時に同一のマルチメディアデータストリームを送信することができる。例えば、マルチ−ユニキャストでは、異なるユニキャスト通信が、各クライアントとサーバとの間で確立される。各ネットワークパケットは、続けてクライアントのそれぞれに送信される。その場合、ペイロードデータの同一の項目が、いくつかの異なるクライアントに送信され、また、ヘッダのみが各クライアントに適合される。ペイロードデータのサイズを判定するために、メモリ内を移動させることなく、すべてのクライアントに送信されるべきペイロードデータの項目について、クライアントのそれぞれのヘッダ制約が順番に考慮される。
また、各クライアントは、様々なサービス(輻輳制御サービス、例えば、再送信メカニズムあるいはデータ冗長性メカニズムのいずれか一方に基づく送信誤り訂正サービス)の使用をネゴシエートすることができる。これらのサービスは、オリジナルデータストリームに従属するデータサブストリームの作成を要求することができる(例えば、オリジナルデータストリームに加えて、再送信データストリームあるいは冗長データストリーム)。これらのサービスは、また、オリジナルデータストリームあるいはデータサブストリーム、あるいはそれらの両方に同時に、ヘッダ形成時に補助的な情報の追加を要求することができる。例えば、再送信の場合、メインストリームからパケットの損失がある場合、損失したパケットは、関係のあるストリーム(サブストリームとして指定されることになる)で再送信されなければならない。RTPによる再送信メカニズムを記載するRFC4588(「RTP 再送信ペイロードフォーマット」、IETF、RFC4588、2006年7月)に記載されるように、2つの補助バイトのヘッダが、損失したオリジナルパケットのシーケンス数を記述するために、オリジナルペイロードデータに追加されなければならない。つまり、マルチメディアデータを複数の部分に分割する時点で、このような可能性を提供する必要がある。逆の場合には、マルチメディアデータの項目は、ネットワークパケット内の空間の欠如によって再送信することができない場合があるという可能性がある。
また、この補助的な情報のいくつかは、あるストリームから別のサブストリームへの永続的な特性を提供することができる。即ち、これは、オリジナルストリームと関連するサブストリームとの両方で繰り返されなければならず、あるいは、一方で、局所的な特性(ストリームに従属する)を有する場合がある。この2つ目の場合では、1つのストリームからサブストリームへのその永続的な特性が繰り返される必要はない。これらの制約も、ペイロードデータに対して利用可能なサイズを判定するために考慮されなければならず、そうすることで、それらは、フラグメンテーションあるいはメモリコピーを要求することなく、ストリームとサブストリームをすべてのクライアントへ送信することができる。
それぞれのクライアントによって使用される様々なサービスに対して適切となるように、また、メモリとプロセッサリソースに関して、最も効率的な方法ですべてのクライアントへ送信することを可能にするために、バッファメモリ群に配置するペイロードデータの最適サイズを任意の時間に判定することは特に複雑となる。
論文「プロトコルスタック設計に対するドライバベースの方法」(1999年、7月、エレクトニックエンジニアリングタイムズインディア(www.eetindia.co.in)発行、マイクロウェアシステム社、カート シュバデラー)が知られている。これは、ネットワークプロトコルスタックを設計することを可能にしながら、その効率性を改善する方法を記載している。これは、ネットワークサービスモジュールが、プロトコルスタックを構築するモジュール群それぞれに問い合わせることによって、ネットワークパケットのヘッダとトレーラ(trailer)に追加される情報の最大サイズを判定することを提案している。これは、作成時と、プロトコルスタックのそれぞれの変化時に、この動作を実行する。つまり、アプリケーションがメッセージ(例えば、「ハローワールド(hello world)」)を送信する場合、ネットワークサービス群のモジュールは、2つのバッファメモリを直接割り当てることができ、この2つのバッファメモリは、プロトコルスタックを構築するモジュール群のそれぞれによってパケットヘッダとパケットトレーラーそれぞれに追加される情報のすべてを含めるために十分に大きいものである。これらのモジュール群のすべてがしなければならないことは、任意の新規のメモリ割当あるいはコピーを行うことなく、これらのバッファメモリにこれらの情報を追加することである。この論文に記載される方法は、様々なタイプのヘッダ(永続的なあるいは局所的な)で、同一のペイロードデータのセットに対して、データサブストリームの存在あるいはいくつかの受信先の存在を管理することができないことを記述している。
2003年5月のMobiSys2003の議事録で発行された記事「8ビットアーキテクチャ用の完全TCP/IP」(アダム デュンケルス スウェーデンコンピュータ科学学会)も知られている。この文献には、コードサイズとメモリ消費に関して、8ビットハードウェアプラットホームと16ビットハードウェアプラットホームで動作するように適合されている2つのTCP/IPプロトコルスタックの実装を記載している。これは、特に、セクション5で、メモリの管理とバッファメモリ群の管理とを、数キロバイトのRAMだけで済ませるようにするためにどのようにして最適化されるかについて記載している。特に、
−ネットワークパケット群は、固定サイズのバッファメモリに配置される。
このサイズは、コンパイル時の構成設定オプションによって判定される。
−バッファメモリ群は、ペイロードデータの前にパケットヘッダ情報を追加することができるTCP/IPプロトコルスタックに対して十分な空間を含んでいて、このペイロードデータは、後のコピーを防止するためにバッファメモリの正規の位置に直接配置される。
−各バッファメモリは、リファレンスカウンタを含んでいる。これは、バッファメモリに対する新規のリファレンスがモジュールによって作成される毎にインクリメントされ、そのリファレンスが解放される毎にデクリメントされる。バッファメモリが一旦解放だけなされると、自身のリファレンスカウンタは値「0」に到達することになる。こうして、リファレンスカウンタは、バッファメモリからのコピーの回数を制限することを可能にする。
この実装では、様々な受信先、あるいはデータサブストリーム群の存在によって実際にアクティベートされるサービスに依存してサイズが変化するヘッダ群を管理することができない。
米国特許出願2009/0028142号「ネットアーク内のデータコンテンツのストリーミング」(ブレイン ケー.シュミット等による、2007年7月)も知られている。これには、データストリーム群の生成にサマリー情報が含んでいる場合の符号化データストリーム群を送信するためのシステムを記載している。サマリー情報は、データ自身の補完として、ネットワークパケットのそれぞれに関連づけられる。次に、このサマリー情報は、ネットワークパケットの受信先に、少なくとも一部の受信パケットを、それらを完全に復号することなく処理することを可能にする。このサマリー情報は固定サイズであり、また、RTPヘッダとペイロードデータとの間に配置される1つ以上のヘッダの形式で、パケットのそれぞれに挿入される。ネットワークパケットで利用可能な空間は、サマリー情報のサイズ(例えば、88バイトの固定サイズ)よりも少ないRTPヘッダ(12バイト)のサイズよりも更に少ないUDPネットワークパケットの最大サイズ(1472バイト)であるペイロードデータに対して評価される。このシステムは、ネットワークパケットで利用可能となるペイロードデータのサイズを、様々な受信先あるいはデータサブストリームの存在によって実際にアクティベートされるサービス群に従って動的に管理することはできない。
明細書の全体において、以下の定義を使用する。
「バッファメモリ」:用語「バッファ」によって共通に示されるバッファメモリは、特に、同一のレートで動作しない機器の項目群の2つの処理の間において、一時的にデータを記憶するために使用されるランダムアクセスメモリあるいはディスクの領域である。
「パケット化」:転送するためのビットストリームをパケットにグルーピングする動作。一定数の情報の項目群が、例えば、どのパケットに属し、かつどこにアドレス指定されているかを示すために、ヘッダの形態で追加される。
「RFC」(「requests for comment(コメントのリクエスト)」の頭字語):文字どおり、これは、コメントのリクエストであり、より一般的には、インターネットの技術的知識を文書化している通し番号の電子文書である。いくつかのRFCは規格になっていて、逆に、すべてのインターネット規格はRFCからなる。
概要としては、各イベント時(クライアントからの発信時/クライアントへの到着時、あるいはクライアントによるサービスのアクティベーション時/デアクティベーション時)、イベントに関係するデータストリームマネージャのそれぞれは最大空間を判定する。この最大空間は、使用されるプロトコル群及びサービス群によって要求されるヘッダ群と拡張群を配置するためのネットワークパケットを要求するものである。このことについて、データストリームマネージャを構築するモジュールのそれぞれは問い合わせられ、そして、自身をいくつかのタイプに区別する、自身のメモリ空間要件を通知する。ペイロードデータのパケット化において、各モジュールは、以下のタイプに対応する拡張情報を追加することができる。
−永続的なRTPヘッダ拡張(PHE)
−データストリームに従属するRTPヘッダ拡張(SDHE)
−永続的なペイロードデータ拡張(PPE)
−データストリーム従属ペイロードデータ拡張(SDPE)
モジュール自身がサブストリームの基点である場合、そのモジュールは、再帰的に、そのサブストリームにリンクされているメモリ空間に対する要件群を判定する。
データストリームマネージャを構築するモジュール群のそれぞれによって表現される様々なタイプのメモリ要件は組み合わせされ、そして、最大予約メモリ空間が全体としてデータストリームマネージャに対して判定される。この組み合わせによる特定の動作群は、ここでは、組み合わせる情報のタイプに依存する。
次に、データストリームマネージャは、自身の予約空間要件を、ペイロードデータのソースにリンクされている「バッファファクトリー」を用いて記録する。このバッファファクトリーは、データストリームマネージャ群のそれぞれのメモリ空間予約リクエスト群のリストを保持する。このデータストリームマネージャ群はそのリストにリンクされていて、そのメモリ空間予約リクエスト群の最大値を計算する。エンコーダあるいはパケッタイザが、新規のペイロードデータをバッファメモリに配置するために、バッファファクトリーから新規のバッファメモリをリクエストする場合、バッファファクトリーは、エンコーダあるいはパケッタイザに、ペイロードデータソースにリンクされているデータストリームマネージャのすべてに対してバッファメモリの開始で予約される空間の最大値を考慮して配置することができるペイロードデータからスタートする位置のポインタを用いて、バッファメモリを与える。
図1に示されるように、本発明を使用する場合、送信機デバイスあるいはサーバ10はペイロードデータ14のパケット16を、同一のマルチメディアデータストリーム14から、データ通信ネットワーク15を介して、いくつかの受信機デバイスあるいはクライアント11、12及び13へ送信する。例えば、サーバ10は、カメラによってキャプチャされるマルチメディアストリーム(ビデオ及びオーディオの少なくとも一方)を再送信することができる。通信ネットワーク15は、例えば、無線ネットワーク(例えば、WiFi/802.11a/b/g/n)、あるいはローカルイーサネットネットワーク、あるいは、インターネットのような長距離ネットワークである。
ペイロードデータ14は、RTP(「リアルタイム転送プロトコル」)のようなデータのリアルタイム送信に適合されているプロトコル群を使用して送信される。このプロトコルは、典型的には、UDP/IPプロトコルを介して実現される。また、受信機デバイスは、例えば、RTCP制御プロトコルを使用して、送信機デバイスへフィードバック情報を提供することができる。このRTCP制御プロトコルは、場合によっては、AVPFプロファイル(AVPFは、「フィードバック付きオーディオ−ビジュアルプロファイル(Audio-Visual Profile with Feedbacks)」の頭字語であり、RFC4585(「リアルタイム転送制御プロトコル(RTCP)ベースのフィードバック(RTP/AVPF)用拡張RTPプロファイル」、IETF、RFC4585、2006年7月)に記載されている)を使用して拡張される。
各ネットワークパケット16は、ペイロードデータ14とプロトコルヘッダ群を含んでいて、また、場合によっては、これらのプロトコルヘッダ群の拡張群及びペイロードデータに対する拡張群の少なくとも一方を含んでいる。このペイロードデータに対する拡張群は、サーバ−クライアントのペアそれぞれによって実現されるサービス群に依存する。例えば、クライアント13は、RFC4588(「RTP再送信ペイロードフォーマット」、IETF、RFC4588、2006年7月)に記載される再送信サービス(RTX)を使用する。ネットワークパケットが損失すると、ペイロードデータは、クライアントのリクエストで再送信することができる。この場合、RFCに従えば、ペイロードデータを含むパケットは、また、通常のヘッダに加えて、対応する損失したパケットのシーケンス番号を含む2バイトのペイロードデータに対する小拡張を備えている。
別の例では、クライアント12は、RFC5109(「汎用前方誤り訂正用RTPペイロードフォーマット」、IETF、RFC5109、2007年12月)に記載される誤り訂正サービス群(あるいは前方誤り訂正による「FEC」)を使用するとともに、TFRC(「TCPフレンドリーレート制御(TFRC:TCP Friendly Rate Control):プロトコル仕様」、IETF、RFC5348、2008年7月)のような輻輳制御(CC)サービスを使用する。再送信サービスに対しては、誤り訂正サービス(FEC)は、パケット群に対して更なる冗長情報の追加を要求し、また、輻輳制御サービスは、RTPヘッダ群の追加の拡張を要求すること場合がある。つまり、クライアント群のそれぞれに送信されるペイロードデータの同一の項目に対しては、ネットワークパケット16は、ヘッダ群と、可変サイズの拡張群を含む場合がある。
以下の状況は、ストリーミングしながら符号化されるビデオストリームを送信する場合が考慮されるが、事前に符号化されるビデオストリームあるいはオーディオストリームを送信する場合も、完全に同様の方法で当業者によって取り扱うことができる(事前符号化データの場合では、図2を参照して説明されるエンコーダ211は、事前符号化データに読み換えることができる)。図2では、ブロック図は、マルチメディアストリームサーバ10を記載している。
一般的には、送信対象のロー(生)データ(画像フレーム群)20は、ソースブロック21によって処理される。ソースブロック21は、一連のバッファメモリ214に配置されることになるペイロードデータを取得するために、ローデータを処理するタスクを有している。バッファメモリ214のそれぞれは、異なる「IPアドレス/ポート番号」の組み合わせによって識別されるネットワーク受信先に対応するデータストリームマネージャ23、24、25及び27(それぞれ、クライアント11、クライアント12及びクライアント13で示されている)を介して連続的に処理される。これは、ユニキャストIPアドレス、及びマルチキャストIPアドレスの少なくとも一方の場合であり得る。
各データストリームマネージャは、追加情報をヘッダ群に追加することによって、場合によっては、通信ネットワーク15によって、自身の受信先に送信されるパケットに対してペイロードデータ拡張情報を順番に追加することによって、バッファメモリ214からのペイロードデータを有効なRTPパケットに変換するタスクを有している。データストリームマネージャによって演算することが可能となる前に、バッファメモリ214の内容は、特定のデータストリームマネージャに対するバッファメモリ214の内容を記述するタスクが与えられる、仮想RTPパケット(例えば、22、22’、22”、あるいは28)を記述するオブジェクトとメモリ内で関連づけられる。
仮想RTPパケット22、22’、22”、及び28は、特に、ペイロードデータの位置を指定し、かつ、バッファメモリ214に存在するペイロードデータに対する一定のヘッダ群及び拡張群の位置を指定する、バッファメモリ214へのポインタ群を含んでいる。各データストリームマネージャは、1つ以上の処理モジュール群(例えば、231、241、242、243、251、252及び271)によって構成される。各処理モジュール(あるいはハンドラ)に対して、追加のデータヘッダ群を追加することによってバッファメモリ214の内容に補完的な追加を行うことができる、あるいは、後の使用のために、仮想RTPパケット(22、22’、22”、あるいは28)へのリファレンス(かつ、関連するバッファメモリ214への拡張による)を保持することができる。
処理モジュールには、特定の処理モジュール、RTPモジュール231、242、251及び271が存在する。この特定の処理モジュールは、バッファメモリ214の内容にRTPプロトコルヘッダを追加することによってRTPパケットをファイナライズし、かつ通信ネットワーク15を介して、自身の受信先に、メモリに形成されているそのRTPパケットを送信するタスクが与えられる。
より詳細には、ソースブロック21は、エンコーダ211、符号化フォーマットに適合されているパケッタイザ212、及びバッファメモリ「ファクトリー」213によって構築されている。データ20は、例えば、ビデオカメラのようなキャプチャ周辺機器から得られる画像フレーム群で構成される。これらのデータは、キャプチャ周辺機器のサンプリング周波数に対応する周波数で供給される。これらの画像フレーム群はエンコーダ211によってビデオ圧縮フォーマット、例えば、MPEG4あるいはH.264/AVCに符号化される。パケッタイザ212は、ペイロードデータの一部を形成するために符号化されているデータを分割すること、及び再構成することの少なくとも一方を実行する。このペイロードデータは、ネットワークパケット群で送信されるように構成されている。符号化データのパケット化は、MPEG4フォーマットに対する、「MPEG−4オーディオ/ビジュアルストリーム群用RTPペイロードフォーマット」、IETF、2000年11月に記載される、あるいは「H.264フォーマットに対する、「H.264ビデオ用のRTPペイロードフォーマット」、IETF、RFC3984、2005年2月に記載されるように実行することができる。
エンコーダ211及びパケッタイザ212の少なくとも一方は、ネットワークパケット内のペイロードデータに対して利用可能な最大サイズを把握するために、バッファメモリファクトリー213に問い合わせる。そのリプライでは、エンコーダ211及びパケッタイザ212は、ペイロードデータのサイズを取得するように符号化及びパケット化の少なくとも一方を適合する。このペイロードデータのサイズは、取り得る最大サイズに最も近いものである。例えば、符号化は、画像部分群(「スライス群」)あるいは量子化ステップサイズを変更することによって構成されてもよい。パケット化は、パケット化モードが許容する場合には、画像部分群をフラグメントすることによって、あるいは組み合わせることによって構成されてもよい。
エンコーダ/パケッタイザのペアによって生成されるペイロードデータは、バッファメモリ214に配置される。このバッファメモリ214は、エンコーダ211のリクエスト、あるいはパケッタイザ212のリクエストで、バッファメモリファクトリー213によって前もって割り当てられる。
バッファメモリファクトリー213は、ソース21にリンクしているデータストリームマネージャ群(例えば、23、24及び25)のそれぞれに対するメモリ空間の予約に対するリクエストのすべてを継続的に保持する。バッファメモリファクトリー213は、ネットワークパケット群の開始で予約されなければならない最大メモリ空間を判定する。この情報を用いて、ペイロードデータは、バッファメモリ214内の正しい位置に直接配置される。バッファメモリ開始地点214(図2の破線)での空き空間は、各処理モジュールに、メモリ内のペイロードデータをコピーあるいは移動することなく、ヘッダ情報及び拡張情報を連続的に追加することを可能にする。
ここで、ペイロードデータの同一の項目が、クライアント11、12及び13に送信されると仮定する。これに対して、バッファメモリ214は、データストリームマネージャ23、24及び25のそれぞれによって連続的に取り扱われる。データストリームマネージャ群のそれぞれに対して、異なる仮想「RTPパケット」オブジェクト22、22’及び22”が作成される。これらのオブジェクトは、特に、自身の内容を指定することを可能にする、バッファメモリ214に対するいくつかのポインタを含んでいる。
−バッファメモリの開始に対するポインタ
−ペイロードデータの位置に対するポインタ
−ヘッダ拡張群の位置に対するポインタ
最初は、RTPパケット22、22’、22”それぞれの少なくとも2つのポインタは等しく、また、ソース21によって配置されるように、バッファメモリ214内のペイロードデータの位置を指定する。
各データストリームマネージャ23、24及び25は、少なくとも1つの処理モジュールから構成される。これらの処理モジュールは、バッファメモリ214と、関連する仮想「RTPパケット」オブジェクト(22、22’あるいは22”)を処理するタスクが与えられる。各データストリームマネージャ23、24、25は、継続的に同一のバッファメモリ214を操作する(この操作は、データストリームマネージャのそれぞれによって再度書き込まれるペイロードデータの前の破線の領域に対して可能となる)。つまり、ペイロードデータは、自身がいくつかのクライアントへ送信される場合に、メモリ内でコピーされない、あるいは移動されない。
例えば、クライアント11に関連するデータストリームマネージャ23は、1つのRTP処理モジュール231だけを構成している。このRTP処理モジュールは、仮想RTPパケット22のポインタ群を使用して、バッファメモリ214内のペイロードデータの前に12バイトRTPヘッダを配置するタスクを行い、そして、それによってメモリ内に形成されたパケットを通信ネットワーク15を介して送信する。ネットワークを介して送信した後、仮想RTPパケット22は破棄することができる。
次に、バッファメモリ214からの同一のペイロードデータは、データストリームマネージャ24を使用してクライアント12へ送信される。クライアント12に関連づけられているデータストリームマネージャ24は、例えば、3つのモジュールを構成する。それは、輻輳制御モジュール241、RTPモジュール242(同様のモジュール231)、及びデータ冗長性に基づく誤り訂正モジュール243(あるいは「前方誤り訂正」による「FEC」)。この例では、輻輳制御モジュール241は、パケットに対する(例えば、ラウンドトリップ時間(あるいは「RTT」)を計算することができる)RTPヘッダ群への拡張群の形式で、バッファメモリ214に追加の情報を挿入することができる。この情報は、ペイロードデータの前に配置され、そして、結果として、仮想RTPパケット22”のポインタが再配置される。
仮想RTPパケット22’とバッファメモリ214は、次に、RTPモジュール242によって処理される。このRTPモジュール242は、バッファメモリ214内のRTPパケットをファイナライズし、かつそれを通信ネットワーク15を介して送信する。仮想RTPパケット22’とバッファメモリ214は、次に、FECモジュール243によって処理される。FECモジュール243は、新規の冗長パケットを計算することができるようになる前に、いくつかのRTPパケットを記憶しなければならない。つまり、FECモジュール243は、仮想RTPパケット22’へのリファレンスを保持する。ここで、仮想パケット22’によって指示される、バッファメモリ214のペイロードデータだけが、冗長パケットを計算するために利用することができることに注意されたい。モジュール241と242によってバッファメモリ214に配置されるヘッダ情報と拡張群は、他のデータストリームマネージャ群によって同一のペイロードデータの送信において上書きされることは免れない。
必要がある場合、モジュール242によって最初に送信する時と同様に、モジュール243によって参照される仮想パケット22’は、ヘッダ群と拡張群とを再生成するために十分な情報を保持する。
データストリームマネージャ24による処理後、バッファメモリ214は、最終的には、クライアント13へ送信される自身のコンテンツに対して、順番にデータストリームマネージャ25によって処理される。新規の仮想RTPパケット22”が割り当てられる。この仮想RTPパケット22”は、バッファメモリ214を参照する。クライアント13に関連付けられているデータストリームマネージャ25は、ここでは、2つのモジュールから構成される。これは:RTPモジュール251(モジュール231及び242と同様)と、再送信に基づく誤り訂正モジュール252(「RTX」)である。FECモジュール243に対しては、RTXモジュール252は、RTPパケット22”へのリファレンスを保持する。特に、クライアントのリクエストでネットワークを介して再送信することができる所定の時間の間、RTPパケット22”へのリファレンスを保持する。
RTXモジュール252は、上述のデータストリームマネージャ内の処理モジュールと、また、再送信されるパケット群を送信するためのRTPパケット群の新規のソース26との両方として動作する。RTX処理モジュール252とRTXソース26は、2つの態様の同一のRTXモジュールである。サーバ10が、再送信用のリクエストをクライアント13から受信すると、この再送信用のリクエストは、RTXソース26へ送信される。RTXソース26は、RTPパケット22”に対するRTXモジュール252とそれに関係するバッファメモリ214に記憶される、再送信用のリクエストに対応するパケットを検索する。パケットが検出される場合、再送信パケットを記述することになる新規の仮想RTPパケット28を割り当てる。新規の仮想RTPパケット28は、同一のバッファメモリ214をオリジナルの仮想RTPパケット22”として参照する。
つまり、ペイロードデータは、再送信リクエストに応答する時点では、コピーされない、あるいは移動されない。ヘッダ群と拡張群に対応する破線の部分だけが、再送信データストリームマネージャ27によるパケットの送信時に再度書き込まれる。RTXソース26に関連付けられているこのデータストリームマネージャ27は、他のデータストリームマネージャ23、24、25と同様の方法で動作する。ここでは、このデータストリームマネージャ27は、RTP処理モジュール271からなる。RTP処理モジュール271は、ペイロードデータの前にRTPヘッダ群を配置し、そうすることで、形成されるネットワークパケットをクライアント13へ送信する。
ここで、FEC処理モジュール243は、データのソース自身であり、これは、オリジナルのRTPパケット22’から生成されるFEC冗長パケット群の送信に対してRTXモジュール252に対して説明されるものと同様のものであることに注意されたい。このFEC冗長ソースは、明瞭にするために(図7及び図8におけるFECソースの表現を参照)、図2には示されてない。
更に、クライアント向けに専用となる追加の情報とヘッダ群を配置するための、バッファメモリ214内のヘッダゾーンの再書込は、各データストリームとサブストリームが連続的に処理されるという事実によって可能であることに注意されたい。
図3は、新規のネットワークパケットの送信用のバッファメモリファクトリーによって割り当てられる、バッファメモリ214の内容を記載している。
本発明を実現するために採用されるバッファメモリは、いくつかの部分によって構成されるメモリの連続するブロックであることが好ましい。バッファメモリの先頭には、リファレンスカウンタ31がある。このリファレンスカウンタ31は、バッファメモリが別のオブジェクトによって参照される毎にインクリメントされる。この別のオブジェクトは、例えば、RTP仮想パケット、処理モジュールあるいはデータソースがある。このリファレンスカウンタ31は、オブジェクトがバッファメモリへのリファレンスを破棄する毎にデクリメントされる。リファレンスカウンタ31は値「0」を保持する場合、即ち、システムの任意のオブジェクトによってこれ以上参照されることはない場合、バッファメモリへの割当が解消される。
リファレンスカウンタ31の後には、予約空間32が配置される。これは、ヘッダ及び拡張情報の少なくとも一方をペイロードデータに追加するための様々な処理モジュールによって使用することができ、そうすることで、ネットワークを介して転送することができるデータパケットを製造する。この予約空間の最大サイズの計算については後述する。
この予約空間32の後に、エンコーダ−パケッタイザのペアによって取得されるペイロードデータを配置するために利用できるゾーン33が配置される。ゾーン33に実際に配置されるペイロードデータのサイズは、ゾーン33のサイズ以下である。
バッファメモリファクトリーによってバッファメモリが割り当てられると、そのバッファメモリファクトリーは、ソースに関連付けられている様々なデータストリームマネージャによってなされる予約リクエスト群の最大値となる、予約空間32のサイズを判定する。残りの空間は、ペイロードデータに割り当てられ、そして、ゾーン33を構成する。バッファメモリファクトリーは、エンコーダ/パケッタイザに対して、様々なゾーンに定義することができるいくつかのポインタに割り当てられるバッファメモリを生み出す。
−予約空間の開始を指定するバッファメモリへのポインタ
−ペイロードデータを配置することができる開始位置を指定するペイロードデータへのポインタ
−ペイロードデータへのポインタとして同一位置に最初に配置されるRTPヘッダ拡張群へのポインタ
バッファメモリの全体サイズは、ネットワークを介して一回で(あるいは「最大送信ユニット」に対する「MTU」で)再送信する(フラグメンテーションなしで)ことができるパケットの最大サイズ(バイト)に、リファレンスカウンタ31のサイズを足したサイズに対応する。
図4は、追加のペイロードデータ拡張を記載している。処理モジュールあるいはソースがペイロードデータ拡張41をバッファメモリに追加する場合、追加情報のサイズはペイロードデータポインタから差し引かれ、追加の情報がそのポインタによって指定される位置に配置される。つまり、予約空間32の部分は、ペイロードデータ拡張を記憶するために使用される。RTPヘッダ拡張群へのポインタは、また、ペイロードデータへのポインタとして、同一の位置を指示するために更新される。
処理モジュール群は、RTPヘッダと取り得るそのRTPヘッダへの拡張群を挿入することができる前に、バッファメモリに挿入されるべきペイロードデータの拡張に対して、順番にデータストリームマネージャで連続的にリンクされてなければならない。処理モジュールが、様々なタイプの情報、例えば、ペイロードデータへの拡張と、RTPヘッダへの拡張をバッファメモリに挿入する場合、処理モジュールは、処理チェーン内の様々な位置に存在することができる。
ペイロードデータへの拡張の例には、OSN(「オリジナルシーケンス番号(original sequence number)」)再送信ヘッダがある。これは、RFC4588 セクション4(「RTP再送信ペイロードフォーマット」、IETF、RFC4588、2006年7月)で記載されるように、パケットを送信しなければならない場合に、オリジナルペイロードデータの前のRTXソースによって配置されなければならない。別の例には、RFC5109 セクション7(「汎用前方誤り訂正用のRTPペイロードフォーマット」、IETF、RFC5109、2007年12月)に記載される、FECヘッダとFECレベルヘッダがある。
2つのタイプの拡張として、ペイロードデータ拡張群とRTPヘッダへの拡張に区別されることに注意されたい。1つ目は、図4を参照して説明され、一方で、2つ目は図5及び図6を参照して説明される。RTPヘッダへの拡張群の追加は、2つのフェーズで実行される。第1フェーズは、図5に示され、RTPヘッダ自身への拡張の配置からなり、第2フェーズは、図6に示され、RTPヘッダへの追加された拡張群を記述する専用ヘッダを追加すること、場合によっては、パディングとからなる。
図5は、処理モジュールによる、RTPヘッダ拡張要素の追加を表している。各モジュールは、RTPヘッダへの追加情報を追加することができる。例えば、サーバ10によって提案されるあるサービス群の使用は、各ネットワークパケットで追加情報を送信することを必要とする場合がある。これは、例えば、TFRC輻輳制御サービスを用いる場合である。このTFRC輻輳制御サービスは、文献「TCPフレンドリーレート制御によるRTP」、IETF、draft-ietf-avt-tfrc-profile-10、2007年7月に記載されている。この場合、この情報は、RFC3550(「RTP:リアルタイムアプリケーション群用の転送プロトコル」、IETF、RFC3550、2003年7月)のセクション5.3.1によって定義されるように、RTPヘッダへの拡張を追加することができる。RTPヘッダにいくつかの拡張を配置することを可能にするために、様々なRTPヘッダの拡張群(ここでは、「RTPヘッダ拡張要素群」と呼ぶ)が、RFC5285(「RTPヘッダ拡張群用の汎用メカニズム」、IETF、RFC5285、2008年7月)に従って構成される。これは、RFC3550の目的の範囲内で、RTPヘッダ拡張を形成するために、パケット内で、いくつかのRTPヘッダ拡張要素がどのように関連付けられるかを定義する。
図5及び図6は、追加のRTPヘッダ拡張要素群を記載している。図6に示される、RTPヘッダ拡張は、一連のRTP拡張要素群64に続いて、場合によっては、メモリ内のデータのアライメントを保証するためのいくつかのパディングバイトP63を伴って、その前に、拡張ヘッダ(フィールドID61とフィールドL62からなる)からなる。いくつかの実施形態では、各処理モジュールは、RTPヘッダへ追加データを追加することができる。このため、図5に示されるように、この処理モジュールは、追加する要素のサイズを、RTPヘッダ拡張群へのポインタから差し引き、それによって、取得されるアドレスに新規の要素を配置する。RFC5285に従えば、この要素は、ローカル識別子51と、長さ表示52と、追加データ53からなる。
ペイロードデータの拡張後、かつネットワークを介して送信するためのRTPパケットをファイナライズするRTPモジュールによる処理前に、RTPヘッダ拡張要素群のすべてがバッファメモリに挿入される。
図6は、RTP処理モジュールによってファイナライズされるネットワークパケットを記載している。
RTPヘッダ拡張要素群が従前に追加されている場合に(つまり、ペイロードデータへのポインタとRTPヘッダ拡張群へのポインタ間の差分がゼロでない場合)、RTP処理モジュールは、ヘッダ拡張要素群の総和は32の倍数であること(これは、RFC3550 セクション5.3.1に記載されるRTPパケット化の制約である)をまず第一に判定することによってRTPパケットをファイナライズする。この判定がこの場合に該当しない場合、RTP処理モジュールは、パッディングバイト63を、RTPヘッダ拡張要素群64の前に追加する。次に、RTP処理モジュールは、RTP拡張要素群の長さの表示62と、識別子61からなるRTP拡張群のヘッダを追加する。RFC5285に従う、1バイトサイズのRTPヘッダへの拡張要素群の場合、識別子61は、例えば、「0xBEDE」となる。RTP処理モジュールは、次に、RTPヘッダ65に追加することによってパケットをファイナライズする。
RTPヘッダ64への拡張要素群がない場合、つまり、RTPヘッダ拡張群へのポインタ群と、ペイロードデータへのポインタ群が等しい場合、RTP処理モジュールは、ペイロードデータへのポインタの前にRTPヘッダ65を追加する。
そのようにして形成されたパケットが、ネットワーク15を介して送信される。
図7は、データストリームマネージャの第1の例と、処理モジュールのリンク状態の第1の例を示している。図7は、同一の受信クライアントに対して宛先とされているいくつかのデータストリーム群71、72及び73を表していて、かつ追加データの「永続性」あるいは「ストリーム従属性」の概念と、データストリーム群の間の承継の概念とを導入している。データストリーム群71、72及び73は「従属タイプ」であり、これは、データストリーム71を処理するFEC処理モジュール714が、データストリーム72に対するFECソース721自身であるからである。データストリーム72を管理する再送信モジュール724RTXは、データストリーム73に対するRTXソース731自身である。このスキーマに従えば、データストリーム71から到来するネットワークパケット群は、データストリーム72から到来するFECパケット群によるネットワーク上のパケット損失から保護される。このデータストリーム72自身は、データストリーム73から到来する再送信パケット群によって保護される。ストリーム群との間の従属性にマークを付けることは、データストリーム72が、データストリーム71のデータの「サブストリーム」であると言える。同様に、データストリーム73は、データストリーム72からデータのサブストリームである。
一般的には、処理モジュールが別のデータストリームに対するソース自身である場合、それは、処理モジュールにリンクしているデータストリームに関連するデータサブストリームであると言える。つまり、処理モジュールは、関連するデータサブストリームから、予約空間の制約を承継する。
ここで、このスキームに従えば、データストリームマネージャのそれぞれは、輻輳制御サービス712、722及び732をそれぞれ使用する。同様に、各データストリームマネージャは、RTPモジュール713、723及び733をそれぞれ備える。
このようなスキームでは、自身のネットワークパケットを送信することを可能にするために、各データストリームとサブストリーム71、72及び73に対して、順番にデータストリーム71のソース711によって生成されるペイロードデータの最大サイズの判定がなされる。ここで、この判定は、一旦ネットワークパケット群がソース711によって生成されて、かつバッファメモリに配置されると、データストリームをコピーするあるいは移動することなく、また、パケット群(各パケットは、最大で1つのMTUと等しくなる)のフラグメンテーションなしで、なされる。
これのため、各処理モジュールは、様々なタイプの予約に従って、また、追加情報のタイプ、ペイロードデータへの拡張のタイプ、あるいはRTPヘッダへの拡張のタイプに従って、さらに、追加情報の追加が従属ストリーム群の間(つまり、1つのデータストリームとデータサブストリームの間)で永続性の性質であるか否かに従って、予約空間に対する自身の最大の要件群を判定する。
また、処理モジュールによってデータストリームに追加される追加情報がデータサブストリーム内で繰り返されなければならないか、あるいは追加情報だけを処理モジュールにリンクしているデータストリームに適用するかを区別する問題がある。
例えば、図7を参照すると、輻輳制御モジュール712がTFRCタイプである場合、追加情報をRTPヘッダ拡張で追加しなければならない。この追加情報は、例えば、パケットが送信された日時、あるいはパケットに対するラウンドトリップタイム(RTT)の評価値である。この情報は、データストリーム専用である。つまり、この情報は正規のサブストリームで繰り返す必要はない。従って、これは、「データストリーム従属」タイプと言える。
一方、データストリーム72は、データストリーム71のオリジナルパケット群からFECパケット群を作成し送信することによって、データストリーム71によって生成されるネットワークパケットを保護する。これに対して、FECパケット群は、とりわけ、FECヘッダをペイロードデータあるいは等価物を追加することによって、処理モジュール714/FECソース721によって生成される。また、FECデータストリーム72は、再送信データストリーム73によって自身が保護される。これに対して、再送信パケット群は、RTX処理モジュール724によって保存されるFECパケット群に基づいて、RTXソース731によって生成される。これは、再送信パケット群が、同時に、ペイロードデータの等価物と、ペイロードデータのFECヘッダとを統合すると言える。このFECヘッダは、「永続性」タイプである。
これは、FECソース721によって追加されるヘッダ群と、RTXソース731は、付加的特性があるとことに注意されたい。この付加的特性は、ストリーム73によって再送信されるパケットは、同時に、データストリーム71のオリジナルのペイロードデータの等価物、データストリーム72のペイロードデータのFECヘッダ、データストリーム73のペイロードデータのRTXヘッダ、及び輻輳制御サービスに対するRTPヘッダへの拡張を統合する。
以下の様々なタイプの予約が区別される。
−永続性RTPヘッダ拡張群(あるいは「永続性ヘッダ拡張」からのPHE群)
−ストリーム従属RTPヘッダ拡張群(あるいはストリーム従属ヘッダ拡張からのSHDE群)
−永続性ペイロードデータ拡張群(あるいは「永続性ペイロード拡張」からのPPE群)
−ストリーム従属ペイロードデータ拡張群(あるいは、ストリーム従属ペイロード拡張からのSPDE群)
図8は、データストリームの第2の例と、処理モジュールのリンク状態の第2の例を示している。ここで、データストリーム81、82及び83は、同一の受信クライアントに向けられている。このスキームに従えば、データストリーム81からのネットワークパケット群は、データサブストリーム82から到来するFECパケット群と、データサブストリーム83から到来するRTX再送信パケット群との両方によって保護することができる。
また、データストリーム81、サブストリーム82及び83のそれぞれは、輻輳制御サービス812、822及び832をそれぞれ使用する。
データストリームマネージャ81は、ソース811からデータを受信し、そして、輻輳制御モジュール812、RTPモジュール813、FECモジュール814及び再送信モジュール815を備える。データストリームマネージャ82は、輻輳制御モジュール822及びRTPモジュール823を備える。データストリームマネージャ83は、輻輳制御モジュール832とRTPモジュール833を備える。図7で示される場合と比較して、FECソース821あるいはRTXソース831によって追加されるペイロードデータヘッダ群は、付加的特性ではない。
図9は、少なくとも1つのサブストリームを備える場合があるデータストリームを転送するためのデータストリームマネージャによって、バッファメモリに予約される空間の最大サイズを計算するためのステップ群のフロー図を示している。
データストリームマネージャによる予約リクエストは、以下のイベント群のそれぞれで再評価される。
−クライアントが、システムに接続すること、
−クライアントが、システムから切断すること、
−クライアントが、サービスをアクティベートすること、あるいは
−クライアントが、サービスをデアクティベートすること。
データストリームマネージャによって要求される予約空間のサイズを判定するために、PHE、SDHE、PPE及びSDPEのタイプ群に従う予約要件群が、ステップ91で、第1モジュールによって開始する各処理モジュールに対して判定されなければならない。予約要件群のこの判定は、後述する。
ステップ92で、処理モジュールが、少なくとも1つのサブストリームに対するデータのソース自身であるかが判定される。そうである場合、ステップ93で、処理モジュールは、PHE、SDHE、PPE及びSDPEのタイプ群に従って、各サブストリームの予約要件群を判定する。これらの予約要件群は、「承継されたもの」と言える。
そうでない場合、あるいはステップ93の後、ステップ94で、データストリームマネージャは、データストリームマネージャの最終処理モジュールの予約要件が判定されているかを判定する。そうでない場合、データストリームマネージャの新規の処理モジュールを処理するために、ステップ91に戻る。
最終モジュールが処理される場合、ステップ95で、データストリームマネージャ(「S」で示される)は、以下の方程式に従って、(Miで示される)ものを構成する処理モジュール群(processing modules)と(「Sj」で示される)ものを承継するサブストリーム群(Substreams)を考慮に入れることによって、自身の予約要件群(「R」で示される)を判定する。
これらの方程式群は、演算式群の形式で表現することができ、この演算式群は、拡張情報のタイプに依存する。データストリームマネージャSに対して、所与のタイプの拡張情報Eを記憶するために要求される予約空間「RE(S)」は、モジュールMiによって予約される空間の関数として表現することができる。このモジュールMiは、(RE(Mi))で示されるものと、サブストリームSjによって予約される空間を構成する。サブストリームSjは、方程式(5)の形式で、(RE(Sj))で示されるものを承継する。
つまり、方程式(1)から(4)は、単一方程式RE(S)の形式で表現され、ここで「E」は拡張情報のタイプ、つまり、PHE、SDHE、PPE、あるいはSDPEのタイプの1つを示している。OEは、以下のものを伴う、タイプEに依存する演算式を示している。
OSDHEとOSDPEは、演算式「max」に対応し、これは、値のペアの最大値を抽出する。
OPHEとOPPEは、演算式「+」に対応し、これは、値のペアの値を追加する。
RE(Mi)は、データストリームマネージャSのMiで示される処理モジュール群の1つによって、予約Eのタイプに対する予約空間を表している。RE(Sj)は、データストリームマネージャSのSjで示されるデータストリーム群の1つによって予約Eのタイプに対する予約空間を表している。
様々なタイプの予約要件群がデータストリームに対して一旦判定されると、ステップ96で、以下の演算式で使用して、データストリームSに対して予約される全体空間「ER」のサイズの判定がなされる。
ER(S)=align32(RPHE(S)+RSDHE(S)+HDR)+RPPE(S)+RSDPE(S)
ここで、「HDR」は、RFC5285で定義される、RTPヘッダ拡張群のヘッダのサイズである。図6において、RTPヘッダ65と「align32(x)」は、32ビットの倍数、実用上では、4バイト以上の倍数で、値xのアライメントを表していて、これは、値xがバイトで表現されるからである。
ステップ97で、データストリームマネージャは、次に、計算される予約空間に対する自身の要件を、リンクされているソースのバッファメモリファクトリーに記録する。
ここで、データストリームマネージャは、「0」に等しい予約リクエストを送信することによって、バッファメモリファクトリーからのデータストリームを事前に記録することができることに注意されたい。
図10は、バッファメモリファクトリーによって実行される、ペイロードデータの最大サイズの計算に対するステップ群のフロー図を表している。つまり、図10は、ステップ101で、データストリームマネージャからの予約に対するリクエストの受信において、バッファメモリファクトリーによって実行されるステップ群を詳細に示している。ステップ102で、予約に対するリクエストが「0」であるかどうかが判定される。
そうである場合、ステップ103で、データストリームと予約に対する自身のリクエストが、予約リクエスト群のリストに追加される。そうでなければ、ステップ104で、データストリームは、予約リクエスト群のリストから削除される。
ステップ103あるいはステップ104の一方の後、メモリファクトリーは、リンクしているデータストリームマネージャ群のそれぞれの予約のすべてを有することになる。ステップ105で、バッファメモリファクトリーは、すべてのデータストリームマネージャによって送信することが可能となるペイロードデータの最大サイズを、MTUである、ネットワーク上(フラグメンテーションなしで)を一度に送信することができるパケットの最大サイズ(バイト単位)から、予約リクエスト群の最大値を差し引くことによって判定する。
図11に示される本発明のデバイスの実施形態は、例えば、装置120上に基づいている。この装置120は、例えば、マイクロコンピュータ、ワークステーション、パーソナルデジタルアシスタント、移動電話、ネットワーク動画カメラ、静止画カメラ、テレビ、カムコーダ、あるいは、より一般的には、無線あるいは有線ネットワーク110と接続することができる通信インタフェースで提供される任意の周辺機器(移動体であろうとなかろうと)がある。装置120は、様々な周辺デバイスに接続することができる。これには、例えば、入力/出力カード(不図示)に接続されていて、かつ装置120にマルチメディアデータを提供する、デジタル動画カメラ121(あるいはスキャナ、あるいは任意の他の画像取得手段あるいは画像記憶手段)がある。
装置120は、以下のものが接続される通信バス131を備える。
−中央処理ユニット132(マイクロプロセッサ)(図2では「CPU」で示される)
−リードオンリーメモリ133、リムーバルであろうとなかろうと、本発明の方法を実行することができ、かつプロセッサあるいはコンピュータによって読取可能な命令群を実行可能なプログラム群を記憶する。
−ランダムアクセスメモリ134、これは、起動後、本発明の方法を実現する実行可能コードを含むとともに、その方法を実現するために必要な変数値群及びパラメータ群を記録するように構成されているレジスタ群を含んでいる。
− − 通信インタフェース135、通信ネットワーク110に接続され、この通信インタフェース135は、データを送受信するように構成されている。
オプションとしては、装置120は、以下のものを有することができる。
−オーディオデータの場合、入力/出力カード(不図示)、これはマイクロフォン124に接続される。
−スクリーン125は、ユーザとのグラフィカルユーザインタフェースとしてデータを表示し、かつ/および、提供するためのものである。このユーザは、キーボード126と、補助的なものであろうとなかろうと、ポインティングデバイスのような任意の他の手段とを使用して、プログラム群と対話することができる。このポインティングデバイスには、例えば、マウス、オプティカルスタイラス、あるいはタッチスクリーン(不図示)がある。
−ハードディスク136あるいは記憶メモリ、これには、例えば、コンパクトフラッシュ(登録商標)カードがあり、これは、本発明の実現において使用されるあるいは生成されるプログラム群及びデータを記憶することができる。
−ディスクドライブ(あるいは任意の他のリムーバルデータ媒体)137、これは、ディスク122を受け付け、それに、本発明に従って、処理されたあるいは処理されるべきデータを読み取りあるいは書き込むように構成されている。
通信バス131は、装置120に含まれる、あるいはそれに接続される様々な要素群との間の通信及びインターオペペラビリティを提供する。通信バス131の表現は限定されるものではなく、また、特に、中央処理ユニット132は、装置120の任意の要素と命令群を直接通信することができる、あるいは装置120の別の要素の手段によって命令群を通信することができる。
ディスク122は、任意の情報搬送媒体、例えば、書込可能であろうとなかろうと、コンパクトディスク(CD−ROM)、ZIPディスク、あるいはメモリカードがある。一般的には、デバイスに組み込まれているあるいは組み込まれていない情報記憶手段であって、マイクロコンピュータあるいはマイクロプロセッサによって読み取ることができ、また、場合によっては、リムーバルであっても良い情報記憶手段は、本発明の方法の実施を許容する命令群を実行する1つ以上のプログラムを記憶するように構成されている。
装置120によって、本発明の方法の実行を可能にする実行可能コードは、同様に、リードオンリーメモリ133、ハードディスク136、あるいはディスク122のようなリムーバルデジタル記憶媒体に記憶されても良い。変形例に従えば、プログラムの実行可能コードは、インタフェース135を介する通信ネットワーク110の中継によって受信され、それを実行する前に、装置120の記憶手段の1つに記憶される。
中央処理ユニット132は、プログラムあるいはプログラム群のソフトウェアコード部分の命令の実行を制御し、かつ指示する。起動時には、非揮発性メモリ、例えば、ハードディスク136あるいはリードオンリーメモリ133に記憶されている、プログラムあるいはプログラム群は、ランダムアクセスメモリ134(RAM)に送信される。これらの非揮発性媒体は、本発明に従うプログラムあるいはプログラム群の実行可能コードを含むとともに、本発明を実現するために必要な変数群及びパラメータ群を記憶するためのレジスタ群を含んでいる。
ここで、本発明に従うデバイスを含む装置120は、プログラムされた装置とすることもできることに注意されたい。この装置120は、例えば、特定用途集積回路(あるいは「ASIC」)に固定されているコンピュータプログラムあるいはプログラム群のコードを含んでいる。
上述の説明を読むことで、本発明は、ネットワークパケットの生成においてペイロードデータに追加することになる様々なタイプの追加情報を管理することを可能にすることが理解されるべきである。このネットワークパケットには、例えば、永続性タイプあるいはデータストリーム従属タイプのペイロードデータのヘッダ群(「ペイロードヘッダ」)、永続性タイプあるいは純粋なデータ従属タイプの基本的なRTPヘッダ拡張群、及び固定サイズのヘッダ群(例えば、基本的なRTPヘッダ群)がある。
また、ネットワークパケットにおけるペイロードデータに対して利用可能なサイズは常に最適となる。これは、クライアントがシステムへ接続する毎に、あるいはシステムから切断する毎に、また、クライアント群の1つによるサービスのアクティベーションあるいはデアクティベーション毎に、再評価される。
そして、ペイロードデータは、決してデュプリケート/コピーされることはない。これは、たとえペイロードデータがいくかの受信先(マルチキャストの場合)に送信される場合でも、あるいはそれらが同一のクライアントへ複数回送信されるものである場合でも、決してデュプリケート/コピーされることはない。つまり、システムは、より少ないメモリリソースとプロセッサリソースを消費する。