Android 使用MediaPlayer播放音频详解

目录

一、官方资料

二、简单介绍

三、MediaPlayer使用

1.创建MediaPlayer实例

2.重要API

3.状态图

4.代码

5.常用API

6.辅助效果

总结


一、官方资料

MediaPlayer 概览https://developer.android.google.cn/guide/topics/media/mediaplayer?hl=zh_cn

MediaPlayer 文档https://developer.android.google.cn/reference/kotlin/android/media/MediaPlayer

其实,通过阅读上面两个文档,基本上就可以去实现自己的需求了,毕竟每个人的需求不一样。由于需求只用到播放音频部分,所以不会设计涉及视频播放。

二、简单介绍

 官方概述是这样介绍的:

Android 多媒体框架支持播放各种常见媒体类型,以便您轻松地将音频、视频和图片集成到应用中。您可以使用 MediaPlayer API,播放存储在应用资源(原始资源)内的媒体文件、文件系统中的独立文件或者通过网络连接获得的数据流中的音频或视频。

总之,MediaPlayer既可以播放音视频。MediaPlayer位于android.media包下,media下一些常用的API:

  • MediaPlayer :可用于控制音频/视频文件和流的播放。 可以在VideoView找到有关如何使用此类中的方法的示例。
  • AudioTrack :为应用程序管理和播放单个音频资源。 它允许将 PCM 音频缓冲区流式传输到音频接收器以进行播放。
  • MediaCodec :可用于访问低级媒体编解码器,即编码器/解码器组件。 它是 Android 底层多媒体支持基础设施的一部分(通常与MediaExtractor 、 MediaSync 、 MediaMuxer 、 MediaCrypto 、 MediaDrm 、 Image 、 Surface和AudioTrack 。)
  • MediaRecorder:用于录制音频和视频。
  • VolumeShaper:类用于在媒体播放期间自动控制音频音量,允许简单实现过渡效果和闪避。

言归正传,继续介绍MediaPlayer。使用前注意:MediaPlayer 不是线程安全的。实例的创建和所有访问都应该在同一个线程上。

如果使用 MediaPlayer 流式播放基于网络的内容,则应用必须申请网络访问权限:

 

如果播放器应用需要防止屏幕变暗或处理器进入休眠状态,则需要权限:

三、MediaPlayer使用

1.创建MediaPlayer实例

创建MediaPlayer,有两种方式,一种是先new出一个实例,然后调用setDataSource()方法。

MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setDataSource(getApplicationContext(), myUri);

 另一种是直接调用静态方法create()创建实例。

//保存在应用的 res/raw/ 目录中的音频资源:R.raw.sound_file_1
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);

这两种方式都有多个方法重载,根据不同的音频资源选择创建方式:

public void setDataSource (String path)
public void setDataSource (FileDescriptor fd)
public void setDataSource (Context context, Uri uri)
public void setDataSource (FileDescriptor fd, long offset, long length)

public static MediaPlayer create(Context context, Uri uri)
public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder)
public static MediaPlayer create(Context context, Uri uri, SurfaceHolder holder,
            AudioAttributes audioAttributes, int audioSessionId)
public static MediaPlayer create(Context context, int resid)
public static MediaPlayer create(Context context, int resid,
            AudioAttributes audioAttributes, int audioSessionId)

列举常用的创建并设置资源的方式:

//1.本地原始资源(保存在应用的 res/raw/ 目录中),该资源的内容不应为原始音频(pcm)。它应该是采用某种支持的格式且经过适当编码和格式化的媒体文件(比如:MP3)
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);

//2.如果你已经获取到Uri
Uri myUri = ....; // initialize Uri here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(getApplicationContext(), myUri);

//3.通过 HTTP 流式传输并播放远程网址上的内容
String url = "http://........"; // your URL here
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(url);

//4.如果已知本地音频文件路径:
String path = "...";
MediaPlayer mediaPlayer = new MediaPlayer();
mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
mediaPlayer.setDataSource(path);

//5.如果资源放在assest下
String path = "..."
AssetFileDescriptor fd = getAssets

你可能感兴趣的:(android,java)