2009年7月30日木曜日

parityfec(parity FEC)

具体的な機能については不明ですが、エラー訂正(パリティ)用のMIMEタイプのようです。FECとはForward Error Correctionの略です。parityfecについてはRFC2733で定義されていて、RFC3009でMIMEタイプとしてaudio/parityfecvideo/parityfectext/parityfecapplication/parityfecが定義されています。

なおparityfecというMIMEタイプは、RFC5109で廃止されています。なぜ今さら投稿したかというと、T.38の勧告の中で出てきたからです。T.38自体RFC2327ベースで書かれているため、こうした古い記事も残っていたのでしょう。

ですので、今さら覚える必要はありません。RFC5109を読んでください。

使い方

fmtpに下記のようなフォーマットの文字列を設定します。

a=fmtp:<number> <port> <network type> <address type> <connection address>

使用例

v=0
o=hamming 2890844526 2890842807 IN IP4 126.16.64.4
s=FEC Seminar
c=IN IP4 224.2.17.12/127
t=0 0
m=audio 49170 RTP/AVP 0 78
a=rtpmap:78 parityfec/8000
a=fmtp:78 49172 IN IP4 224.2.17.12/127
m=video 51372 RTP/AVP 31 79
a=rtpmap:79 parityfec/8000
a=fmtp:79 51372 IN IP4 224.2.17.13/127

2009年7月3日金曜日

PCMU(G.711 mu-law) / PCMA(G.711 A-law)

PCMU/PCMAは言わずと知れた一般的なIP電話のコーデックです。G.711 u-lawとも呼ばれます。RFC4856のSection 2.1.18にSDPでの指定方法が登録されています。一方PCMAはPCMUよりダイナミックレンジが若干狭いようです。Wikipediaによれば規定により、1カ国でもA-lawを使う国があれば、国際接続ではA-lawが使われるそうです。PCMAはRFC4856のSection 2.1.17にSDPについて記述があります。

概要

G.711の仕様書は以下にあります。

G.711のサンプリングは8000Hzで1サンプル1バイトですので、64kbpsになることが一般的です。

PCMUもPCMAもG.711の1つですが、PCMUはmu-lawアルゴリズムを、PCMAはA-lawアルゴリズムを使用する、という違いがあります。

(RFC3551) 4.5.14 PCMA and PCMU (拙訳)

PCMAとPCMUはITU-Tの勧告でG.711と規定されている。オーディオデータは対数スケーリング(logarithmic scaling)後にサンプル毎に8bitでエンコードされる。PCMUはmu-lawスケーリングを、PCMAはA-lawスケーリングを意味している。詳細な記述はJayantとNollによって提供されている。[15] 各G.711オクテットはRTPパケット内に整列(octet-aligned)されるべきである(SHALL)。各G.711オクテットの符号ビットはRTPパケット内のオクテットの最上位ビットに一致するべきである(SHALL)(つまり、G.711のサンプル数の推測はホストマシン上でオクテットとして扱われ、符号ビットはホストマシンのフォーマットによって定義される、オクテットの最上位ビットとすべきである)。G.711の56kb/sと48kb/sモードはRTPへは適用されない。PCMAとPCMUは常に8ビットでサンプリングされ、転送されなければならないからである(MUST)。

使い方

PCMU/PCMAのパラメータ
パラメータ名説明
メディアタイプ audio
メディアサブタイプ PCMU PCMA
必須パラメータ
rateRTPタイムスタンプのクロックレートで、これはサンプリングレートに一致します。一般的には8000ですが他のレートが指定されることもあります。仕様上も「名目上1秒間に8000サンプル。誤差は±50ppmまで」と言っているだけで、制限については書かれていません。チャンネル数を2ch(=ステレオ)にする場合は、サンプリングレートを2倍(16000)にします。こうすることで、左右交互にデータがインタリーブされ、8000Hzの音が左右から出るのと同じ効果が得られます。
オプションパラメータ
channels 何本のオーディオストリームが使用されるかを示します。デフォルトは1、ステレオは2です。それ以外も指定可能です。インタリーブは1バイトサンプルされる毎に実施されます。チャンネル順序はRFC3551で規定されています。「チャンネル数毎のチャンネル順序」にRFC3551からの抜粋を示します。
ptime RFC4566参照
maxptime RFC4566参照
チャンネル数毎のチャンネル順序
チャンネル数記述チャンネル
2stereol r
3 l r c
4 l c r S
5 FlFrFcSlSr
6 l lcc r rcS
凡例
l left
r right
c center
S surround
F front
R rear

使用例

サンプリング周波数8000のPCMUとPCMAでコーデックネゴシエーションするオファーをする場合。
v=0
o=john 51050101 51050101 IN IP4 offhost.example.com
s=-
c=IN IP4 offhost.example.com
t=0 0
m=audio 5004 RTP/AVP 0 8
a=rtpmap:0 PCMU/8000
a=rtpmap:8 PCMA/8000
サンプリング周波数16000でPCMUのステレオ(2チャンネル)をオファーをする場合。アンサーでこのオファーに同意した場合、左右から8000Hzでサンプリングされた音声が流れます。
v=0
o=john 51050101 51050101 IN IP4 offhost.example.com
s=-
c=IN IP4 offhost.example.com
t=0 0
m=audio 5004 RTP/AVP 0
a=rtpmap:0 PCMU/16000/2