【问题标题】:streaming a mp3 from a site/server从站点/服务器流式传输 mp3
【发布时间】:2017-07-09 17:25:15
【问题描述】:

大家好,我和其他一些 djs 希望能够将我们的混音上传到一个网站,然后可以将其直接流式传输到我的应用程序中。目前我将文件存储在谷歌驱动器上。他们将下载,然后我可以通过媒体播放器播放。但我希望用户能够直接从网站流式传输音乐..

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$3.onSuccess(Mixes.java:198)
                                                                                at com.example.harrops.h20droidapp2.Mixes$3.onSuccess(Mixes.java:192)
                                                                                at com.google.android.gms.tasks.zze$1.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)

【问题讨论】:

  • 问题 (1) 与编程无关,因此是题外话。问题 (2) 过于宽泛,因此也是题外话。
  • 这是关于编程的,乔,不是吗?感谢您的帮助
  • @JoeC 好一点吗?

标签: android firebase streaming mp3 firebase-storage


【解决方案1】:

以下行表示:mMediaPlayer 为空。

java.lang.NullPointerException: Attempt to invoke virtual method 
'void android.media.MediaPlayer.setDataSource(java.lang.String)'
on a null object reference

请在调用 onSuccess(Uri uri) 方法之前检查 mMediaplayer 是否已初始化。

mMediaplayer = new MediaPlayer();

【讨论】:

  • 这正是我的问题#You Kim
【解决方案2】:

Q1:我不知道有网站这样做,抱歉

Q2:你必须学习如何在android中使用MediaPlayer类,这里有一个例子:

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

这是一个快速且非常简单的示例。 您可以根据需要对其进行编辑。

【讨论】:

  • 感谢莫哈德。如果它有效,那么使用firebase的第二次看到类似的东西会发布结果。
  • 请检查我更新的问题,谢谢您的帮助
  • @markharrop 你能发布完整的堆栈跟踪吗?
猜你喜欢
  • 2017-10-27
  • 1970-01-01
  • 2011-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多