首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从站点/服务器流式传输mp3

从站点/服务器流式传输mp3
EN

Stack Overflow用户
提问于 2017-07-10 01:25:16
回答 2查看 278关注 0票数 1

嗨,伙计们,我和其他几个djs希望能够上传我们的混音到一个网站,然后可以直接流到我的应用程序中。目前,我已经将这些文件存储在google驱动器上。他们将下载,然后我可以通过媒体播放器播放。但我希望用户能够直接从网站上流式播放音乐。

1)你会推荐哪个网站来上传音乐?我有一个firebase帐户,这是一个好主意,还是我上传的文件中的数据会很昂贵?我的账户类型是现收现付。*编辑所以我发现firebase可能是一个实际可行的选项

2)实现代码的最佳方式是什么,使其直接播放音乐,而不是先下载音乐?

*EDIT ive在搜索互联网时发现了一些代码,这些代码可以使这变得可行,但我看到setDatasource上出现了一个空指针错误

这是我的代码

我加上了我的独生子

代码语言:javascript
复制
 final String url = dataSnapshot.child("url").getValue(String.class);
  urlList.add(url);

然后在我的onitemclick中,我使用

代码语言:javascript
复制
mp3url = urlList.get(i);
 fetchAudioUrlFromFirebase();

最后,对mp3进行流式传输的方法

代码语言:javascript
复制
 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());
                }
            });

}

这是包含空指针错误的完整日志目录

代码语言:javascript
复制
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)
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2017-08-07 18:02:07

以下行表示: mMediaPlayer为null。

代码语言:javascript
复制
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是否已初始化。

代码语言:javascript
复制
mMediaplayer = new MediaPlayer();
票数 2
EN

Stack Overflow用户

发布于 2017-07-10 02:34:27

Q1:我不知道有什么网站会这么做,抱歉

Q2:你必须学习如何在安卓中使用MediaPlayer类,下面是一个例子:

代码语言:javascript
复制
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();

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44999093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档