1. 程式人生 > >安卓本地視訊播放SurfaceView+MediaPlayer

安卓本地視訊播放SurfaceView+MediaPlayer

MainActivity
public class MainActivity extends AppCompatActivity implements SurfaceHolder.Callback{

    private SurfaceView sfv;
    private MediaPlayer mediaPlayer;
    private SurfaceHolder holder;

    @Override
protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main
); sfv = (SurfaceView) findViewById(R.id.sfv); mediaPlayer = new MediaPlayer(); holder = sfv.getHolder(); holder.addCallback(this); mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { @Override public void onPrepared(MediaPlayer mp) { mediaPlayer
.start(); } }); // 視訊播放完成後會回撥的方法 mediaPlayer.setOnCompletionListener(new MediaPlayer.OnCompletionListener() { @Override public void onCompletion(MediaPlayer mp) { mediaPlayer.release(); } }); } @Override public void surfaceCreated(SurfaceHolder holder) { mediaPlayer
.reset(); mediaPlayer.setDisplay(holder); Uri uri = Uri.parse("android.resource://"+getPackageName()+"/"+R.raw.minion_01); try { mediaPlayer.setDataSource(this,uri); } catch (IOException e) { e.printStackTrace(); } } @Override public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) { } @Override public void surfaceDestroyed(SurfaceHolder holder) { } @Override protected void onStop() { super.onStop(); if (mediaPlayer!=null) { mediaPlayer.release(); } } public void play(View view) { mediaPlayer.prepareAsync(); } }
activity_main
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
>
    <SurfaceView
android:id="@+id/sfv"
android:layout_width="match_parent"
android:layout_height="300dp" />
    <Button
android:id="@+id/btn_play"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="開始播放"
android:onClick="play"/>
</LinearLayout>
許可權++
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 粗略定位 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<!-- 精準定位 -->
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.LOCATION_HARDWARE" />