RTPヘッダ構造とRTCP
RTPヘッダにはUDPヘッダが持っていないシーケンス番号やリアルタイム再生を可能にするタイムスタンプなどのフィールドを持っています。
それらのフィールドにより、リアルタイム性を維持しつつ、UDPにおいても受信側では正常な音声再生を可能にしています。
RTPヘッダの構造
RTPヘッダのフィールドで特に重要なのが、シーケンス番号とタイムスタンプです。
シーケンス番号は送信されたパケットの順番を意味し、受信側に到着するパケットの順番がずれた場合も、このシーケンス番号をもとに順番通りの再生が可能となります。
タイムスタンプはジッタを吸収するたに使われます。
送信側から受信側にパケットが到着するまでに当然わずかな遅延(伝送遅延など)があります。
ジッタとは、その遅延の間隔がずれてしまう現象のことです。
もし大きなジッタが起きれば、音と音の間にすきまができてしまったり、そのまま再生を続けるとジッタが起きるたびに徐々に遅延が大きくなってしまいます。
そのような現象を防ぐために、送信側で受信側が再生してほしい日時を示すタイムスタンプを書き込んでおきます。
しかし、ただタイムスタンプを書き込むだけでは、送信側と受信側とでクロック同期が取れていない場合は意味をなしません。
例えば、送信側のクロックが受信側のクロックより1%早かったら、送信側が1000のパケットを送っても、受信側では999のパケット分しか再生されなくなってしまいます。
クロックの同期機能はRTPが持っているのではなく、RTPの補助プロトコルであるRTCP(RTP Control Protocol)が持っており、担当しています。