以下、本発明を実施するための形態について図面を用いて詳細に説明する。本発明は、映像データのフレーム種別に応じて、適応的に誤り訂正強度の異なるFECを用いることを特徴とする。
これにより、符号化された映像を伝送するIPパケットフローにおいて、フレーム種別に応じた伝送帯域(損失による影響が大きいフレームほど誤り訂正用に広い伝送帯域、損失による影響が小さいフレームほど誤り訂正用に狭い伝送帯域を使用)となり、伝送帯域を有効活用することができる。また、受信側では、伝送路上でIPパケットが損失したときに、損失による映像品質への影響が大きいIPパケットほど復元できる可能性が高くなり、映像破綻が生じ難くなるため、サービス品質を確保することができる。
また、本発明は、映像データのフレーム境界を判定し、そのときまでにFECブロックを構成したフレーム境界以前のIPパケットを強制的に出力することを特徴とする。
これにより、FECブロックの構成に伴う遅延を、常に1フレーム以内に収めることができ、短遅延化を実現することができる。そして、受信側では、IPパケットの受信待ちによるバッファアンダーフローの発生を抑えることができる。
〔映像配信システム〕
まず、本発明の実施形態による送信装置及び受信装置を含む映像配信システムについて説明する。図1は、実施例1の映像配信システムの構成例を示す概略図である。この映像配信システム1-1は、送信装置2-1及び受信装置3を備えて構成される。送信装置2-1及び受信装置3はIP回線4を介して接続され、映像配信システム1-1には、符号化された映像を伝送するIPパケットフローが構成される。
送信装置2-1は、図示しない単体の符号化装置等から送信されたMMTのパケット(MMTP/UDP/IPのレイヤ構造のパケット、MMTを含むIPパケット)を受信する。
送信装置2-1は、IPパケットに含まれる映像データのフレーム種別を判定し、IPパケットに対し、フレーム種別に応じて誤り訂正強度の異なるFEC符号化を行う。送信装置2-1は、元のIPパケット、及びFEC符号化にて生成したIPパケットを、IP回線4を介して受信装置3へ送信する。
受信装置3は、送信装置2-1から送信されたIPパケットを、IP回線4を介して受信する。そして、受信装置3は、IPパケットが損失した場合、フレーム種別に応じて誤り訂正強度の異なるFEC符号化に対応するFEC復号を行い、損失したIPパケットを復元する。受信装置3は、MMTを含むIPパケットを送信する。
図2は、実施例2の映像配信システムの構成例を示す概略図である。この映像配信システム1-2は、送信装置2-2及び受信端末5を備えて構成される。送信装置2-2及び受信端末5はIP回線4を介して接続され、映像配信システム1-2には、符号化された映像を伝送するIPパケットフローが構成される。
送信装置2-2は、映像信号を入力し、映像信号を符号化してMMTを含むIPパケットを生成する。そして、送信装置2-2は、図1に示した送信装置2-1と同様に、IPパケットに含まれる映像データのフレーム種別を判定し、IPパケットに対し、フレーム種別に応じて誤り訂正強度の異なるFEC符号化を行う。送信装置2-2は、元のIPパケット、及びFEC符号化にて生成したIPパケットを、IP回線4を介して受信端末5へ送信する。
受信端末5は、スマートフォン、小型ノートパソコン、タブレット型端末等のモバイル端末であり、携帯型の受信装置、またはテレビ、STB(Set Top Box)、メディアプレイヤ、デジタルサイネージ等の固定型の受信装置である。
受信端末5は、送信装置2-2から送信されたIPパケットを、IP回線4を介して受信する。そして、受信端末5は、図1に示した受信装置3と同様に、IPパケットが損失した場合、フレーム種別に応じて誤り訂正強度の異なるFEC符号化に対応するFEC復号を行い、損失したIPパケットを復元する。受信端末5は、IPパケットからMMTを分離して復号し、映像信号を外部へ出力するか、または内蔵のディスプレイに表示する。
尚、映像配信システムは、図1に示した送信装置2-1及び図2に示した受信端末5を備えて構成されるようにしてもよいし、図2に示した送信装置2-2及び図1に示した受信装置3を備えて構成されるようにしてもよい。
〔実施例1〕
まず、図1に示した実施例1の送信装置2-1及び受信装置3について説明する。実施例1は、送信装置2-1が、MMTを含むIPパケットを入力してFEC符号化を行い、元のIPパケット及びFEC符号化にて生成したIPパケットを送信し、受信装置3が、IPパケットを受信してFEC復号を行い、MMTを含むIPパケットを送信する例である。
(送信装置2-1)
図3は、実施例1の送信装置2-1の構成例を示すブロック図である。この送信装置2-1は、IPパケット受信部10、フレーム境界・種別判定部11、FEC符号化部12及びIPパケット送信部13を備えている。
IPパケット受信部10は、図示しない単体の符号化装置等から送信されたMMTを含むIPパケットを受信し、IPパケットに対して所定の受信処理を行う。そして、IPパケット受信部10は、受信処理後のIPパケットをフレーム境界・種別判定部11及びFEC符号化部12に出力する。
IPパケット受信部10が出力するIPパケットは、FEC符号化により生成されるIPパケットと区別して、「IPパケット(ソース)」という。ソースは、ソースパケットであることを意味する。
フレーム境界・種別判定部11は、IPパケット受信部10からIPパケット(ソース)を入力し、IPパケット(ソース)のペイロード(有効ペイロード)からMMTPヘッダ等を抽出する。IPパケット(ソース)のペイロード、MMTPヘッダ等については、後述する図11にて説明する。
フレーム境界・種別判定部11は、IPパケット(ソース)に格納された映像データについて、MMTPヘッダ等のデータに基づき、フレーム境界(フレームの先頭)及びフレームの種別(I,P,Bの種別)を判定し、フレーム境界・種別情報を生成する。フレーム境界・種別判定部11は、入力したIPパケット(ソース)に対応するフレーム境界・種別情報をFEC符号化部12に出力する。
ここで、IPパケット(ソース)には、I,P,Bフレームのうちのいずれかのフレームの映像データが格納されている。また、フレーム境界情報は、当該IPパケット(ソース)に格納されている映像データがフレーム境界であるフレームの先頭部分のデータであるか否かを示す(当該IPパケット(ソース)に、I,P,Bフレームのいずれかのフレームについての最初の映像データが含まれているか否かを示す)情報である。種別情報は、当該IPパケット(ソース)に格納されている映像データの属するフレームの種別を示す情報である。
MMT/IPを用いる新しい放送では、システムレイヤで映像符号化を意識した多重化処理が行われるため、TSを用いる場合と比較して、IPパケットのペイロードに対する解析が容易である。このため、IPパケットのペイロードに格納されたデータに基づいて、フレーム境界・種別情報を生成することができる。
例えば、フレーム境界・種別判定部11は、IPパケット(ソース)に含まれるMMTPヘッダからRAP(Random Access Point)フラグを抽出し、RAPフラグに基づいて、当該IPパケット(ソース)に、GOPの先頭のIフレームにおける先頭部分(先頭の映像データ)が格納されているか否かを判定する。そして、フレーム境界・種別判定部11は、当該IPパケット(ソース)に、GOPの先頭のIフレームにおける先頭部分(先頭の映像データ)が格納されていると判定した場合、Iフレームの境界を示すフレーム境界情報を生成する。
また、MMTでは、映像符号化の処理単位を、MMTPにおいてDU(Data Unit)として取り扱う。映像符号化がHEVCである場合、フレーム境界・種別判定部11は、MMTPペイロード(MMTPペイロードのうちヘッダ以外の部分、後述する図11を参照)に格納されているNALユニットの先頭位置を検出する。NALユニットには、フレームの映像データが格納されている。
フレーム境界・種別判定部11は、NALユニットヘッダからnal_unit_type領域を抽出し、nal_unit_type領域のデータに基づいて、NALユニットの映像データにおけるフレームの種別を特定する。
この場合、フレーム境界・種別判定部11は、NALユニットヘッダのnal_unit_type領域のデータがAUD(Access Unit Delimiter)である場合、当該IPパケットにはフレームの先頭部分のデータが格納されていると判断することができる。RAPフラグが0のパケットに対してこの判定を行うことで、PフレームまたはBフレームの先頭データを含むIPパケットであることがわかる。
さらに、AUDにはpic_type(ピクチャタイプ)領域が格納されており、そのフレームに含まれるスライスの符号化モードを識別することができる。これにより、pic_type=0(Iスライスのみ)の場合はIフレーム、pic_type=1(IまたはPスライス)の場合はPフレーム、pic_type=2(I、PまたはBスライス)の場合はBフレームであると判別することができる。つまり、フレーム境界・種別判定部11は、P,Bフレームの境界及び種別を示すフレーム境界・種別情報を生成することができる。
このように、フレーム境界・種別判定部11により、入力したIPパケット(ソース)に格納された映像データのフレームについて、当該IPパケット(ソース)のペイロードに格納されたデータ(RAPフラグ、NALユニットヘッダ、AUD等)に基づき、フレーム境界及びフレーム種別が判定され、フレーム境界・種別情報が生成される。
尚、フレーム境界・種別判定部11は、IPパケット(ソース)のペイロードからDUを抽出し、DUからDUヘッダを抽出し、DUヘッダに含まれるsample_numberの変化によってフレーム境界を判定するようにしてもよい。
ここで、以下の非特許文献によれば、新4K8K衛星放送の運用では、sample_numberは0に固定されている。このため、この非特許文献の規定に準拠する場合、sample_numberの変化からフレーム境界を判定することができない。
ARIB TR-B39、“高度広帯域衛星デジタル放送運用規定(第三分冊)”
FEC符号化部12は、IPパケット受信部10からIPパケット(ソース)を入力すると共に、フレーム境界・種別判定部11から、当該IPパケット(ソース)に対応するフレーム境界・種別情報を入力する。そして、FEC符号化部12は、フレーム境界・種別情報に基づき、フレーム種別毎に、IPパケット(ソース)を含む所定の行列サイズのFECブロックを構成する。
ここで、FEC符号化部12は、フレーム種別がIフレームの場合、Bフレームよりも誤り訂正強度の強いFEC符号化を行うために、所定の行列サイズのFECブロックを構成する。また、FEC符号化部12は、フレーム種別がBフレームの場合、Iフレームよりも誤り訂正強度の弱いFEC符号化を行うために、Iフレームの場合とは異なる所定の行列サイズのFECブロックを構成する。また、FEC符号化部12は、フレーム種別がPフレームの場合、Iフレーム及びBフレームのいずれかに等しいか、または両者の間の所定の行列サイズのFECブロックを構成する。
すなわち、Iフレームの誤り訂正強度をIp、Bフレームの誤り訂正強度をBp、及びPフレームの誤り訂正強度をPpとすると、Ip,Bpについては以下の式が成り立つ。
[数1]
Ip>Bp ・・・(1)
また、Ip,Pp,Bpについては以下の式が成り立つ。
[数2]
Ip=Pp>Bp または
Ip>Pp=Bp または
Ip>Pp>Bp ・・・(2)
FEC符号化部12は、IPパケット(ソース)が所定の行列サイズに満たない場合、ダミーデータを生成してFECブロックに含める。
FEC符号化部12は、FECブロックを単位としてFEC符号化を行い、後述するFECヘッダ等を生成し、FECヘッダ等を含むリペアパケットを生成する。以下、リペアパケットを「IPパケット(リペア)」という。
FEC符号化部12は、FECブロックを構成するIPパケット(ソース)及びIPパケット(リぺア)をIPパケット送信部13に出力する。この場合、FEC符号化部12は、ダミーデータをIPパケット送信部13に出力しない。FEC符号化部12の詳細については後述する。
IPパケット送信部13は、FEC符号化部12からIPパケット(ソース)及びIPパケット(リペア)を入力し、これらに対して所定の送信処理を行う。そして、IPパケット送信部13は、送信処理後のIPパケット(ソース)及びIPパケット(リペア)をIPパケットとして、IP回線4を介して受信装置3へ送信する。
(受信装置3)
図4は、実施例1の受信装置3の構成例を示すブロック図である。この受信装置3は、IPパケット受信部20、FEC復号部21及びIPパケット送信部22を備えている。
IPパケット受信部20は、送信装置2-1により送信されたIPパケットを、IP回線4を介して受信し、IPパケットに対して所定の受信処理を行う。そして、IPパケット受信部20は、受信処理後のIPパケットであるIPパケット(ソース)及びIPパケット(リペア)をFEC復号部21に出力する。
FEC復号部21は、IPパケット受信部20からIPパケット(ソース)及びIPパケット(リペア)を入力し、IPパケット(リペア)からFECヘッダを抽出し、FECヘッダのデータに基づいて、フレーム種別毎にFECブロックの行列サイズを特定する。そして、FEC復号部21は、フレーム種別毎にFECブロックを構成する。
FEC復号部21は、IPパケット(ソース)が損失している場合、IPパケット(リペア)を用いてFEC復号を行い、損失したIPパケット(ソース)を復元する。FEC復号部21は、IPパケット(ソース)をIPパケット送信部22に出力する。FEC復号部21の詳細については後述する。
IPパケット送信部22は、FEC復号部21からIPパケット(ソース)を入力し、IPパケット(ソース)に対して所定の送信処理を行う。そして、IPパケット送信部22は、送信処理後のIPパケット(ソース)を、MMTを含むIPパケットとして出力する。
〔実施例2〕
次に、図2に示した実施例2の送信装置2-2及び受信端末5について説明する。実施例2は、送信装置2-2が、映像信号を入力して映像符号化を行い、MMTを含むIPパケットを生成してFEC符号化を行い、元のIPパケット及びFEC符号化にて生成したIPパケットを送信し、受信端末5が、IPパケットを受信してFEC復号を行い、IPパケットからMMTを分離して映像復号を行い、映像信号を出力する例である。
(送信装置2-2)
図5は、実施例2の送信装置2-2の構成例を示すブロック図である。この送信装置2-2は、映像入力部14、映像符号化部15、MMT多重化部16、フレーム境界・種別判定部11、FEC符号化部12及びIPパケット送信部13を備えている。送信装置2-2は、これらの構成部に加え、図示しない音声入力部、音声符号部等を備えるようにしてもよい。
映像入力部14は、映像信号を入力し、映像信号に対して所定の入力処理を行い、入力処理後の映像信号を映像符号化部15に出力する。
映像符号化部15は、映像入力部14から映像信号を入力し、映像信号に対して映像符号化処理を行い、映像符号化処理後の映像信号をMMT多重化部16に出力する。
MMT多重化部16は、映像符号化部15から映像符号化処理後の映像信号を入力し、映像信号に対して多重化処理を行うことでMMTを生成し、MMTを含むIPパケット(ソース)を生成する。そして、MMT多重化部16は、IPパケット(ソース)をフレーム境界・種別判定部11及びFEC符号化部12に出力する。
フレーム境界・種別判定部11は、MMT多重化部16からIPパケット(ソース)を入力し、図3に示したフレーム境界・種別判定部11と同様の処理を行う。
FEC符号化部12は、MMT多重化部16からIPパケット(ソース)を入力し、図3に示したFEC符号化部12と同様の処理を行う。また、IPパケット送信部13は、図3に示したIPパケット送信部13と同様の処理を行う。
(受信端末5)
図6は、実施例2の受信端末5の構成例を示すブロック図である。この受信端末5は、IPパケット受信部20、FEC復号部21、MMT分離部23、映像復号部24及び映像出力部25を備えている。
IPパケット受信部20は、送信装置2-2により送信されたIPパケットを、IP回線4を介して受信し、図4に示したIPパケット受信部20と同様の処理を行う。
FEC復号部21は、図4に示したFEC復号部21と同様の処理を行い、IPパケット(ソース)をMMT分離部23に出力する。
MMT分離部23は、FEC復号部21からIPパケット(ソース)を入力し、IPパケット(ソース)に含まれるMMTに対して分離処理を行い、分離処理後の映像信号を映像復号部24に出力する。
映像復号部24は、MMT分離部23から映像信号を入力し、映像信号に対して映像復号処理を行い、映像復号後の映像信号を映像出力部25に出力する。
映像出力部25は、映像復号部24から映像復号後の映像信号を入力し、映像信号に対して所定の映像出力処理を行い、映像出力処理後の映像信号を外部へ出力するか、または内蔵するディスプレイに表示する。
〔FEC符号化部12〕
次に、図3及び図5に示したFEC符号化部12について詳細に説明する。図7は、FEC符号化部12の構成例を示すブロック図である。このFEC符号化部12は、FECブロック処理部30、メモリ31及びFEC符号化処理部32を備えている。
図8は、FEC符号化部12の処理例を示すフローチャートである。以下、図7及び図8を参照して、FEC符号化部12の処理について説明する。
FEC符号化部12のFECブロック処理部30は、IPパケット受信部10からIPパケット(ソース)を入力すると共に、フレーム境界・種別判定部11から、当該IPパケット(ソース)に対応するフレーム境界・種別情報を入力する(ステップS801)。
FECブロック処理部30は、フレーム境界情報がフレーム境界(フレームの先頭)を示しているか否かを判定する(ステップS802)。
FECブロック処理部30は、ステップS802において、フレーム境界情報がフレーム境界を示していると判定した場合(ステップS802:Y)、ステップS807へ移行する。
これにより、フレーム境界情報に対応するIPパケット(ソース)は、新たなフレームの開始点であると判断され、現在のFECブロックの構成処理は締め切られる。FECブロック処理部30は、メモリ31からFECブロックを構成するIPパケット(ソース)を読み出し、IPパケット(ソース)をFEC符号化処理部32に出力する。そして、後述するステップS807~S810の処理により、メモリ31から読み出されたIPパケット(ソース)に対してFEC符号化処理が行われ、次にフレーム種別に応じたFECブロックの行列サイズにて、メモリ31の初期化をした上で、新たなフレームの開始点であると判断されたIPパケット(ソース)をメモリ31に格納する。ステップS807~S810の処理については後述する。
一方、FECブロック処理部30は、ステップS802において、フレーム境界情報がフレーム境界を示していないと判定した場合(ステップS802:N)、入力したIPパケット(ソース)をFECブロックに追加する(ステップS803)。具体的には、FECブロック処理部30は、IPパケット(ソース)をメモリ31に格納する。これにより、メモリ31には、FECブロックを構成するIPパケット(ソース)が格納される。
FECブロック処理部30は、フレーム種別情報に基づいて、当該IPパケット(ソース)に含まれる映像データのフレーム種別を特定する。そして、FECブロック処理部30は、メモリ31に格納されたFECブロックを構成するIPパケット(ソース)の行列サイズS1と、特定したフレーム種別についての予め設定されたFECブロックの行列サイズS2とを比較することで、FECブロックが完成されたか否かを判定する(ステップS804)。
ここで、予め設定されたFECブロックの行列サイズS2は、フレーム種別がIフレームの場合、Bフレームよりも誤り訂正強度の強いFEC符号化が行われるサイズとする。具体的には、FECブロックを構成するIPパケット(ソース)の数に対するIPパケット(リペア)の割合いが、Bフレームよりも高くなるように、行列サイズS2が設定される。
また、フレーム種別がBフレームの場合、Iフレームよりも誤り訂正強度の弱いFEC符号化が行われるサイズとする。具体的には、その割合いが、Iフレームよりも低くなるように、行列サイズS2が設定される。また、フレーム種別がPフレームの場合、Iフレームの行列サイズ及びBフレームの行列サイズのいずれかと同じ行列サイズとするか、またはIフレームの行列サイズとBフレームの行列サイズとの間に位置する行列サイズとする。
FECブロック処理部30は、ステップS804において、FECブロックが完成されていないと判定した場合(ステップS804:N)、すなわちS1<S2を判定した場合、ステップS801へ移行し、新たなIPパケット(ソース)等を入力する。
一方、FECブロック処理部30は、ステップS804において、FECブロックが完成されたと判定した場合(ステップS804:Y)、すなわち行列サイズS1=行列サイズS2を判定した場合、メモリ31からIPパケット(ソース)を読み出す。メモリ31から読み出された全てのIPパケット(ソース)の行列サイズは、予め設定された行列サイズS2である。そして、FECブロック処理部30は、予め設定された行列サイズS2のFECブロックを構成するIPパケット(ソース)をFEC符号化処理部32に出力する。
FEC符号化処理部32は、FECブロック処理部30から、予め設定された行列サイズS2のFECブロックを構成するIPパケット(ソース)を入力する。そして、FEC符号化処理部32は、IPパケット(ソース)を用いてFEC符号化を行うことで、IPパケット(リペア)を生成し、IPパケット(ソース)及びIPパケット(リペア)をIPパケット送信部13に出力する(ステップS805)。この場合、FEC符号化処理部32は、FECヘッダ等を生成し、FECヘッダ等を含むIPパケット(リペア)を生成する。IPパケット(リペア)の詳細については後述する。
これにより、予め設定された行列サイズS2のFECブロックを構成する全てのIPパケット(ソース)、及びIPパケット(リペア)が出力される。
FECブロック処理部30は、現在のフレーム種別に応じたFECブロックの初期化を行い(ステップS806)、ステップS811へ移行する。具体的には、FECブロック処理部30は、メモリ31をクリアし、ステップS804の処理に伴って特定したフレーム種別の行列サイズS2につき、領域を確保する。
一方、FECブロック処理部30は、ステップS802(Y)から移行して、すなわち、フレーム境界情報がフレーム境界を示していると判定した場合、メモリ31からIPパケット(ソース)を読み出す。メモリ31から読み出されたIPパケット(ソース)の行列サイズは、予め設定された行列サイズS2またはこれ未満である。そして、FECブロック処理部30は、予め設定された行列サイズS2またはこれ未満のFECブロックを構成するIPパケット(ソース)をFEC符号化処理部32に出力する。
FEC符号化処理部32は、FECブロック処理部30から、予め設定された行列サイズS2またはこれ未満のFECブロックを構成するIPパケット(ソース)を入力する。
FEC符号化処理部32は、FECブロックに空きがある場合、空きの数分のダミーデータを生成する(ステップS807)。ダミーデータは、有効ペイロード長0であり、先頭から最大長の位置まで全て値0のバイトが設定されたデータである。
具体的には、FEC符号化処理部32は、FECブロックを構成する(構成中のFECブロックの)IPパケット(ソース)の行列サイズS1が、特定したフレーム種別についての予め設定された行列サイズS2未満の場合(S1<S2)、その差分(S2-S1)に相当する数のダミーデータを生成する。尚、直前に入力されたIPパケット(ソース)が、フレームの最終パケットであり、かつFECブロックの最終のIPパケット(ソース)であった場合には、ステップS807において構成中のFECブロックは空(S1=0)である。このため、ステップS807でダミーデータを生成せずにステップS808をスキップして、ステップS809に遷移する。
FEC符号化処理部32は、IPパケット(ソース)及びダミーデータを用いてFEC符号化を行うことで、IPパケット(リペア)を生成し、IPパケット(ソース)及びIPパケット(リペア)をIPパケット送信部13に出力する(ステップS808)。この場合、FEC符号化処理部32は、ダミーデータを出力しない。また、FEC符号化処理部32は、IPパケット(リペア)を生成する際に、FECヘッダ等を生成し、IPパケット(リペア)にFECヘッダ等を含める。
これにより、予め設定された行列サイズS2未満のFECブロックを構成する全てのIPパケット(ソース)、及びIPパケット(リペア)が出力される。尚、ダミーデータのみから生成されたIPパケット(リペア)は出力しなくてもよい。
図9は、図8に示したステップS807,S808の処理におけるFECブロックの構成例を説明する図である。図9(1)は、予め設定されたFECブロックの行列サイズS2が1行×5列=5の場合における1次元のFECブロックの構成例を示す。図9(2)は、予め設定されたFECブロックの行列サイズS2が5行×5列=25の場合における2次元のFECブロックの構成例を示す。
また、SはIPパケット(ソース)を示し、0はダミーデータを示し、RはIPパケット(リペア)を示す。
図9(1)を参照して、FEC符号化処理部32は、FECブロックを構成するIPパケット(ソース)の行列サイズS1(1行×4列=4)が、予め設定された行列サイズS2(1行×5列=5)未満であると判断する(S1<S2)。そして、FEC符号化処理部32は、FECブロックに空きがあると判定し、空きの数分(1個)のダミーデータを生成する。
FEC符号化処理部32は、FECブロックを構成する4個のIPパケット(ソース)及び1個のダミーデータを用いて、1個のIPパケット(リペア)を生成する。
図9(2)を参照して、FEC符号化処理部32は、FECブロックを構成するIPパケット(ソース)の行列サイズS1(3行×5列+1行×3列=18)が、予め設定された行列サイズS2(5行×5列=25)未満であると判断する(S1<S2)。そして、FEC符号化処理部32は、FECブロックに空きがあると判定し、空きの数分(7個)のダミーデータを生成する。
FEC符号化処理部32は、FECブロックを構成する18個のIPパケット(ソース)及び7個のダミーデータを用いて、行方向(横方向)及び列方向(縦方向)にそれぞれ5個、合計10個のIPパケット(リペア)を生成する。
図7及び図8に戻って、FEC符号化処理部32は、ステップS807において、FECブロックに空きがない場合、ダミーデータの生成を行わず、ステップS808に移行してFEC符号化を行う。
これにより、予め設定された行列サイズS2のFECブロックを構成する全てのIPパケット(ソース)、及びIPパケット(リペア)が出力される。
FECブロック処理部30は、入力したIPパケット(ソース)に対応するフレーム種別情報に基づいて、当該IPパケット(ソース)に含まれる映像データのフレーム種別を特定する。そして、FECブロック処理部30は、特定した新たなフレーム種別に応じたFECブロックの初期化を行う(ステップS809)。これにより、メモリ31はクリアされ、特定した新たなフレーム種別の行列サイズS2の領域が確保される。
FECブロック処理部30は、入力したIPパケット(ソース)をFECブロックに追加し(ステップS810)、ステップS811へ移行する。具体的には、FECブロック処理部30は、IPパケット(ソース)をメモリ31に格納する。これにより、メモリ31には、新たなFECブロックを構成する最初のIPパケット(ソース)が格納される。
FEC符号化部12は、ステップS806またはステップS810から移行して、当該処理が終了しない限り(ステップS811:N)、ステップS801へ移行し、新たなIPパケット(ソース)等を入力する。一方、FEC符号化部12は、ユーザによる終了操作等に従い、当該処理を終了させる(ステップS811:Y)。
(FEC符号化処理部32)
図10は、図7に示したFEC符号化処理部32の処理例(ステップS805,S807,S808)を示すフローチャートである。
FEC符号化処理部32は、FECブロック処理部30から、FECブロックを構成する1または複数のIPパケット(ソース)を入力する(ステップS1001)。具体的には、FEC符号化処理部32は、図8に示したステップS805の処理の場合、フレーム種別に応じて予め設定された行列サイズS2のIPパケット(ソース)を入力する。一方、FEC符号化処理部32は、図8に示したステップS807,S808の処理の場合、行列サイズS2未満のサイズのIPパケット(ソース)を入力する。
FEC符号化処理部32は、FECブロックを構成する1または複数のIPパケット(ソース)のうち最大長(最大のデータ長)のIPパケット(ソース)を特定する(ステップS1002)。そして、FEC符号化処理部32は、最大長から最大長未満のIPパケット(ソース)の長さを減算し、最大長未満のIPパケット(ソース)に対し、末尾に減算結果の長さ分の値0を付加する(ステップS1003)。これにより、入力した全てのIPパケット(ソース)の長さを揃えることができ、その長さは同じになる。尚、末尾に追加した値0は、IPパケット(リペア)の生成のために用いられるものであり、IPパケット(ソース)として出力されるときには除外される。
FEC符号化処理部32は、入力したFECブロックを構成する1または複数のIPパケット(ソース)について空きがあるか否かを判定する(ステップS1004)。具体的には、FEC符号化処理部32は、前述のとおり、FECブロックを構成する1または複数のIPパケット(ソース)の行列サイズS1が、予め設定された行列サイズS2未満の場合(S1<S2)、FECブロックに空きがあると判定する。一方、FEC符号化処理部32は、行列サイズS1が行列サイズS2と同じ場合(S1=S2)、FECブロックに空きがないと判定する。
FEC符号化処理部32は、ステップS1004において、FECブロックに空きがあると判定した場合(ステップS1004:Y)、行列サイズS1と行列サイズS2の差分(S2-S1)を求め、差分に相当する数(空き分)のダミーデータを生成する(ステップS1005)。ダミーデータは、FEC符号化処理のXOR演算に影響しないデータであり、前述のとおり、有効ペイロード長0であり、先頭から最大長の位置まで全て値0のバイトが設定されたデータである。
一方、FEC符号化処理部32は、ステップS1004において、FECブロックに空きがないと判定した場合(ステップS1004:N)、ステップS1006へ移行する。
FEC符号化処理部32は、ステップS1005またはステップS1004(N)から移行して、IPパケット(ソース)、またはIPパケット(ソース)及びダミーデータを用いて、FECブロックの行毎及び列毎に、有効ペイロード部分のXOR演算を行うことでFEC符号化を行う(ステップS1006)。
FEC符号化処理部32は、予め設定された行列サイズS2等を含むFECヘッダ、及びその他のデータを生成する(ステップS1007)。具体的には、FEC符号化処理部32は、後述する図12に示すFECヘッダを生成すると共に、MMTPヘッダの一部のデータとして、FEC_type(FECタイプ)及びpkt_seq_num(packet_sequence_number:パケットシーケンス番号)を生成する。また、FEC符号化処理部32は、バイト長XOR値を算出する。
FEC_typeは、MMTPパケットがIPパケット(ソース)であるか、またはIPパケット(リペア)であるかを識別する領域である。FEC_typeの値により、IPパケット(ソース)とIPパケット(リペア)を区別することができる。
IPパケット(リペア)に格納されるpkt_seq_numは、FECブロックにおいてIPパケット(リペア)に順番に付与される番号である。このpkt_seq_numにより、FECブロックにおけるIPパケット(リペア)の位置を特定することができる。
バイト長XOR値は、それぞれのIPパケット(ソース)のうち、FECによる保護の対象となる有効ペイロードのバイト長をXOR演算した結果の値である。このとき、ダミーデータについては、有効ペイロードのバイト長を0としてXOR演算を行う。
FEC符号化処理部32は、バイト長XOR値及びXOR演算結果をFECペイロードのデータとして、FECヘッダ、MMTPヘッダ、FECペイロード等を格納したIPパケット(リペア)を生成する(ステップS1008)。
このように、FEC符号化処理部32により、フレーム種別毎に、FECブロックを単位としたFEC符号化が行われ、IPパケット(リペア)が生成される。
FEC符号化処理部32は、IPパケット(ソース)及びIPパケット(リペア)をIPパケット送信部13に出力する(ステップS1009)。
ここで、FEC符号化処理部32は、ステップS1005にてダミーデータを生成した場合、FECブロックに対応するIPパケット(ソース)、ダミーデータ及びIPパケット(リペア)のうち、IPパケット(ソース)及びIPパケット(リペア)のみを出力し、ダミーデータを出力しない。
これにより、FECブロックの構成及び符号化処理に伴う遅延を小さくすることができ、受信側では、バッファアンダーフローの発生を抑えることができる。
また、ステップS1006におけるFEC符号化処理において、前述のとおり、予め設定されたFECブロックの行列サイズS2は、フレーム種別がIフレームの場合、FECブロックを構成するIPパケット(ソース)の数に対するIPパケット(リペア)の割り合いが、Bフレームよりも高いサイズである。したがって、その割り合いがBフレームよりも高くなることで、Bフレームよりも強いFEC符号化が行われ、所定数のIPパケット(リペア)が生成される。
また、FECブロックの行列サイズS2は、フレーム種別がBフレームの場合、その割り合いがIフレームよりも低いサイズである。したがって、その割り合いがIフレームよりも低くなることで、Iフレームよりも弱いFEC符号化が行われ、所定数のIPパケット(リペア)が生成される。
また、FECブロックの行列サイズS2は、フレーム種別がPフレームの場合、その割り合いがIフレーム及びBフレームのいずれかと等しいか、または両者の間に位置するサイズである。したがって、その割り合いがIフレーム及びBフレームのいずれかと等しい場合、その等しいIフレームまたはBフレームと同じFEC符号化が行われ、所定数のIPパケット(リペア)が生成される。また、その割り合いがIフレームよりも低くBフレームよりも高い場合、Iフレームよりも弱く、Bフレームより強いFEC符号化が行われ、所定数のIPパケット(リペア)が生成される。
(IPパケット(リペア)の生成処理)
IPパケット(リペア)の生成処理について詳細に説明する。図11は、IPパケット(リペア)の生成処理を説明する図である。a_1~a_nは、FECブロックにおいて行方向または列方向に並ぶIPパケット(ソース)であり、bは、a_1~a_nのIPパケット(ソース)を用いて生成されたIPパケット(リペア)である。
a_1~a_nを参照して、IPパケット(ソース)は、IPヘッダ、UDPヘッダ、MMTPヘッダ、MMTPペイロードヘッダ、並びにDUヘッダ及びNALユニットの組から構成される。a_1,a_nのIPパケット(ソース)は、さらに、図10に示したステップS1003の処理により値0が付加されている。
IPヘッダ及びUDPヘッダは、IPパケット(ソース)のヘッダであり、MMTPヘッダ、MMTPペイロードヘッダ、並びにDUヘッダ及びNALユニットの組は、IPパケット(ソース)の有効ペイロードである。このうち、MMTPペイロードヘッダ、並びにDUヘッダ及びNALユニットの組は、MMTPペイロードである。前述のとおり、NALユニットには、フレームの映像データが格納されている。
また、図11には示していないが、IPパケット(ソース)のMMTPヘッダには、packet_id(パケットID)、pkt_seq_num(packet_sequence_number:パケットシーケンス番号)及びpacket_counter(パケットカウンタ)が含まれる。尚、MMTPヘッダのpacket_counterは、packet_counter_flag(パケットカウンタフラグ)が1の場合に存在し、0の場合には存在しない。
packet_idは、映像及び音声等を区別する識別子である。pkt_seq_numは、IPパケット(ソース)毎に、packet_idが異なる映像及び音声等のそれぞれを区別してインクリメントされたカウント値であり、全ての映像のIPパケット(ソース)を対象に設定され、全ての音声のIPパケット(ソース)を対象に設定される。
packet_counterは、IPパケット(ソース)毎に、映像及び音声等を区別することなくインクリメントされたカウント値(パケットカウンタ値)であり、全てのIPパケット(ソース)を対象にして設定される。
これらのpacket_id、pkt_seq_num及びpacket_counterは、図1の実施例1において、図1には示していない符号化装置等により設定され、図2の実施例2において、図5に示した送信装置2-2のMMT多重化部16により設定される。
図11のbを参照して、IPパケット(リペア)は、IPヘッダ、UDPヘッダ、MMTPヘッダ、FECヘッダ及びFECペイロードから構成される。
FECペイロードにおける先頭のバイト長XORは、a_1~a_nのIPパケット(ソース)のFECによる保護の対象とする有効ペイロード(図10のステップS1003においてパケット末尾に追加した値0の部分を含まない)のバイト長をXOR演算した結果のデータである。また、FECペイロードのバイト長XOR以外のデータは、a_1~a_nのIPパケット(ソース)の有効ペイロード部分(パケット末尾に追加した値0の部分を含む)をXOR演算して得られたデータである。
また、図11には示していないが、IPパケット(リペア)のMMTPヘッダには、前述のとおり、FEC_type及びpkt_seq_numが含まれる。これらのFEC_type及びpkt_seq_numは、前述のとおり、送信装置2-1,2-2に備えたFEC符号化部12のFEC符号化処理部32により設定される。
(FECヘッダ)
次に、IPパケット(リペア)に含まれるFECヘッダについて詳細に説明する。図12は、IPパケット(リペア)に含まれるFECヘッダの各データを説明する図である。以下では、MMTPヘッダのpacket_counter_flagが1、つまりpacket_counterが存在する場合とする。
FECヘッダは、2d_flag(次元フラグ)、start_packet_counter(開始パケットカウンタ)、num_column_packets(列方向パケット数)、num_row_packets(行方向パケット数)及びnum_valid_packets(有効パケット数)から構成される。
2d_flagは、FECブロックの次元を示すフラグであり、0の場合、1次元のFECブロックを示し、1の場合、2次元のFECブロックを示す。start_packet_counterは、FECブロックにおいて、先頭に位置するIPパケット(ソース)のpacket_counterの値(開始パケットカウンタ値)である。
num_column_packetsは、FECブロックにおける列方向のパケット数を示し、予め設定されたFECブロックの行列サイズS2における行サイズに相当する。num_row_packetsは、FECブロックにおける行方向のパケット数を示し、予め設定されたFECブロックの行列サイズS2における列サイズに相当する。
num_valid_packetsは、FECブロックにおける有効なIPパケット(ソース)の数(有効パケット数)を示し、メモリ31から読み出されたFECブロックを構成するIPパケット(ソース)の行列サイズS1に相当する。例えば、ダミーデータが生成されないFECブロックでは、この値は、予め設定されたFECブロックの行列サイズS2に相当する。
FEC符号化部12のFEC符号化処理部32は、IPパケット(リペア)を生成する際に、図10に示したステップS1007の処理において、予め設定されたFECブロックの行列サイズS2に基づいて、FECブロックの次元フラグ、列方向パケット数及び行方向パケット数を特定し、それぞれ2d_flag、num_column_packets及びnum_row_packetsを生成する。
また、FEC符号化処理部32は、FECブロックの先頭に位置するIPパケット(ソース)のMMTPヘッダからpacket_counterを抽出し、抽出したpacket_counterの値を開始パケットカウンタとして、start_packet_counterを生成する。
また、FEC符号化処理部32は、FECブロック処理部30から入力したFECブロックを構成するIPパケット(ソース)をカウントし、その数を有効パケット数として、num_valid_packetsを生成する。つまり、有効パケット数は、メモリ31から読み出されたFECブロックを構成するIPパケット(ソース)の行列サイズS1に相当する。
このようにして、FEC符号化処理部32は、2d_flag、start_packet_counter、num_column_packets、num_row_packets及びnum_valid_packetsからなるFECヘッダを生成し、FECヘッダを含むIPパケット(リペア)を生成する。
(ステップS1004~S1009の処理)
次に、図10に示したステップS1004~S1009の処理について具体例を挙げて説明する。図13は、図10に示したステップS1004~S1009の処理を説明する図である。
図13(1)は、予め設定されたFECブロックの行列サイズS2が1行×5列=5の場合における1次元のFECブロックの構成例を示す。図13(2)は、予め設定されたFECブロックの行列サイズS2が5行×5列=25の場合における2次元のFECブロックの構成例を示す。図13(1)(2)は、それぞれ図9(1)(2)に対応する。
また、SはIPパケット(ソース)を示し、0はダミーデータを示し、RはIPパケット(リペア)を示す。
図13(1)を参照して、予め設定されたFECブロックの行列サイズS2が1行×5列=5であるため、FECブロックは1次元であり、行方向パケット数は5である。このため、FEC符号化処理部32は、2d_flag=0及びnum_row_packets=5を生成する。
FEC符号化処理部32は、FECブロックを構成するIPパケット(ソース)をカウントして4を求め、その数を有効パケット数として、num_valid_packets=4を生成する。この場合、FEC符号化処理部32は、1個のダミーデータを生成する。
FEC符号化処理部32は、FECブロックの先頭に位置するIPパケット(ソース)のMMTPヘッダからpacket_counterを抽出し、packet_counterの値を開始パケットカウンタとして、start_packet_counterを生成する。
FEC符号化処理部32は、IPパケット(リペア)について、パケットシーケンス番号を0として、pkt_seq_num=0を生成する。
FEC符号化処理部32は、2d_flag=0、num_row_packets=5、num_valid_packets=4及びstart_packet_counterを含むFECヘッダを生成する。そして、FEC符号化処理部32は、IPパケット(リペア)であることを示すFEC_type及びpkt_seq_num=0をMMTPヘッダに格納し、FECヘッダ、FEC_type及びpkt_seq_num=0を含むIPパケット(リペア)を生成する。
このように、1次元のFECブロックの場合、最大でnum_row_packets個のIPパケット(ソース)を用いて、1個のIPパケット(リペア)が生成される。本例では、4個のIPパケット(ソース)が用いられる。
図13(2)を参照して、予め設定されたFECブロックの行列サイズS2が5行×5列=25であるため、FECブロックは2次元、列方向のパケット数は5、行方向のパケット数は5である。このため、FEC符号化処理部32は、2d_flag=1、num_column_packets=5及びnum_row_packets=5を生成する。
FEC符号化処理部32は、FECブロックを構成するIPパケット(ソース)をカウントして18を求め、その数を有効パケット数として、num_valid_packets=18を生成する。この場合、FEC符号化処理部32は、7個のダミーデータを生成する。
FEC符号化処理部32は、FECブロックの先頭に位置するIPパケット(ソース)のMMTPヘッダからpacket_counterを抽出し、packet_counterの値を開始パケットカウンタとして、start_packet_counterを生成する。
この例では、FEC符号化処理により、10個のIPパケット(リペア)が生成される。FEC符号化処理部32は、生成されるべき10個のIPパケット(リペア)について、図13(2)に示すように、パケットシーケンス番号0,1,・・,9を順番に付与し、pkt_seq_num=0,1,・・・,9を設定する。
ここで、IPパケット(リペア)のpkt_seq_num は、FECブロックを跨いで連続性を持たせる必要がないため、FECブロックの最上行のIPパケット(リペア)について、pkt_seq_numを0とする。pkt_seq_numにより、FECブロックにおいて各IPパケット(リペア)の位置を特定することができる。
FEC符号化処理部32は、2d_flag=1、num_column_packets=5、num_row_packets=5、num_valid_packets=18及びstart_packet_counterを含むFECヘッダを生成する。そして、FEC符号化処理部32は、IPパケット(リペア)であることを示すFEC_type及びpkt_seq_numをMMTPヘッダに格納し、FECヘッダを含むIPパケット(リペア)を生成する。
このように、2次元のFECブロックの場合、行毎に、最大でnum_row_packets個のIPパケット(ソース)を用いて、1個のIPパケット(リペア)が生成される。本例の場合、5個のIPパケット(リペア)が生成される。また、列毎に、最大でnum_column_packets個のIPパケット(ソース)を用いて、1個のIPパケット(リペア)が生成される。本例では、5個のIPパケット(リペア)が生成される。したがって、このFECブロックにおいて、10個のIPパケット(リペア)が生成される。
また、FECブロックは、最大でnum_row_packets×num_column_packets個のIPパケット(ソース)により構成されるが、この数に満たない場合は、num_valid_packets<num_row_packets×num_column_packetsとなる。本例では、(num_valid_packets=18)<(num_row_packets=5)×(num_column_packets=5)=25となる。
尚、図13(2)において、FEC符号化処理部32は、18個のIPパケット(ソース)、及び10個のpkt_seq_num=0~9のIPパケット(リペア)をIPパケット送信部13に出力する。この場合、FEC符号化処理部32は、pkt_seq_num=4のIPパケット(リペア)を出力しなくてもよい。
これは、pkt_seq_num=4のIPパケット(リペア)は、5個のダミーデータを用いて生成されるため、受信側では、pkt_seq_num=4のIPパケット(リペア)を用いて復元されるIPパケット(ソース)が存在しないからである。
つまり、FEC符号化処理部32は、FECブロックにおいて、1行または1列の全てにIPパケット(ソース)が存在しない場合(1行または1列の全てがダミーデータである場合)、その1行または1列について、XOR演算によるFEC符号化を行わなくてもよいし、IPパケット(リペア)を生成しなくてもよい。または、FEC符号化処理部32は、その1行または1列について、XOR演算によるFEC符号化を行い、IPパケット(リペア)を生成するが、IPパケット(リペア)を出力しなくてもよい。
これにより、FEC復号処理に不要なIPパケット(リペア)が送信されないから、伝送帯域を一層有効に活用することができる。
以上のように、本発明の実施例1,2の送信装置2-1,2-2によれば、フレーム境界・種別判定部11は、IPパケット(ソース)のMMTPヘッダ等のデータに基づいて、当該IPパケット(ソース)に格納された映像データが、フレーム境界にあるか否かを判定すると共に、当該映像データのフレーム種別を判定し、フレーム境界・種別情報を生成する。
FEC符号化部12は、フレーム境界・種別情報に基づき、フレーム種別毎に、IPパケット(ソース)を含む所定の行列サイズのFECブロックを構成する。そして、FEC符号化部12は、FECブロックを単位としてFEC符号化を行い、FECブロックの行列サイズ等が格納されたFECヘッダを生成し、FECヘッダ等を含むIPパケット(リペア)を生成する。
ここで、FEC符号化部12は、Iフレームについて、Bフレームよりも誤り訂正強度の強いFEC符号化を行うために、所定の行列サイズのFECブロックを構成する。一方、FEC符号化部12は、Bフレームについて、Iフレームよりも誤り訂正強度の弱いFEC符号化を行うために、Iフレームとは異なる所定の行列サイズのFECブロックを構成する。また、FEC符号化部12は、Pフレームについて、IフレームまたはBフレームと同じ誤り訂正強度のFEC符号化を行うために、IフレームまたはBフレームと同じ所定の行列サイズのFECブロックを構成する。または、FEC符号化部12は、Pフレームについて、IフレームとBフレームの間に位置する誤り訂正強度のFEC符号化を行うために、IフレームとBフレームの間に位置する所定の行列サイズのFECブロックを構成する。
FEC符号化部12は、IPパケット(ソース)が所定の行列サイズに満たない場合、ダミーデータを生成してFECブロックに含める。FEC符号化部12は、IPパケット(ソース)及びIPパケット(リぺア)を出力し、ダミーデータを出力しない。
これにより、送信装置2-1,2-2からIPパケット(ソース)及びIPパケット(リぺア)が送信される。これらのIPパケットの伝送帯域は、Iフレームが他のフレームよりも広くなる。そして、受信側では、フレーム種別毎に、IPパケット(リペア)のFECヘッダのデータに基づき、FECブロックを構成して復号することができる。
このように、映像データのフレーム種別に応じたFECブロックのサイズの変化に対応して、適応的に誤り訂正強度の異なるFEC符号化が行われる。従来のFECブロックは、フレーム種別に関係なく一定サイズであったが、本発明の実施例1,2では、フレーム種別に応じて、FECブロックのサイズが動的に変化することとなる。つまり、パケット損失により映像破綻等の影響が大きいIフレームについては、他のフレームよりも伝送路上において損失したIPパケットを受信側で復元できる可能性が高まり、映像破綻が生じ難くなるため、サービス品質を確保することができる。また、Bフレームについては、他のフレームよりも誤り訂正に用いる伝送帯域を狭くするようにしたため、空いた伝送帯域を他の用途に用いる等有効に活用することができる。
また、FEC符号化部12は、IPパケット(ソース)のフレーム境界であるフレームの先頭を判定した場合、そのときまでにFECブロックを構成したフレーム境界以前のIPパケット(ソース)及びダミーデータを用いてFEC符号化を行い、IPパケット(ソース)及びIPパケット(リペア)を出力するようにした。
これにより、ビットレートが変動するIPパケットフローにおいて、必ず1フレーム以下の時間周期でFEC処理が行われるため、FECブロックの構成に伴う遅延を短くすることができ、受信側では、バッファアンダーフローの発生を抑えることができる。
〔FEC復号部21〕
次に、図4及び図6に示したFEC復号部21について詳細に説明する。図14は、FEC復号部21の構成例を示すブロック図である。このFEC復号部21は、FECブロック処理部40、メモリ41及びFEC復号処理部42を備えている。
図15は、FEC復号部21の処理例を示すフローチャートである。以下、図14及び図15を参照して、FEC復号部21の処理について説明する。
FEC復号部21のFECブロック処理部40は、IPパケット受信部20からIPパケット(IPパケット(ソース)及びIPパケット(リペア))を入力する(ステップS1501)。
FECブロック処理部40は、入力したIPパケット(ソース)及びIPパケット(リペア)について、MMTPヘッダのFEC_typeの値を参照することで、IPパケット(ソース)及びIPパケット(リペア)を区別する。
具体的には、FECブロック処理部40は、MMTPヘッダのFEC_typeの値がIPパケット(リペア)を示す値ではないと判定した場合、入力したIPパケットはIPパケット(ソース)であると判定する。一方、FECブロック処理部40は、MMTPヘッダのFEC_typeの値がIPパケット(リペア)を示す値であると判定した場合、入力したIPパケットはIPパケット(リペア)であると判定する。
FECブロック処理部40は、入力したIPパケットが、構成中のFECブロックについての最終パケット(最終のIPパケット(リペア))であるか否かを判定する(ステップS1502)。
最終のIPパケット(リペア)とは、1次元のFECブロックの場合、当該FECブロックのIPパケット(リペア)であり、2次元のFECブロックの場合、複数のIPパケット(リペア)のうち最大のpkt_seq_numが格納されたIPパケット(リペア)である。
具体的には、FECブロック処理部40は、まず入力したIPパケットがIPパケット(ソース)である場合、入力したIPパケットは最終のIPパケット(リペア)でないと判定する。
その上で、FECブロック処理部40は、入力したIPパケットがIPパケット(リペア)である場合、当該IPパケット(リペア)のFECヘッダから2d_flag、num_column_packets及びnum_row_packetsを抽出する。また、FECブロック処理部40は、当該IPパケット(リペア)のMMTPヘッダからpkt_seq_numを抽出する。
FECブロック処理部40は、2d_flag=0(1次元のFECブロック)である場合、当該IPパケット(リペア)は最終のIPパケット(リペア)であると判定する。
また、FECブロック処理部40は、2d_flag=1(2次元のFECブロック)である場合、num_column_packetsにnum_row_packetsを加算し、加算結果から1を減算し、pkt_seq_numが減算結果に等しいか否かを判定する。つまり、FECブロック処理部40は、条件式(pkt_seq_num=num_column_packets+num_row_packets-1)が成立するか否かを判定する。
FECブロック処理部40は、pkt_seq_numが減算結果に等しい(pkt_seq_num=num_column_packets+num_row_packets-1)と判定した場合、当該IPパケット(リペア)は最終のIPパケット(リペア)であると判定する。一方、FECブロック処理部40は、pkt_seq_numが減算結果に等しくない、すなわちpkt_seq_numが減算結果未満である(pkt_seq_num<num_column_packets+num_row_packets-1)と判定した場合、当該IPパケット(リペア)は最終のIPパケット(リペア)でないと判定する。
図13(2)の例において、前記条件式の右辺は、num_column_packets+num_row_packets-1=5+5-1=9である。pkt_seq_num=9のIPパケット(リペア)の場合、前記条件式が成立するため、当該IPパケット(リペア)は最終のIPパケット(リペア)であると判定される。一方、pkt_seq_num=0~8のIPパケット(リペア)の場合、前記条件式が成立しないため、当該IPパケット(リペア)は最終のIPパケット(リペア)でないと判定される。
FECブロック処理部40は、ステップS1502において、入力したIPパケットが最終のIPパケット(リペア)でないと判定した場合(ステップS1502:N)、FECブロックの構成の途中であると判断し、ステップS1503へ移行する。
FECブロック処理部40は、ステップS1502(N)から移行して、入力したIPパケットが、次のFECブロックに属するIPパケット(IPパケット(ソース)またはIPパケット(リペア))であるか否かを判定する(ステップS1503)。すなわち、FECブロック処理部40は、現在構成中のFECブロックの末尾にパケット損失が生じたか否かを判断する。
具体的には、FECブロック処理部40は、まず入力したIPパケットが、IPパケット(ソース)であるか、またはIPパケット(リペア)であるかを判定する。
FECブロック処理部40は、ステップS1503で入力したIPパケットがIPパケット(ソース)である場合、当該IPパケット(ソース)のMMTPヘッダからpacket_counterを抽出する。また、FECブロック処理部40は、現在構成中のFECブロックに属するIPパケット(リペア)のFECヘッダから抽出されたstart_packet_counter及びnum_valid_packetsを参照する。
FECブロック処理部40は、start_packet_counterにnum_valid_packetsを加算し、packet_counterが加算結果よりも大きいか否かを判定する。FECブロック処理部40は、packet_counterが加算結果よりも大きいと判定した場合(packet_counter>start_packet_counter+num_valid_packets)、入力したIPパケット(ソース)が、次のFECブロックに属するIPパケット(ソース)であると判定する。この場合、FECブロック処理部40は、現在構成途中のFECブロックの末尾にパケット損失が生じFECブロックの末尾が埋まらずに終了したことを判断し、ステップS1509に遷移する。
一方、FECブロック処理部40は、packet_counterが加算結果よりも大きくないと判定した場合(packet_counter≦start_packet_counter+num_valid_packets)、入力したIPパケット(ソース)が、次のFECブロックに属するIPパケット(ソース)でないと判定する。この場合、FECブロック処理部40は、当該IPパケット(ソース)は現在構成の途中であるFECブロックのIPパケット(ソース)であることを判断し、ステップS1504に遷移する。
また、FECブロック処理部40は、ステップS1503で入力したIPパケットがIPパケット(リペア)である場合、現在構成途中のFECブロックに属するIPパケット(リペア)のFECヘッダから抽出されたstart_packet_counterを参照する。これが、入力したIPパケット(リペア)のstart_packet_counterと異なれば、入力したIPパケットは次のFECブロックに属するIPパケット(リペア)と判定する。この場合、FECブロック処理部40は、現在構成途中のFECブロックの末尾にパケット損失が生じFECブロックの末尾が埋まらずに終了したことを判断し、ステップS1509に遷移する。
このように、ステップS1502,S1503によるFEC復号の前段処理では、FECヘッダの情報を用いることができるため、FEC符号化の前段処理と異なり、IPパケット(ソース)のペイロードに格納された映像データに基づき、フレーム境界及びフレーム種別を判定する必要がない。このため、FEC復号処理では、FEC符号化処理に比べ、処理負荷を低減することができる。
FECブロック処理部40は、ステップS1503において、入力したIPパケットが、次のFECブロックに属するIPパケットでないと判定した場合(ステップS1503:N)、ステップS1504へ移行する。つまり、入力したIPパケットが現在構成中のFECブロックのIPパケットである場合、ステップS1504へ移行することとなる。
FECブロック処理部40は、ステップS1503(N)から移行して、入力したIPパケット(IPパケット(ソース)またはIPパケット(リペア))をFECブロックに追加し(ステップS1504)、ステップS1513へ移行する。具体的には、FECブロック処理部40は、IPパケット(ソース)またはIPパケット(リペア)をメモリ41に格納する。これにより、メモリ41にはIPパケット(ソース)またはIPパケット(リペア)が格納される。
FECブロック処理部40は、ステップS1502において、入力したIPパケットが最終のIPパケット(リペア)であると判定した場合(ステップS1502:Y)、ステップS1505へ移行する。後述するステップS1505~S1508により、構成済みのFECブロックに対する復号処理が行われ、FECブロックを構成するIPパケット(ソース)が出力される。構成済みのFECブロックは、フレーム種別毎に、所定の行列サイズまたは所定の行列サイズ未満のIPパケット(ソース)、及びIPパケット(リペア)で構成される。
FECブロック処理部40は、ステップS1502(Y)から移行して、入力したIPパケット(リペア)をFECブロックに追加する(ステップS1505)。具体的には、FECブロック処理部40は、入力したFECブロックの最終のIPパケット(リペア)をメモリ41に格納する。
FECブロック処理部40は、メモリ41からFECブロックを構成する全てのIPパケット(ソース)及び全てのIPパケット(リペア)を読み出し、これらをFEC復号処理部42に出力する。
FEC復号処理部42は、FECブロック処理部40から、FECブロックを構成する全てのIPパケット(ソース)及び全てのIPパケット(リペア)を入力し、IPパケット(ソース)の損失の有無を判定する。IPパケット(ソース)の損失の有無は、IPパケット(ソース)のMMTPヘッダに格納されたpkt_seq_num、及びIPパケット(リペア)のFECヘッダに格納されたnum_column_packets及びnum_row_packetsに基づいて判定される。
FEC復号処理部42は、IPパケット(ソース)の損失がある場合、損失したIPパケット(ソース)に対応する行及び/または列における損失していないIPパケット(ソース)及びIPパケット(リペア)を用いて、FEC復号を行い、損失したIPパケット(ソース)を復元する(ステップS1506)。このように、FECブロックを単位として復号が行われる。
ここで、FEC復号処理部42は、構成するFECブロックのフレーム種別がIフレームの場合、Bフレームよりも誤り訂正強度の強いFEC復号を行う。つまり、フレーム種別がIフレームの場合、Bフレームよりも誤り訂正強度の強いFEC復号が行われるように、FECブロック処理部40は、FECブロックの初期化を行い、所定の行列サイズのFECブロックを構成する。
また、FEC復号処理部42は、構成するFECブロックのフレーム種別がBフレームの場合、Iフレームよりも誤り訂正強度の弱いFEC復号を行う。つまり、フレーム種別がBフレームの場合、Iフレームよりも誤り訂正強度の弱いFEC復号が行われるように、FECブロック処理部40は、FECブロックの初期化を行い、所定の行列サイズのFECブロックを構成する。
また、FEC復号処理部42は、構成するFECブロックのフレーム種別がPフレームの場合、Iフレーム及びBフレームのいずれかと等しい誤り訂正強度のFEC復号を行うか、またはIフレームとBフレームの間の誤り訂正強度のFEC復号を行う。つまり、フレーム種別がPフレームの場合、Iフレーム及びBフレームのいずれかと等しい誤り訂正強度のFEC復号が行われるように、またはIフレームとBフレームの間の誤り訂正強度のFEC復号が行われるように、FECブロック処理部40は、FECブロックの初期化を行い、所定の行列サイズのFECブロックを構成する。
FEC復号処理部42は、FECブロックを構成する全てのIPパケット(ソース)を、IPパケット送信部22(図4に示した実施例1の場合)またはMMT分離部23(図6に示した実施例2の場合)に出力する(ステップS1507)。
FECブロック処理部40は、次に構成するFECブロックの初期化を行い(ステップS1508)、ステップS1513へ移行する。具体的には、FECブロック処理部40は、メモリ41をクリアする。尚、次のFECブロックのIPパケット(リペア)を受信するまで、次のFECブロックの行列サイズは確定しない。後述するステップS1511についても同様である。
FECブロック処理部40は、ステップS1503において、入力したIPパケットが、次のFECブロックに属するIPパケットであると判定した場合(ステップS1503:Y)、ステップS1509へ移行する。後述するステップS1509~S1512により、現在構成中のFECブロックの末尾のパケット損失が生じFECブロックの末尾が埋まらずに終了した場合の処理が行われる。
FECブロック処理部40は、ステップS1503(Y)から移行して、メモリ41から、現在構成中のFECブロックにおける全てのIPパケット(ソース)及び全てのIPパケット(リペア)を読み出し、これらをFEC復号処理部42に出力する。
FEC復号処理部42は、FECブロック処理部40から、現在構成中のFECブロックにおける全てのIPパケット(ソース)及び全てのIPパケット(リペア)を入力する。そして、FEC復号処理部42は、ステップS1506の処理と同様に、IPパケット(ソース)の損失がある場合、損失したIPパケット(ソース)に対応する行及び/または列における損失していないIPパケット(ソース)及びIPパケット(リペア)を用いて、FEC復号を行い、損失したIPパケット(ソース)を復元する(ステップS1509)。このように、FECブロックを単位として復号が行われる。
FEC復号処理部42は、現在構成中のFECブロックにおける全てのIPパケット(ソース)を、IPパケット送信部22(図4に示した実施例1の場合)またはMMT分離部23(図6に示した実施例2の場合)に出力する(ステップS1510)。
FECブロック処理部40は、ステップS1508の処理と同様に、次に構成するFECブロックの初期化を行う(ステップS1511)。
FECブロック処理部40は、入力したFECブロックのIPパケット(IPパケット(ソース)またはIPパケット(リペア))をFECブロックに追加し(ステップS1512)、ステップS1513へ移行する。具体的には、FECブロック処理部40は、入力したIPパケットをメモリ41に格納する。入力したIPパケットがIPパケット(リペア)であれば、この時点で行列サイズが確定し、所定の位置に格納される。一方、入力したIPパケットがIPパケット(ソース)であれば、この時点で行列サイズは確定しないため、仮の位置に一時格納される。これにより、メモリ41には、FECブロックを構成するIPパケットが格納される。
尚、図15には示してないが、現在構成中のFECブロックにおける最初のIPパケット(リペア)を受信し、FECブロックの行列サイズが確定したタイミングで、それまでメモリ41上で仮の位置に格納していたIPパケット(ソース)を、行列サイズに応じて所定の位置に移動してもよい。
FEC復号部21は、ステップS1504、ステップS1508またはステップS1512から移行して、当該処理が終了しない限り(ステップS1513:N)、ステップS1501へ移行し、新たなIPパケット(ソース)及びIPパケット(リペア)を入力する。一方、FEC復号部21は、ユーザによる終了操作等に従い、当該処理を終了させる(ステップS1513:Y)。
尚、ステップS1502では、現在構成中のFECブロックの最終のIPパケット(リペア)が正常に受信されFECブロックが終了した場合を判定しているが、ステップS1502及びステップS1505~S1508を省略し、ステップS1501からステップS1503に直接遷移する構成としてもよい。このような構成であっても、FECブロックの終了を判定することができる。ただし、この場合には、最終のIPパケット(リペア)に損失がない場合にも、FECブロックの終了判断が次のIPパケットを受信するまで遅延することとなる。
以上のように、本発明の実施例1,2の受信装置3及び受信端末5によれば、FEC復号部21は、IPパケット(リペア)のFECヘッダに格納されたデータに基づいて、フレーム種別毎のFECブロックの行列サイズを特定し、フレーム種別毎にFECブロックを構成する。
FEC復号部21は、IPパケット(ソース)が損失している場合、IPパケット(リペア)等を用いてFEC復号を行い、損失したIPパケット(ソース)を復元する。
このように、映像データのフレーム種別に応じたFECブロックのサイズの変化に対応して、適応的に誤り訂正強度の異なるFEC復号が行われる。従来のFECブロックは、フレーム種別に関係なく一定サイズであったが、本発明の実施例1,2では、フレーム種別に応じて、FECブロックのサイズが動的に変化することとなる。つまり、パケット損失により映像破綻等の影響が大きいIフレームについては、他のフレームよりも伝送路上において損失したIPパケットを受信側で復元できる可能性が高まり、映像破綻が生じ難くなるため、サービス品質を確保することができる。また、Bフレームについては、他のフレームよりも誤り訂正に用いる伝送帯域を広く狭くするようにしたため、空いた伝送帯域を他の用途に用いる等有効に活用することができる。また、フレーム種別毎に変化するFECブロックのサイズに応じて、適用的にFEC復号を行うことができる。
また、受信装置3及び受信端末5は、ビットレートが変動するIPパケットフローにおいて、必ず1フレーム以下の時間周期でFEC処理が行われるため、FECブロックの構成に伴う遅延を短くすることができ、バッファアンダーフローの発生を抑えることができる。
〔符号化された映像及び音声を伝送するIPパケットフロー〕
以上、符号化された映像を伝送するIPパケットフローについて説明したが、本発明は、符号化された映像に加え、音声を伝送するIPパケットフローにも適用がある。
IPパケット(ソース)のMMTPヘッダに格納されたpacket_counterを用いることにより、符号化された映像及び音声を伝送するIPパケットフローにおいて、実施例1,2を適用することができる。前述のとおり、packet_counterは、IPパケット(ソース)毎に、映像及び音声を区別することなくインクリメントされたカウント値である。
packet_counterを用いることにより、映像信号を含むIPパケット(ソース)及び音声信号を含むIPパケット(ソース)の集合におけるパケットの連続性を検知することができる。このため、音声信号を含むIPパケット(ソース)の有無に関わらず、映像のフレーム境界を基準として、前述の処理を行うことができる。この場合、映像データを含むIPパケット(ソース)が多数に対し、音声データを含むIPパケット(ソース)は少数である。例えば、音声のIPパケット(ソース)は、その中身を問わず、直前の映像のIPパケット(ソース)と同じフレーム種別でありフレーム境界ではないパケットとして扱うことができる。
一方、音声データを含むIPパケット(ソース)をFEC符号化の対象としない場合、または、映像データを含むIPパケット(ソース)と音声データを含むIPパケット(ソース)とで独立した異なるFEC符号化及び復号処理を行う場合には、packet_counter ではなくpkt_seq_numを用いる。前述のとおり、pkt_seq_numは、IPパケット(ソース)毎に、packet_idが異なる映像及び音声等のそれぞれを区別してインクリメントされたカウント値である。
pkt_seq_numを用いることにより、映像データを含むIPパケット(ソース)と音声データを含むIPパケット(ソース)とを区別して、それぞれのパケットの連続性を検知することができる。
尚、パケットの連続性検知のために、packet_counterを用いるか、またはpkt_seq_numを用いるかの識別データは、送信装置2-1,2-2のFEC符号化部12のFEC符号化処理部32により、IPパケット(リペア)のFECヘッダに格納される。この場合、受信装置3及び受信端末5のFEC復号部21は、IPパケット(リペア)のFECヘッダに格納された識別データに基づいて、パケットの連続性検出のためのpacket_counterまたはpkt_seq_numを判断する。
pkt_seq_numはpacket_id毎に独立してインクリメントされる値が設定されるから、FECによる保護の対象とする映像及び音声等を区別するため、その識別子であるpacket_idも識別データとして、FECヘッダに格納される必要がある。
図16は、IPパケット(リペア)に含まれるFECヘッダの構造例を示す図であり、図17は、FECヘッダの具体例を示す図である。
図16を参照して、FECヘッダは、counter_select_flag(カウンタ選択フラグ、1ビット)、2d_flag(1ビット)、L1(1ビット)、L2(2ビット)、L3(1ビット)、reserved(予備、2ビット)、num_row_packets((L1+1)×8ビット)、start_packet_counter((L2+1)×8ビット)及びnum_valid_packets((L3+1)×8ビット)により構成される。さらに、FECヘッダは、counter_select_flag=1の場合、packet_idも含み、2d_flag=1の場合、num_column_packetsも含んで構成される。L1,L2,L3はフラグである。
FECヘッダは、図17に示す(1)~(4)の構成となる。図17(1)は、1次元FECブロックの場合の第1例である。このFECヘッダは、counter_select_flag=0、2d_flag=0、L1、L2、L3、reserved、num_row_packets、start_packet_counter及びnum_valid_packetsにより構成される。
図17(2)は、1次元FECブロックの場合の第2例である。このFECヘッダは、図17(1)のFECヘッダに加え、packet_idを含んで構成される。この場合、counter_select_flag=1、2d_flag=0である。
図17(3)は、2次元FECブロックの場合の第1例である。このFECヘッダは、counter_select_flag=0、2d_flag=1、L1、L2、L3、reserved、num_column_packets、num_row_packets、start_packet_counter及びnum_valid_packetsにより構成される。
図17(4)は、2次元FECブロックの場合の第2例である。このFECヘッダは、図17(3)のFECブロックに加え、packet_idを含んで構成される。この場合、counter_select_flag=1、2d_flag=1である。
図3に示した送信装置2-1のIPパケット受信部10が受信するIPパケットにおいて、MMTPヘッダにpacket_counterが含まれていない場合、packet_counterを連続性検知に使用したいときは、FEC符号化部12は、その入力段にてpacket_counter_flag=1を設定し、MMTPヘッダにpacket_counter領域を追加するようにしてもよい。
FECブロックのサイズによっては、num_column_packets及びnum_row_packets領域に必要なバイト数が変化する。このため、L1のフラグを用いることで、num_column_packets、num_row_packets領域に必要なバイト数を指定することができる。num_column_packets及びnum_row_packetsが共に255以下である場合、L1=0で十分である。一方、num_column_packets及びnum_row_packetsのいずれかが256以上である場合、L1=1とする必要がある。
同様に、num_valid_packets領域もFECブロックのサイズに応じて必要なバイト数が変化する。このため、何バイトで記述するかをL3のフラグで指定する。例えば、100×100のFECブロックの場合、L1=0で十分であるが、L3=1とする必要がある。
MMTPヘッダのpacket_counter及びpkt_seq_num領域は4バイトであるが、FECブロックのサイズに対し、4バイトで表現可能な整数は一般に過大である場合が多い。このため、FECブロックを構成する先頭のIPパケット(ソース)のpacket_counterまたはpkt_seq_numの4バイト全てを、start_packet_counterとして記載することは冗長と言える。
そこで、L2のフラグを用いて、start_packet_counter領域のバイト数を1バイトから4バイトの範囲で指定する。start_packet_counterが4バイトよりも小さい場合、図4に示した受信装置3及び図6に示した受信端末5のFEC復号部21によりFECブロックの境界の判定(図15に示したステップS1502,S1503)の処理において、IPパケット(ソース)のpacket_counter及びpkt_seq_numについてもstart_packet_counter領域と同じバイト数にクリップして、FECブロックの最終のIPパケット(リペア)の判定を行う必要がある。
また、IPパケット(リペア)において、FECブロック内での位置情報を示すだけにpkt_seq_numの4バイトの領域は過大であるため、上位バイトをFECブロック毎にインクリメントする値とする等して、FECブロックを跨いで一意の値としてもよい。この場合、図4に示した受信装置3及び図6に示した受信端末5のFEC復号部21によりFECブロックの終了判定(図15に示したステップS1502)の処理において、pkt_seq_numのうちFECブロック内での位置情報を示す下位バイトをクリップして判定を行う必要がある。
以上、実施例1,2を挙げて本発明を説明したが、本発明は前記実施例1,2に限定されるものではなく、その技術思想を逸脱しない範囲で種々変形可能である。
例えば、前記実施例1,2では、送信装置2-1,2-2のFEC符号化部12は、フレーム種別毎に、誤り訂正強度の異なるFEC符号化を行うようにした。これに対し、FEC符号化部12は、IフレームについてFEC符号化を行い、P,BフレームのそれぞれについてFEC符号化を行わないようにしてもよい。また、FEC符号化部12は、I,PフレームについてFEC符号化を行い、BフレームについてFEC符号化を行わないようにしてもよい。
また、前記実施例1,2では、送信装置2-1,2-2に備えたFEC符号化部12のFECブロック処理部30は、AUDのpic_type領域に基づいてフレーム種別を判定し、Iフレームについて、Bフレームよりも誤り訂正強度の強いFEC符号化が行われるように、所定の行列サイズのFECブロックを構成し、FEC符号化処理部32は、FECブロック処理部30により構成されたFECブロックを単位として、FEC符号化を行う。また、FECブロック処理部30は、Bフレームについて、Iフレームよりも誤り訂正強度の弱いFEC符号化が行われるように、所定の行列サイズのFECブロックを構成し、FEC符号化処理部32は、FECブロック処理部30により構成されたFECブロックを単位として、FEC符号化を行う。また、FECブロック処理部30は、Pフレームについて、Iフレーム及びBフレームのいずれかと等しい誤り訂正強度のFEC符号化が行われるように、またはIフレームとBフレームの間の誤り訂正強度のFEC符号化が行われるように、所定の行列サイズのFECブロックを構成し、FEC符号化処理部32は、FECブロック処理部30により構成されたFECブロックを単位として、FEC符号化を行う。
これに対し、FEC符号化部12は、図18に示したTemporal IDが示す階層のスライス毎に、誤り訂正強度の異なるFEC符号化を行うようにしてもよい。具体的には、FEC符号化部12のFECブロック処理部30は、IPパケット(ソース)に含まれるNALユニットの先頭に格納されたNALユニットヘッダからnuh_temporal_id_plus1領域を抽出し、nuh_temporal_id_plus1領域のデータに基づいて、当該IPパケット(ソース)に格納された映像データについて、そのスライスのTemporal IDを特定する。尚、フレーム内をスライスによって領域分割しない場合には、一般にフレームとスライスは同等である。
FECブロック処理部30は、Temporal IDが所定値以下の階層に含まれるスライス(低い階層のスライス)について、当該Temporal IDが所定値よりも大きい階層に含まれるスライス(高い階層のスライス)よりも誤り訂正強度の強いFEC符号化が行われるように、所定の行列サイズのFECブロックを構成し、FEC符号化処理部32は、FECブロック処理部30により構成されたFECブロックを単位として、FEC符号化を行う。
一方、FECブロック処理部30は、Temporal IDが所定値よりも大きい階層に含まれるスライス(高い階層のスライス)について、当該Temporal IDが所定値以下の階層に含まれるスライス(低い階層のスライス)よりも誤り訂正強度の弱いFEC符号化が行われるように、所定の行列サイズのFECブロックを構成し、FEC符号化処理部32は、FECブロック処理部30により構成されたFECブロックを単位として、FEC符号化を行う。この場合、FEC符号化部12は、Temporal ID=3の階層に含まれるスライスについて、FEC符号化を行わないようしてもよい。
また、前記実施例1,2では、送信装置2-1,2-2のFEC符号化部12のFEC符号化処理部32は、FECブロックを構成するIPパケット(ソース)がFECブロックの所定の行列サイズに満たない場合に、ダミーデータ(値0)を生成するようにした。また、行方向または列方向にXOR演算を行う際に、対象のIPパケット(ソース)のパケット長を揃えるために最大のパケット長を決定し、それ未満のパケットの末尾に値0を追加した。これらは、XOR演算を行う際に対象のパケット数や各パケットの有効バイト長を考慮せずに高速に演算を行うことを目的としている。
これに対し、FEC符号化処理部32は、行方向及び列方向のFEC符号化処理の実装が、対象のIPパケット(ソース)のみを1パケット毎等で逐次的にXOR演算を行うような実装手法である場合、ダミーデータを生成しなくてもよい。また、行方向及び列方向のFEC符号化処理の実装が、有効データの範囲内を1バイト毎等で逐次的にXOR演算を行うような実装手法である場合、パケット末尾に値0を追加してパケット長を揃えなくてもよい。なぜならば、値0とXOR演算を行っても結果が変わらないため、ダミーデータの生成やパケット末尾に値0を追加してXOR演算をせずとも、等価な演算となるからである。
また、FECの符号化方式は、行方向及び列方向のXOR演算によるProMPEG FECが簡便であるが、LDGM FEC(Low Density Generator Matrix Forward Error Correction)符号等より高度なFEC符号化を用いるようにしてもよい。
尚、実施例1による送信装置2-1及び受信装置3、並びに実施例2による送信装置2-2及び受信端末5のハードウェア構成としては、通常のコンピュータを使用することができる。送信装置2-1,2-2、受信装置3及び受信端末5は、CPU、RAM等の揮発性の記憶媒体、ROM等の不揮発性の記憶媒体、及びインターフェース等を備えたコンピュータによって構成される。
送信装置2-1に備えたIPパケット受信部10、フレーム境界・種別判定部11、FEC符号化部12及びIPパケット送信部13の各機能は、これらの機能を記述したプログラムをCPUに実行させることによりそれぞれ実現される。
また、受信装置3に備えたIPパケット受信部20、FEC復号部21及びIPパケット送信部22の各機能も、これらの機能を記述したプログラムをCPUに実行させることによりそれぞれ実現される。
また、送信装置2-2に備えた映像入力部14、映像符号化部15、MMT多重化部16、フレーム境界・種別判定部11、FEC符号化部12及びIPパケット送信部13の各機能も、これらの機能を記述したプログラムをCPUに実行させることによりそれぞれ実現される。
また、受信端末5に備えたIPパケット受信部20、FEC復号部21、MMT分離部23、映像復号部24及び映像出力部25の各機能も、これらの機能を記述したプログラムをCPUに実行させることによりそれぞれ実現される。
これらのプログラムは、前記記憶媒体に格納されており、CPUに読み出されて実行される。また、これらのプログラムは、磁気ディスク(フロッピー(登録商標)ディスク、ハードディスク等)、光ディスク(CD-ROM、DVD等)、半導体メモリ等の記憶媒体に格納して頒布することもでき、ネットワークを介して送受信することもできる。