Introduction
La lecture de média audio ou vidéo se fait normalement avec des objets de type MediaPlayer. Par contre, dans le cas de la lecture vidéo, la majorité des fonctionnalités accessibles dans la classe « MediaPlayer » sont également accessibles en utilisant le « widget » VideoView. Il est important de comprendre que l’utilisation des méthodes de « VideoView » ne permet pas de faire tout ce qu’un « MediaPlayer » peut effectuer.
Dans cette page, nous débuterons par voir comment utiliser la classe « MediaPlayer » pour jouer des fichiers audio. Ensuite, nous verrons comment utiliser un « VideoView » pour gérer les fichiers vidéo. Finalement, nous verrons comment utiliser le « MediaPlayer » inclus dans un « VideoView » afin d’utiliser les mêmes méthodes pour gérer, autant les fichiers audio que vidéo.
Lecture de fichiers audio
Chargement du fichier audio
Afin de charger un fichier audio dans un « MediaPlayer », on utilise la méthode ‘setDataSource’ suivie de ‘prepare ». Dans le cas ou l’ouverture du média échouerait, il est nécessaire de gérer un exception de type « IOException ». Voici un exemple:
private void preparerAudio(Uri aUri) {
player = new MediaPlayer();
try {
player.setDataSource(this, aUri);
player.prepare();
} catch (IOException e) {
// Gestion d'erreur
}
}
Il est important de noter que si l’objet « MediaPlayer » a déjà préalablement chargé un fichier audio, il n’est pas possible de faire un second ‘setDataSource’. Il est nécessaire d’arrêter la lecture avec ‘stop’ et de remettre le « MediaPlayer » à son état d’origine avec ‘reset’:
private void changerAudio(Uri aUri) {
player.stop();
player.reset();
try {
player.setDataSource(this, aUri);
player.prepare();
} catch (IOException e) {
// Gestion d'erreur
}
}
Vous pouvez également noter qu’il est possible de faire le ‘stop’ ainsi que le ‘reset’, même dans le cas ou l’objet « MediaPlayer » vient à l’instant d’être créé. Il est également possible de créer un nouvel objet « MediaPlayer » pour jouer un nouveau fichier audio.
Contrôle du « MediaPlayer »
Voici les méthodes de contrôle incluses dans un « MediaPlayer »:
-
-
- start: lance la lecture du média.
- pause: arrête la lecture du média, mais permets tout de même au média de continuer à l’endroit où il a été arrêté en utilisant la méthode ‘start’ de nouveau.
- stop: arrête la lecture du média et le décharge de la mémoire. Pour relancer la lecture, il faudra recharger le « MediaPlayer » en utilisant ‘reset’, ‘setDataSource’ et ‘prepare’ (comme vu plus haut).
- getCurrentPosition: permets d’accéder à la position (en milliseconde) en cours dans le média.
- seekto: permets de se déplacer dans le média. Cette méthode prend en argument le nombre de millisecondes depuis le début du média qu’il faut se déplacer.
- setScreenOnWhilePlaying: Permet de s’assurer que l’écran de l’appareil ne devienne pas en veille durant la lecture du média.
- setOnCompletionListener: Événement lancé lorsque le media se termine.
-
Lecture de fichier vidéo
Pour lire un fichier vidéo, on peut utiliser un « VideoView ». Ce type de vue s’occupe de gérer la lecture du vidéo et de l’afficher dans le « layout » de l’activité.
Chargement d’un fichier vidéo
Pour charger un fichier vidéo dans un « VideoView », on utilise ‘setVideoURI’:
VideoView lVideoVue = findViewById(R.id.video_vue);
lVideoVue.setVideoURI(lUri);
Contrôle du « VideoView »
Voici les méthodes de contrôle incluses dans un « VideoView »:
-
-
- start: lance la lecture du média.
- pause: arrête la lecture du média, mais permets tout de même au média de continuer à l’endroit où il a été arrêté en utilisant la méthode ‘start’ de nouveau.
- seekto: permets de se déplacer dans le média. Cette méthode prend en argument le nombre de millisecondes depuis le début du média qu’il faut se déplacer.
-
Les méthodes fonctionnent de la même manière que pour le « MediaPlayer », mais sont beaucoup plus limitées.
Utiliser un « MediaPlayer » avec un « VideoView »
Pour avoir tout l’avantage du « MediaPlayer » lorsqu’un fichier vidéo est utilisé, on peut utiliser le « MediaPlayer » inclue à l’intérieur du « VideoView ». Pour se faire, il faut se créer un « OnPreparedListener » et l’assigner au « VideoView ». Voici un exemple:
private void preparerVideo(Uri aUri) {
VideoView lVideoVue = findViewById(R.id.video_vue);
lVideoVue.setOnPreparedListener(new OnPrepareVideo());
lVideoVue.setVideoURI(aUri);
}
private class OnPrepareVideo implements MediaPlayer.OnPreparedListener {
@Override
public void onPrepared(MediaPlayer aMediaPlayer) {
player = aMediaPlayer;
}
}
En utilisant cette mécanique, il est possible, une sauvegarder le « MediaPlayer » dans un attribut de l’activité de manière à pouvoir l’utiliser de la même manière que pour la lecture des fichiers audio. Par contre, il est important de considérer que le « Listener » n’est pas nécessairement lancé dès le démarrage de l’activité. Pour éviter des erreurs, il est recommandé d’initialiser le « MediaPlayer » à « null » et de faire des « if (player != null) » à chaque utilisation du « MediaPlayer ». Voici un exemple:
public void onPlayClick(View aVue) {
if (player != null) {
player.start();
}
}
Également, tout comme pour la lecture de fichier audio, si nous souhaitons changer de vidéo dans le lecteur, il est nécessaire de faire un « stop » et « reset » sur le « MediaPlayer ». De plus, puisque le « MediaPlayer » risque d’être dans un état invalide jusqu’à ce que le « OnPrepareListener » soit lancé, il est recommandé de remettre le « MediaPlayer » à « null ». Voici un exemple:
private void changerVideo(Uri aUri) {
if (player != null) {
player.stop();
player.reset();
player = null;
preparerVideo(aUri);
}
}
Auteur: Louis Marchand
Sauf pour les sections spécifiées autrement, ce travail est sous licence Creative Commons Attribution 4.0 International.