Skip to main content

Migration

Breaking changes and upgrade steps for each release.

2.0.0

Adds React Native New Architecture (Fabric & TurboModules) support while keeping the old architecture working. Most of the change is internal. A few JS APIs changed — listed below with the reason for each.

playWhenReady and playbackSpeed props → methods

What changed: both props are gone; call play(), pause() and setPlaybackSpeed() on the component ref.

Why: a prop describes state, but play/pause/speed are one-off actions. On Fabric a prop is re-applied on every render, so a playWhenReady/playbackSpeed prop kept re-triggering playback. Imperative methods map cleanly to native commands and fire only when you call them.

// before
<VdoPlayerView embedInfo={embedInfo} playWhenReady={isPlaying} playbackSpeed={1.5} />

// after
<VdoPlayerView ref={(r) => (this.player = r)} embedInfo={embedInfo} />

this.player.play(); // was playWhenReady={true}
this.player.pause(); // was playWhenReady={false}
this.player.setPlaybackSpeed(1.5); // was playbackSpeed={1.5}

New autoPlay prop

Why: playWhenReady also decided whether playback started automatically on first load. Since it's gone, that initial-load behaviour is now the autoPlay prop (default true).

<VdoPlayerView embedInfo={embedInfo} autoPlay={false} /> // loads paused; call play() when ready

getPlaybackProperties() removed → getPlaybackPropertiesV2()

What changed: the deprecated getPlaybackProperties() and its onPlaybackProperties callback prop are removed.

Why: it was already deprecated and event-based. getPlaybackPropertiesV2() is the direct replacement and works the same on both platforms.

const {totalPlayed, totalCovered} = await this.player.getPlaybackPropertiesV2();

enterFullscreen() / exitFullscreen() removed → V2

What changed: the deprecated enterFullscreen() / exitFullscreen() are removed; use enterFullscreenV2() / exitFullscreenV2().

Why: the V1 methods were long deprecated. The V2 methods are the supported ones for the player with native controls.

this.player.enterFullscreenV2();
this.player.exitFullscreenV2();

Everything else is unchanged

All other controls were already methods and behave identically: seek(), setVideoQuality(), setCaptionLanguage(), disableCaptions(), enableAdaptiveVideo(). embedInfo, style, resizeMode, and all on* callbacks are unchanged too — internally they now use native commands, but their JS usage is the same.

After upgrading, rebuild natively

  • iOS: cd ios && rm -rf Pods Podfile.lock build && pod install, then clean build.
  • Android: cd android && ./gradlew clean, then rebuild.