Skip to content

Why Movi-Player?

See how Movi-Player compares to other popular video players.

Feature Comparison

FeatureMovi-Playervideo.jshls.jsPlyr
WebCodecs
HDR Support
MKV / MPEG-TSTS only
Canvas Renderer
Modular
FFmpeg WASM
No Server Processing
HLS/DASH
Custom UI

Bundle Size

PlayerFull BundleMinimal
Movi-Player410KB45KB
video.js500KB+N/A
hls.js300KB300KB
Plyr100KBN/A

Key Advantages

1. No Server-Side Processing

Other players require server-side transcoding for:

  • Format conversion (MKV → MP4)
  • Codec transcoding (HEVC → H.264)
  • HLS/DASH packaging

Movi-Player processes everything in the browser.

typescript
// Direct MKV playback - no server conversion needed!
<movi-player src="video.mkv" controls></movi-player>

2. HDR Content Support

Movi-Player is the only web player with full HDR support:

typescript
const videoTrack = player.getVideoTracks()[0];

if (videoTrack.isHDR) {
  console.log("HDR Format:", videoTrack.colorTransfer);
  // "smpte2084" (HDR10) or "arib-std-b67" (HLG)
}

3. Multi-Track Without Processing

Switch audio/subtitle tracks without server-side extraction:

typescript
// Get all audio tracks
const audioTracks = player.getAudioTracks();
// [{ id: 0, language: 'eng' }, { id: 1, language: 'jpn' }]

// Switch to Japanese audio
player.selectAudioTrack(1);

4. Local File Privacy

Play files directly from user's device:

typescript
import { FileSource } from "movi-player/player";

// File never leaves the browser
const source = new FileSource(userSelectedFile);
player.load({ file: userSelectedFile });

Privacy Benefit

User files are never uploaded to any server. All processing happens locally.

Migration from Other Players

From video.js

diff
- import videojs from 'video.js';
- const player = videojs('my-video');
+ import 'movi-player';
+ // Just use the element directly!
html
<!-- Before: video.js -->
<video id="my-video" class="video-js">
  <source src="video.mp4" type="video/mp4" />
</video>

<!-- After: Movi-Player -->
<movi-player src="video.mp4" controls></movi-player>

From hls.js

diff
- import Hls from 'hls.js';
- const hls = new Hls();
- hls.loadSource('stream.m3u8');
- hls.attachMedia(video);
+ import 'movi-player';
html
<!-- HLS just works out of the box -->
<movi-player src="stream.m3u8" controls></movi-player>

Released under the Apache-2.0 License.