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() { } }