1、基本使用

  • MediaPlayer主要用于播放音频,没有提供图像输出界面,所以我们需要借助其他的 组件来显示MediaPlayer播放的图像输出,我们可以使用用SurfaceView
  • 代码逻辑 ```json package com.xinhe.androidd;

import androidx.appcompat.app.AppCompatActivity;

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 java.io.IOException;

public class MainActivity extends AppCompatActivity {

  1. private static final String TAG = "MainActivity";
  2. private MediaPlayer mediaPlayer;
  3. private SurfaceView surfaceView;
  4. @Override
  5. protected void onCreate(Bundle savedInstanceState) {
  6. super.onCreate(savedInstanceState);
  7. setContentView(R.layout.activity_main);
  8. surfaceView = findViewById(R.id.surface);
  9. surfaceView.getHolder().addCallback(new SurfaceHolder.Callback() {
  10. @Override
  11. public void surfaceCreated(SurfaceHolder holder) {
  12. Log.d(TAG, "surfaceCreated: "+holder.toString());
  13. }
  14. @Override
  15. public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
  16. Log.d(TAG, "surfaceCreated: format = " + format + ", width = " + width + ", height = " + height);
  17. }
  18. @Override
  19. public void surfaceDestroyed(SurfaceHolder holder) {
  20. Log.d(TAG, "surfaceCreated: "+holder.toString());
  21. }
  22. });
  23. }
  24. public void play(View view) {
  25. try {
  26. mediaPlayer = new MediaPlayer();
  27. mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
  28. @Override
  29. public void onPrepared(MediaPlayer mp) {
  30. mediaPlayer.start();
  31. }
  32. });
  33. mediaPlayer.setDisplay(surfaceView.getHolder());
  34. mediaPlayer.setDataSource("http://clips.vorwaerts-gmbh.de/big_buck_bunny.mp4");
  35. mediaPlayer.prepareAsync();
  36. } catch (IOException e) {
  37. Log.e(TAG, "start: " + e.toString());
  38. e.printStackTrace();
  39. }
  40. }

}

  1. - 布局文件
  2. ```json
  3. <?xml version="1.0" encoding="utf-8"?>
  4. <androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
  5. xmlns:app="http://schemas.android.com/apk/res-auto"
  6. xmlns:tools="http://schemas.android.com/tools"
  7. android:layout_width="match_parent"
  8. android:layout_height="match_parent"
  9. tools:context=".MainActivity">
  10. <SurfaceView
  11. android:id="@+id/surface"
  12. app:layout_constraintLeft_toLeftOf="parent"
  13. app:layout_constraintTop_toTopOf="parent"
  14. android:layout_width="match_parent"
  15. android:layout_height="300dp"/>
  16. <Button
  17. android:onClick="play"
  18. app:layout_constraintLeft_toLeftOf="parent"
  19. app:layout_constraintTop_toBottomOf="@id/surface"
  20. android:layout_width="match_parent"
  21. android:layout_height="wrap_content"/>
  22. </androidx.constraintlayout.widget.ConstraintLayout>