从Firebase存储下载并播放.mp3文件到内存 [英] Download and play .mp3 file from firebase storage to memory
问题描述
我需要从我的Firebase存储gs://fir-b9532.appspot.com/songs/song1.mp3下载一个mp3文件,然后将其播放到我的android应用程序中. 我想将mp3临时文件存储在设备的内存中,然后用Media Player播放,然后带来一首新歌.
I need to download an mp3 file from my firebase storage gs://fir-b9532.appspot.com/songs/song1.mp3 and play it into my android application. I want to store the mp3 file temporary in my device's memory, play it with a mediaplayer and then bring a new song.
我遵循firebase手册编写以下简单代码,但似乎不起作用.有想法出什么问题了吗?
I follow the firebase manual writing the following simple code but seems not working. ANy ideas whats going wrong?
package com.example.andreaskonstantakos.firebase;
import android.media.MediaPlayer;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import com.google.android.gms.tasks.OnFailureListener;
import com.google.android.gms.tasks.OnSuccessListener;
import com.google.firebase.storage.FirebaseStorage;
import com.google.firebase.storage.StorageReference;
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
FirebaseStorage storage = FirebaseStorage.getInstance();
StorageReference storageRef = storage.getReference();
StorageReference songsRef = storageRef.child("songs");
StorageReference song1Ref = storageRef.child("songs/song1.mp3");
final long ONE_MEGABYTE = 1024 * 1024;
song1Ref.getBytes(ONE_MEGABYTE).addOnSuccessListener(new OnSuccessListener<byte[]>() {
@Override
public void onSuccess(byte[] bytes) {
// Data for "songs/song1.mp3" is returns, use this as needed
MediaPlayer md = MediaPlayer.create(MainActivity.this,R.id.bytes);
md.setLooping(false);
md.start();
}
}).addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception exception) {
// Handle any errors
}
});
}
}
推荐答案
我找到了另一种解决方案,而不是下载音频文件并将其临时保存在内存中,而是通过将流媒体从Firebase存储提供的完整URL实时流式传输(" https://firebasestorage.googleapis.com/v0/b/fir-b9532.appspot.com/o/songs%2Fsong1.mp3?alt=media&token=a4424b28-93c3-4a0c-a6b9 -9136dcf63335 ").
Instead of downloading the audio file and temporarly keep it on the memory i found another solution by live-streaming the song from the full URL that firebase storage provide ("https://firebasestorage.googleapis.com/v0/b/fir-b9532.appspot.com/o/songs%2Fsong1.mp3?alt=media&token=a4424b28-93c3-4a0c-a6b9-9136dcf63335").
我只是这样加载我的MediaPlayer:
I just load my MediaPlayer like this:
try {
MediaPlayer player = new MediaPlayer();
player.setAudioStreamType(AudioManager.STREAM_MUSIC);
player.setDataSource("https://firebasestorage.googleapis.com/v0/b/fir-b9532.appspot.com/o/songs%2Fsong1.mp3?alt=media&token=a4424b28-93c3-4a0c-a6b9-9136dcf63335");
player.prepare();
player.start();
} catch (Exception e) {
// TODO: handle exception
}
这篇关于从Firebase存储下载并播放.mp3文件到内存的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!