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.