我想要的是将 mp3 文件保存在 Firebase Storage 上,然后将其流式传输到 Android 设备。 Firebase上的所有教程讨论图像文件的上传和下载。
如果有任何其他云比 Firebase 更容易为 Android 存储和流式传输音频,请提出建议。
最佳答案
Firebase 按照 Mike 的建议提供 StreamDownloadTask,用于获取 InputStream 但不幸的是MediaPlayer不接受直接流。现在 据我所知,如果我们严格希望继续使用 InputStream,我们有 2 个选择 -
a.在临时文件中写入流并将其传递给媒体播放器。就个人而言,我不推荐这种方法。它包括不必要的数据写入,并且您还必须在流数据、文件写入和媒体播放之间保持同步。
b.创建 StreamProxy 服务器,就像 npr 新闻应用程序所做的那样。您可以找到App here的源码.
从 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/