2017-07-09 96 views
0

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

1)您建议上传音乐的网站是什么?我有一个Firebase帐户,这是一个想法,或者我上传的文件中的数据是否会很昂贵?即时通讯帐号类型的付费。 ****编辑 所以香港专业教育学院发现,火力点可能是做一个实际可行的选择,这

2)什么是执行代码的最佳方式,使其流音乐直接,而不是先下载它?

****编辑 香港专业教育学院发现了一些代码,而拖网互联网,可以使这个可行的,但我接缝在的setDataSource将得到一个空指针错误

这是我的代码

我有这是我的onchild添加

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) 
+0

问题(1)不是关于编程,因此是题外话。问题(2)过于宽泛,因此也是无关紧要的。 –

+0

这是关于编程,乔怎么不是?感谢您的帮助 – markharrop

+0

@JoeC是更好一点? – markharrop

回答

1

以下行表示:mMediaPlayer为null。

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

这正是我的问题#You Kim – markharrop

1

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

它是一个快速而简单的例子。 您可以根据需要进行编辑。

+0

感谢Mohad。只是这第二次看到类似的使用firebase将发布结果,如果它的作品。 – markharrop

+0

请检查我更新的问题,谢谢你的帮助 – markharrop

+1

@markharrop你可以发布完整的堆栈跟踪吗? – Mohad12211

相关问题