2023-03-28

21年振りにRTMPの新仕様 Enhanced RTMP, FLV について

[2023.03.30] 文章全体の書き直し、補足説明の追加。

昨日、OBS Projectの Pull requests を見ていると、興味深いものを見つけました。

https://github.com/obsproject/obs-studio/pull/8522

1
2
3
Adds support for HEVC and AV1 codecs to RTMP, according to the Enhanced RTMP spec

Adds flag-guarded support for HDR metadata frame to RTMP, according to the Enhanced RTMP spec

どうやらRTMPが21年間使い続けられており、その仕様をなんとかしようと、Veovera Software Organizationという組織が立ち上がったようです。

組織の構成員を見ると、RTMPの仕様に関わったAdobeはもちろん、YouTubeでお馴染みのGoogleや、ほかにも Intel や Xsplit といった豪華なメンバーが揃っています。

また、FFmpegやVideoLANのコミッティーでお馴染みのjb氏もいるようで、FFmpegもすぐ対応されるでしょう。

RTMP, FLVの問題点

RTMPの問題点はいくつかあるが、その中でもFLVコンテナが密接に関わっています。

当時、RTMPは Flash Player で動画を再生するために開発されたプロトコルであり、Flash VideoコンテナとしてFLVが採用された。FLVには、映像コーデックは VP6/H.264/On2、音声コーデックは MP3/AAC/Speexが格納できます。これは当時からすると、コーデックの種類も多くなかったため、十分でした。

しかしながら、2023年現在では H.264 の後継である H.265 や 圧縮率が非常に高くパテントフリーである AV1 が使われ始めています。

しかしながら、RTMPの仕様策定した Adobe は 21年間も仕様を変えていないです。これは、RTMPがデファクトスタンダードになり、今から仕様変更したとしても、プラットフォーマーやOBSといったソフトウェア側の合意がなければAdobeしか使われない未来も見えてきました。また、RTMP自体がFlashの時代を引きずっているので、Flashに注力していない今、RTMPを今更対応する気もないのでしょうか。

そんな中、突如として Veovera Software Organization という団体が立ち上がりました。プラットフォーマー側も、ソフトウェア側も、一体となってRTMPに破壊的変更をせず、後方互換性を持たせながらも現在の仕様に追記する形で新しく仕様を作ろうという動きがはじまりました。

既存のRTMPとの変更点

Enhanced RTMP, FLVの仕様書は、GitHubにて、Apache LICENSEで公開されています。

https://github.com/veovera/enhanced-rtmp

その中で、具体的な変更点を一部抜粋します。

  • 新しいコーデックタイプ
    • HEVC, VP9, AV1
    • VideoTagHeaderとは別に、ExVideoTagHeaderに定義
  • HDR機能
    • PacketTypeMetadata上のColorInfoに定義。
  • PacketTypeMetadata
    • ビデオメタデータとして、ExVideoTagHeader上に定義。
  • AMF3で処理される
    • AMF0とAMF3の2種類あるが、AMF3を使っていくようです。
  • NetConnectionのcommand拡張
    • Command Objectに、クライアントがサポートするビデオとオーディオのコーデック情報を送信するようになった

全体的にRTMPとFLVの両方に手が加えられているようです。

対応状況について

冒頭にもお伝えしたとおり、OBSでは既に Merge されており、Ready状態になっているようです。

YouTube では以前から特定のエンドポイントに対して HLS のセグメントファイルを PUT する形式で、H.265/HEVC をインジェストできる機能がありました。しかしながら、HLS PUTしてから再エンコードが走るため、遅延が発生します。そのため、あまり使われることはありませんでした。今回のEnhanced RTMPでは、既存で使われているRTMPが使えるため、コーデックを変えるだけで帯域幅にかなり余裕が出るので、ゲーム配信などでは利便性もよく、かなり恩恵が受けられるでしょう。

また、PRにもある通り、YouTube側も既に何らかの対応が入っており、本仕様に基づいてインジェストが出来るようになりそうです。

Wowza含め、他のソフトウェアも、追従する形でそのうち対応すると思いますが、既にRTMPの代替手段は出てきています。

現在 IETF で標準化に進めて動いている Segmented Live Media Transport (通称WARP) は QUIC ストリーム上で、Fragmented MP4ストリームを送る規格があります。元々、WebSocketの後継であるWebTransportはQUIC上でバイナリの送受信ができるので、この技術を拡張したものがWARPです。

また、WebRTCを使いやすくした WHIP と WHEP も出てきており、現在 Alt-RTMP で一番人気であり、本ブログでも紹介したSRTもあります。

このように、RTMPを代替する、いわゆる Alternative RTMP がいくつか出てきた中で、Enhanced RTMP の登場により、21年間のRTMP戦争に終止符が打たれるかもしれませんね。

RTMP以外のプロトコルが使われない一番の理由として、Googleはじめ、各種プラットフォームや、ソフトウェア開発者、ハードウェアメーカーが結託しないと実現できませんでした。今回のEnhanced RTMPでは、それぞれのメーカーの開発者が一緒になって作り上げたので、このようにスピーディーに実装が出来たのでしょう。

YouTube の対応について

https://www.tomshardware.com/news/av1-live-streaming-is-finally-coming-to-youtube

海外メディアの Tom’s Hardware では、YouTubeがAV1でのインジェストをサポートしたとの報道がありました。

OBS上では、上記のPRがマージされ、正式リリースはされていないですが、ベータでは使える状態になっています。

OBS Captured

一般向けのリリースは今後行われるとみています。