从 site/server 播放 mp3
streaming a mp3 from a site/server
大家好,我和其他一些 DJ 希望能够将我们的混音上传到一个网站,然后可以将其直接流式传输到我的应用程序中。目前我将文件存储在 google 驱动器上。他们将下载,然后我可以通过媒体播放器播放。但我希望用户能够直接从网站流式传输音乐..
1) 您建议使用哪个网站上传音乐。我有一个 firebase 帐户,这是个主意还是我上传的文件中的数据会很昂贵?我使用现收现付帐户类型。
****编辑
所以我发现 firebase 可能是一个真正可行的选择
2) 实现代码的最佳方式是什么,以便直接播放音乐而不是先下载音乐?
****编辑
我在网上搜索时发现了一些代码可以使它可行,但我似乎在 setDatasource
上遇到空指针错误
这是我的代码
我已经添加了这个我的孩子
final String url = dataSnapshot.child("url").getValue(String.class);
urlList.add(url);
然后在我的 onitemclick 中使用
mp3url = urlList.get(i);
fetchAudioUrlFromFirebase();
最后是播放 mp3 的方法
private void fetchAudioUrlFromFirebase() {
String mp3 = mp3url;
final FirebaseStorage storage = FirebaseStorage.getInstance();
storageRef = storage.getReferenceFromUrl(mp3);
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(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
mMediaplayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i("TAG", e.getMessage());
}
});
}
这是我的完整 logcat 有空指针错误
07-11 18:39:45.326 2565-2565/com.example.harrops.h20droidapp2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.harrops.h20droidapp2, PID: 2565
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setDataSource(java.lang.String)' on a null object reference
at com.example.harrops.h20droidapp2.Mixes.onSuccess(Mixes.java:198)
at com.example.harrops.h20droidapp2.Mixes.onSuccess(Mixes.java:192)
at com.google.android.gms.tasks.zze.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Q1:我不知道有哪个网站可以这样做,抱歉
问题 2:您必须学习如何在 android 中使用 MediaPlayer class,这里是一个示例:
String link = "your link.mp3"; //usually it's ends with .mp3
Mediaplayer player = new MediaPlayer();
player.setDataSource(link);
player.prepare();//prepare to play
player.start();
这是一个快速且非常简单的示例。
您可以根据需要对其进行编辑。
下一行表示:mMediaPlayer 为空。
java.lang.NullPointerException: Attempt to invoke virtual method
'void android.media.MediaPlayer.setDataSource(java.lang.String)'
on a null object reference
请检查 mMediaplayer 在调用 onSuccess(Uri uri) 方法之前是否已初始化。
mMediaplayer = new MediaPlayer();
大家好,我和其他一些 DJ 希望能够将我们的混音上传到一个网站,然后可以将其直接流式传输到我的应用程序中。目前我将文件存储在 google 驱动器上。他们将下载,然后我可以通过媒体播放器播放。但我希望用户能够直接从网站流式传输音乐..
1) 您建议使用哪个网站上传音乐。我有一个 firebase 帐户,这是个主意还是我上传的文件中的数据会很昂贵?我使用现收现付帐户类型。 ****编辑 所以我发现 firebase 可能是一个真正可行的选择
2) 实现代码的最佳方式是什么,以便直接播放音乐而不是先下载音乐?
****编辑 我在网上搜索时发现了一些代码可以使它可行,但我似乎在 setDatasource
上遇到空指针错误这是我的代码
我已经添加了这个我的孩子
final String url = dataSnapshot.child("url").getValue(String.class);
urlList.add(url);
然后在我的 onitemclick 中使用
mp3url = urlList.get(i);
fetchAudioUrlFromFirebase();
最后是播放 mp3 的方法
private void fetchAudioUrlFromFirebase() {
String mp3 = mp3url;
final FirebaseStorage storage = FirebaseStorage.getInstance();
storageRef = storage.getReferenceFromUrl(mp3);
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(new MediaPlayer.OnPreparedListener() {
@Override
public void onPrepared(MediaPlayer mp) {
mp.start();
}
});
mMediaplayer.prepareAsync();
} catch (IOException e) {
e.printStackTrace();
}
}
})
.addOnFailureListener(new OnFailureListener() {
@Override
public void onFailure(@NonNull Exception e) {
Log.i("TAG", e.getMessage());
}
});
}
这是我的完整 logcat 有空指针错误
07-11 18:39:45.326 2565-2565/com.example.harrops.h20droidapp2 E/AndroidRuntime: FATAL EXCEPTION: main
Process: com.example.harrops.h20droidapp2, PID: 2565
java.lang.NullPointerException: Attempt to invoke virtual method 'void android.media.MediaPlayer.setDataSource(java.lang.String)' on a null object reference
at com.example.harrops.h20droidapp2.Mixes.onSuccess(Mixes.java:198)
at com.example.harrops.h20droidapp2.Mixes.onSuccess(Mixes.java:192)
at com.google.android.gms.tasks.zze.run(Unknown Source)
at android.os.Handler.handleCallback(Handler.java:751)
at android.os.Handler.dispatchMessage(Handler.java:95)
at android.os.Looper.loop(Looper.java:154)
at android.app.ActivityThread.main(ActivityThread.java:6119)
at java.lang.reflect.Method.invoke(Native Method)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:886)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:776)
Q1:我不知道有哪个网站可以这样做,抱歉
问题 2:您必须学习如何在 android 中使用 MediaPlayer class,这里是一个示例:
String link = "your link.mp3"; //usually it's ends with .mp3
Mediaplayer player = new MediaPlayer();
player.setDataSource(link);
player.prepare();//prepare to play
player.start();
这是一个快速且非常简单的示例。 您可以根据需要对其进行编辑。
下一行表示:mMediaPlayer 为空。
java.lang.NullPointerException: Attempt to invoke virtual method
'void android.media.MediaPlayer.setDataSource(java.lang.String)'
on a null object reference
请检查 mMediaplayer 在调用 onSuccess(Uri uri) 方法之前是否已初始化。
mMediaplayer = new MediaPlayer();