效果
代码
package com.javen.devicemange.CrazyOne.media; import android.Manifest; import android.media.AudioManager; import android.media.MediaPlayer; import android.os.Bundle; import android.os.Environment; import android.support.annotation.Nullable; import android.support.v4.app.ActivityCompat; import android.support.v7.app.AppCompatActivity; import android.util.Log; import android.view.SurfaceHolder; import android.view.SurfaceView; import android.view.View; import android.widget.Button; import com.javen.devicemange.R; import java.io.File; import java.io.IOException; /** * Created by Administrator on 2017/2/27 0027. * 使用MediaPlayer和SurfaceView播放视频 */ public class SurfaceViewPlayVideo extends AppCompatActivity implements View.OnClickListener { private SurfaceView surface_view; private Button play; private Button pause; private Button stop; private MediaPlayer mediaPlayer; private int position; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.surfaceviewplayvideo); initView(); requestPermission(); mediaPlayer = new MediaPlayer(); //设置surface自己不管理的缓冲区 surface_view.getHolder().setType(SurfaceHolder.SURFACE_TYPE_PUSH_BUFFERS); //设置播放时打开屏幕 surface_view.getHolder().setKeepScreenOn(true); //设置监听 surface_view.getHolder().addCallback(new SurfaceListner()); } private void requestPermission() { String[] needPermission = { Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE, }; ActivityCompat.requestPermissions(this, needPermission, 1); } private void initView() { surface_view = (SurfaceView) findViewById(R.id.surface_view); play = (Button) findViewById(R.id.play); pause = (Button) findViewById(R.id.pause); stop = (Button) findViewById(R.id.stop); play.setOnClickListener(this); pause.setOnClickListener(this); stop.setOnClickListener(this); } @Override public void onClick(View v) { switch (v.getId()) { //播放 case R.id.play: try { playMediaPlayer(); } catch (IOException e) { e.printStackTrace(); Log.d("GsonUtils", "Exception=" + e.toString()); } break; //暂停 case R.id.pause: if (mediaPlayer.isPlaying()) { mediaPlayer.pause(); } else { mediaPlayer.start(); } break; //停止 case R.id.stop: if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); } break; } } private class SurfaceListner implements SurfaceHolder.Callback { @Override public void surfaceCreated(SurfaceHolder holder) { Log.d("GsonUtils", "surfaceCreated_position=" + position); if (position > 0) { Log.d("GsonUtils", "seekTo="); try { playMediaPlayer(); //跳到上次继续播放 mediaPlayer.seekTo(position); position = 0; } catch (Exception e) { e.printStackTrace(); Log.d("GsonUtils", "Exception=" + e.toString()); } } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } } private void playMediaPlayer() throws IOException { mediaPlayer.reset(); mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); //获取sd卡根目录下的test.mp4文件 File file = new File(Environment.getExternalStorageDirectory().toString() + "/test.mp4"); if (file.exists()) { mediaPlayer.setDataSource(file.getAbsolutePath()); //把视频画面输出到surfaceView mediaPlayer.setDisplay(surface_view.getHolder()); mediaPlayer.prepare(); mediaPlayer.start(); } } //当打开其它activity或者最小化回到桌面时候 @Override protected void onPause() { if (mediaPlayer.isPlaying()) { //保存视频播放的位置 position = mediaPlayer.getCurrentPosition(); mediaPlayer.stop(); } super.onPause(); } @Override protected void onDestroy() { if (mediaPlayer.isPlaying()) { mediaPlayer.stop(); } mediaPlayer.release(); super.onDestroy(); } }
sd卡mp4的位置
布局xml
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <SurfaceView android:id="@+id/surface_view" android:layout_width="match_parent" android:layout_height="300dp" /> <Button android:id="@+id/play" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="play"/> <Button android:id="@+id/pause" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="pause"/> <Button android:id="@+id/stop" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="stop"/> </LinearLayout>
AndroidManifest.xml
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
。。。