Android 2.2 MediaPlayer funciona bien con una URL SHOUTcast pero no con la otra

Por favor, vea el código que estoy usando para transmitir stream Shoutcast, funciona con una URL pero NO con la otra.

Este funciona:

Uri myUri = Uri.parse("http://fr3.ah.fm:9000/"); 

Pero no con este:

 Uri myUri = Uri.parse("http://someOtherURL"); 

SimpleMusicStream.java

 import android.app.Activity; import android.media.AudioManager; import android.media.MediaPlayer; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.view.View; import android.widget.Button; public class SimpleMusicStream extends Activity implements MediaPlayer.OnCompletionListener, MediaPlayer.OnPreparedListener, MediaPlayer.OnErrorListener, MediaPlayer.OnBufferingUpdateListener { private String TAG = getClass().getSimpleName(); private MediaPlayer mp = null; private Button play; private Button pause; private Button stop; @Override public void onCreate(Bundle icicle) { super.onCreate(icicle); setContentView(R.layout.main); play = (Button) findViewById(R.id.play); pause = (Button) findViewById(R.id.pause); stop = (Button) findViewById(R.id.stop); play.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { play(); } }); pause.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { pause(); } }); stop.setOnClickListener(new View.OnClickListener() { public void onClick(View view) { stop(); } }); } private void play() { Uri myUri = Uri.parse("http://fr3.ah.fm:9000/"); try { if (mp == null) { this.mp = new MediaPlayer(); } else { mp.stop(); mp.reset(); } mp.setDataSource(this, myUri); // Go to Initialized state mp.setAudioStreamType(AudioManager.STREAM_MUSIC); mp.setOnPreparedListener(this); mp.setOnBufferingUpdateListener(this); mp.setOnErrorListener(this); mp.prepareAsync(); Log.d(TAG, "LoadClip Done"); } catch (Throwable t) { Log.d(TAG, t.toString()); } } @Override public void onPrepared(MediaPlayer mp) { Log.d(TAG, "Stream is prepared"); mp.start(); } private void pause() { mp.pause(); } private void stop() { mp.stop(); } @Override public void onDestroy() { super.onDestroy(); stop(); } public void onCompletion(MediaPlayer mp) { stop(); } public boolean onError(MediaPlayer mp, int what, int extra) { StringBuilder sb = new StringBuilder(); sb.append("Media Player Error: "); switch (what) { case MediaPlayer.MEDIA_ERROR_NOT_VALID_FOR_PROGRESSIVE_PLAYBACK: sb.append("Not Valid for Progressive Playback"); break; case MediaPlayer.MEDIA_ERROR_SERVER_DIED: sb.append("Server Died"); break; case MediaPlayer.MEDIA_ERROR_UNKNOWN: sb.append("Unknown"); break; default: sb.append(" Non standard ("); sb.append(what); sb.append(")"); } sb.append(" (" + what + ") "); sb.append(extra); Log.e(TAG, sb.toString()); return true; } public void onBufferingUpdate(MediaPlayer mp, int percent) { Log.d(TAG, "PlayerService onBufferingUpdate : " + percent + "%"); } } 

main.xml:

       

El Log-cat muestra errores:

 NuHTTPDataSource(33): Server did not give us the content length! Media Player Error: Unknown (1) -2147483648 Media Player Error: Unknown (1) -1002 

¿Alguien puede ayudarme a arreglarlo?

EDITAR:

Solo para compartir con ustedes, que nuestro código actual funciona con Android 2.1 y versiones menores, pero no funciona con Android 2.2 o versiones posteriores .

Gracias

La transmisión de Shoutcast desde Android 2.2 en adelante es compatible de forma nativa.

Por debajo de 2.2, el sistema operativo Android no puede reproducir transmisiones de shoutcast de forma nativa sin utilizar un proxy en el extremo de la transmisión o una clase de proxy de transmisión en el dispositivo para capturar la transmisión y pasarla a la reproducción de audio como lo hace NPR .

la transmisión de audio / aacp no es compatible directamente. Para esto, puede usar la biblioteca ffmpeg, opencore o faad2 para decodificarla en PCM y reproducirla con audiotrack. Referencia

problema es la encoding en audio / aacp

El problema es que aacp no es procesado por Android Media Player correctamente. Deberá probar con algún otro códec o escribir su propio decodificador.

Mediaplayer solo admite estos formatos, como se indica en los documentos del desarrollador de Android.

Algunas secuencias pueden estar satisfaciendo esto, pero algunas no

Hay un decodificador Freeware Advanced Audio (AAC) para Android . Puede usar esto para ayuda y orientación o usar la clase de multijugador para reproducir audio aac. Hay una aplicación de muestra y una biblioteca para ayudarlo a comprender. He usado esta biblioteca para reproducir transmisiones en línea de Shoutcast. Jugué AAC y MP3 usando la clase de multijugador proporcionada en la biblioteca

Espero que esto ayude

Finalmente, obtuve una simple aplicación de transmisión shoutcast. Prueba esto Simplemente cambie la URL de transmisión en StreamService.java .