package com.yixia.camera.demo.ui.record; import android.app.Activity; import android.media.MediaPlayer; import android.media.MediaPlayer.OnPreparedListener; import android.os.AsyncTask; import android.os.Bundle; import android.view.View; import android.view.View.OnClickListener; import android.view.WindowManager; import android.widget.Toast; import com.example.wechat01.R; import com.yixia.camera.FFMpegUtils; import com.yixia.camera.demo.VCameraDemoApplication; import com.yixia.camera.demo.ui.BaseActivity; import com.yixia.camera.demo.ui.record.views.ProgressView; import com.yixia.camera.demo.ui.widget.VideoView; import com.yixia.camera.demo.ui.widget.VideoView.OnPlayStateListener; import com.yixia.camera.model.MediaObject; import com.yixia.camera.model.MediaObject.MediaPart; import com.yixia.camera.util.DeviceUtils; public class ImportVideoActivity extends BaseActivity implements OnClickListener, OnPreparedListener, OnPlayStateListener { /** 视频预览 */ private VideoView mVideoView; /** 暂停图标 */ private View mRecordPlay; /** 视频总进度条 */ private ProgressView mProgressView; /** 视频信息 */ private MediaObject mMediaObject; private MediaPart mMediaPart; /** 窗体宽度 */ private int mWindowWidth; private String mVideoPath; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); VCameraDemoApplication.getInstance().addActivity(this); getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);// 防止锁屏 String obj = getIntent().getStringExtra("obj"); mVideoPath = getIntent().getStringExtra("path"); mMediaObject = restoneMediaObject(obj); if (mMediaObject == null) { Toast.makeText(this, R.string.record_read_object_faild, Toast.LENGTH_SHORT).show(); finish(); return; } mWindowWidth = DeviceUtils.getScreenWidth(this); setContentView(R.layout.activity_import_video); // ~~~ 绑定控件 mVideoView = (VideoView) findViewById(R.id.record_preview); mRecordPlay = findViewById(R.id.record_play); mProgressView = (ProgressView) findViewById(R.id.record_progress); // ~~~ 绑定事件 mVideoView.setOnClickListener(this); mVideoView.setOnPreparedListener(this); mVideoView.setOnPlayStateListener(this); findViewById(R.id.title_left).setOnClickListener(this); findViewById(R.id.title_right).setOnClickListener(this); findViewById(R.id.record_layout).getLayoutParams().height = mWindowWidth; mVideoView.setVideoPath(mVideoPath); } @Override public void onClick(View v) { switch (v.getId()) { case R.id.title_left: finish(); break; case R.id.title_right: startEncoding(); break; } } /** 开始转码 */ private void startEncoding() { // 检测磁盘空间 // if (FileUtils.showFileAvailable() < 200) { // Toast.makeText(this, R.string.record_camera_check_available_faild, // Toast.LENGTH_SHORT).show(); // return; // } if (!isFinishing() && mMediaObject != null && mMediaPart != null) { new AsyncTask<Void, Void, Boolean>() { @Override protected void onPreExecute() { super.onPreExecute(); showProgress("", getString(R.string.record_camera_progress_message)); } @Override protected Boolean doInBackground(Void... params) { return FFMpegUtils.importVideo(mMediaPart, mWindowWidth, mVideoView.getVideoWidth(), mVideoView.getVideoHeight(), 0, 0, true); } @Override protected void onPostExecute(Boolean result) { super.onPostExecute(result); hideProgress(); if (result) { saveMediaObject(mMediaObject); setResult(Activity.RESULT_OK); finish(); } else { Toast.makeText(ImportVideoActivity.this, R.string.record_video_transcoding_faild, Toast.LENGTH_SHORT).show(); } } }.execute(); } } @Override public void onStateChanged(boolean isPlaying) { if (isPlaying) mRecordPlay.setVisibility(View.GONE); else mRecordPlay.setVisibility(View.VISIBLE); } @Override public void onPrepared(MediaPlayer mp) { if (!isFinishing()) { if (mVideoView.getVideoWidth() == 0 || mVideoView.getVideoHeight() == 0) { Toast.makeText(ImportVideoActivity.this, R.string.record_camera_import_video_faild, Toast.LENGTH_SHORT).show(); finish(); return; } mVideoView.start(); mVideoView.setLooping(true); int duration = mMediaObject.getMaxDuration() - mMediaObject.getDuration(); if (duration > mVideoView.getDuration()) duration = mVideoView.getDuration(); mMediaPart = mMediaObject.buildMediaPart(mVideoPath, duration, MediaObject.MEDIA_PART_TYPE_IMPORT_VIDEO); mProgressView.setData(mMediaObject); } } }