Потоковое аудио не работает в Android

1

Я уверен, что этот вопрос задан раньше, но я не смог найти надежный ответ. Я пытаюсь загрузить потоковое аудио с сервера. Его аудио /aac файл

http://3363.live.streamtheworld.com:80/CHUMFMAACCMP3

Код, который я использую,

private void playAudio(String str) {
  try {
   final String path = str;

   if (path == null || path.length() == 0) {
    Toast.makeText(RadioPlayer.this, "File URL/path is empty",
      Toast.LENGTH_LONG).show();

   } else {
    // If the path has not changed, just start the media player


    MediaPlayer mp = new MediaPlayer();

    mp.setAudioStreamType(AudioManager.STREAM_MUSIC);


    try{
     mp.setDataSource(getDataSource(path));
     mp.prepareAsync();
     mp.start();
    }catch(IOException e){
     Log.i("ONCREATE IOEXCEPTION", e.getMessage());
    }catch(Exception e){
     Log.i("ONCREATE EXCEPTION", e.getMessage());
    } 


   }
  } catch (Exception e) {
   Log.e("RPLAYER EXCEPTION", "error: " + e.getMessage(), e);

  }
 }

 private String getDataSource(String path) throws IOException {
  if (!URLUtil.isNetworkUrl(path)) {
   return path;
  } else {
   URL url = new URL(path);
   URLConnection cn = url.openConnection();
   cn.connect();
   InputStream stream = cn.getInputStream();
   if (stream == null)
    throw new RuntimeException("stream is null");
   File temp = File.createTempFile("mediaplayertmp", ".dat");
   temp.deleteOnExit();
   String tempPath = temp.getAbsolutePath();
   FileOutputStream out = new FileOutputStream(temp);
   byte buf[] = new byte[128];
   do {
    int numread = stream.read(buf);
    if (numread <= 0)
     break;
    out.write(buf, 0, numread);
   } while (true);
   try {
    stream.close();
   } catch (IOException ex) {
    Log.e("RPLAYER IOEXCEPTION", "error: " + ex.getMessage(), ex);
   }
   return tempPath;
  }
 }

Это правильная реализация? Я не уверен, где я ошибаюсь. Может кто-то пожалуйста, пожалуйста, помогите мне в этом.

Теги:
audio
aac
streaming

2 ответа

0
Лучший ответ

Формат потоковой передачи AAC не поддерживается, и вы не можете напрямую воспроизводить поток Shoutcast в версии для Android менее 2.2.

  • 0
    Привет ... Поток AAC находится в контейнере FLV. Мне удалось воспроизвести поток mp3, используя метод StreamProxy, используемый в приложении NPR. У вас есть идеи по этому поводу?
  • 0
    Приложение NPR воспроизводит только потоки Mp3. Вы можете использовать FFMPEG-android для воспроизведения других форматов.
Показать ещё 1 комментарий
1

Метод prepareAsync() является асинхронным - цитируя документацию:

Подготавливает плеер для воспроизведения асинхронно.

Вам нужно позвонить setOnPreparedListener(), предоставив MediaPlayer.OnPreparedListener. Затем в этом слушателе onPrepared() вы можете вызвать start().

  • 0
    Я сделал это, но я все еще получаю сообщение об ошибке. Команда PLAYER_INIT завершена с ошибкой или информацией PVMFErrCorrupt

Ещё вопросы

Сообщество Overcoder
Наверх
Меню