代码之家  ›  专栏  ›  技术社区  ›  beastlyCoder

Mpeg Livestream link MediaPlayer Android版

  •  0
  • beastlyCoder  · 技术社区  · 7 年前

    我正在尝试让这个流播放:

        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。有什么我可以做的吗?

    0 回复  |  直到 7 年前
        1
  •  1
  •   beastlyCoder    7 年前

    我能想到的是把我的MediaPlayer放在应用程序的异步任务(后台线程)上。

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