OBS Studioで配信するとキーフレーム間隔が8.3秒になってしまう現象
こんばんは。いつもお世話になっています。スティッカム開発チームです。
キーフレーム間隔を2秒に設定しているにもかかわらず、実際に配信してみると8.3秒となってしまう方をよくお見かけします。
どうしてキーフレーム間隔が8.3秒になってしまうのか?
結果から言いますと、OBS Studioにおいてはデフォルト設定から キーフレーム間隔を「0(=自動)」にした場合には、実際には8.3秒で配信されてしまいます。
「2秒に設定したはず!」という方は、
- 「出力モード」を「詳細」にして2秒に設定したあとに再度「基本」にしてOKを押してしまった。
- 「出力モード」を「詳細」にして2秒を入力したあとにOKを押さなかった。
というケースがほとんどとなっています。
キーフレーム間隔を2秒にしておかないとどのようなことが起こるか?
技術的なお話になるのですが、現在スティッカムではHTML5版プレーヤーでの視聴は、HLSというストリーミング形式を採用しています。
HLSの動画再生では、m3u8形式のプレイリストとtsファイルという実際の動画の分割化(パケット化)ファイルをダウンロードして、ブラウザ上で再生するという仕組みとなっています。
スティッカムではこのtsファイルを遅延と安定性のバランスを考慮して2秒間隔で作成しています。
そのためには、ユーザーの皆様が配信する映像のキーフレーム間隔が2秒間隔でないとそのパケット化を効率よく行うことができません。
したがってユーザーの皆様が視聴する際にバッファリングが頻繁に発生し、映像が遅延したり止まったりするおそれがあります。
スティッカム側でキーフレームを2秒間隔で再作成することも可能ですが、そうするとさらに映像が遅延することになりますので、現在はそのようなことは行っていません。
なぜOBS Studioではキーフレーム間隔「自動」が8.3秒という中途半端な値なのか
ここからはなぜOBS Studioのキーフレーム間隔「自動」が8.3秒という中途半端な数値になるのかについて説明します。
キーフレーム間隔は、内部的には秒数ではなく ”何フレーム毎にキーフレームを作成するか” という設定方法になっています。
つまり、キーフレーム間隔(秒)は次の式で求まります。
キーフレーム間隔(秒)= キーフレーム間隔(フレーム数)÷ FPS(秒間フレーム数)
OBS Studioにおいては、キーフレーム間隔「自動」にすると、 250フレーム毎にキーフレーム となっています。したがって30fpsの映像を配信する場合
キーフレーム間隔(秒)= 250 / 30fps = 8.333...(秒)
ということになります。
キーフレーム間隔を0(=自動)にした場合のキーフレーム間隔(フレーム数)は、250固定となっているためFPS(秒間フレーム数)の値を変更することで、キーフレーム間隔(秒)の値が変化することがおわかりいただけましたでしょうか。