视频播放-最新android技术总结

视频播放在main.xml布局文件添加用于视频画面绘制的SurfaceView控件: SurfaceView surfaceView = (SurfaceView)this.findViewById(R.id.surfaceView); surfaceView.getHolder().setFixedSize(176, 144); //设置分辨率/*下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前*/ surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); MediaPlayer mediaPlayer = new MediaPlayer(); mediaPlayer.reset();//重置为初始状态mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); /*设置Video影片以SurfaceHolder播放*/ mediaPlayer.setDisplay(surfaceView.getHolder()); mediaPlayer.setDataSource("/mnt/sdcard/oppo.mp4"); mediaPlayer.prepare(); mediaPlayer.start();//播放mediaPlayer.pause();//暂停播放mediaPlayer.start();//恢复播放mediaPlayer.stop();//停止播放mediaPlayer.release();//释放资源package cn.itcast.video; import java.io.IOException; import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Bundle; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.EditText; import android.widget.ImageButton; public class VideoActivity extends Activity { private static final String TAG = "VideoActivity"; private EditText filenameText; private SurfaceView surfaceView; private MediaPlayer mediaPlayer; private String filename;//当前播放文件的名称private int position;//记录播放位置@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.main); this.mediaPlayer = new MediaPlayer(); this.filenameText = (EditText) this.findViewById(R.id.filename); this.surfaceView = (SurfaceView) this.findViewById(R.id.surfaceView); ImageButton playButton = (ImageButton) this.findViewById(R.id.play); ImageButton pauseButton = (ImageButton) this.findViewById(R.id.pause); ImageButton resetButton = (ImageButton) this.findViewById(R.id.reset); ImageButton stopButton = (ImageButton) this.findViewById(R.id.stop); ButtonClickListener listener = new ButtonClickListener(); playButton.setOnClickListener(listener); pauseButton.setOnClickListener(listener); resetButton.setOnClickListener(listener); stopButton.setOnClickListener(listener); /*下面设置Surface不维护自己的缓冲区,而是等待屏幕的渲染引擎将内容推送到用户面前*/ this.surfaceView.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); this.surfaceView.getHolder().setFixedSize(176, 144);//设置分辨率this.surfaceView.getHolder().setKeepScreenOn(true); this.surfaceView.getHolder().addCallback(new SurfaceListener()); } private class ButtonClickListener implements View.OnClickListener{ @Override public void onClick(View v) { try { switch (v.getId()) { case R.id.play://来自播放按钮filename = filenameText.getText().toString(); play(); break; case R.id.pause://来自暂停按钮if(mediaPlayer.isPlaying()){ mediaPlayer.pause(); }else{ mediaPlayer.start(); } break; case R.id.reset://来自重新播放按钮if(!mediaPlayer.isPlaying()) play(); mediaPlayer.seekTo(0); break; case R.id.stop://来自停止按钮if(mediaPlayer.isPlaying()) mediaPlayer.stop(); break; } } catch (Exception e) { Log.e(TAG, e.toString()); } } } /** *播放视频*/ private void play() throws IOException { mediaPlayer.reset(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); mediaPlayer.setDataSource("/mnt/sdcard/"+ filename);//设置需要播放的视频mediaPlayer.setDisplay(surfaceView.getHolder());//把视频画面输出到SurfaceView mediaPlayer.prepare(); mediaPlayer.start(); } private class SurfaceListener implements SurfaceHolder.Callback{ @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceCreated(SurfaceHolder holder) {//方法在onResume()后被调用Log.i(TAG, "surfaceCreated()"); if(position>0 && filename!=null){ try { play(); mediaPlayer.seekTo(position); position = 0; } catch (Exception e) { Log.e(TAG, e.toString()); } } } @Override public void surfaceDestroyed(SurfaceHolder holder) { Log.i(TAG, "surfaceDestroyed()"); } } @Override protected void onPause() {//当其他Activity被打开,停止播放if(mediaPlayer.isPlaying()){ position = mediaPlayer.getCurrentPosition();//得到播放位置mediaPlayer.stop(); } super.onPause(); } @Override protected void onDestroy() { if(mediaPlayer.isPlaying()) mediaPlayer.stop(); mediaPlayer.release(); super.onDestroy(); } } *
ppt 文件大小:1.56MB