Difficulty getting smooth Bink video playback over load screen

We have a setup where we are using seamless map transfer for moving from level to level in gameplay, during which we are displaying a UMG UI that has a full-screen Bink video. The video playback is intended to play start to finish, and it includes multiple interactive UI elements like a hold to skip prompt and a pause menu. The video is intended to be much longer than the actual load, so it should hide the load in the background unless the player skips immediately, in which case they will see a generic load screen.

During video playback we’re getting intermittent stuttering/hitching. The hope was that by using seamless map transfer we’d be able to get a smooth, interactive video playback, but it seems that by playing the video in a UMG widget that’s not the case. Do you have any advice for how we might achieve a smooth playback of the Bink video? Would using the MoviePlayer module solve our problems, guaranteeing smooth playback and also still allowing us to have the interactive UI elements?

[Attachment Removed]

Hey Daniel, I’d like to understand your current implementation before making further suggestions.

Are you (a) simply constructing and adding a UMG widget to the viewport, and then triggering a seamless map travel?

Or are you (b) using the MoviePlayer approach, as demonstrated in this tutorial series, and configuring a UMG widget?

If you’re currently using approach (a), I suggest trying out (b) because UMG widgets added to the screen in that way are ticked on a background thread, so their rendering is independent from the heavy work happening on the GameThread during any map travel (seamless or not).

[Attachment Removed]

Right now we’re following approach A. Does using the MoviePlayer approach allow for interactive UMG elements, or would it be required to implement anything interactive in Slate?

[Attachment Removed]

Hi,

We generally recommend not using UMG (or anything UObject-based) in the MoviePlayer load screens, as they tick Slate outside of the game thread under the assumption that we can do things that aren’t thread-safe while the game thread is blocked. A pure Slate load screen would be safe, if you want to go with that approach.

Before you do that, I’d recommend enabling the Electra Media Player to see if that resolves the stuttering on your current configuration. Electra moves a lot of the decoding work onto worker threads, so while your UMG elements will still be affected by hitching, the media playback should be a bit smoother.

Stuttering during a seamless travel is usually caused by large chunks being loaded in (i.e. an asset that takes a long time to load and can’t be amortized across multiple frames), so you could also grab an Insights trace to see if there are any obvious offenders that you could optimize.

Best,

Cody

[Attachment Removed]