2016-12-29 1 views
0

Je suis en train de développer une application de téléchargement de musique qui fait essentiellement du webscrapage sur différentes plateformes de torrent et obtient les torrents. Je veux jouer des fichiers torrent de musique pendant que je les télécharge. J'ai un service qui s'occupe essentiellement de faire tout cela. Je définis un tampon qui attend que le fichier torrent soit téléchargé à au moins 25%, puis j'utilise la classe MediaPlayer pour commencer à lire le fichier. La musique commence à jouer correctement, mais elle s'arrête après un moment, comme si elle ne pouvait pas jouer plus de 25%. J'ai essayé d'utiliser à la fois la classe MediaPlayer d'Android et la bibliothèque FFmpegMediaPlayer. J'ai essayé d'utiliser plusieurs configs:Jouer un fichier musical en le téléchargeant

MediaPlayer mediaPlayer = new MediaPlayer(); 
     FileInputStream fis = null; 
     try { 
      fis = new FileInputStream(mCurrentTrack); 
      mediaPlayer.setDataSource(fis.getFD()); 
      mediaPlayer.setAudioStreamType(AudioManager.STREAM_RING); 
      mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() { 
       @Override 
       public void onPrepared(MediaPlayer mediaPlayer) { 
        mediaPlayer.start(); 
       } 
      }); 
      mediaPlayer.prepareAsync(); 
     } catch (Exception e) { 
      Log.w(APP_TAG, String.format("Something went wrong while trying to play the torrent stream: " + e.toString())); 
     } 

mCurrentTrack est le chemin vers le fichier mp3 que j'ai téléchargé dans mon dossier de téléchargement dans le stockage externe.

J'ai essayé d'utiliser AudioManager.STREAM_MUSIC. J'ai essayé d'utiliser la méthode de préparation prepare(), puis j'appelle la méthode start(). Je triead ouvrir le fichier avec un new File(mCurrentTrack) avant de commencer à jouer et de le régler comme lisible et inscriptible. J'ai essayé beaucoup de combinaisons, mais c'est toujours pareil, la musique joue quelques secondes puis s'arrête. Lorsque je vérifie le stockage externe, le fichier est téléchargé complètement sans problème.

La bibliothèque que j'utilise pour télécharger les fichiers torrent est celui TorrentStream-Android

Toute astuce ou une idée sur la façon de lire ce fichier alors que son cours de téléchargement dans la mouche, serait apprécié.

Répondre

0

Comme quelqu'un l'a souligné here. L'utilisation de la bibliothèque de lecteurs ExoMedia a résolu le problème. Voici l'extrait que je les utilise pour fonctionner:

compile 'com.devbrackets.android:exomedia:3.1.0'

final EMAudioPlayer mediaPlayer = new EMAudioPlayer (getApplicationContext()); 
      mediaPlayer.setOnPreparedListener(new OnPreparedListener() { 
       @Override 
       public void onPrepared() { 
        mediaPlayer.start(); 
       } 
      }); 
      mediaPlayer.setDataSource(getApplicationContext(), Uri.parse(mCurrentTrack)); 
      mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
      mediaPlayer.prepareAsync();