【问题标题】:Playing a music file while downloading it下载音乐文件时播放
【发布时间】:2017-05-13 09:32:27
【问题描述】:

我正在开发一个音乐下载应用程序,它基本上在不同的 torrent 平台上进行网络抓取并获取 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) 打开文件。我尝试了很多组合,但总是一样,音乐播放几秒钟然后停止。当我检查外部存储时,文件最终可以毫无问题地完全下载。

我用来下载种子文件的库是这个TorrentStream-Android

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

【问题讨论】:

    标签: android android-mediaplayer torrent android-ffmpeg


    【解决方案1】:

    正如有人指出here。使用 ExoMedia 播放器库解决了这个问题。这是我用来让它工作的 sn-p:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-09-13
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-05-13
      • 1970-01-01
      相关资源
      最近更新 更多