diff --git a/doc/classes/VideoStreamPlayer.xml b/doc/classes/VideoStreamPlayer.xml
index 3181be1d49a..cdd7362abab 100644
--- a/doc/classes/VideoStreamPlayer.xml
+++ b/doc/classes/VideoStreamPlayer.xml
@@ -6,7 +6,6 @@
A control used for playback of [VideoStream] resources.
Supported video formats are [url=https://www.theora.org/]Ogg Theora[/url] ([code].ogv[/code], [VideoStreamTheora]) and any format exposed via a GDExtension plugin.
- [b]Note:[/b] Due to a bug, VideoStreamPlayer does not support localization remapping yet.
[b]Warning:[/b] On Web, video playback [i]will[/i] perform poorly due to missing architecture-specific assembly optimizations.
diff --git a/scene/gui/video_stream_player.cpp b/scene/gui/video_stream_player.cpp
index 19a54e01c4c..54fd83f9528 100644
--- a/scene/gui/video_stream_player.cpp
+++ b/scene/gui/video_stream_player.cpp
@@ -224,6 +224,12 @@ bool VideoStreamPlayer::has_expand() const {
void VideoStreamPlayer::set_stream(const Ref &p_stream) {
stop();
+ // Make sure to handle stream changes seamlessly, e.g. when done via
+ // translation remapping.
+ if (stream.is_valid()) {
+ stream->disconnect("changed", callable_mp(this, &VideoStreamPlayer::set_stream));
+ }
+
AudioServer::get_singleton()->lock();
mix_buffer.resize(AudioServer::get_singleton()->thread_get_mix_buffer_size());
stream = p_stream;
@@ -235,6 +241,10 @@ void VideoStreamPlayer::set_stream(const Ref &p_stream) {
}
AudioServer::get_singleton()->unlock();
+ if (stream.is_valid()) {
+ stream->connect("changed", callable_mp(this, &VideoStreamPlayer::set_stream).bind(stream));
+ }
+
if (!playback.is_null()) {
playback->set_paused(paused);
texture = playback->get_texture();
diff --git a/scene/resources/video_stream.cpp b/scene/resources/video_stream.cpp
index dc8545426f5..3b152d11cee 100644
--- a/scene/resources/video_stream.cpp
+++ b/scene/resources/video_stream.cpp
@@ -172,6 +172,7 @@ Ref VideoStream::instantiate_playback() {
void VideoStream::set_file(const String &p_file) {
file = p_file;
+ emit_changed();
}
String VideoStream::get_file() {