Welcome to @interactive-video-labs/react — a lightweight React wrapper around the @interactive-video-labs/core engine for cue-driven interactive video experiences.
This wrapper makes it easy to embed interactive video players in React apps using familiar props and event handlers, while keeping close to the core API.
@interactive-video-labs/react is a thin React component that provides a convenient way to integrate interactive video experiences into your React applications. It leverages the powerful @interactive-video-labs/core engine, allowing you to easily manage video playback, cue points, and analytics within a familiar React paradigm.
- Easy Integration: Seamlessly embed interactive videos into your React components.
- Cue Point Management: Load and manage cue points for dynamic video interactions.
- Analytics Events: Receive detailed analytics events from the video player to track user engagement.
- Localization: Support for player localization through translations.
- Direct Core API Access: Provides a React-friendly interface while maintaining close alignment with the core IVLabsPlayer API.
You can install the package using npm or pnpm:
pnpm add @interactive-video-labs/react @interactive-video-labs/core react react-dom
# or
npm install @interactive-video-labs/react @interactive-video-labs/core react react-domTo use the InteractiveVideo component, simply import it and pass the necessary props. The videoUrl prop is mandatory.
import React from 'react';
import { InteractiveVideo } from '@interactive-video-labs/react';
const MyVideoPlayer = () => {
return (
<div style={{ width: '100%', maxWidth: '800px', margin: '0 auto' }}>
<InteractiveVideo
videoUrl="https://interactive-video-labs.github.io/interactive-video-demos/videos/big_buck_bunny.mp4"
autoplay={true}
loop={false}
controls={true}
onAnalyticsEvent={(event, payload) => {
console.log('Analytics Event:', event, payload);
// Handle analytics events, e.g., send to a tracking service
}}
cues={[
{ time: 10, id: 'intro-cue', type: 'pause' },
{ time: 25, id: 'question-cue', type: 'custom', data: { question: 'What is your favorite color?' } },
]}
translations={{
en: {
play: 'Play Video',
pause: 'Pause Video',
},
}}
/>
</div>
);
};
export default MyVideoPlayer;The InteractiveVideo component accepts the following props:
videoUrl(string, required): The URL of the video to be played.onAnalyticsEvent(function, optional): A callback function that is triggered when an analytics event occurs. It receives theeventname and an optionalpayload.event:PLAYER_LOADED,VIDEO_STARTED,VIDEO_PAUSED,VIDEO_ENDED,CUE_TRIGGERED,INTERACTION_COMPLETED,ERROR.payload: An object containing event-specific data.
cues(CuePoint[], optional): An array of cue points to load into the player. EachCuePointobject should conform to the@interactive-video-labs/coreCuePointinterface.translations(Translations, optional): An object containing translations for player localization. This should conform to the@interactive-video-labs/coreTranslationsinterface....restOptions(PlayerConfig, optional): Any other validPlayerConfigoptions from@interactive-video-labs/core(excludingvideoUrl,cues, andtranslations). This allows for direct pass-through of core player configurations likeautoplay,loop,controls,locale, etc.
To set up the development environment:
- Clone the repository.
- Install dependencies:
pnpm install
- Build the project:
pnpm build
- Run tests:
pnpm test - Run examples:
pnpm serve-examples
We welcome contributions! Please see our CONTRIBUTING.md for more details.
This project is licensed under the MIT License. See the LICENSE file for details.