直播链接MediaPlayer Android

问题描述 投票:1回答:1

我正试图让这个流播放:

    MediaPlayer mp = new MediaPlayer();
    try {
        mp.setDataSource("http://knhc-ice.streamguys1.com/live");
        mp.setAudioStreamType(AudioManager.STREAM_MUSIC);
        mp.prepareAsync();
        mp.setOnPreparedListener(new MediaPlayer.OnPreparedListener(){
            @Override
            public void onPrepared(MediaPlayer mp)
            {
                mp.start();
            }
        });
    } catch (IOException e) {
        e.printStackTrace();
    }

但是当应用程序运行时它会给我这个错误:

2019-03-17 17:01:05.035 5924-5924/com.example.android.c895 W/System.err: java.io.IOException: setDataSource failed.: status=0x80000000

我知道我传入媒体播放器的链接只是一个播放器,但我希望该播放器自动播放并传递给MediaPlayer。无论如何我能做到吗?

java android
1个回答
1
投票

我能想到的是将我的Media Player放在我的应用程序上的Asynctask(后台线程)中。

mediaPlayer = new MediaPlayer();
        mediaPlayer.setAudioStreamType(AudioManager.STREAM_MUSIC);

        b = (ImageButton) bottomSheet.findViewById(R.id.imageButton);

        new PlayerTask().execute(s);

        b.setOnClickListener(new View.OnClickListener(){
            @Override
            public void onClick(View view)
            {
                if(started)
                {
                    mediaPlayer.start();
                }
            }
        }); 
class PlayerTask extends AsyncTask<String, Void, Boolean>
{

    @Override
    protected Boolean doInBackground(String... strings) {


        try
        {
            mediaPlayer.setDataSource(strings[0]);
            mediaPlayer.prepare();
            prepared = true;
        } catch(IOException e)
        {
            e.printStackTrace();
        }

        return prepared;
    }

    @Override
    protected void onPostExecute(Boolean aBoolean)
    {
        super.onPostExecute(aBoolean);
        mediaPlayer.start();
    }
}

由于代码几乎完全相同,任何人都可以回答为什么这样做而不仅仅是在主线程上?

© www.soinside.com 2019 - 2024. All rights reserved.