【问题标题】:Can I use Firebase Storage for online music streaming?我可以使用 Firebase 存储进行在线音乐流式传输吗?
【发布时间】:2017-02-07 10:00:49
【问题描述】:
我想要的是在 Firebase 存储上保存 mp3 文件,然后将其流式传输到 Android 设备。 Firebase上的所有教程都讨论了图片文件的上传和下载。
如果有任何其他云比 Firebase 更容易为 android 存储和流式传输音频,那么请提出建议。
【问题讨论】:
标签:
android
firebase
audio-streaming
firebase-storage
【解决方案1】:
-
按照 Mike 的建议,Firebase 提供 StreamDownloadTask,用于获取 InputStream
但不幸的是 MediaPlayer 不接受直接流。现在
据我所知,如果我们严格希望继续使用 InputStream,我们有 2 个选项 -
一个。在临时文件中写入一个流并将其传递给媒体播放器。就个人而言,我不推荐这种方法。它包括不必要的数据写入,您还必须保持流数据、文件写入和媒体播放之间的同步。
b.创建 StreamProxy 服务器作为 npr 新闻应用做。可以找到Apphere的源码。
-
从 Firebase 播放音乐文件的简单方法是首先使用 storage reference 获取 下载 URL,然后将该 URL 作为数据源传递给媒体播放器。下面是代码sn-p -
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();
}
}