首页 > 其他分享 >android meidaplayer + surfaceview封装视频播放

android meidaplayer + surfaceview封装视频播放

时间:2023-07-24 11:04:22浏览次数:43  
标签:视频 meidaplayer SurfaceView MediaPlayer mediaPlayer surfaceview android 播放 void

Android MediaPlayer + SurfaceView 封装视频播放

作为一名经验丰富的开发者,我将教会你如何使用 Android MediaPlayer 和 SurfaceView 来封装视频播放功能。下面是整个实现过程的步骤:

步骤 操作
1 添加权限和组件
2 初始化 MediaPlayer
3 设置 SurfaceView
4 设置资源路径
5 准备 MediaPlayer
6 监听 MediaPlayer 的状态
7 控制视频播放
8 释放 MediaPlayer

接下来,我会详细介绍每一步需要做什么,并提供代码示例。

1. 添加权限和组件

首先,在 AndroidManifest.xml 文件中添加以下权限:

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.WAKE_LOCK" />

然后,在布局文件中添加 SurfaceView 组件:

<SurfaceView
    android:id="@+id/surfaceView"
    android:layout_width="match_parent"
    android:layout_height="match_parent" />

2. 初始化 MediaPlayer

在你的活动或片段中,创建一个 MediaPlayer 实例:

private MediaPlayer mediaPlayer;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    mediaPlayer = new MediaPlayer();
}

3. 设置 SurfaceView

在代码中找到 SurfaceView,并将其与 MediaPlayer 关联起来:

SurfaceView surfaceView = findViewById(R.id.surfaceView);
SurfaceHolder surfaceHolder = surfaceView.getHolder();
surfaceHolder.addCallback(new SurfaceHolder.Callback() {
    @Override
    public void surfaceCreated(SurfaceHolder holder) {
        mediaPlayer.setDisplay(holder);
    }

    @Override
    public void surfaceChanged(SurfaceHolder holder, int format, int width, int height) {
        // 可以在此处处理 SurfaceView 的大小变化
    }

    @Override
    public void surfaceDestroyed(SurfaceHolder holder) {
        mediaPlayer.setDisplay(null);
    }
});

4. 设置资源路径

通过设置资源路径来指定要播放的视频文件:

String videoPath = "android.resource://" + getPackageName() + "/" + R.raw.video;
mediaPlayer.setDataSource(this, Uri.parse(videoPath));

在这个示例中,将视频文件放置在 res/raw 目录下,并使用 R.raw.video 来引用。

5. 准备 MediaPlayer

在设置资源路径后,需要调用 prepareAsync() 方法来准备 MediaPlayer:

mediaPlayer.prepareAsync();

6. 监听 MediaPlayer 的状态

在准备完成后,可以注册 OnPreparedListener 来监听 MediaPlayer 的状态:

mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
    @Override
    public void onPrepared(MediaPlayer mp) {
        // 准备完成后可以开始播放视频
        mediaPlayer.start();
    }
});

7. 控制视频播放

你可以使用以下方法来控制视频的播放:

  • mediaPlayer.start():开始播放视频
  • mediaPlayer.pause():暂停播放视频
  • mediaPlayer.seekTo(position):跳转到指定位置
  • mediaPlayer.stop():停止播放视频

8. 释放 MediaPlayer

在活动或片段销毁时,需要释放 MediaPlayer 的资源:

@Override
protected void onDestroy() {
    super.onDestroy();
    if (mediaPlayer != null) {
        mediaPlayer.release();
        mediaPlayer = null;
    }
}

通过以上步骤,你已经成功地封装了一个基本的视频播放器,使用 Android MediaPlayer 和 SurfaceView 实现。希望这篇文章能对你有所帮助!

标签:视频,meidaplayer,SurfaceView,MediaPlayer,mediaPlayer,surfaceview,android,播放,void
From: https://blog.51cto.com/u_16175464/6832990

相关文章

  • android studio大小写快捷键
    AndroidStudio大小写快捷键在日常的Android开发中,我们经常需要快速地修改代码中的变量、方法或类名的大小写。这时,掌握AndroidStudio中的大小写快捷键是非常重要的,可以极大地提高我们的开发效率。本文将介绍几个常用的大小写快捷键,并提供相应的代码示例。快捷键列表以下是Andr......
  • android layer-list bitmap
    AndroidLayer-ListBitmap实现步骤整体流程概述为了实现AndroidLayer-ListBitmap,我们需要按照以下步骤进行操作:步骤操作1创建一个XML文件来定义Layer-List2在XML文件中添加每个图层的属性和位置3创建一个Bitmap对象并将其绘制到Canvas上4将......
  • android studio打印日志过长显示补全
    AndroidStudio打印日志过长显示补全实现步骤作为一名经验丰富的开发者,我将向你介绍如何在AndroidStudio中实现打印日志过长时的显示补全功能。这个功能可以帮助你更方便地查看和调试长日志信息。实现步骤下面是整个实现过程的步骤概览。我们将逐步进行操作,确保你能够完全了解......
  • android keywidth
    实现Android键盘宽度的步骤步骤概览下面是实现Android键盘宽度的步骤概览:步骤描述1获取键盘视图2监听键盘视图的布局变化3计算键盘的宽度接下来,我们将详细介绍每个步骤需要做什么,以及需要使用的代码和代码注释。步骤详解步骤1:获取键盘视图首先,我们需......
  • android init.rc添加服务
    Androidinit.rc添加服务在Android系统中,init.rc文件是一个重要的配置文件,它用于初始化系统的各种服务和进程。通过修改init.rc文件,我们可以添加自定义的服务,以满足特定的需求。本文将详细介绍如何在Androidinit.rc文件中添加自定义服务,并提供相应的代码示例。init.rc文件概述i......
  • android init.rc service 启动
    Androidinit.rcservice启动流程在Android系统中,init进程是系统的第一个进程,负责启动和管理其他所有进程。在init进程的配置文件init.rc中,可以定义并启动各种系统服务(services)。本文将介绍如何实现"androidinit.rcservice启动"的流程,并提供相应的代码示例和注释。1.编写ini......
  • android imageview selector
    AndroidImageViewSelector实现流程引言在Android开发中,我们经常会使用ImageView来显示图片。而在用户与图片交互时,我们通常需要为ImageView设置不同的状态,例如按下、选中、正常等。为了实现这些状态的切换,我们可以使用Android的ImageViewSelector来简化开发。整体流程下面是......
  • UnityHub AndroidSDKManager在哪
    UnityHubAndroidSDKManager在哪引言作为一名经验丰富的开发者,我很乐意教会你如何在UnityHub中找到AndroidSDKManager。在本文中,我将详细介绍整个过程,并提供每个步骤所需的代码和注释。过程概述在UnityHub中找到AndroidSDKManager可以让我们更方便地管理Android开发所需的SDK和......
  • 如何校正Android系统时间
    如何校正Android系统时间引言在使用Android设备时,我们经常遇到时间不准确的情况,这可能是由于网络同步问题、电池电量不足或者系统故障等原因造成的。不准确的系统时间可能会导致应用程序的异常运行,因此,我们需要学习如何校正Android系统时间来确保设备运行正常。方法一:自动时间同......
  • windows 11 android 安卓 子系统
    启用或关闭windows功能:需要选好Hyper-V家庭版开启hyper-vhttps://www.cnblogs.com/yiminlin/p/17519531.html虚拟机平台设置——时间和语音——国家或地区:美国windowsstore——amazonappstore安装好后:高级设置——实验性功能——共享用户文件夹关闭——文件(启动程序)......