0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

RTP入門:リアルタイムメディアを運ぶ仕組みと基本パケット構造

Last updated at Posted at 2025-12-02

この記事は筆者オンリーのAdvent Calendar 20252日目の記事です。 ここでは、音声通話で使用される RTP / RTCP について、できるだけざっくり・シンプルに解説します。

1. はじめに:RTPとは

RTP(Real-time Transport Protocol)は、
音声・映像などリアルタイム性が必要なメディアを IP ネットワークで運ぶためのプロトコルです。

代表的な用途:

音声通話(VoIP)

ビデオ会議(WebRTC/Zoom など)

SIP 通話の音声・映像

ライブ配信

RTP は単体では動作せず、多くの場合 RTCP(制御用) とセットで使われます。

2. RTPの特徴と設計思想

RTP は TCP のような完全な到達保証は行わず、
リアルタイム性を優先して UDP を使うのが基本です。

特徴:

低遅延

メディア時刻を管理する timestamp

メディア順序を管理する sequence number

端末識別のための SSRC

コーデック非依存(音声/映像を自由に運べる)

「音が多少欠けても遅延しない方が重要」というリアルタイム用途向けの設計。

3. RTPパケットの基本構造

RTPヘッダは 12 バイト(固定)+ 拡張/ペイロード で構成されます。

0                   1                   2                   3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|V=2|P|X|  CC   |M|     PT      |       sequence number         |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                           timestamp                           |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|           synchronization source (SSRC) identifier            |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|            contributing source (CSRC) identifiers             |
|                             ....                              |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
|                         Payload Data                          |
|                             ....                              |

4. 各フィールドの意味

Version (V)

常に 2。RTP のバージョン。

Padding (P)

末尾に不要データ(padding)があるかどうか。

Extension (X)

拡張ヘッダの有無。

CC (CSRC Count)

ミキシング時の音声ソース数(最大 15)。

Marker (M)

コーデック固有用途。
例:音声のフレーム境界、映像のキーフレーム開始など。

Payload Type (PT)

コーデック種別(PCMU=0, PCMA=8, H264=96 など)。
動的ペイロード(96〜127)は SDP で定義される。

Sequence Number

パケット順序管理。
1 ずつ増加するため、欠損(loss)や順序入れ替わりを検知できる。

Timestamp

メディアの時刻基準。
例:音声(8kHz)なら 1ms刻みで 8 増加。

SSRC

送信者識別ID(ランダム)。
同じセッション内でユニークである必要がある。

5. RTPが実際に動くとこうなる(音声例)

音声の例(PCMU / 20ms パケット):

項目 値
コーデック G.711 PCMU
サンプリング周波数 8000 Hz
1パケットあたりの時間 20ms
timestamp の増加量 160 (8kHz × 0.02s)

つまり、RTPの timestamp はこんな感じに増える👇

1パケット目: timestamp=1000
2パケット目: timestamp=1160
3パケット目: timestamp=1320
...

遅延・ジッタの吸収はプレイヤ側(ジッタバッファ)が担当。

6. RTCP(制御プロトコル)も必須

RTPはメディアを運びますが、制御は RTCP が担当。

代表的なRTCPパケット:

SR(Sender Report)
送信者が送出状況を通知

RR(Receiver Report)
受信者が受信状況(loss/jitter)を通知

SDES(Source Description)
名前、CNAMEなどの識別情報

RTPとRTCPはペアで動くことが前提です。

7. SIP/SDPと組み合わせるとどう動く?

SIP(RFC3261)で INVITE → 200 OK → ACK が完了すると、
SDP で交換した情報を元に RTP が開始されます。

SDP例(最小):

m=audio 49172 RTP/AVP 0
a=rtpmap:0 PCMU/8000

意味:

RTPポート : 49172

コーデック : PCMU

サンプリング : 8kHz

SIP はあくまで「線を引く」だけで、
実際の音は RTP/UDP で流れる のがポイント。

8. RTP の注意ポイント(実践的)

① NAT 越えはそのままでは難しい

RTPはUDPなので NAT でポート変換されやすい。
→ STUN/TURN/ICE が必須(WebRTCが採用)。

② パケットロス前提の設計

TCPと違って再送しない。
→ PLC(Packet Loss Concealment)で穴埋めする。

③ 映像はさらに複雑(H.264, VP8, AV1 など)

RTP パケット分割や FU-A などの仕様がある。

④ 暗号化は SRTP を利用

RTPは平文なので、実際の VoIP/WebRTC は
SRTP + SRTCP が標準。

9. 最小コード例(RTPヘッダの生データ)

80 e0 12 34 00 00 04 d2 12 34 56 78
└V2│M│ PT=0 (PCMU)
    └──── sequence=0x1234
timestamp=0x000004d2
SSRC=0x12345678

10. まとめ

RTP はリアルタイムメディアを運ぶためのプロトコル

UDP を前提とした低遅延設計

順序番号(seq)と timestamp が重要

SIP/SDP と組み合わせることで音声通話が成立

制御には RTCP が必須

実運用では SRTP や ICE が不可欠

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?