Skip to content

Instantly share code, notes, and snippets.

@voluntas
Last active January 8, 2024 09:11
Show Gist options
  • Star 6 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save voluntas/b0e73348181ab96f1d47c6f3ff3f1dc1 to your computer and use it in GitHub Desktop.
Save voluntas/b0e73348181ab96f1d47c6f3ff3f1dc1 to your computer and use it in GitHub Desktop.
WebRTC が利用している RTP 拡張の簡単な紹介

WebRTC が利用している RTP 拡張の簡単な紹介

WebRTC は RTP を利用して音声や映像を送受信しています。RTP には RTP 拡張という好き勝手に拡張できる仕組みがあります。

RFC 8285 - A General Mechanism for RTP Header Extensions

つい最近古い RFC が上書きされたのでせっかくなので紹介してみます。RTP 拡張については RFC 読めばわかるので割愛します。

Chrome M63

Chrome は積極的に RTP 拡張を利用しています。Chrome というよりは libwebrtc がという印象です。

Firefox 57

Firefox は必要最低限という印象です。あまり拡張には興味がなさそうです。

RTP 拡張概要

RTP 拡張は SDP に定義し Offer/Answer でやり取りする際に対応しているかどうかを判断します。

extmap:1 の 1 をローカル ID といい、そのハンドシェイクで m= の単位で好き勝手に決めて良いと決まっています。

実際 Firefox の場合はローカル ID 1 が2つあります。これは m= で区切られているからです。

ローカル ID の後ろに /sendonly というのがありますが、これはダイレクションといい、この拡張を利用する方向を明示します。

あとは URI です。 IETF の場合は urn:ietf ... という感じです。それ以外は http:// という感じで書くルールになっています。

RTP 拡張紹介

urn:ietf:params:rtp-hdrext:ssrc-audio-level

ssrc-audio-level 拡張です。これは音声のみに利用される拡張で、その RTP パケットの音量が 0-127 で含まれてきます。

0 が一番大きな音で、127 が一番小さな音です。全ての RTP パケットに含まれます。

urn:ietf:params:rtp-hdrext:toffset

この機能は abs-send-time が対応していない場合に利用される仕組みです、WebRTC では abs-send-time には対応しているので、何も気にすることはありません。

abs-send-time (Absolute Send Time) です。簡単に言うと RTP の timestamp とは別に淡々と incremnt されていく値です。といってもずーっと増えるのではなく、24 ビットです。

これを利用することで RTP の SeqNum が「古いのか新しいのか」を判断することが可能になります。便利です。

urn:3gpp:video-orientation

マニアックな拡張です。これは「角度」を取れる拡張です。90 度回転したなどのフラグが入ってきます。

受け取り側は映像が「回転したこと」に気付くことができます。

https://tools.ietf.org/html/draft-holmer-rmcat-transport-wide-cc-extensions-01

ソケットから送信した順番の番号が入ってきます。これだけだと何に使うのかわからないと思います。

Transport-wide RTCP Feedback Message という RTCP フィードバックメッセージを前提としています。

これについては、長くなるので「そんなのがあるんだな」程度で。

情報がなさすぎてこれわかっていません。そもそも URL がまだデプロイされていないので 404 です。

リアルタイムか、スクリーンシェアなのかなどが入ってきます。

仕様と実装が違うので要注意です。エンコードの開始時間と終了時間が入ってきます。フレームごとのタイミング情報をおくるために使われます。

まとめ

RTP 拡張は WebRTC をブラウザで P2P として利用するには気にする必要はありません。ただ、これらの拡張を利用することで得られている統計情報もあったりしますので、chrome://webrtc-internals と友達になりたいひとはなんとなく覚えておくことをお勧めします。

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment