下载时播放音乐文件

时间:2016-12-29 04:42:31

标签: android android-mediaplayer torrent android-ffmpeg

我正在开发一个音乐下载应用程序,它基本上可以在不同的torrent平台上进行网页抓取并获得种子。我想在下载它们时播放一些音乐种子文件。我有一个基本上负责这一切的服务。我设置了一个缓冲区,等待torrent文件下载至少25%,然后我使用MediaPlayer类开始播放该文件。音乐开始播放正常,但过了一段时间它停止了,就好像它不能播放超过25%。我尝试使用Android' MediaPlayer类和FFmpegMediaPlayer库。我试过使用几个配置:

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()方法。我开始使用new File(mCurrentTrack)打开文件,然后开始播放它并将其设置为可重复和可写。我尝试了很多组合,但总是一样,音乐播放几秒然后停止。当我检查外部存储器时,文件最终会完全下载而不会出现问题。

我用来下载torrent文件的库是TorrentStream-Android

有关如何在动态下载文件时播放此文件的任何提示或想法,将不胜感激。

1 个答案:

答案 0 :(得分: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();