Cloudflare StreamでSRT/RTMPSを使った低遅延ライブストリーミング再生のサポートが発表されました!

Cloudflare StreamでラストマイルにSRT/RTMPSを使った低遅延ライブストリーミングのサポートが発表されました。1秒未満の遅延を謳っています。試してみたところHTTPベースよりも少ない遅延でのストリーミングができました。
2022.05.17

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

清水です。先週、CloudflareではPlatform Weekと題して様々な発表を行っていました。本エントリではこの中でもCloudflare Streamについての発表を扱います。ライブストリーミングをSRTもしくはRTMPSを使ってをより低遅延で行う再生サポートが発表されました、遅延は1秒未満とされています。現在はオープンベータ版という状況のようです。

現在主流となっているストリーミングサーバからエンドユーザの視聴デバイス(ラストマイル)への配信方式は、HTTPをベースにしたHLSやMPEG-DASHなどです。これらはCDNと相性がよく(一般的なHTTPのCDNが利用可能)、またJavaScript製動画プレイヤーを利用してWebブラウザ上でのストリーミング再生が可能、といったメリットがあります。対してデメリットとしてそもそも映像伝送用ではないHTTPをベースにしているため他プロトコルよりも遅延が大きく、視聴環境やパラメータなどにもよりますが30秒程度の遅延が発生してしまうのが一般的です。

チャンク形式のオブジェクト転送や再生プレイヤー側での対応で遅延を数秒にするLow-latency HLSなどもありますが、Cloudflare Streamではラストマイルにより映像伝送に適したプロトコルであるSRTもしくはRTMPSを使うことで、なんと1秒未満の低遅延を実現しました。公式ブログエントリのタイトルに「magical HDMI cable to the cloud」とあるように、まさに映像伝送用のケーブルをクラウドに引き込んでいるイメージができるのではないでしょうか。

実際に仕組みについては、上記Cloudflareの公式ブログから図を引用したいと思います。打ち上げられた映像に対し、可能な限りCloudflareのネットワーク内で伝送を行い、実際のエンドユーザの視聴端末にはSRTまたはRTMPSでストリーミングするかたちです。世界のほとんどの地域で1秒未満の遅延を確実に提供することを期待している、とのことです。

Stream with sub-second latency is like a magical HDMI cable to the cloud

Cloudflare Streamで低遅延ライスストリーミングをやってみた

それでは、実際に新たにサポートされたSRT/RTMPSでの低遅延ライブストリーミングをやってみたいと思います。まずは通常のライブストリームと同様にライブ入力を作成します。

ライブ入力が作成できたら、接続情報の箇所から映像の打ち上げ先を確認します。今回は映像の打ち上げ(ファーストマイル)にRTMPSを使用しました。RTMPS URLとRTMPSキーをStreaming Softwareに設定します。

Streaming Softwareは以下のエントリと同様、iPhone XS上のZixi ONAIRを使用しました。パラメータなども同様の設定をしています。

Streaming Softwareから映像を打ち上げます。ダッシュボードから確認できるプレビュー映像はおそらくラストマイルにHTTPベースのプロトコルを使用したものであり、30秒程度遅延がありますね。

ここまでは通常のライブストリームと同様です、低遅延ライブストリーミングを使用する場合は再生プレイヤーならびに参照するPlayback URLなどが異なってきます。いざ!低遅延な方式での配信を確認してみましょう。今回はラストマイルのプロトコルにSRTを使用しました。SRTのPlayback URLをダッシュボードから確認してみます。接続情報の箇所でプロトコルをSRTに変更すると、 SRT Playback URLが新たに追加されていますね。(たしかに以前確認した際はSRT URLのみでした。)

「表示」のリンクから以下形式でSRT Playback URLが取得できました。

  • srt://live.cloudflare.com:778?passphrase=$PASSPHRASE&streamid=$STREAMID

再生プレイヤーには、iPhone 12 mini上でHaivision Play ProならびにLarix Playerを使用してそれぞれ確認してみました。

実際にSRTで再生してみた結果が以下となります。正確に1秒未満の遅延は確認できませんでしたが、通常のHTTPベースの配信よりもはるかに小さい遅延(1,2秒)で再生できていることがわかります。(なお、再生が安定しなかったりということもありました。こちらはStreaming Softwareの設定から、再生プレイヤー側のバッファなど含め、もろもろ調整が必要かなと考えています。)

それぞれのPlayer(Haivision Play ProならびにLarix Player)での設定内容についても控えておきます。Haivision Play ProではストリーミングIDを指定するためにCallerで設定を行いました。レイテンシは1000のほか100などでも確認してみましたが1000のほうが100よりも安定していました。

Haivision Play Pro Larix Player

まとめ

CloudflareのPlatform Weekで発表された、Stream LiveのSRT/RTMPSでの低遅延ライブストリーミング再生サポートについてまとめてみました。

遅延をなるべく小さくするため、(本来映像伝送を目的としていない)HTTPベースの方式で工夫していくのではなく、映像伝送用のプロトコルを使うのは理にかなっていますよね。ただそのぶん再生環境も限定される(HTTPベースのものと異なる)点に注意が必要だなと感じました。ブラウザベースのSRT再生環境などが今後出てくるのでしょうか。またCloudflareの公式ブログではiOSネイティブアプリでの実装用にffmpeg-kitなども紹介されていました、ネイティブアプリはSRTで低遅延サポートというかたちもあるかもしれませんね。

しかし映像伝送用のプロトコルを使った、1秒未満の低遅延ライブストリーミングを実現できるプラットフォームは非常に魅力的に感じました。公式ブログなどでは最大同時視聴者といった大規模配信に関する具体的な制限事項は確認できませんでしたが、Cloudflare自体がそもそもCDNを持っているのでSRT/RTMPSのCDN利用の面も期待ができると考えています。今回の検証では厳密な「1秒未満」は確認できませんでしたが、引き続きパラメータ調整などで実際に実現できるかも確認してみたいと思いました。