android - 我可以使用 Firebase Storage 进行在线音乐流传输吗?

标签 android firebase audio-streaming firebase-storage

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

如果有任何其他云比 Firebase 更容易为 Android 存储和流式传输音频,请提出建议。

最佳答案

  1. Firebase 按照 Mike 的建议提供 StreamDownloadTask,用于获取 InputStream 但不幸的是MediaPlayer不接受直接流。现在 据我所知,如果我们严格希望继续使用 InputStream,我们有 2 个选择 -

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

    b.创建 StreamProxy 服务器,就像 npr 新闻应用程序所做的那样。您可以找到App here的源码.

  2. 从 Firebase 播放音乐文件的简单方法是首先使用存储引用获取下载 URL,然后将该 URL 作为数据源传递给媒体播放器。下面是代码 fragment -

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

关于android - 我可以使用 Firebase Storage 进行在线音乐流传输吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59823690/

相关文章:

android - 可点击的网站图像无法在 iPhone 和 Android 设备上运行

java - 当我搜索数据时,我的应用程序被迫停止。我该如何解决这个问题?

android - 为什么同一个版本的gradle会有多个副本

c# - 如何在 Windows 上接收来自 Firebase 云消息传递的推送通知

Firebase 网络托管设置为私有(private),直到准备好上线

c# - 三星 6S 上 C# .NET 4.5.1 MVC 5.2.2 中的 MP3 流式传输

Android确保 ListView 在展开时完全可见

node.js - 类型错误 : Cannot read property 'wanted' of undefined:

audio - Web Audio Api 实时流式传输 PCM ADPCM

java - 如何更改音频文件的播放速率?