Play Video File using LibVLC on Android

Play Video File using LibVLC on Android

VLC engine on Android application can be embedded using LibVLC library. This tutorial provides example how to play a video file using LibVLC on Android application.

Firstly, add the LibVLC library as dependency in the module's build.gradle file.

app/build.gradle

dependencies { // Other dependencies // ... implementation 'org.videolan.android:libvlc-all:3.4.4' }

To display video, we should add a VLCVideoLayout in the layout XML file. Also add the button for opening a file browser.

app/src/main/res/layout/activity_main.xml

<?xml version="1.0" encoding="utf-8"?> <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" tools:context=".MainActivity"> <Button android:id="@+id/openButton" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_centerHorizontal="true" android:text="Open" /> <org.videolan.libvlc.util.VLCVideoLayout android:id="@+id/videoLayout" android:layout_width="match_parent" android:layout_height="match_parent" /> </RelativeLayout>

Make sure you have a video file in your mobile device. For example, you can download the following video for testing:

https://docs.evostream.com/sample_content/assets/bun33s.mp4

We attached the click listener to open a file browser when the button is clicked. When the user selected a video file, the playVideo method is called. It opens a file with the read mode. After that, an instance of the Media class is created and video begin to play.

When the activity is stopped, the media player is stopped too and the video layout is detached from the player. When the activity is destroyed, resources are released.

Java
Kotlin

app/src/main/java/com/example/app/MainActivity.java

package com.example.app; import android.net.Uri; import android.os.Bundle; import androidx.activity.result.ActivityResultLauncher; import androidx.activity.result.contract.ActivityResultContracts.GetContent; import androidx.appcompat.app.AppCompatActivity; import org.videolan.libvlc.LibVLC; import org.videolan.libvlc.Media; import org.videolan.libvlc.MediaPlayer; import org.videolan.libvlc.util.VLCVideoLayout; import java.io.FileDescriptor; import java.io.FileNotFoundException; public class MainActivity extends AppCompatActivity { private LibVLC libVlc; private MediaPlayer mediaPlayer; private VLCVideoLayout videoLayout; ActivityResultLauncher<String> resultLauncher = registerForActivityResult( new GetContent(), this::playVideo ); @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); libVlc = new LibVLC(this); mediaPlayer = new MediaPlayer(libVlc); videoLayout = findViewById(R.id.videoLayout); findViewById(R.id.openButton).setOnClickListener( v -> resultLauncher.launch("video/*") ); } @Override protected void onStop() { super.onStop(); mediaPlayer.stop(); mediaPlayer.detachViews(); } @Override protected void onDestroy() { super.onDestroy(); mediaPlayer.release(); libVlc.release(); } private void playVideo(Uri uri) { if (uri == null) { return; } try { FileDescriptor fd = getContentResolver() .openFileDescriptor(uri, "r") .getFileDescriptor(); mediaPlayer.attachViews(videoLayout, null, false, false); Media media = new Media(libVlc, fd); media.setHWDecoderEnabled(true, false); mediaPlayer.setMedia(media); media.release(); mediaPlayer.play(); } catch (FileNotFoundException e) { e.printStackTrace(); } } }

The 2 Comments Found

Leave a Comment

Cancel reply

Your email address will not be published.