SwitchVideoActivity.java 6.13 KB
package com.cnlive.demo.video;

import android.os.Bundle;
import android.support.annotation.Nullable;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.ProgressBar;
import android.widget.Toast;

import com.cnlive.demo.video.model.DataSource;
import com.cnlive.libs.util.Config;
import com.cnlive.libs.video.video.SwitchVideoView;
import com.cnlive.libs.video.video.base.IMediaPlayer;
import com.cnlive.libs.video.video.base.ISwitchVideoView;

import java.util.ArrayList;
import java.util.List;

/**
 * Created by gujun on 2017/6/21.
 * 此页面是当点击切换按钮时才进行切换,适用切换视频码率
 * 以四个码率为例,具体几个码率看后台给当前视频配置了几个
 */

public class SwitchVideoActivity extends AppCompatActivity implements IMediaPlayer.OnPreparedListener,
        IMediaPlayer.OnCompletionListener, IMediaPlayer.OnErrorListener, IMediaPlayer.OnInfoListener,
        IMediaPlayer.OnPlayStateListener, IMediaPlayer.OnSeekCompleteListener,
        ISwitchVideoView.OnSwitchVideoPreparedListener, ISwitchVideoView.OnSwitchVideoErrorListener, ISwitchVideoView.OnSwitchVideoCompleteListener {

    private SwitchVideoView videoView;

    private ProgressBar loading;
    private Button rateL, rateM, rateH, rateHH;
    private List<Button> rateViews;
    //当前播放的视频码率
    private Button curRate;
    //需要切换的视频码率
    private Button switchRate;

    @Override
    protected void onCreate(@Nullable Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_switch_video);
        initView();
        initPlay();
        startPlay();
    }

    private void initView() {
        rateViews = new ArrayList<>();
        loading = (ProgressBar) findViewById(R.id.loading);
        rateL = (Button) findViewById(R.id.rateL);
        rateM = (Button) findViewById(R.id.rateM);
        rateH = (Button) findViewById(R.id.rateH);
        rateHH = (Button) findViewById(R.id.rateHH);
        rateViews.add(rateL);
        rateViews.add(rateM);
        rateViews.add(rateH);
        rateViews.add(rateHH);
        //默认设置标清
        setSelectRate(rateM);
    }

    private void initPlay() {
        videoView = (SwitchVideoView) findViewById(R.id.videoview);
        //认证APP播放权限(使用视讯中国资源)
        videoView.setOnPreparedListener(this);
        videoView.setOnCompletionListener(this);
        videoView.setOnPlayStateListener(this);
        videoView.setOnErrorListener(this);
        videoView.setOnInfoListener(this);
        videoView.setOnSeekCompleteListener(this);
        videoView.setOnSwitchVideoPreparedListener(this);
        videoView.setOnSwitchVideoErrorListener(this);
        videoView.setOnSwitchVideoCompleteListener(this);
        videoView.setKeepScreenOn(true);
    }

    private void startPlay() {
        loading.setVisibility(View.VISIBLE);
        curRate = rateM;
//        videoView.setDataSource(new DataSource("82_xinyingshi", Config.TYPE_LIVE, Config.TYPE_PLAY_RATE_2));
        videoView.setDataSource(new DataSource("82_58ff2c30f4714a04a77f854f50d86e3a", Config.TYPE_VOD, Config.TYPE_PLAY_RATE_2));
    }

    private void setSelectRate(Button view) {
        for (int i = 0; i < rateViews.size(); i++) {
            rateViews.get(i).setTextColor(rateViews.get(i).getId() == view.getId() ? getResources().getColor(R.color.colorRateSel) : getResources().getColor(R.color.colorRateNor));
        }
    }

    @Override
    protected void onPause() {
        super.onPause();
        videoView.pause();
    }

    @Override
    protected void onResume() {
        super.onResume();
        videoView.start();
    }

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

    public void switchClick(View v) {
        String rate = "";
        switch (v.getId()) {
            case R.id.rateL:
                switchRate = rateL;
                rate = Config.TYPE_PLAY_RATE_1;
                break;
            case R.id.rateM:
                switchRate = rateM;
                rate = Config.TYPE_PLAY_RATE_2;
                break;
            case R.id.rateH:
                switchRate = rateH;
                rate = Config.TYPE_PLAY_RATE_3;
                break;
            case R.id.rateHH:
                switchRate = rateHH;
                rate = Config.TYPE_PLAY_RATE_4;
                break;
        }
        loading.setVisibility(View.VISIBLE);
//        videoView.switchVideo(new DataSource("82_liveshow", Config.TYPE_LIVE, rate));
        videoView.switchVideo(new DataSource("82_58ff2c30f4714a04a77f854f50d86e3a", Config.TYPE_VOD, rate));
    }

    @Override
    public void onSwitchVideoPrepared(IMediaPlayer mediaplayer) {
        videoView.switchVideoStart(videoView.getCurrentPosition());//点播使用此方法
//        videoView.switchVideoStart();//直播使用此方法
    }

    @Override
    public void onSwitchVideoComplete(IMediaPlayer mediaplayer) {
        loading.setVisibility(View.GONE);
        curRate = switchRate;
        setSelectRate(curRate);
        Toast.makeText(this, "切换成功", Toast.LENGTH_LONG).show();
    }

    @Override
    public void onSwitchVideoError(IMediaPlayer mediaplayer, int what, int extra) {
        videoView.releaseSwitchVideo();
        loading.setVisibility(View.GONE);
        Toast.makeText(this, "切换失败", Toast.LENGTH_LONG).show();
    }

    @Override
    public boolean onInfo(IMediaPlayer mediaplayer, int what, int extra) {
        return false;
    }

    @Override
    public boolean onError(IMediaPlayer mediaplayer, int what, int extra) {
        loading.setVisibility(View.GONE);
        Toast.makeText(this, "error", Toast.LENGTH_LONG).show();
        return false;
    }

    @Override
    public void onSeekComplete(IMediaPlayer mediaplayer) {

    }

    @Override
    public void onCompletion(IMediaPlayer mediaplayer) {

    }

    @Override
    public void onPrepared(IMediaPlayer mediaplayer) {
        loading.setVisibility(View.GONE);
        mediaplayer.start();
    }

    @Override
    public void onPlayState(boolean isPlay) {

    }

}