package com.xixun.xixunplayer; import android.content.Context; import android.view.SurfaceHolder; import android.view.SurfaceView; import tv.danmaku.ijk.media.player.IjkMediaPlayer; public class EleVideo extends SurfaceView { IjkMediaPlayer ijkPlayer; public EleVideo(Context context, String path, float vol) { super(context); initIjk(path, vol); } // @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; } } 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); } // if(exoPlayer!=null && exoPlayer.isPlaying()) { // exoPlayer.pause(); // exoPlayer.seekToDefaultPosition(); // } } void release() { if(ijkPlayer!=null) { ijkPlayer.release(); ijkPlayer = null; } // 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"; } @Override public void onVisibilityAggregated(boolean isVisible) { super.onVisibilityAggregated(isVisible); if(isVisible) start(); else pause(); } }