//package com.xixun.xixunplayer;
//
//import android.annotation.SuppressLint;
//import android.content.Context;
//import android.view.SurfaceHolder;
//import android.view.SurfaceView;
//
//import androidx.annotation.NonNull;
//import androidx.annotation.OptIn;
//import androidx.media3.common.MediaItem;
//import androidx.media3.common.util.UnstableApi;
//import androidx.media3.exoplayer.ExoPlayer;
//import androidx.media3.exoplayer.SeekParameters;
//
//import tv.danmaku.ijk.media.player.IMediaPlayer;
//import tv.danmaku.ijk.media.player.IjkMediaPlayer;
//
//@SuppressLint("ViewConstructor")
//public class SrcVideoSurface extends SurfaceView implements SurfaceHolder.Callback {
//
//    String path;
//    float vol;
//    int dur;
//    IjkMediaPlayer ijkPlayer;
//    ExoPlayer exoPlayer;
//    long bitRate;
//    boolean isLive;
//
//    public SrcVideoSurface(Context context, String path, float vol, int dur, boolean useHW, boolean isLive) {
//        super(context);
//        this.path = path;
//        this.vol = vol;
//        this.dur = dur;
//        this.isLive = isLive;
//        initIjk(useHW);
//    }
//
//    @OptIn(markerClass = UnstableApi.class)
//    void initExo() {
//        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);
//        exoPlayer.prepare();
//    }
//    void initIjk(boolean useHW) {
//        ijkPlayer = new IjkMediaPlayer();
//        if(useHW) {
//            ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-avc", 1);
//            ijkPlayer.setOption(IjkMediaPlayer.OPT_CATEGORY_PLAYER, "mediacodec-hevc", 1);
//        }
//        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", 8);
//        try {
//            getHolder().addCallback(this);
//            ijkPlayer.setDataSource(path);
//            ijkPlayer.setLooping(true);
//            ijkPlayer.setVolume(vol, vol);
//            ijkPlayer.setOnPreparedListener((IMediaPlayer var1)->{
//                ijkPlayer.setOnPreparedListener(null);
//                bitRate = ijkPlayer.getBitRate();
//                if(bitRate > 12000000) {
//                    getHolder().removeCallback(this);
//                    release();
//                    initExo();
//                } else {
//                    var diff = dur - ijkPlayer.getDuration();
//                    if(diff>0 && diff<=1000) ijkPlayer.setLooping(false);
//                }
//                if(isShown()) start();
//            });
//            ijkPlayer.setOnErrorListener((IMediaPlayer var1, int var2, int var3)->{
//                Util.println("  Video Error: "+var1+" "+var2+" "+var3);
//                return true;
//            });
//            ijkPlayer.prepareAsync();
//        } catch (Throwable e) {
//            Util.makeText(getContext(), Util.toStr(e)).show();
//            Util.printStackTrace(e);
//            ijkPlayer = null;
//        }
//    }
//    @Override
//    public void surfaceCreated(@NonNull SurfaceHolder holder) {
//        Util.println("  surfaceCreated "+(ijkPlayer==null?"ijkPlayer==null":""));
//        if(ijkPlayer!=null) ijkPlayer.setDisplay(holder);
//    }
//    @Override
//    public void surfaceChanged(@NonNull SurfaceHolder holder, int format, int width, int height) {}
//    @Override
//    public void surfaceDestroyed(@NonNull SurfaceHolder holder) {}
//
//    void start() {
//        if(ijkPlayer!=null) {
//            ijkPlayer.seekTo(0);
//            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() {
//        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();
//            if(isLive) ijkPlayer.setVolume(vol, vol);
//        } else if(isLive) ijkPlayer.setVolume(0, 0);
//        else pause();
//    }
//}