package com.example.gsyvideoplayer.video;
import android.app.Activity;
import android.content.Context;
import android.graphics.Bitmap;
import android.graphics.Matrix;
import android.graphics.SurfaceTexture;
import android.media.MediaMetadataRetriever;
import android.os.Handler;
import android.text.TextUtils;
import android.util.AttributeSet;
import android.view.View;
import android.widget.ImageView;
import android.widget.RelativeLayout;
import android.widget.SeekBar;
import android.widget.TextView;
import android.widget.Toast;
import com.example.gsyvideoplayer.R;
import com.example.gsyvideoplayer.model.SwitchVideoModel;
import com.example.gsyvideoplayer.view.SwitchVideoTypeDialog;
import com.shuyu.gsyvideoplayer.GSYVideoManager;
import com.shuyu.gsyvideoplayer.GSYVideoPlayer;
import com.shuyu.gsyvideoplayer.utils.GSYVideoType;
import com.shuyu.gsyvideoplayer.video.GSYBaseVideoPlayer;
import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer;
import java.io.File;
import java.util.ArrayList;
import java.util.List;
import java.util.Timer;
import java.util.TimerTask;
/**
* Created by shuyu on 2016/12/7.
* 注意
* 这个播放器的demo配置切换到全屏播放器
* 这只是单纯的作为全屏播放显示,如果需要做大小屏幕切换,请记得在这里耶设置上视频全屏的需要的自定义配置
*/
public class SampleVideo extends StandardGSYVideoPlayer {
private TextView mMoreScale;
private TextView mSwitchSize;
private TextView mChangeRotate;
private TextView mChangeTransform;
private List<SwitchVideoModel> mUrlList = new ArrayList<>();
//记住切换数据源类型
private int mType = 0;
private int mTransformSize = 0;
//数据源
private int mSourcePosition = 0;
/**
* 1.5.0开始加入,如果需要不同布局区分功能,需要重载
*/
public SampleVideo(Context context, Boolean fullFlag) {
super(context, fullFlag);
}
public SampleVideo(Context context) {
super(context);
}
public SampleVideo(Context context, AttributeSet attrs) {
super(context, attrs);
}
@Override
protected void init(Context context) {
super.init(context);
initView();
}
private void initView() {
mMoreScale = (TextView) findViewById(R.id.moreScale);
mSwitchSize = (TextView) findViewById(R.id.switchSize);
mChangeRotate = (TextView) findViewById(R.id.change_rotate);
mChangeTransform = (TextView) findViewById(R.id.change_transform);
//切换清晰度
mMoreScale.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mType == 0) {
mType = 1;
mMoreScale.setText("16:9");
GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_16_9);
if (mTextureView != null)
mTextureView.requestLayout();
} else if (mType == 1) {
mType = 2;
mMoreScale.setText("4:3");
GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_4_3);
if (mTextureView != null)
mTextureView.requestLayout();
} else if (mType == 2) {
mType = 3;
mMoreScale.setText("全屏");
GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_FULL);
if (mTextureView != null)
mTextureView.requestLayout();
} else if (mType == 3) {
mType = 0;
mMoreScale.setText("默认比例");
GSYVideoType.setShowType(GSYVideoType.SCREEN_TYPE_DEFAULT);
if (mTextureView != null)
mTextureView.requestLayout();
}
}
});
//切换视频清晰度
mSwitchSize.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
showSwitchDialog();
}
});
//旋转播放角度
mChangeRotate.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if ((mTextureView.getRotation() - mRotate) == 270) {
mTextureView.setRotation(mRotate);
mTextureView.requestLayout();
mCoverImageView.setRotation(mRotate);
mCoverImageView.requestLayout();
} else {
mTextureView.setRotation(mTextureView.getRotation() + 90);
mTextureView.requestLayout();
mCoverImageView.setRotation(mCoverImageView.getRotation() + 90);
mCoverImageView.requestLayout();
}
}
});
//镜像旋转
mChangeTransform.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (mTransformSize == 0) {
mTransformSize = 1;
} else if (mTransformSize == 1) {
mTransformSize = 2;
} else if (mTransformSize == 2) {
mTransformSize = 0;
}
resolveTransform();
}
});
}
/**
* 需要在尺寸发生变化的时候重新处理
*/
@Override
public void onSurfaceTextureSizeChanged(SurfaceTexture surface, int width, int height) {
super.onSurfaceTextureSizeChanged(surface, width, height);
resolveTransform();
}
/**
* 处理镜像旋转
*/
protected void resolveTransform() {
switch (mTransformSize) {
case 1: {
Matrix transform = new Matrix();
transform.setScale(-1, 1, mTextureView.getWidth() / 2, 0);
mTextureView.setTransform(transform);
mCoverImageView.setScaleType(ImageView.ScaleType.MATRIX);
mCoverImageView.setImageMatrix(transform);
mTransformCover = transform;
mChangeTransform.setText("左右镜像");
}
break;
case 2: {
Matrix transform = new Matrix();
transform.setScale(1, -1, 0, mTextureView.getHeight() / 2);
mTextureView.setTransform(transform);
mCoverImageView.setScaleType(ImageView.ScaleType.MATRIX);
mCoverImageView.setImageMatrix(transform);
mTransformCover = transform;
mChangeTransform.setText("上下镜像");
}
break;
case 0: {
Matrix transform = new Matrix();
transform.setScale(1, 1, mTextureView.getWidth() / 2, 0);
mTextureView.setTransform(transform);
mCoverImageView.setScaleType(ImageView.ScaleType.MATRIX);
mCoverImageView.setImageMatrix(transform);
mTransformCover = null;
mChangeTransform.setText("旋转镜像");
}
break;
}
}
/**
* 设置播放URL
*
* @param url 播放url
* @param cacheWithPlay 是否边播边缓存
* @param objects object[0]目前为title
* @return
*/
public boolean setUp(List<SwitchVideoModel> url, boolean cacheWithPlay, Object... objects) {
mUrlList = url;
return setUp(url.get(0).getUrl(), cacheWithPlay, objects);
}
/**
* 设置播放URL
*
* @param url 播放url
* @param cacheWithPlay 是否边播边缓存
* @param cachePath 缓存路径,如果是M3U8或者HLS,请设置为false
* @param objects object[0]目前为title
* @return
*/
public boolean setUp(List<SwitchVideoModel> url, boolean cacheWithPlay, File cachePath, Object... objects) {
mUrlList = url;
return setUp(url.get(0).getUrl(), cacheWithPlay, cachePath, objects);
}
@Override
public int getLayoutId() {
return R.layout.sample_video;
}
@Override
public GSYBaseVideoPlayer startWindowFullscreen(Context context, boolean actionBar, boolean statusBar) {
SampleVideo sampleVideo = (SampleVideo) super.startWindowFullscreen(context, actionBar, statusBar);
//这个播放器的demo配置切换到全屏播放器
//这只是单纯的作为全屏播放显示,如果需要做大小屏幕切换,请记得在这里耶设置上视频全屏的需要的自定义配置
//比如已旋转角度之类的等等
//可参考super中的实现
return sampleVideo;
}
/**
* 弹出切换清晰度
*/
private void showSwitchDialog() {
SwitchVideoTypeDialog switchVideoTypeDialog = new SwitchVideoTypeDialog(getContext());
switchVideoTypeDialog.initList(mUrlList, new SwitchVideoTypeDialog.OnListItemClickListener() {
@Override
public void onItemClick(int position) {
final String name = mUrlList.get(position).getName();
if (mSourcePosition != position) {
if ((mCurrentState == GSYVideoPlayer.CURRENT_STATE_PLAYING
|| mCurrentState == GSYVideoPlayer.CURRENT_STATE_PAUSE)
&& GSYVideoManager.instance().getMediaPlayer() != null) {
final String url = mUrlList.get(position).getUrl();
onVideoPause();
final long currentPosition = mCurrentPosition;
GSYVideoManager.instance().releaseMediaPlayer();
cancelProgressTimer();
hideAllWidget();
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
setUp(url, mCache, mCachePath, mObjects);
setSeekOnStart(currentPosition);
startPlayLogic();
cancelProgressTimer();
hideAllWidget();
}
}, 500);
mSwitchSize.setText(name);
mSourcePosition = position;
}
} else {
Toast.makeText(getContext(), "已经是 " + name, Toast.LENGTH_LONG).show();
}
}
});
switchVideoTypeDialog.show();
}
}