Как воспроизвести потоковый музыкальный файл из облачного хранилища? - PullRequest
0 голосов
/ 06 июня 2019

Я хочу воспроизвести музыкальный файл, который будет извлечен из облачного хранилища (например, Google drive или Mega.nz).Я поделился файлом, чтобы любой, у кого есть ссылка, мог получить к нему доступ.

Я использую класс MediaPlayer для обработки этого воспроизведения.Поэтому, когда я попробовал прямую ссылку примерно так , она работала хорошо.Но когда я попробовал использовать ссылку из Google Диска, , например , она не сработала.

Вот код, который я использовал для воспроизведения музыкального файла:

Класс MusicPlayerFragment

public class MusicPlayerFragment extends Fragment {
            private MusicPlayer musicPlayer;
            boolean isPlaying;

            @Override
            public View onCreateView(LayoutInflater inflater, ViewGroup container,
                                     Bundle savedInstanceState) {
                // Inflate the layout for this fragment
                View layout = inflater.inflate(R.layout.fragment_music_player, container, false);

                final ImageButton buttonPlayPause = layout.findViewById(R.id.button_play_pause);
                buttonPlayPause.setOnClickListener(new View.OnClickListener() {
                    @Override
                    public void onClick(View v) {
                        if (!isPlaying) {
                            musicPlayer.play();
                            buttonPlayPause.setImageResource(R.drawable.baseline_pause_24);
                            isPlaying = true;
                        }
                        else {
                            musicPlayer.pause();
                            buttonPlayPause.setImageResource(R.drawable.baseline_play_arrow_24);
                            isPlaying = false;
                        }
                    }
                });
                return layout;
            }
            @Override
            public void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            musicPlayer = new MusicPlayer();
            musicPlayer.loadMedia("http://ssaurel.com/tmp/mymusic.mp3"); //work on physical device
         //musicPlayer.loadMedia("https://drive.google.com/file/d/1Tj0a5f4dUMNnlPILr3vZzpPOwHKsP3Va/view?usp=sharing"); //doesn't work at all
            }
}

Класс MusicPlayer

public class MusicPlayer{
    private MediaPlayer mediaPlayer;

    public void loadMedia(String url) {
        if (mediaPlayer == null) {
            mediaPlayer = new MediaPlayer();
            mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);
            mediaPlayer.setOnPreparedListener(new MediaPlayer.OnPreparedListener() {
                @Override
                public void onPrepared(MediaPlayer mp) {
                    mp.start();
                }
            });
            try {
                mediaPlayer.setDataSource(url);
                mediaPlayer.prepareAsync();
            } catch (IOException e) {
                e.printStackTrace();
            }
        }
    }

    public void play() {
        if (mediaPlayer != null && !mediaPlayer.isPlaying()) {
            mediaPlayer.start();
        }
    }

    public void pause() {
        if (mediaPlayer != null && mediaPlayer.isPlaying()) {
            mediaPlayer.pause();
        }
    }

    public void reset() {
        if (mediaPlayer != null) {
            mediaPlayer.reset();
        }
    }

    public void release() {
        if (mediaPlayer != null) {
            mediaPlayer.release();
        }
    }
}

Я тоже работаю с SQL Server, который будет хранить данныемузыка и URL-адрес этого музыкального файла для воспроизведения.Но так как это не сработало, есть две вещи, которые меня интересуют:

  • 1-й: Где я здесь не прав?По моему мнению, я подозреваю, что не правильно использую метод setDataSource(url).
  • 2-й: Правильно ли использовать URL-адрес Google Drive?Если это неправильный формат для использования с каким-либо (перегруженным) методом setDataSource(), то как я могу сохранить музыкальный файл с нужным нужным форматом URL?(Правильный формат, как этот, я думаю: "http://domain/path/audiofilename.mp3"). Я обращаюсь к базе данных на локальной машине.

1 Ответ

0 голосов
/ 06 июня 2019

У вас есть ответ, спрятанный в самом вашем вопросе.Когда вы передаете прямую ссылку на скачивание музыки, она работает, а это значит, что вам нужно использовать что-то, что сможет напрямую загрузить файл.

Когда вы даете ссылку на Google Диск, вы неЧтобы дать полный адрес файла, вместо этого вы переходите на страницу, которая говорит вам, что вы должны вручную загрузить файл.

Вы должны использовать что-то вроде FirebaseStorage для хранения песен, так что вы сможетечтобы получить прямые ссылки на скачивание этих песен.

...