package net.reichholf.dreamdroid.video;
import android.content.Context;
import android.net.Uri;
import android.view.SurfaceView;
import org.videolan.libvlc.IVLCVout;
import org.videolan.libvlc.LibVLC;
import org.videolan.libvlc.Media;
import org.videolan.libvlc.MediaPlayer;
import java.util.ArrayList;
/**
* Created by reichi on 16/02/16.
*/
public class VLCPlayer implements VideoPlayer {
static LibVLC sLibVLC = null;
static MediaPlayer sMediaPlayer = null;
public final static int MEDIA_HWACCEL_DISABLED = 0x00;
public final static int MEDIA_HWACCEL_ENABLED = 0x01;
public final static int MEDIA_HWACCEL_FORCE = 0x02;
protected Media mCurrentMedia;
public static void init(Context context) {
ArrayList<String> options = new ArrayList<>();
options.add("--http-reconnect");
sLibVLC = new LibVLC(context, options);
sMediaPlayer = new MediaPlayer(sLibVLC);
}
public void deinit() {
detach();
sLibVLC = null;
sMediaPlayer = null;
}
public static MediaPlayer getMediaPlayer() {
return sMediaPlayer;
}
public void attach(SurfaceView surfaceView, SurfaceView subtitleSurfaceView) {
if (sLibVLC == null || sMediaPlayer == null)
init(surfaceView.getContext());
final IVLCVout vlcVout = getMediaPlayer().getVLCVout();
vlcVout.setVideoView(surfaceView);
vlcVout.setSubtitlesView(subtitleSurfaceView);
vlcVout.attachViews();
}
public void detach() {
stop();
final IVLCVout vlcVout = getMediaPlayer().getVLCVout();
vlcVout.detachViews();
}
public void setWindowSize(int width, int height) {
getMediaPlayer().getVLCVout().setWindowSize(width, height);
}
public void playUri(Uri uri, int flags) {
mCurrentMedia = new Media(sLibVLC, uri);
boolean isHwAccel = (flags & MEDIA_HWACCEL_ENABLED) > 0;
boolean isHwAccelForce = (flags & MEDIA_HWACCEL_FORCE) > 0;
mCurrentMedia.setHWDecoderEnabled(isHwAccel || isHwAccelForce, isHwAccelForce);
play();
}
public void play() {
if (mCurrentMedia == null)
return;
getMediaPlayer().setMedia(mCurrentMedia);
getMediaPlayer().play();
}
@Override
public long getLength() {
return getMediaPlayer().getLength();
}
@Override
public float getPosition() {
return getMediaPlayer().getPosition();
}
@Override
public void setPosition(float position) {
getMediaPlayer().setPosition(position);
}
@Override
public boolean isSeekable() {
return getMediaPlayer().isSeekable();
}
public void stop() {
getMediaPlayer().stop();
}
public int getAudioTracksCount() {
return getMediaPlayer().getAudioTracksCount();
}
public int getSubtitleTracksCount() {
return getMediaPlayer().getSpuTracksCount();
}
}