天选集结号活动中心

天选集结号活动中心

shape
  • Home
  • 深度测评
  • 媒体播放器使用入门

媒体播放器使用入门

  • 2026-06-16 10:55:27
  • admin

本文档介绍了您在使用媒体播放器之前应熟悉的基本概念。

声音和视频类

以下类用于在 Android 框架中播放声音和视频:

MediaPlayer:此类是用于播放声音和视频的主要 API。

AudioManager:此类用于管理设备上的音频源和音频输出。

清单声明

在开始使用 MediaPlayer 开发应用之前,请确保您的清单具有适当的声明,这样才能使用相关功能。

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

唤醒锁定权限:如果播放器应用需要防止屏幕变暗或处理器进入休眠状态,或者要使用 MediaPlayer.setScreenOnWhilePlaying(boolean) 或 MediaPlayer.setWakeMode(android.content.Context, int) 方法,则您必须申请此权限。

使用 MediaPlayer 类

MediaPlayer 类是媒体框架的重要组成部分。此类的对象能够获取、解码以及播放音频和视频,而且只需极少量设置。MediaPlayer 支持多种媒体源,包括:

本地资源

内部 URI,例如您可能从内容解析器那获取的 URI

外部网址(流式传输)

如需查看 Android 支持的媒体格式列表,请参阅支持的媒体格式页面。

使用音频源的示例

以下示例展示了如何播放作为本地原始资源(保存在应用的 res/raw/ 目录中)提供的音频:

Kotlinvar mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1)

mediaPlayer.start() // no need to call prepare(); create() does that for you

JavaMediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);

mediaPlayer.start(); // no need to call prepare(); create() does that for you

在本例中,“原始”资源是指系统不会尝试以任何特定方式解析的文件。不过,该资源的内容不应为原始音频。它应该是采用某种支持的格式且经过适当编码和格式化的媒体文件。

播放系统中本地可用的 URI(例如,您可以通过内容解析器获取)中的内容方法如下:

Kotlinval myUri: Uri = .... // initialize Uri here

val mediaPlayer = MediaPlayer().apply {

setAudioAttributes(

AudioAttributes.Builder()

.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)

.setUsage(AudioAttributes.USAGE_MEDIA)

.build()

)

setDataSource(applicationContext, myUri)

prepare()

start()

}

JavaUri myUri = ....; // initialize Uri here

MediaPlayer mediaPlayer = new MediaPlayer();

mediaPlayer.setAudioAttributes(

new AudioAttributes.Builder()

.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)

.setUsage(AudioAttributes.USAGE_MEDIA)

.build()

);

mediaPlayer.setDataSource(getApplicationContext(), myUri);

mediaPlayer.prepare();

mediaPlayer.start();

通过 HTTP 流式传输并播放远程网址上的内容如下所示:

Kotlinval url = "http://........" // your URL here

val mediaPlayer = MediaPlayer().apply {

setAudioAttributes(

AudioAttributes.Builder()

.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)

.setUsage(AudioAttributes.USAGE_MEDIA)

.build()

)

setDataSource(url)

prepare() // might take long! (for buffering, etc)

start()

}

JavaString url = "http://........"; // your URL here

MediaPlayer mediaPlayer = new MediaPlayer();

mediaPlayer.setAudioAttributes(

new AudioAttributes.Builder()

.setContentType(AudioAttributes.CONTENT_TYPE_MUSIC)

.setUsage(AudioAttributes.USAGE_MEDIA)

.build()

);

mediaPlayer.setDataSource(url);

mediaPlayer.prepare(); // might take long! (for buffering, etc)

mediaPlayer.start();

注意:如果您传递某个网址以流式传输在线媒体文件,则该文件必须能够进行渐进式下载。注意:使用 setDataSource() 时,您必须捕获或传递 IllegalArgumentException 和 IOException,因为您引用的文件可能并不存在。

使用异步准备来提升性能

使用 MediaPlayer 时,请注意性能。例如,对 prepare() 的调用可能需要很长时间来执行,因为它可能涉及获取和解码媒体数据。因此,与任何可能需要很长时间来执行的方法一样,切勿从应用的界面线程中调用它。这样做会导致界面停止响应,直到系统返回该方法,这是一种糟糕的用户体验,并且可能会导致 ANR(应用无响应)错误。

为避免界面线程挂起,请生成其他线程来准备 MediaPlayer,并在准备工作完成后通知主线程。该框架提供了一种便捷的方式来完成 prepareAsync() 方法,以执行此任务。此方法会在后台开始准备媒体,并立即返回。当媒体准备就绪后,系统会调用通过 setOnPreparedListener() 配置的 MediaPlayer.OnPreparedListener 的 onPrepared() 方法。

了解详情

Jetpack Media3 是推荐用于在应用中播放媒体的解决方案。详细了解。

以下页面介绍了有关录制、存储以及播放音频和视频的主题:

支持的媒体格式

MediaRecorder

数据存储

<<<
Previous Post
2026世界杯实力分析:夺冠热门球队与黑马预测

Copyright © 2088 天选集结号活动中心 All Rights Reserved.

友情链接