2016-09-29 3 views
7

Я хочу сохранить mp3-файлы в Firebase Storage, а затем передать его на Android-устройство. Все учебные материалы на Firebase обсуждают загрузку и загрузку файла изображения.Могу ли я использовать Firebase Storage для потоковой передачи музыки в Интернете?

Если есть какие-либо другие облака, которые легче, чем Firebase, хранить и передавать аудио для Android, пожалуйста, предложите.

+0

да, можно сохранить mp3 файлы firebase хранения и потоковой передачи содержимого – hakim

+0

@hakim ну а потом предложить мне ответ. как? –

+1

, по крайней мере, вы должны попробовать сначала, и в случае, если у вас есть проблема, вы можете спросить в SO. здесь для запуска вы можете загрузить любой файл в хранилище GC. https://firebase.google.com/docs/storage/android/upload-files для воспроизведения/воспроизведения музыки, которую вы можете использовать https://developer.android.com/guide/topics/media/mediaplayer.html#mediaplayer – hakim

ответ

5
  1. Firebase обеспечивают StreamDownloadTask, как Майк предложил, для получения InputStream , но, к сожалению, MediaPlayer не принимает прямого потока. Теперь у нас есть 2 варианта, если мы строго будем продолжать с InputStream, насколько мне известно -

    a. Напишите поток в временном файле и передайте его медиаплееру. Лично, Я не рекомендую этот подход. Он включает в себя ненужные данные, записывающие, и вы также должны поддерживать синхронизацию между потоковыми данными, записью файлов и воспроизведением мультимедиа.

    b. Создать StreamProxy сервер как приложение npr app. Вы можете найти исходный код приложения here.

  2. Простой способ для воспроизведения музыкальных файлов из Firebase является первым принести загрузки URL с помощью ссылки хранения и передать этот URL в медиа-плеер в качестве источника данных. Ниже приведен фрагмент кода -

    public class MainActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener { 
    
         private MediaPlayer mMediaplayer; 
    
         @Override 
         protected void onCreate(Bundle savedInstanceState) { 
          super.onCreate(savedInstanceState); 
          setContentView(R.layout.activity_main); 
          mMediaplayer = new MediaPlayer(); 
          mMediaplayer.setAudioStreamType(AudioManager.STREAM_MUSIC); 
          fetchAudioUrlFromFirebase(); 
         } 
    
         private void fetchAudioUrlFromFirebase() { 
          final FirebaseStorage storage = FirebaseStorage.getInstance(); 
          // Create a storage reference from our app 
          StorageReference storageRef = storage.getReferenceFromUrl("PATH_OF_YOUR_AUDIO_FILE"); 
          storageRef.getDownloadUrl().addOnSuccessListener(new OnSuccessListener<Uri>() { 
           @Override 
           public void onSuccess(Uri uri) { 
            try { 
             // Download url of file 
             final String url = uri.toString(); 
             mMediaplayer.setDataSource(url); 
             // wait for media player to get prepare 
             mMediaplayer.setOnPreparedListener(MainActivity.this); 
             mMediaplayer.prepareAsync(); 
            } catch (IOException e) { 
             e.printStackTrace(); 
            } 
    
           } 
          }) 
            .addOnFailureListener(new OnFailureListener() { 
             @Override 
             public void onFailure(@NonNull Exception e) { 
              Log.i("TAG", e.getMessage()); 
             } 
            }); 
    
         } 
    
         @Override 
         public void onPrepared(MediaPlayer mp) { 
          mp.start(); 
         } 
        } 
    
Смежные вопросы