Ce document présente les concepts de base que vous devez connaître avant de travailler avec Media Player.
Cours sur le son et la vidéo
Les classes suivantes diffusent du son et de la vidéo dans le framework Android:
MediaPlayer
: cette classe est l'API principale pour la lecture audio et vidéo.AudioManager
: cette classe gère les sources audio et la sortie audio sur un appareil.
Déclarations de fichier manifeste
Avant de commencer à développer votre application à l'aide de MediaPlayer, assurez-vous que votre fichier manifeste contient les déclarations appropriées pour permettre l'utilisation des fonctionnalités associées.
Autorisation Internet:si vous utilisez MediaPlayer pour diffuser du contenu en réseau, votre application doit demander l'accès au réseau.
<uses-permission android:name="android.permission.INTERNET" />
Autorisation Wake Lock:si votre application de lecteur doit empêcher l'écran de s'assombrir ou le processeur de passer en veille, ou si elle utilise les méthodes
MediaPlayer.setScreenOnWhilePlaying(boolean)
ouMediaPlayer.setWakeMode(android.content.Context, int)
, vous devez demander cette autorisation.<uses-permission android:name="android.permission.WAKE_LOCK" />
Utiliser la classe MediaPlayer
La classe MediaPlayer
est un composant essentiel du framework multimédia.
Un objet de cette classe peut extraire, décoder et lire à la fois du contenu audio et vidéo avec une configuration minimale. MediaPlayer
est compatible avec plusieurs sources multimédias, y compris les suivantes:
- Ressources locales
- URI internes, tels que ceux que vous pouvez obtenir à partir d'un Content Resolver
- URL externes (streaming)
Pour obtenir la liste des formats multimédias compatibles avec Android, consultez la page Formats multimédias acceptés.
Exemples d'utilisation de sources audio
Voici un exemple de lecture d'un contenu audio disponible en tant que ressource brute locale (enregistrée dans le répertoire res/raw/
de votre application):
Kotlin
var mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1)
mediaPlayer.start() // no need to call prepare(); create() does that for you
Java
MediaPlayer mediaPlayer = MediaPlayer.create(context, R.raw.sound_file_1);
mediaPlayer.start(); // no need to call prepare(); create() does that for you
Dans ce cas, une ressource "brute" est un fichier que le système n'essaie pas d'analyser de manière particulière. Toutefois, le contenu de cette ressource ne doit pas être de l'audio brut. Il doit s'agir d'un fichier multimédia correctement encodé et mis en forme dans l'un des formats compatibles.
Voici comment lire à partir d'un URI disponible localement dans le système (que vous avez obtenu via un Content Resolver, par exemple):
Kotlin
val 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()
}
Java
Uri 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();
La lecture à partir d'une URL distante à l'aide du streaming HTTP se présente comme suit:
Kotlin
val 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()
}
Java
String 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();
Utiliser la préparation asynchrone pour améliorer les performances
Tenez compte des performances lorsque vous utilisez MediaPlayer
. Par exemple, l'exécution de l'appel à prepare()
peut prendre beaucoup de temps, car elle peut impliquer l'extraction et le décodage de données multimédias. Par conséquent, comme pour toute méthode dont l'exécution peut prendre beaucoup de temps, n'appelez jamais cette méthode à partir du thread UI de votre application. Cela entraîne l'arrêt de la réponse de l'UI jusqu'à ce que la méthode renvoie une réponse, ce qui constitue une mauvaise expérience utilisateur et peut entraîner une erreur ANR (Application Not Responding).
Pour éviter de bloquer votre thread d'UI, créez un autre thread pour préparer MediaPlayer
et informez le thread principal une fois terminé. Le framework fournit un moyen pratique d'exécuter la méthode prepareAsync()
pour effectuer cette tâche. Cette méthode commence à préparer le contenu multimédia en arrière-plan et renvoie immédiatement. Lorsque le contenu multimédia est prêt, la méthode onPrepared()
de MediaPlayer.OnPreparedListener
, configurée via setOnPreparedListener()
, est appelée.
En savoir plus
Jetpack Media3 est la solution recommandée pour la lecture multimédia dans votre application. En savoir plus
Ces pages traitent des sujets liés à l'enregistrement, au stockage et à la lecture d'audio et de vidéo: