|
package com.electric.chargingpile.util;
import android.content.Context;
import android.view.View;
import com.electric.chargingpile.view.IjkPlayerView;
import com.luck.picture.lib.config.SelectorConfig;
import com.luck.picture.lib.config.SelectorProviders;
import com.luck.picture.lib.engine.VideoPlayerEngine;
import com.luck.picture.lib.entity.LocalMedia;
import com.luck.picture.lib.interfaces.OnPlayerListener;
import java.util.concurrent.CopyOnWriteArrayList;
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
public class IjkPlayerEngine implements VideoPlayerEngine<IjkPlayerView> {
/**
* 播放状态监听器集
*/
private final CopyOnWriteArrayList<OnPlayerListener> listeners = new CopyOnWriteArrayList<>();
@Override
public View onCreateVideoPlayer(Context context) {
return new IjkPlayerView(context);
}
@Override
public void onStarPlayer(IjkPlayerView player, LocalMedia media) {
IjkMediaPlayer mediaPlayer = player.getMediaPlayer();
SelectorConfig config = SelectorProviders.getInstance().getSelectorConfig();
mediaPlayer.setLooping(config.isLoopAutoPlay);
player.start(media.getAvailablePath());
}
@Override
public void onResume(IjkPlayerView player) {
IjkMediaPlayer mediaPlayer = player.getMediaPlayer();
if (mediaPlayer != null) {
mediaPlayer.start();
}
}
@Override
public void onPause(IjkPlayerView player) {
IjkMediaPlayer mediaPlayer = player.getMediaPlayer();
if (mediaPlayer != null) {
mediaPlayer.pause();
}
}
@Override
public boolean isPlaying(IjkPlayerView player) {
IjkMediaPlayer mediaPlayer = player.getMediaPlayer();
return mediaPlayer != null && mediaPlayer.isPlaying();
}
@Override
public void addPlayListener(OnPlayerListener playerListener) {
if (!listeners.contains(playerListener)) {
listeners.add(playerListener);
}
}
@Override
public void removePlayListener(OnPlayerListener playerListener) {
if (playerListener != null) {
listeners.remove(playerListener);
} else {
listeners.clear();
}
}
@Override
public void onPlayerAttachedToWindow(IjkPlayerView player) {
IjkMediaPlayer mediaPlayer = player.initMediaPlayer();
mediaPlayer.setOnPreparedListener(it -> {
it.start();
for (int i = 0; i < listeners.size(); i++) {
OnPlayerListener playerListener = listeners.get(i);
playerListener.onPlayerReady();
}
});
mediaPlayer.setOnCompletionListener(it -> {
it.reset();
for (int i = 0; i < listeners.size(); i++) {
OnPlayerListener playerListener = listeners.get(i);
playerListener.onPlayerEnd();
}
player.clearCanvas();
});
mediaPlayer.setOnErrorListener((it, what, extra) -> {
for (int i = 0; i < listeners.size(); i++) {
OnPlayerListener playerListener = listeners.get(i);
playerListener.onPlayerError();
}
return false;
});
}
@Override
public void onPlayerDetachedFromWindow(IjkPlayerView player) {
player.release();
}
@Override
public void destroy(IjkPlayerView player) {
player.release();
}
}
|