2016-12-29 144 views
0

我正在開發一款音樂下載應用程序,該應用程序基本上可以在不同的torrent平臺上抓取網頁並獲得種子。我想下載它們時播放一些音樂種子文件。我有一個基本上照顧所有這一切的服務。我設置了一個緩衝區,等待下載至少25%的torrent文件,然後使用MediaPlayer類開始播放文件。音樂開始播放OK,但一段時間後會停止播放,好像它不能播放超過25%的音樂。我嘗試使用Android的MediaPlayer類和FFmpegMediaPlayer庫。我試着用幾個CONFIGS:下載時播放音樂文件

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是路徑,我在外部存儲下載到我的下載文件夾中的MP3文件。

我試過使用AudioManager.STREAM_MUSIC。我嘗試使用sync prepare()方法,然後調用start()方法。在開始播放它並將其設置爲readeable和可寫之前,我使用new File(mCurrentTrack)打開文件。我嘗試了很多組合,但總是一樣的,音樂播放幾秒鐘然後停下來。當我檢查外部存儲器時,文件最終完全沒有問題地下載。

,我使用下載torrent文件庫是這個TorrentStream-Android

任何有關如何發揮這一文件,而其在飛行下載,將不勝感激尖或想法。

回答

0

正如有人指出here。使用ExoMedia播放器庫解決了問題。下面是我用得到它的工作片斷:

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();