package org.cuieney.videolife.ui.video; import android.content.Context; import android.os.Handler; import android.util.AttributeSet; import android.view.View; import android.widget.TextView; import android.widget.Toast; import com.shuyu.gsyvideoplayer.GSYVideoManager; import com.shuyu.gsyvideoplayer.GSYVideoPlayer; import com.shuyu.gsyvideoplayer.utils.GSYVideoType; import com.shuyu.gsyvideoplayer.video.StandardGSYVideoPlayer; import org.cuieney.videolife.R; import java.io.File; import java.util.ArrayList; import java.util.List; /** * Created by shuyu on 2016/12/7. */ public class SampleVideo extends StandardGSYVideoPlayer { private TextView mMoreScale; private TextView mSwitchSize; private List<SwitchVideoModel> mUrlList = new ArrayList<>(); //记住切换数据源类型 private int mType = 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); //切换清晰度 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 = 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(); } }); } /** * 设置播放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; } /** * 弹出切换清晰度 */ 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(); } }