要約

  • RFC 3119はSDPでmp3を使うよう指定していたが、登録済みサブタイプと隣接するrtpmapの例はmpa-robustだった。RFC 5219は符号化名をそろえた。
  • 後継仕様はADUベースのRTPペイロード設計を維持し、擬似コードの変更を小規模で非規範的な修正と説明した。稼働中の実装が食い違う名前を使ったか、セッションが失敗したかは、標準文書からは分からない。

同じ節にある二つの名前

この矛盾は読み飛ばしやすい。2001年公開のRFC 3119は、MP3向けRTP形式のメディア・サブタイプとしてmpa-robustを登録した。ところがSDPの節では、符号化名はmp3でなければならないと指定している。そのすぐ後の例では、動的ペイロード型121を割り当て、a=rtpmap:121 mpa-robust/90000と記す。

二つの行は同じ形式を異なる面から記述している。RTPはペイロード型番号を運ぶ。動的な番号の場合、SDPのrtpmap属性によって、相手側はその番号に対応する符号化方式とクロックレートを知る。RFC 4566はこの対応付けを定義している。つまりRFC 3119では、サブタイプと対応付けの例は一致しているのに、セッション記述の指示だけが別の名前を示していた。

単なる文字の誤りではない。動的な型番号だけでは、パケットの中身は分からない。RTPパケット内の番号と受信側が期待する符号化方式の対応を、両端が共有する必要がある。ペイロードの構成自体は一貫していても、設定時にそれを説明する境界が一致しないことはあり得る。この文書から確認できるのは仕様上の欠陥であり、実機がどう動作したかではない。

RTP形式を変えた理由

元の設計は、MP3 Layer IIIの具体的な性質に対応していた。フレームは前のフレームに含まれる符号化データを指すことがあるため、常に独立して復号できる単位とは限らない。RFC 3119は、通常のフレーム境界でRTPパケットを区切ると、失われたパケットのために、届いている別フレームの一部まで使えなくなる場合があると説明した。

代替案は、ストリームをアプリケーション・データ・ユニット(ADU)に並べ替える。各ADUの前にはサイズと別パケットからの継続の有無を示す記述子を置く。送信側は任意でADUをインターリーブし、連続するユニットを連続しないパケットに分散できる。これは単に冗長データを加えるのではなく、符号化データを保持したまま、パケット境界とデコーダが扱う単位との位置関係を変える設計だった。

2008年2月のRFC 5219は、その基本方式を引き継いだ。序文では後方参照、ADU、記述子、任意のインターリーブを改めて説明する。概要は、SDP節と擬似コード付録の誤植を直すためにRFC 3119を置き換えると述べる。付録Cはさらに明確で、主要な変更はSDPの符号化名であり、付録AとBは非規範的な擬似コードの軽微な修正と明確化だとしている。

修正内容は明快だ。RFC 5219は登録済みサブタイプに合わせてmpa-robustを指定し、例でも動的ペイロード型121をmpa-robust/90000に対応させている。RFC Editorが検証したRFC 3119のエラッタには、元の食い違いのほか、いくつかのコード例の修正もある。backpointerはサイズではなく値を指し、変数名はcurADUではなくprevADU、B.2の配列上限は二か所とも32ではなく256とする。これは手順の記述を整える変更であって、2008年に実ネットワーク上のペイロードが変わった証拠ではない。

RFC番号は障害報告ではない

RFC 5219は、標準の複数の層を修正できることを示す記録だ。SDP名はセッション記述に関する規範的な指示であり、参加者が符号化方式をどう呼ぶかを修正する。一方、付録の変更対象は、RFC 5219自身が非規範的と呼ぶ擬似コードである。いずれも、それだけでは運用上の問題の大きさを測れない。

実装の調査、パケットキャプチャ、失敗した通話記録、ベンダーのリリースノート、変更前後の試験結果は文書にない。ある実装が実際にmp3を通知した、相手がそれを拒否した、あるいは改訂後に測定可能な相互運用性の向上があったとも記していない。RFC Editorがエラッタを認めたことは文書の欠陥を示すが、ソフトウェアがそれをどれほど再現したかは示さない。

守るべき歴史上の境界はここにある。RFC 5219がRFC 3119を置き換えたのは、セッション記述の指示に修正が必要で、実装説明の一部も明確化すべきだったためだ。ADUによるペイロード設計は引き継がれた。標準の記録は著者が直した内容を示す。実システムへの影響を語るには、実装とセッションに由来する別の証拠が要る。

出典

  1. https://www.rfc-editor.org/rfc/rfc3119.html
  2. https://www.rfc-editor.org/info/rfc3119/
  3. https://www.rfc-editor.org/rfc/rfc5219.html
  4. https://www.rfc-editor.org/info/rfc5219/
  5. https://datatracker.ietf.org/doc/rfc5219/
  6. https://www.rfc-editor.org/errata/eid331
  7. https://www.rfc-editor.org/rfc/rfc4566.html
  8. https://www.rfc-editor.org/rfc/rfc2250.html
  9. https://www.rfc-editor.org/rfc/rfc3550.html
  10. https://www.rfc-editor.org/rfc/rfc3551.html
  11. https://www.rfc-editor.org/rfc/rfc2736.html