SltVideoActivity.java 9.91 KB
package com.cnlive.demo.video;

import android.app.Activity;
import android.os.Bundle;
import android.os.Handler;
import android.os.Message;
import android.view.View;
import android.widget.Button;
import android.widget.SeekBar;
import android.widget.TextView;

import com.cnlive.libs.video.video.SltVideoView;
import com.cnlive.libs.video.video.base.IMediaPlayer;
import com.cnlive.libs.video.video.base.ISltDataSource;
import com.cnlive.libs.video.video.base.ISltVideoView;

import java.text.DecimalFormat;
import java.text.NumberFormat;
import java.util.Locale;

/**
 * Created by gujun on 2017/3/1.
 */

public class SltVideoActivity extends Activity implements View.OnClickListener, ISltVideoView.OnSltVideoEventListener {
    public static final int UPDATE_SEEKBAR = 0;

    private SltVideoView videoView;
    private Button playBtn;
    private SeekBar mPlayerSeekbar;
    private TextView mPlayerPosition;
    private View controllerLayout;

    //视频进度
    private int mVideoProgress = 0;

    //记录当前视频播放状态
    private boolean isPlay = false;

    private Handler mHandler = new Handler() {
        @Override
        public void handleMessage(Message msg) {
            super.handleMessage(msg);
            switch (msg.what) {
                case UPDATE_SEEKBAR:
                    setVideoProgress(0);
                    break;
            }

        }
    };

    private SeekBar.OnSeekBarChangeListener mSeekBarListener = new SeekBar.OnSeekBarChangeListener() {
        @Override
        public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) {
            if (fromUser) {
                mVideoProgress = progress;
            }
        }

        @Override
        public void onStartTrackingTouch(SeekBar seekBar) {

        }

        @Override
        public void onStopTrackingTouch(SeekBar seekBar) {
            videoView.seekTo(mVideoProgress);
            setVideoProgress(mVideoProgress);
        }
    };

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_slt_video);

        initView();
    }

    private IMediaPlayer.OnBufferingUpdateListener mOnBufferingUpdateListener = new IMediaPlayer.OnBufferingUpdateListener() {

        @Override
        public void onBufferingUpdate(IMediaPlayer iMediaPlayer, int percent) {
            long duration = iMediaPlayer.getDuration();
            long progress = duration * percent / 100;
            mPlayerSeekbar.setSecondaryProgress((int) progress);
        }
    };

    private IMediaPlayer.OnPreparedListener mOnPrepareListener = new IMediaPlayer.OnPreparedListener() {
        @Override
        public void onPrepared(IMediaPlayer iMediaPlayer) {
            setVideoProgress(0);
            setPlayState(true);
            isPlay = true;

        }
    };

    private IMediaPlayer.OnCompletionListener mOnCompletionListener = new IMediaPlayer.OnCompletionListener() {
        @Override
        public void onCompletion(IMediaPlayer iMediaPlayer) {
            isPlay = false;
            if (playBtn != null) playBtn.setText("开始");
        }
    };

    private IMediaPlayer.OnInfoListener mOnInfoListener = new IMediaPlayer.OnInfoListener() {
        @Override
        public boolean onInfo(IMediaPlayer iMediaPlayer, int what, int extra) {

            return false;
        }
    };

    private IMediaPlayer.OnErrorListener mOnErrorListener = new IMediaPlayer.OnErrorListener() {
        @Override
        public boolean onError(IMediaPlayer mp, int what, int extra) {

            return false;
        }
    };

    private IMediaPlayer.OnSeekCompleteListener mOnSeekCompleteListener = new IMediaPlayer.OnSeekCompleteListener() {
        @Override
        public void onSeekComplete(IMediaPlayer iMediaPlayer) {

        }
    };

    private IMediaPlayer.OnVideoSizeChangedListener mOnVideoSizeChangedListener = new IMediaPlayer.OnVideoSizeChangedListener() {
        @Override
        public void onVideoSizeChanged(IMediaPlayer mp, int width, int height, int sarNum, int sarDen) {

        }
    };

    private IMediaPlayer.OnPlayStateListener mOnPlayStateListener = new IMediaPlayer.OnPlayStateListener() {
        @Override
        public void onPlayState(boolean isPlay) {
            if (isPlay) playBtn.setText("暂停");
            else playBtn.setText("开始");
        }
    };

    @Override
    protected void onPause() {
        super.onPause();
        if (videoView != null && videoView.isPlaying()) {
            setPlayState(false);
        }
    }

    @Override
    protected void onResume() {
        super.onResume();
        if (videoView != null && !videoView.isPlaying() && isPlay) {
            setPlayState(true);
        }
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        videoView.release();
    }

    private void initView() {
        controllerLayout = findViewById(R.id.controllerLayout);
        mPlayerPosition = (TextView) findViewById(R.id.mPlayerPosition);

        mPlayerSeekbar = (SeekBar) findViewById(R.id.player_seekbar);
        mPlayerSeekbar.setOnSeekBarChangeListener(mSeekBarListener);
        mPlayerSeekbar.setEnabled(true);

        playBtn = (Button) findViewById(R.id.playerPlayPause);
        playBtn.setOnClickListener(this);

        videoView = (SltVideoView) findViewById(R.id.videoview);
        videoView.setOnBufferingUpdateListener(mOnBufferingUpdateListener);
        videoView.setOnCompletionListener(mOnCompletionListener);
        videoView.setOnPreparedListener(mOnPrepareListener);
        videoView.setOnInfoListener(mOnInfoListener);
        videoView.setOnErrorListener(mOnErrorListener);
        videoView.setOnSeekCompleteListener(mOnSeekCompleteListener);
        videoView.setOnVideoSizeChangedListener(mOnVideoSizeChangedListener);
        videoView.setOnPlayStateListener(mOnPlayStateListener);

        videoView.setVideoScalingMode(IMediaPlayer.VIDEO_SCALING_MODE_SCALE_TO_FIT_WITH_CROPPING);
        videoView.setKeepScreenOn(true);

        startPlay();
    }

    private void setPlayState(boolean isPlay) {
        if (isPlay) videoView.start();
        else videoView.pause();
    }

    private void startPlay() {
        //设置是否启用视频的广告服务
        videoView.setVcaServiceEnable(true);
        //设置广告商品详情展示样式三种(默认为1):
        //UI_MODE_1    UI_MODE_2    UI_MODE_3
        videoView.setUIModel(SltVideoView.UI_MODEL_1);
        //设置广告视频是否是全屏模式
        videoView.setFullscreen(false);
        //设置广告视频的监听
        videoView.setOnSltVideoEventListener(this);
        //设置广告视频的id
        videoView.setDataSource(new ISltDataSource() {
            @Override
            public int getDataSourceId() {
                return 321;
            }
        });
    }

    @Override
    public void onClick(View v) {
        switch (v.getId()) {
            case R.id.playerPlayPause:
                if (videoView != null) {
                    isPlay = !isPlay;
                    setPlayState(isPlay);
                }
                break;
        }
    }

    public int setVideoProgress(int currentProgress) {

        if (videoView == null)
            return -1;

        long time = currentProgress > 0 ? currentProgress : videoView.getCurrentPosition();
        long length = videoView.getDuration();

        // Update all view elements
        mPlayerSeekbar.setMax((int) length);
        mPlayerSeekbar.setProgress((int) time);

        if (time >= 0) {
            String progress = millisToString(time, false) + "/" + millisToString(length, false);
            mPlayerPosition.setText(progress);
        }

        Message msg = new Message();
        msg.what = UPDATE_SEEKBAR;

        if (mHandler != null)
            mHandler.sendMessageDelayed(msg, 1000);
        return (int) time;
    }

    String millisToString(long millis, boolean text) {
        boolean negative = millis < 0;
        millis = Math.abs(millis);

        millis /= 1000;
        int sec = (int) (millis % 60);
        millis /= 60;
        int min = (int) (millis % 60);
        millis /= 60;
        int hours = (int) millis;

        String time;
        DecimalFormat format = (DecimalFormat) NumberFormat.getInstance(Locale.US);
        format.applyPattern("00");
        if (text) {
            if (millis > 0)
                time = (negative ? "-" : "") + hours + "h" + format.format(min) + "min";
            else if (min > 0)
                time = (negative ? "-" : "") + min + "min";
            else
                time = (negative ? "-" : "") + sec + "s";
        } else {
            if (millis > 0)
                time = (negative ? "-" : "") + hours + ":" + format.format(min) + ":" + format.format(sec);
            else
                time = (negative ? "-" : "") + min + ":" + format.format(sec);
        }
        return time;
    }

    @Override
    public void onClickProgressbarObjectLink(int mediaId) {
        //广告模板上物体详情被点击
        //mediaId广告视频的id
    }

    @Override
    public void onClickProgressbarObject(int mediaId) {
        //视频上识别广告的黄色焦点被点击
        //mediaId广告视频的id
    }

    @Override
    public void onClickStart() {
        //广告界面上的播放按钮点击播放
        if (videoView != null) {
            isPlay = true;
            setPlayState(true);
        }
    }

    @Override
    public void onClickPause() {
        //广告界面上的播放按钮点击暂停
        if (videoView != null) {
            isPlay = false;
            setPlayState(false);
        }
    }

    @Override
    public void onAdsShow() {
        //广告界面显示
        if (controllerLayout != null)
            controllerLayout.setVisibility(View.GONE);
    }

    @Override
    public void onAdsDismiss() {
        //广告界面隐藏
        if (controllerLayout != null)
            controllerLayout.setVisibility(View.VISIBLE);
    }

}