Kmp External Codec Libvlcjni.so Direct
On Android, the libvlcjni.so ‑backed player will output audio correctly, whereas ExoPlayer would fail with No decoder for: audio/ac3 . libvlcjni.so provides KMP developers with a powerful, unified way to handle external codecs that are absent from platform decoders. By wrapping VLC’s engine in a KMP expect/actual pattern, you can achieve cross-platform playback with near‑identical behavior and extensive format support.
// shared logic fun playExternalCodecFile(player: PlatformMediaPlayer) player.setDataSource("content://com.example/external_codec_sample.mkv") player.play()
implementation("org.videolan.android:libvlc-all:3.5.0") This includes libvlcjni.so (armeabi-v7a, arm64-v8a, x86, x86_64) automatically. kmp external codec libvlcjni.so
The engine, via libvlcjni.so – its Android JNI bridge – provides a solution by bundling ffmpeg with hundreds of built-in external codecs, decoupled from the OS.
Step 1: Add dependency in build.gradle.kts (Android target): On Android, the libvlcjni
actual fun play() mediaPlayer.play() actual fun stop() mediaPlayer.stop() actual fun isPlaying(): Boolean = mediaPlayer.isPlaying
Enable verbose logging:
// androidMain/kotlin/PlatformMediaPlayer.kt import org.videolan.libvlc.LibVLC import org.videolan.libvlc.MediaPlayer import org.videolan.libvlc.Media actual class PlatformMediaPlayer private lateinit var libVLC: LibVLC private lateinit var mediaPlayer: MediaPlayer