2015-01-20 4 views
2

Я нахожусь в процессе построения андроид приложения для местной радиостанции сообщества, и я получаю эту ошибку в LogCat:Media Player Shoutcast ошибка

2862-2862/pmelia.bcrfm V/MediaPlayer﹕ callback application 
2862-2862/pmelia.bcrfm V/MediaPlayer﹕ back from callback 
2862-2862/pmelia.bcrfm V/MediaPlayer﹕ isPlaying: 0 
2862-2862/pmelia.bcrfm E/MediaPlayer﹕ Error (-38,0) 

Вот мой код активности

public class MainActivity extends ActionBarActivity implements View.OnClickListener, View.OnTouchListener, MediaPlayer.OnCompletionListener, MediaPlayer.OnBufferingUpdateListener { 

    private Toolbar toolbar; 
    private Button btnPlay; 
    private Button btnPause; 
    private Button btnStop; 
    private SeekBar seekBar; 
    private MediaPlayer mediaPlayer; 
    private int lengthOfAudio; 
    //official broadcasting URL 
    private final String URL = "http://37.187.193.36:8002/listen.pls"; 
    private final Handler handler = new Handler(); 

    private final Runnable r = new Runnable() { 
     @Override 
     public void run() { 
      updateSeekProgress(); 
     } 
    }; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main_appbar); 
     init(); 
    } 

    private void init() { 
     toolbar = (Toolbar) findViewById(R.id.app_bar); 
     setSupportActionBar(toolbar); 
     getSupportActionBar().setDisplayShowHomeEnabled(true); 
     NavigationDrawerFragment drawerFragment = (NavigationDrawerFragment) 
       getSupportFragmentManager().findFragmentById(R.id.fragment_navigation_drawer); 
     drawerFragment.setUp(R.id.fragment_navigation_drawer,(DrawerLayout)findViewById(R.id.drawer_layout), toolbar); 

     btnPlay = (Button) findViewById(R.id.btnPlay); 
     btnPlay.setOnClickListener(this); 

     btnPause = (Button) findViewById(R.id.btnPause); 
     btnPause.setOnClickListener(this); 
     btnPause.setEnabled(false); 

     btnStop = (Button) findViewById(R.id.btnStop); 
     btnStop.setOnClickListener(this); 
     btnStop.setEnabled(false); 

     seekBar = (SeekBar)findViewById(R.id.seekBar); 
     seekBar.setOnTouchListener(this); 

     mediaPlayer = new MediaPlayer(); 
     mediaPlayer.setOnBufferingUpdateListener(this); 
     mediaPlayer.setOnCompletionListener(this); 
    } 

    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      Toast.makeText(this, "Hey you just hit " + item.getTitle(), Toast.LENGTH_SHORT).show(); 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 
    @Override 
    public void onBufferingUpdate(MediaPlayer mediaPlayer, int percent) { 
     seekBar.setSecondaryProgress(percent); 
    } 

    @Override 
    public void onCompletion(MediaPlayer mp) { 
     btnPlay.setEnabled(true); 
     btnPause.setEnabled(false); 
     btnStop.setEnabled(false); 
    } 

    @Override 
    public boolean onTouch(View v, MotionEvent event) { 
     if (mediaPlayer.isPlaying()) { 
      SeekBar tmpSeekBar = (SeekBar)v; 
      mediaPlayer.seekTo((lengthOfAudio/100) * tmpSeekBar.getProgress()); 
     } 
     return false; 
    } 

    @Override 
    public void onClick(View view) { 

     try { 
      mediaPlayer.setDataSource(URL); 
      mediaPlayer.prepare(); 
      lengthOfAudio = mediaPlayer.getDuration(); 
     } 
     catch (Exception e) { 
      Log.e("Error", e.getMessage()); 
     } 

     switch (view.getId()) { 
      case R.id.btnPlay: 
       playAudio(); 
       break; 
      case R.id.btnPause: 
       pauseAudio(); 
       break; 
      case R.id.btnStop: 
       stopAudio(); 
       break; 
      default: 
       break; 
     } 

     updateSeekProgress(); 
    } 

    private void updateSeekProgress() { 
     if (mediaPlayer.isPlaying()) { 
      seekBar.setProgress((int)(((float)mediaPlayer.getCurrentPosition()/lengthOfAudio) * 100)); 
      handler.postDelayed(r, 1000); 
     } 
    } 

    private void stopAudio() { 
     mediaPlayer.stop(); 
     btnPlay.setEnabled(true); 
     btnPause.setEnabled(false); 
     btnStop.setEnabled(false); 
     seekBar.setProgress(0); 
    } 

    private void pauseAudio() { 
     mediaPlayer.pause(); 
     btnPlay.setEnabled(true); 
     btnPause.setEnabled(false); 
    } 

    private void playAudio() { 
     mediaPlayer.start(); 
     btnPlay.setEnabled(false); 
     btnPause.setEnabled(true); 
     btnStop.setEnabled(true); 
    } 
} 

Любая помощь была бы оценена, это мой первый раз, когда вы делаете такой тип развития.

ответ

0

Итак, я получил его для работы, наконец, в конце ... Прежде всего, спасибо @ TennyTech.com за маленький намек.

Так что, чтобы помочь людям, у меня будет ans на моем github repo к сегодняшнему вечеру, надеюсь, но не забудьте.

Надеется, что это помогает,

PatrickMelia

1

У меня была такая же проблема ... Это должен быть только IP-адрес с номером порта.

Для этого: закрытый окончательный Строка URL = "http://37.187.193.36:8002/listen.pls";

Заменить на: закрытое окончательное Строка URL = "http://37.187.193.36:8002/";

+0

Спасибо @ tennytech.com. Я изменил его, но у меня все еще проблема. Он играет perferct, но это приложение падает, когда я нажимаю кнопку остановки. Знаете ли вы, как это исправить? – PatrickMelia