2023-11-09 08:37:59 +08:00
|
|
|
package com.xixun.xixunplayer;
|
|
|
|
|
|
|
|
import android.content.Context;
|
2023-12-01 16:17:06 +08:00
|
|
|
import android.view.SurfaceHolder;
|
|
|
|
import android.view.SurfaceView;
|
2023-11-09 08:37:59 +08:00
|
|
|
|
2023-12-01 16:17:06 +08:00
|
|
|
import tv.danmaku.ijk.media.player.IjkMediaPlayer;
|
2023-11-09 08:37:59 +08:00
|
|
|
|
2023-12-01 16:17:06 +08:00
|
|
|
public class EleVideo extends SurfaceView {
|
2023-11-09 08:37:59 +08:00
|
|
|
|
2023-12-01 16:17:06 +08:00
|
|
|
IjkMediaPlayer ijkPlayer;
|
|
|
|
|
|
|
|
public EleVideo(Context context, String path, float vol) {
|
2023-11-09 08:37:59 +08:00
|
|
|
super(context);
|
2023-12-01 16:17:06 +08:00
|
|
|
initIjk(path, vol);
|
2023-11-09 08:37:59 +08:00
|
|
|
}
|
|
|
|
|
2023-12-01 16:17:06 +08:00
|
|
|
// @OptIn(markerClass = UnstableApi.class)
|
|
|
|
// void initExo(String path, float vol) {
|
|
|
|
// exoPlayer = new ExoPlayer.Builder(getContext()).build();
|
|
|
|
// exoPlayer.setMediaItem(MediaItem.fromUri(path));
|
|
|
|
// exoPlayer.setRepeatMode(ExoPlayer.REPEAT_MODE_ONE);
|
|
|
|
// exoPlayer.setSeekParameters(SeekParameters.CLOSEST_SYNC);
|
|
|
|
// exoPlayer.setVolume(vol);
|
|
|
|
// exoPlayer.setVideoSurfaceView(this);
|
|
|
|
// }
|
|
|
|
void initIjk(String path, float vol) {
|
|
|
|
ijkPlayer = new IjkMediaPlayer();
|
|
|
|
ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "start-on-prepared", 0);
|
|
|
|
ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_FORMAT, "analyzeduration", 1);
|
|
|
|
ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_CODEC, "skip_loop_filter", 48);
|
|
|
|
try {
|
|
|
|
getHolder().addCallback(new SurfaceHolder.Callback() {
|
|
|
|
@Override
|
|
|
|
public void surfaceCreated(SurfaceHolder holder) {
|
|
|
|
ijkPlayer.setDisplay(holder);
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
|
|
|
|
System.out.println("surfaceChanged");
|
|
|
|
}
|
|
|
|
@Override
|
|
|
|
public void surfaceDestroyed(SurfaceHolder holder) {
|
|
|
|
System.out.println("surfaceDestroyed");
|
|
|
|
}
|
|
|
|
});
|
|
|
|
ijkPlayer.setDataSource(path);
|
|
|
|
ijkPlayer.setLooping(true);
|
|
|
|
ijkPlayer.setVolume(vol, vol);
|
|
|
|
ijkPlayer.prepareAsync();
|
|
|
|
} catch (Throwable e) {
|
|
|
|
Util.makeText(getContext(), e.getMessage()).show();
|
|
|
|
e.printStackTrace();
|
|
|
|
ijkPlayer = null;
|
|
|
|
}
|
2023-11-09 08:37:59 +08:00
|
|
|
}
|
|
|
|
|
2023-12-01 16:17:06 +08:00
|
|
|
void start() {
|
|
|
|
if(ijkPlayer!=null) ijkPlayer.start();
|
|
|
|
// else if(exoPlayer!=null) {
|
|
|
|
// if(exoPlayer.getPlaybackState()==ExoPlayer.STATE_IDLE) exoPlayer.prepare();
|
|
|
|
// exoPlayer.play();
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
void pause() {
|
|
|
|
if(ijkPlayer!=null) {
|
|
|
|
ijkPlayer.pause();
|
|
|
|
ijkPlayer.seekTo(0);
|
2023-11-10 09:47:38 +08:00
|
|
|
}
|
2023-12-01 16:17:06 +08:00
|
|
|
// if(exoPlayer!=null && exoPlayer.isPlaying()) {
|
|
|
|
// exoPlayer.pause();
|
|
|
|
// exoPlayer.seekToDefaultPosition();
|
|
|
|
// }
|
2023-11-10 09:47:38 +08:00
|
|
|
}
|
2023-12-01 16:17:06 +08:00
|
|
|
void release() {
|
|
|
|
if(ijkPlayer!=null) {
|
|
|
|
ijkPlayer.release();
|
|
|
|
ijkPlayer = null;
|
2023-11-09 08:37:59 +08:00
|
|
|
}
|
2023-12-01 16:17:06 +08:00
|
|
|
// if(exoPlayer!=null) {
|
|
|
|
// exoPlayer.release();
|
|
|
|
// exoPlayer = null;
|
|
|
|
// }
|
|
|
|
}
|
|
|
|
|
|
|
|
String getState() {
|
|
|
|
// else if(exoPlayer!=null) {
|
|
|
|
// var state = exoPlayer.getPlaybackState();
|
|
|
|
// if(state==ExoPlayer.STATE_IDLE) return "STATE_IDLE";
|
|
|
|
// if(state==ExoPlayer.STATE_BUFFERING) return "STATE_BUFFERING";
|
|
|
|
// if(state==ExoPlayer.STATE_READY) return "STATE_READY";
|
|
|
|
// if(state==ExoPlayer.STATE_ENDED) return "STATE_ENDED";
|
|
|
|
// }
|
|
|
|
return "null";
|
2023-11-09 08:37:59 +08:00
|
|
|
}
|
|
|
|
|
2023-12-01 16:17:06 +08:00
|
|
|
@Override
|
|
|
|
public void onVisibilityAggregated(boolean isVisible) {
|
|
|
|
super.onVisibilityAggregated(isVisible);
|
|
|
|
if(isVisible) start();
|
|
|
|
else pause();
|
2023-11-09 08:37:59 +08:00
|
|
|
}
|
|
|
|
}
|