package com.bigdo.app;
import io.vov.vitamio.LibsChecker;
import io.vov.vitamio.MediaPlayer;
import io.vov.vitamio.MediaPlayer.OnErrorListener;
import io.vov.vitamio.MediaPlayer.OnInfoListener;
import io.vov.vitamio.widget.MediaController;
import io.vov.vitamio.widget.MediaController.OnHiddenListener;
import io.vov.vitamio.widget.MediaController.OnShownListener;
import io.vov.vitamio.widget.VideoView;
import java.io.File;
import java.text.DecimalFormat;
import com.bigdo.common.RConfig;
import com.bigdo.common.RState;
import com.bigdo.common.VideoDownHelper;
import com.bigdo.util.Pub;
import com.bigdo.util.WSHelper;
import android.content.Context;
import android.content.DialogInterface;
import android.content.DialogInterface.OnDismissListener;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.os.Environment;
import android.util.Log;
import android.view.View;
import android.view.WindowManager;
import android.view.View.OnClickListener;
import android.widget.RelativeLayout;
import android.widget.TextView;
public class Video_Pay_Activity extends BaseActivity implements
OnErrorListener, OnInfoListener {
private int idvideo = -1, idtype = -1, _prot = 0;
private String path = "", title = "", video = "", download_unit = "";
private VideoView mVideoView;
private TextView downloadRateView, loading;
private RelativeLayout downloadHost;
private float extra_f = 0;
private DecimalFormat extra_format;
MediaController mc = null;
@Override
public void onCreate(Bundle icicle) {
super.onCreate(icicle);
getWindow().setFlags(WindowManager.LayoutParams.FLAG_FULLSCREEN,
WindowManager.LayoutParams.FLAG_FULLSCREEN);
if (!LibsChecker.checkVitamioLibs(this)) {
return;
}
setContentView(R.layout.video_pay_activity);
extra_format = new DecimalFormat("###,###,###.##");
mVideoView = (VideoView) findViewById(R.id.videoView);
downloadHost = (RelativeLayout) findViewById(R.id.download_info_host);
downloadRateView = (TextView) findViewById(R.id.download_rate);
loading = (TextView) findViewById(R.id.loading);
mc = new VideoMediaController(this);
mc.setOnShownListener(new OnShownListener() {
@Override
public void onShown() {
downloadHost.setVisibility(RelativeLayout.VISIBLE);
}
});
mc.setOnHiddenListener(new OnHiddenListener() {
@Override
public void onHidden() {
downloadHost.setVisibility(RelativeLayout.GONE);
}
});
initInfo();
mVideoView.setMediaController(mc);
mVideoView.setVideoQuality(MediaPlayer.VIDEOQUALITY_LOW);
// mVideoView.requestFocus();
mVideoView.setOnInfoListener(this);
mVideoView.setOnErrorListener(this);
// mVideoView.setOnBufferingUpdateListener(this);
mVideoView.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mediaPlayer) {
mediaPlayer.setPlaybackSpeed(1.0f);
if (loading != null) {
loading.setVisibility(TextView.GONE);
}
try {
if (!mVideoView.isPlaying()) {
mVideoView.start();
}
} catch (Exception e) {
}
}
});
final TextView vdieo_info_down = (TextView) findViewById(R.id.vdieo_info_down);
int dr = VideoDownHelper.isExist(idtype, idvideo, video, true);
if (dr == 0) {
vdieo_info_down.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View arg0) {
int dr = VideoDownHelper.down(Video_Pay_Activity.this,
idtype, idvideo, title, video);
if (dr == 1) {
vdieo_info_down.setText("缓存中");
vdieo_info_down.setOnClickListener(null);
} else if (dr == 2) {
vdieo_info_down.setText("已缓存");
vdieo_info_down.setOnClickListener(null);
}
}
});
} else {
if (dr == 1) {
vdieo_info_down.setText("缓存中");
} else if (dr == 2) {
vdieo_info_down.setText("已缓存");
}
}
setVideoUrl();
}
private class VideoMediaController extends MediaController {
public VideoMediaController(Context context) {
super(context);
}
@Override
public void setFileName(String name) {
super.setFileName(title);
}
};
private void initInfo() {
idvideo = getIntent().getIntExtra("idvideo", -1);
idtype = getIntent().getIntExtra("idtype", -1);
title = getIntent().getStringExtra("title");
video = getIntent().getStringExtra("video");
}
public void setVideoUrl() {
if (idvideo > 0 && idtype > 0 && title != null && !title.equals("")
&& video != null && !video.equals("")) {
boolean isLocal = false;
String fn = "";
String status = Environment.getExternalStorageState();
if (status.equals(Environment.MEDIA_MOUNTED)) {
String baseDir = Environment.getExternalStorageDirectory()
+ RConfig.Video_Dir;
File fd = new File(baseDir);
fn = VideoDownHelper.cacheFileName(idtype, idvideo, video);
File f = new File(fd, fn + ".r");
if (f.exists() && f.length() > 0) {
isLocal = true;
}
}
if (isLocal) {
if (prot > 0 && video_status == RState.Video_Status_Run) {
if (_prot == prot && !"".equals(path)) {
return;
}
_prot = prot;
path = "http://127.0.0.1:" + prot + "/" + fn;
mVideoView.setBufferSize(0);
} else {
showProgress("本地播放服务器启动中..");
return;
}
} else {
if (!WSHelper.isNetConnecting(this)) {
messageBox("亲!您的网络好像没连接上哦,不能在线播放.",
new OnDismissListener() {
@Override
public void onDismiss(DialogInterface dialog) {
finish();
}
});
return;
}
String _video = video;
int hi = _video.indexOf("http://");
if (hi >= 0) {
path = _video;
} else {
hi = _video.indexOf("/");
if (hi == 0) {
hi++;
_video = _video.substring(hi);
}
path = RConfig.getBaseUrl(this) + _video;
mVideoView.setBufferSize(1024 * 4);
}
}
if (path != null && !"".equals(path)) {
// path = "http://182.254.153.218:999/video/1.mp4";
path = Pub.handleDownVideoUrl(path);
Uri uri = Uri.parse(path);
mVideoView.setVideoURI(uri);
mVideoView.requestFocus();
Log.e("setVideoURI", path);
}
}
}
@Override
public boolean onInfo(MediaPlayer mp, int what, int extra) {
switch (what) {
case MediaPlayer.MEDIA_INFO_BUFFERING_START:
// if (!mVideoView.isPlaying()) {
// mVideoView.start();
// }
break;
case MediaPlayer.MEDIA_INFO_BUFFERING_END:
// if (!mVideoView.isPlaying()) {
// mVideoView.start();
// }
break;
case MediaPlayer.MEDIA_INFO_DOWNLOAD_RATE_CHANGED:
if (downloadHost.getVisibility() != RelativeLayout.GONE) {
if (extra >= 1024) {
download_unit = " M/s ";
extra_f = extra / 1024.0f;
if (extra_f > 1024) {
download_unit = " G/s ";
extra_f = extra_f / 1024.0f;
}
} else {
download_unit = " KB/s ";
extra_f = extra;
}
downloadRateView.setText(extra_format.format(extra_f)
+ download_unit);
}
break;
}
return true;
}
@Override
public boolean onError(MediaPlayer mp, int what, int extra) {
loading.setVisibility(TextView.GONE);
return true;
}
@Override
public void onVideoBroadcast(Intent intent) {
if (prot > 0 && video_status == RState.Video_Status_Run) {
hiddenProgress();
showInfo("本地播放服务成功启动");
setVideoUrl();
} else if (video_status == RState.Video_Status_Init_Error
|| video_status == RState.Video_Status_Close) {
showInfo("本地播放服务未启动");
}
}
@Override
public void onClearData() {
}
}