MediaPlayer.setDataSource() and prepare() not working - android

别来无恙 提交于 2019-11-26 11:14:46

问题


I\'m having a crack at using the MediaPlayer object and not having much success. If I add a sound asset to my raw folder and call it using the int value within R, it works fine. But I want to be able to pull things off of url.

According to all of the documentation I\'ve read setDataSource() should accept a string param with a url to a file.

I keep getting an IO exception on the prepare() statement. I\'ve even tried copying the file locally and still no dice.

Anyone have any ideas?

MediaPlayer mp = new MediaPlayer();
try {
        mp.setDataSource(\"http://www.urltofile.com/file.mp3\");
        mp.prepare();
        mp.start();
    } catch (IllegalArgumentException e) {
        e.printStackTrace();
    } catch (IllegalStateException e) {
        e.printStackTrace();
    } catch (IOException e) {
        e.printStackTrace();
    }

回答1:


Try MediaPlayer.create(), you also may want to start only after player is actually ready, for example:

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    MediaPlayer player = MediaPlayer.create(this, Uri.parse("http://www.urltofile.com/file.mp3"));
    player.setOnPreparedListener(new OnPreparedListener() { 
        @Override
        public void onPrepared(MediaPlayer mp) {
            mp.start();
        }
    });
}



回答2:


For streams, you should call prepareAsync(), which returns immediately, rather than blocking until enough data has been buffered.



来源:https://stackoverflow.com/questions/3533837/mediaplayer-setdatasource-and-prepare-not-working-android

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!