我可以使用Firebase存储进行在线音乐流式传输吗? [英] Can I use Firebase Storage for online music streaming?

查看:208
本文介绍了我可以使用Firebase存储进行在线音乐流式传输吗?的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想要的是在Firebase存储上保存mp3文件,然后将其流式传输到Android设备。 Firebase 上的所有教程都会讨论图片文件的上传和下载。 / b>

如果有任何其他云比Firebase更容易存储和流式传输Android音频,那么请建议。 Firebase提供 StreamDownloadTask ,正如Mike所建议的那样,用于获取 InputStream
,但不幸的是,MediaPlayer不接受直接流。现在
我们有2个选项,如果我们严格地继续使用InputStream,就我所知 -

a。在临时文件中写入流并将其传递给媒体播放器。就我个人而言,我不推荐这种方法。它包括不必要的数据写入,而且您还必须在流式数据,文件写入和媒体播放之间保持同步。

湾创建 StreamProxy 服务器为npr新闻应用程序。你可以在这里找到App 的源代码。


  • 从Firebase播放音乐文件的简单方法是首先使用存储引用获取下载网址,并将该网址传递给媒体播放器作为一个数据源。下面是代码段 -

      public class MainActivity extends AppCompatActivity implements MediaPlayer.OnPreparedListener {

    私人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();
    //从应用程序创建一个存储引用
    StorageReference storageRef = storage.getReferenceFromUrl(PATH_OF_YOUR_AUDIO_FILE);
    storageRef.getDownloadUrl()。addOnSuccessListener(new OnSuccessListener< Uri>(){
    @Override
    public void onSuccess(Uri uri){
    try {
    //下载文件的URL
    final String url = uri.toString();
    mMediaplayer.setDataSource(url);
    //等待媒体播放器准备
    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());
    }
    });


    $ b @Override
    public void onPrepared(MediaPlayer mp){
    mp.start();


    code $ b $ p

    What I want is to save mp3 files on Firebase Storage and then stream it to an Android device. All the tutorials on Firebase discuss about the image file upload and download.

    If there are any other cloud that is more easy than Firebase to store and stream audio for android, then please suggest.

    解决方案

    1. Firebase provide StreamDownloadTask as Mike has suggested, for getting InputStream but unfortunately MediaPlayer doesn't accept a direct stream. Now we have 2 options if we strictly like to continue with InputStream, as far as I know -

      a. Write a stream in the temporary file and pass it to the media player. Personally, I don't recommend this approach. It includes unnecessary data writing and you also have to maintain synchronization between streamed data, file writing and media play.

      b. Create StreamProxy server as npr news App doing. You can find the source code of App here.

    2. Simple way to play Music file from Firebase is to first fetch the download URL by using storage reference and pass that URL to media player as a dataSource. Below is the code snippet -

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

    这篇关于我可以使用Firebase存储进行在线音乐流式传输吗?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

  • 查看全文
    登录 关闭
    扫码关注1秒登录
    发送“验证码”获取 | 15天全站免登陆