Simulcast 自動切り替え機能対応

この記事は適時更新していきます

Simulcast は配信側が複数の画質の映像を送る仕組みです。この仕組みと WebRTC SFU を組み合わせることで視聴者側の帯域やマシンパワーの合わせて好きな画質で見れるということを実現可能になります。

さて、この Simulcast と WebRTC SFU の組み合わせに期待するのは、配信者や視聴者の回線状況やマシンパワーを確認しながら自動で画質を切り替えるというという仕組みだと思います。

もちろんその仕組を実現したいと考えており、試行錯誤しています。

ただ、そのためには2つの課題をクリアする必要があります。

配信者側が複数画質送らなくなる問題

配信者側の帯域が不安定になったりマシンパワーが使えなくなった場合配信側の Simulcast は今まで配信していた複数画質を諦めてしまうことがあります。

もともとは高画質、中画質、低画質という 3 つの画質を配信していたにもかかわらず低画質しか配信しなくなるという問題です。

これは別に変な話ではなく、 WebRTC では不安定な場合は配信側が画質を自動的に下げるという素敵な仕組みがあることから起きる問題です。

ここで問題になるのは今まで高画質と中画質で視聴していたクライアントです。映像がさっぱり送られてこなくなるわけです。

これを解決する仕組みをここ数ヶ月考えていたのですが、クライアント側では一切気付けないことがわかりサーバ側でなんとかするという結論にいたり試行錯誤していました。

サーバ側でなんとかするにも、できるだけ早く確実に気づく必要があります。WebRTC は超低遅延が売りなので。

そして先程無事送らなくなる問題のプロトタイプ版が動作しました。ツイッターでの喜びの声を御覧ください。

ちなみにこの問題はご想像の通り、複数画質をまた送るようになった問題を含んでいます。

複数画質をまた送るようになった問題を解決しました。回線が不安定になり、配信側の利用可能なビットレートが下がったとしても視聴側はもとに戻ります。

これで後は視聴側の帯域推定を実現することで HLS や MPEG-DASH で利用している ABR (Adaptive bitrate streaming) が WebRTC で利用可能になります。

視聴者の帯域推定問題

Simulcast 時の視聴者の回線が不安定かどうかを知る必要があります。これをリアルタイムに判断するという課題があります。

これを実現しないと視聴者側の画質をいつ、どんなタイミングで書き換えればいいのかわかりません。

一応おそらくこうやればいいのでは?というのは見えていますが、もう少し掛かりそうです。

Written by

Erlang/OTP / 時雨堂 / WebRTC / E2EE

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store