Android 音频开发之 MediaPlayer

虽然直播落幕,但 Android 的音、视频技术仍然倍受关注!

一、引言

Android 提供了常见的音频、视频的编码、解码机制。借助于多媒体类 MediaPlayer 的支持,开发人员可以很方便地在应用中播放音频、视频。只不过使用 MediaPlayer 播放视频时,没有提供图像输出界面。

二、MediaPlayer 概述

Android 框架中使用以下类播放音频和视频:

MediaPlayer : 这个类是播放音频和视频的主要API

AudioManager : 该类管理设备上的音频源和音频输出

Android 下对于音频、视频的支持均需要使用到 MediaPlayer,它主要用来控制 Android 下播放文件或流的类。MediaPlayer 处于 Android 多媒体包下 “android.media.MediaPlayer”,仅有一个无参的构造函数,虽然仅为我们提供了一个无参的构造函数,但为了开发方便,还为我们提供了几个静态的 create() 方法用于完成MediaPlayer 初始化的工作。

static MediaPlayer create(Context context,int resid):通过音频资源的 Id 来创建一个 MediaPlayer 实例
static MediaPlayer create(Context context,Uri uri):通过一个音频资源的 Uri 地址来创建一个 MediaPlayer 实例

MediaPlayer 除了通过上面两个 create() 方法在初始化的时候指定媒体资源,还可以通过 MediaPlayer.setDataSource() 方法为初始化后的 MediaPlayer 设置媒体资源,setDataSource() 具有多个重载函数,适用于不同的媒体资源来源,以下讲解几个常用的,其他的可以查阅官方文档。

  • void setDataSource(String path):通过一个媒体资源的地址指定 MediaPlayer 的数据源,这里的 path 可以是一个本地路径,也可以是网络路径
  • void setDataSource(Context context,Uri uri):通过一个 Uri 指定 MediaPlayer 的数据源,这里的 Uri 可以是网络路径或这一个内容提供者的 Uri
  • void setDataSource(FileDescriptor fd):通过一个 FileDescriptor 指定一个 MediaPlayer 的数据源

MediaPlayer 支持的数据源有:本地文件、内部的 Uri(内容提供者)、外部 Uri。

三、清单声明

在使用 MediaPlayer 对应用程序进行开发之前,请确保清单中有适当的声明,允许使用相关特性。

Internet 权限——如果您正在使用 MediaPlayer 来播放流基于网络的内容,那么应用程序必须请求网络访问。

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

Wake Lock 权限——如果您的播放器应用程序需要阻止屏幕变暗或处理器休眠,或 MediaPlayer.setWakeMode() 方法,必须请求此权限。

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

四、MediaPlayer 状态管理

MediaPlayer 状态机图

MediaPlayer 类中的文档显示了一个完整的状态机,它阐明了哪些方法将 MediaPlayer 从一个状态移动到另一个状态。例如,当您创建一个新的 MediaPlayer 时,它处于空闲状态。这时,您应该通过调用 setDataSource() 来初始化它,使它处于初始化状态。之后,您必须使用 prepare() 或 prepareAsync() 方法来准备它。当 MediaPlayer 完成准备工作时,它进入准备状态,这意味着您可以调用 start() 来让它播放媒体。此时,您可以通过调用 start()、pause() 和 seekTo() 等方法在 start、pause() 和 PlaybackCompleted 状态之间切换。但是,当您调用 stop() 时,请注意,在重新准备 MediaPlayer 之前,

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值