2011-12-30 19 views
12

Consulte el código que estoy usando para transmitir la transmisión de shoutcast, funciona con una URL pero NO con la otra.Android 2.2 MediaPlayer funciona bien con una URL de SHOUTcast pero no con la otra

Esta funciona:

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

Pero no con éste:

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:

<?xml version="1.0" encoding="utf-8"?> 
<LinearLayout 
xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_width="fill_parent" 
android:layout_height="fill_parent"> 
<Button 
    android:text="Play" 
    android:id="@+id/play" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"></Button> 
<Button 
    android:text="Pause" 
    android:id="@+id/pause" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"></Button> 
<Button 
    android:text="Stop" 
    android:id="@+id/stop" 
    android:layout_width="wrap_content" 
    android:layout_height="wrap_content"></Button> 
</LinearLayout> 

The Log-gato 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 me puede ayudar a solucionarlo?

EDIT:

sólo para compartir con ustedes, para que nuestro current code works with Android 2.1 & minor versions, but not works with Android 2.2 or higher.

Gracias

+1

Basado en una rápida búsqueda en Google, la codificación de audio '' audio/aacp'' también causa dolor de cabeza a otros. – harism

+1

Otra muy buena discusión se puede encontrar aquí: http://stackoverflow.com/questions/1650983/server-side-aac-audio-with-android – poitroae

+0

ayúdame en este http://stackoverflow.com/questions/16264225/ andriod-shoutcast-internet-radio-filenotfoundexception – String

Respuesta

7

mp3 Shoutcast streaming desde Android 2.2 en adelante se soporta de forma nativa.

A continuación 2.2 del sistema operativo Android no puede reproducir secuencias de shoutcast forma nativa sin necesidad de utilizar un proxy en el extremo de aguas o una clase de proxy de flujo en el dispositivo para capturar el flujo y pasarlo a la audioplayer al igual que 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. Reference

+0

Las transmisiones de Shoutcast son compatibles desde 2.2 en adelante lo sé pero por qué funciona con uno de url y no trabajando el otro? –

+0

Como dije, solo la transmisión de mp3 Shoutcast es compatible con Android 2.2. Una de sus URL es del tipo de contenido "audio/aacp" que supongo que no se reproduce, otra es "audio/mpeg" que es compatible con android 2.2 en adelante. Para AACP, ya sea que haya guardado el contenido en el archivo y luego juegue O use cualquier biblioteca de decodificación que mencioné ... Pero también tenga en cuenta los problemas legales al usarla. –

+0

@SanthoshShettigar ayúdame en este http://stackoverflow.com/questions/16264225/andriod-shoutcast-internet-radio-filenotfoundexception – String

1

problema es la codificación de audio/AACP

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

+0

por favor, ayúdenme en este http://stackoverflow.com/questions/16264225/andriod-shoutcast-internet-radio-filenotfoundexception @ the100rabh – String

1

Mediaplayer admite solo these formats como se indica en los documentos del desarrollador de Android.

Algunas corrientes pueden ser satisfactorio esto, pero algunos no

0

Hay un Freeware Advanced Audio (AAC) Decoder for 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é tanto AAC y MP3 usando la clase multijugador proporcionado en la biblioteca

Esperanza esto ayuda

0

último, tengo sencilla aplicación shoutcast streaming. Pruebe this. Simplemente cambie la URL de transmisión en StreamService.java.

Cuestiones relacionadas