パケットフォーマットから読み解く映像伝送プロトコル「SRT」の特長

ネットワーク豆知識

 

近年、IPによる映像伝送技術は飛躍的に進化し、その中でも注目を集めているテクノロジーのひとつがSRT(Secure Reliable Transport)プロトコルです。このプロトコルは、Haivision社によって独自に開発され、現在ではオープンソース化されています。
今回は、SRTの特長とアーキテクチャについて、現時点での公開されてる情報をもとに解説します。最新の情報は、SRT関連サイトより各団体の一次ソースを確認するようにしてください。

SRTとは

SRTとはSecure Reliable Transportの略で、その名のとおり、安全(Secure)で信頼性の高い(Reliable)伝送(Transport)を行うプロトコルです。どのようなネットワーク環境でも音声、映像を低遅延で安定的に配信するために設計されたプロトコルとなっています。

ネットワークはベストエフォートであるという性質上、データパケットの到着時間にジッター(ゆらぎ)が発生します。このジッターを無視して即座に再生すると、音や映像に頻繁な乱れが生じます。通常の映像配信ではこの問題に対処するため、遅延を許容し、受信バッファを十分に確保してからデータを補正して再生します。このバッファは事前に定義され、回線の速度や安定性に関係なく同じサイズが確保されます。
SRTは、受信側の状態を送信側に伝えることで、バッファを最適化する機能が備わっています。これにより、高速で安定した回線では低遅延を実現し、不安定な状態が検出された場合には自動的にバッファを調整するため、常に安定した再生が可能です。

SRTユースケース

SRTユースケース

次にこのプロトコルの特長を「安全」と「信頼性」のふたつの側面から説明します。

「安全」という側面では、SRTはコンテンツ保護として、AESによる暗号化がサポートされています。鍵長も256までサポートされていて、許可されていない視聴者からのビデオストリームを保護することが可能です。

「信頼性が高い」という側面からは、SRTがTCPではなくUDT(UDP-based data transfer)であることがあげられます。トランスポート層に低遅延でリアルタイム性があるUDPを使用し、上位のSRTプロトコルでシーケンスとACK/NACKによるパケットロスの測定や再送信、フロー制御などUDPでは実現できないデータに信頼性を持たせるメカニズムが備わっています。

SRTのパケットフォーマット

UDP/SRTパケットフォーマット

UDP/SRTパケットフォーマットは以下のとおりです。

赤枠の"F"フィールドの値でデータパケットかコントロールかを判別します。

SRTデータパケットフォーマット

SRTデータのパケットフォーマットは以下のようになっています。

SRTデータフォーマット

フォーマット上は、2つの番号が存在していることがわかります。それぞれの違いは以下のとおりです。

シーケンス番号(Sequence Number)
シーケンス番号は、パケットが送信された順序を示す番号です。これにより、パケットが正しい順序でロスなく再構築されることが保証されます。
シーケンス番号は通常、送信側でインクリメントされ、受信側でその順序に基づいて再構築されます。
メッセージ番号(Message Number)
メッセージ番号は、パケットが属するメッセージを識別するための番号です。1つのメッセージが複数のパケットに分割されて送信される場合、それらのパケットは同じメッセージ番号を共有します。
メッセージ番号は、パケットがどのメッセージに属するか識別するために使用されます。PPフラグを確認することにより、メッセージの最初、途中、最後かも判別が可能です。

つまり、シーケンス番号がデータ順序を保証し、メッセージ番号がデータグループ化を行います。これにより、SRTは、UDPを使用していても、受信側で正確なデータの再構築を実現を可能にします。

SRTコントロールパケット

SRTコントロールのパケットフォーマットは以下のようになっています。

SRTコントロールフォーマット

コントロールパケット種別とControl Type値の関係以下のとおりです。

SRTコントロールパケット

コントロールパケットは、通信セッションの管理やデータ転送の品質制御に重要な機能を果たしています。以下は、SRTのコントロールパケットが提供する主要な機能です。

  • ハンドシェイクとセッション管理
  • エラー検出と修復
  • 帯域幅と遅延の制御
  • フロー制御
  • セキュリティの確保

SRTのパケットロスの検知と再送の仕組み

SRTでは、データパケットのシーケンス番号を用いてパケットの順序不正やパケットロスの検知を行います。SRT受信者がパケットロスが検知された場合、コントロールパケットの一種であるNegative Acknowledgment (NAK)をSRT送信者に送信します。SRT送信者がNAKパケットを受信すると、SRT送信者はロスしたパケットを再送します。

通常のNAKに加えて、定期的なNAKレポートがあり、そこでは受信者がロスした(とみなされた)パケットがリストされています。このレポートは定期的なネットワークの品質の解析に役立ちます。

SRT関連サイト

2013年にHaivision社で開発されたSRTは、2017年のオープンソース化されました。最新の仕様はGitHubに公開されています。
Github - Haivision /srt

2023/12/11時点での最新のRFCドラフトは以下となっています。RFCに慣れている方は、GitHubよりこちらのほうが読みやすいと思います。
The SRT Protocol draft-sharabayko-srt-00

2023/12/11時点でのSRTアライアンスメンバーは600以上の団体で構成されています。ブログを読むとYoutubeなども加入していて積極的に相互テストを行っているようです。
SRT Alliance

あとがき

先日行われたInter BEE 2023では、INTER BEE IP PAVILIONにSYNESISを展示させていただきました。ご来場いただいた方々には深く御礼申し上げます。

その会場で、放送システムのIP化の課題は、大容量データの効率的な転送だけではなく、エンジニア不足、セキュリティ、コスト、異なるベンダー同士での相互運用性など多岐にわたるということをお聞きしました。IP化されたネットワークの可視化やセキュリティ脅威の検出は、当社が得意とするところです。お気軽にご相談ください。

IPネットワーク監視のご相談