package com.aiyou.iptv;
import com.aiyou.R;
import com.aiyou.iptv.bean.Chanel;
import com.aiyou.utils.AiYouManager;
import com.aiyou.utils.SwitchManager;
import com.aiyou.utils.logcat.Logcat;
import io.vov.vitamio.LibsChecker;
import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.MediaPlayer.OnBufferingUpdateListener;
import io.vov.vitamio.MediaPlayer.OnInfoListener;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.VideoView;
import android.annotation.SuppressLint;
import android.app.Activity;
import android.app.Service;
import android.media.AudioManager;
import android.os.Bundle;
import android.text.TextUtils;
import android.view.MotionEvent;
import android.view.View;
import android.view.View.OnClickListener;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.ProgressBar;
import android.widget.TextView;
public class IptvViewBufferActivity extends Activity implements OnInfoListener,
OnBufferingUpdateListener {
public static final String KEY_CHANEL = "chanel";
private int mFlag = 0;
private float mY = 0, mRawY = 0;
private final float THRESHOLD = AiYouManager.getInstance(this).dip2px(5);
private VideoView mVideoView;
private MediaController mMediaController;
private ProgressBar mProgressBar;
private TextView mDownloadRateTV, mLoadRateTV, mIndicateTV;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
requestWindowFeature(Window.FEATURE_NO_TITLE);// 取消标题栏
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);// 全屏
if (SwitchManager.getInstance(getBaseContext()).isNightModeEnabled()) {
// 夜间模式
this.setTheme(R.style.ThemeNight);
} else {
// 日间模式
this.setTheme(R.style.ThemeDay);
}
setContentView(R.layout.activity_viewbuffer);
init();
}
@SuppressLint({
"NewApi", "ClickableViewAccessibility"
})
private void init() {
if (!LibsChecker.checkVitamioLibs(this))
return;
mVideoView = (VideoView) findViewById(R.id.buffer);
mProgressBar = (ProgressBar) findViewById(R.id.progress_bar);
mDownloadRateTV = (TextView) findViewById(R.id.download_rate);
mLoadRateTV = (TextView) findViewById(R.id.load_rate);
mIndicateTV = (TextView) findViewById(R.id.tv_indicate);
if (SwitchManager.getInstance(getBaseContext()).needShowIptvHelp()) {
final LinearLayout ll_help = (LinearLayout) findViewById(R.id.ll_help);
ll_help.setVisibility(View.VISIBLE);
ll_help.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
v.setVisibility(View.GONE);
}
});
SwitchManager.getInstance(getBaseContext()).disableShowIptvHelp();
}
Chanel chanel = (Chanel) getIntent().getSerializableExtra(KEY_CHANEL);
Logcat.e(chanel.name, chanel.url);
mVideoView.setVideoPath(chanel.url);
mMediaController = new MediaController(this);
mVideoView.setMediaController(mMediaController);
mVideoView.setVideoQuality(MediaPlayer.VIDEOQUALITY_HIGH);
mVideoView.setOnInfoListener(this);
mVideoView.setBufferSize(5120);
mVideoView.setOnBufferingUpdateListener(this);
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
// optional need Vitamio 4.0
mediaPlayer.setPlaybackSpeed(1.0f);
int vWidth = mediaPlayer.getVideoWidth();
int vHeight = mediaPlayer.getVideoHeight();
if (vWidth > AiYouManager.getScreenWidth()
|| vHeight > AiYouManager.getScreenHeight()) {
// 如果video的宽或者高超出了当前屏幕的大小,则要进行缩放
float wRatio = (float) vWidth / (float) AiYouManager.getScreenWidth();
float hRatio = (float) vHeight / (float) AiYouManager.getScreenHeight();
// 选择大的一个进行缩放
float ratio = Math.max(wRatio, hRatio);
vWidth = (int) Math.ceil((float) vWidth / ratio);
vHeight = (int) Math.ceil((float) vHeight / ratio);
// 设置surfaceView的布局参数
mVideoView.setLayoutParams(new LinearLayout.LayoutParams(vWidth, vHeight));
// 然后开始播放视频
mediaPlayer.start();
}
}
});
}
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
if (mVideoView.isPlaying()) {
mVideoView.pause();
showProgress(true);
mDownloadRateTV.setText("");
mLoadRateTV.setText("");
mDownloadRateTV.setVisibility(View.VISIBLE);
mLoadRateTV.setVisibility(View.VISIBLE);
}
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
mVideoView.start();
showProgress(false);
mDownloadRateTV.setVisibility(View.GONE);
mLoadRateTV.setVisibility(View.GONE);
break;
case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:
mDownloadRateTV.setText("" + extra + "kb/s" + " ");
break;
}
return true;
}
@Override
public void onBufferingUpdate(MediaPlayer mp, int percent) {
mLoadRateTV.setText(percent + "%");
}
/**
* 设置cpb_progress的状态和是否显示
*
* @param flag
*/
private void showProgress(boolean flag) {
if (flag) {
mProgressBar.setVisibility(View.VISIBLE);
} else {
mProgressBar.setVisibility(View.GONE);
}
}
@Override
protected void onResume() {
super.onResume();
if (!mVideoView.isPlaying()) {
mVideoView.start();
}
}
@Override
protected void onPause() {
super.onPause();
if (mVideoView.isPlaying()) {
mVideoView.pause();
}
}
@Override
public boolean dispatchTouchEvent(MotionEvent event) {
touchEvent(event);
return super.dispatchTouchEvent(event);
}
private void touchEvent(MotionEvent event) {
switch (event.getAction()) {
case MotionEvent.ACTION_DOWN:
mY = event.getY();
mRawY = mY;
if (event.getX() < AiYouManager.getScreenHeight() / 2.0f) {
mFlag = 1;
} else {
mFlag = 0;
}
break;
case MotionEvent.ACTION_MOVE:
float y = event.getY();
float yy = (mY - y) / THRESHOLD;
if (Math.abs(yy) >= 1) {
mY = y;
if (mFlag == 0) {
// 调节音量
setVolumn(yy);
} else if (mFlag == 1) {
// 调节亮度
setBrightness(yy);
}
}
break;
case MotionEvent.ACTION_UP:
case MotionEvent.ACTION_CANCEL:
showIndicate(null);
if (Math.abs(mRawY - event.getY()) < 10) {
mMediaController.show(2000);
}
break;
}
}
private void setVolumn(float volumn) {
AudioManager audioMgr = (AudioManager) getSystemService(Service.AUDIO_SERVICE);
if (volumn > 0) {
audioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_RAISE, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
} else if (volumn < 0) {
audioMgr.adjustStreamVolume(AudioManager.STREAM_MUSIC,
AudioManager.ADJUST_LOWER, AudioManager.FLAG_REMOVE_SOUND_AND_VIBRATE);
}
showIndicate("声音:" + audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC));
Logcat.e("volumn", audioMgr.getStreamVolume(AudioManager.STREAM_MUSIC) + "");
}
private void setBrightness(float brightness) {
WindowManager.LayoutParams lp = getWindow().getAttributes();
lp.screenBrightness = lp.screenBrightness + brightness / 100.0f;
if (lp.screenBrightness > 1) {
lp.screenBrightness = 1;
} else if (lp.screenBrightness < 0.1) {
lp.screenBrightness = 0.1f;
}
showIndicate(String.format("亮度:%.0f", lp.screenBrightness * 100));
Logcat.e("bright", lp.screenBrightness + "");
getWindow().setAttributes(lp);
}
private void showIndicate(String str) {
if (TextUtils.isEmpty(str)) {
mIndicateTV.setVisibility(View.GONE);
} else {
mIndicateTV.setText(str);
mIndicateTV.setVisibility(View.VISIBLE);
}
}
}