Search code examples
androidvlclibvlc

VLC library for android app - black screen


I tried several implementations but completely unable to get this to work, it's always just a black screen. It seems the library is pretty old and don't see it used a lot on forums, especially recently... does it just not work anymore or something?

Here is my activity:

import android.os.Bundle;
import android.util.Log;

import com.creativelabs.iptvplayer.R;

import org.videolan.libvlc.LibVLC;
import org.videolan.libvlc.Media;
import org.videolan.libvlc.MediaPlayer;
import org.videolan.libvlc.util.VLCVideoLayout;

import java.util.ArrayList;

public class TestActivity extends FragmentActivity {
    private static final boolean USE_TEXTURE_VIEW = false;
    private static final boolean ENABLE_SUBTITLES = true;
    
    private static final String IPTV_URL = "https://www.learningcontainer.com/wp-content/uploads/2020/05/sample-mp4-file.mp4";
    private VLCVideoLayout mVideoLayout = null;

    private LibVLC mLibVLC = null;
    private MediaPlayer mMediaPlayer = null;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        setContentView(R.layout.test_act);

        final ArrayList<String> options = new ArrayList<>();
        options.add("--no-drop-late-frames");
        options.add("--no-skip-frames");
        options.add("--avcodec-hw=any");  // Enable hardware acceleration
        options.add("--network-caching=1000"); // Improve streaming performance
        options.add("-vvv"); // Enable verbose logging
        mLibVLC = new LibVLC(this, options);
        mMediaPlayer = new MediaPlayer(mLibVLC);

        mVideoLayout = findViewById(R.id.video_layout);

    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        mMediaPlayer.release();
        mLibVLC.release();
    }

    @Override
    protected void onStart() {
        super.onStart();

        mMediaPlayer.attachViews(mVideoLayout, null, ENABLE_SUBTITLES, USE_TEXTURE_VIEW);
        final Media media = new Media(mLibVLC, IPTV_URL);
        media.setHWDecoderEnabled(true, false);  // Enable hardware decoding (optional)
        media.addOption(":network-caching=3000");
        mMediaPlayer.setMedia(media);
        media.release();
        mMediaPlayer.play();
    }

    @Override
    protected void onStop() {
        super.onStop();

        mMediaPlayer.stop();
        mMediaPlayer.detachViews();
    }
}

What am I missing please?


Solution

  • I found that VLC was treating my URL as a file, I just had to do this instead:

    final Media media = new Media(mLibVLC, Uri.parse(IPTV_URL));