Android_视频播放功能
import java.io.File; import java.io.FileInputStream; import java.io.IOException; import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Environment; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.view.SurfaceHolder.Callback; import android.view.View.OnClickListener; import android.widget.EditText; import android.widget.ImageButton; import android.widget.Toast; public class PlayActivity extends Activity { private static final String TAG = "PlayActivity"; private EditText filenameText; private MediaPlayer mediaPlayer; private SurfaceView surfaceView; private String filename; private int position; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); filenameText = (EditText) this.findViewById(R.id.filename); surfaceView = (SurfaceView) this.findViewById(R.id.serfaceView); // 设置分辨率 surfaceView.getHolder().setFixedSize(176, 144); // 设置surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前 surfaceView.getHolder() .setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); surfaceView.getHolder().addCallback(new SurfaceCallback()); mediaPlayer = new MediaPlayer(); ButtonClickListener listener = new ButtonClickListener(); ImageButton playBtn = (ImageButton) this.findViewById(R.id.play); ImageButton pauseBtn = (ImageButton) this.findViewById(R.id.pause); ImageButton resetBtn = (ImageButton) this.findViewById(R.id.reset); ImageButton stopBtn = (ImageButton) this.findViewById(R.id.stop); playBtn.setOnClickListener(listener); pauseBtn.setOnClickListener(listener); resetBtn.setOnClickListener(listener); stopBtn.setOnClickListener(listener); } @Override protected void onPause() { super.onPause(); } @Override protected void onResume() { super.onResume(); } private final class ButtonClickListener implements OnClickListener { @Override public void onClick(View v) { if (!Environment.getExternalStorageState().equals( Environment.MEDIA_MOUNTED)) { Toast.makeText(PlayActivity.this, R.string.sdcarderror, Toast.LENGTH_LONG).show(); return; } filename = filenameText.getText().toString(); try { switch (v.getId()) { case R.id.play: play(); break; case R.id.pause: if (mediaPlayer.isPlaying()) { // 暂停播放 mediaPlayer.pause(); } else { // 继续播放 mediaPlayer.start(); } break; case R.id.reset: if (mediaPlayer.isPlaying()) { mediaPlayer.seekTo(0); } else { play(); } break; case R.id.stop: if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); } break; default: break; } } catch (Exception e) { Log.e(TAG, e.toString()); } } } private final class SurfaceCallback implements Callback { @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } /** * 在SurfaceView创建的时候调用该方法 */ @Override public void surfaceCreated(SurfaceHolder holder) { if(position > 0 && filename != null) { try { play(); mediaPlayer.seekTo(position); position = 0; } catch (IOException e) { Log.e(TAG, e.toString()); } } } /** * 在SurfaceView销毁的时候调用该方法 */ @Override public void surfaceDestroyed(SurfaceHolder holder) { if(mediaPlayer.isPlaying()) { position = mediaPlayer.getCurrentPosition(); mediaPlayer.stop(); } } } private void play() throws IOException { File vedioFile = new File(Environment.getExternalStorageDirectory(), filename); Log.i(TAG, vedioFile.getAbsolutePath()); // 重置为初始状态 mediaPlayer.reset(); // 设置音频流的类型 mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); // 设置vedio影片以SurfaceHolder播放 mediaPlayer.setDisplay(surfaceView.getHolder()); // 设置vedio文件路径 //mediaPlayer.setDataSource(vedioFile.getAbsolutePath()); FileInputStream fis = new FileInputStream(vedioFile.getAbsolutePath()); mediaPlayer.setDataSource(fis.getFD()); // 缓冲 //mediaPlayer.prepare(); mediaPlayer.prepareAsync(); // 开始播放 mediaPlayer.start(); } }
***万事万物都有裂痕,那是光照进来的地方***

浙公网安备 33010602011771号