play - Transmisión de audio AAC con Android
audio android studio (7)
¡Lo intenté también pero no pude encontrar la solución!
En el último Google I / OI vi algo que me ayudó mucho. ¡Se extiende desde MediaPlayer y mejora muchas cosas! Echar un vistazo.
EXOPLAYER PUEDE AYUDARLE MUCHO
Verifique esta parte del ejemplo:
private static final int BUFFER_SEGMENT_SIZE = 64 * 1024;
private static final int BUFFER_SEGMENT_COUNT = 256;
...
// String with the url of the radio you want to play
String url = getRadioUrl();
Uri radioUri = Uri.parse(url);
// Settings for exoPlayer
Allocator allocator = new DefaultAllocator(BUFFER_SEGMENT_SIZE);
String userAgent = Util.getUserAgent(context, "ExoPlayerDemo");
DataSource dataSource = new DefaultUriDataSource(context, null, userAgent);
ExtractorSampleSource sampleSource = new ExtractorSampleSource(
radioUri, dataSource, allocator, BUFFER_SEGMENT_SIZE * BUFFER_SEGMENT_COUNT);
audioRenderer = new MediaCodecAudioTrackRenderer(sampleSource);
// Prepare ExoPlayer
exoPlayer.prepare(audioRenderer);
EXOPLAYER- ¡Puedo reproducir cualquier cosa desde streamings (video y audio)!
¡AVÍSAME SI NECESITA AYUDA PARA IMPLEMENTARLO ! :)
Según tengo entendido, Android solo reproducirá audio en formato AAC si está codificado como MPEG-4 o 3GPP.
Puedo reproducir audio AAC codificado como M4A cuando es local para la aplicación, pero falla al obtenerlo de un servidor.
Lo siguiente funciona, ya que el archivo m4a se guarda localmente en el directorio res / raw.
MediaPlayer mp = MediaPlayer.create(this, R.raw.*file*);
mp.start();
Lo siguiente no funciona. (Pero lo hace con MP3).
Uri uri = Uri.parse("http://*example.com*/blah.m4a");
MediaPlayer mp = MediaPlayer.create(this, uri);
mp.start();
¿Alguien puede arrojar alguna luz sobre por qué falla cuando el archivo de audio m4a no es local?
Aquí está (algunos de) el error ...
ERROR/PlayerDriver(542): Command PLAYER_INIT completed with an error or info UNKNOWN PVMFStatus
ERROR/MediaPlayer(769): error (200, -32)
WARN/PlayerDriver(542): PVMFInfoErrorHandlingComplete
DEBUG/MediaPlayer(769): create failed:
DEBUG/MediaPlayer(769): java.io.IOException: Prepare failed.: status=0xC8
DEBUG/MediaPlayer(769): at android.media.MediaPlayer.prepare(Native Method)
DEBUG/MediaPlayer(769): at android.media.MediaPlayer.create(MediaPlayer.java:530)
DEBUG/MediaPlayer(769): at android.media.MediaPlayer.create(MediaPlayer.java:507)
...
Me estoy orientando a SDK 1.6.
Escribí un pequeño blog sobre una solución basada en la nube que uso para un reproductor de música que estoy desarrollando. Se basa en el proyecto de Android Cloud Services (ACS), que todavía no está disponible, pero aún así, muestra una posible solución mediante la transcodificación basada en la nube para transmitir cualquier archivo multimedia. Eche un vistazo: http://positivelydisruptive.blogspot.com/2010/08/streaming-m4a-files-using-android-cloud.html
Joel
Este work-around le permite reproducir archivos M4A desde la red (y archivos AAC en otros contenedores como MP4 y 3GP). Simplemente descarga el archivo y se reproduce desde el caché.
private File mediaFile;
private void playAudio(String mediaUrl) {
try {
URLConnection cn = new URL(mediaUrl).openConnection();
InputStream is = cn.getInputStream();
// create file to store audio
mediaFile = new File(this.getCacheDir(),"mediafile");
FileOutputStream fos = new FileOutputStream(mediaFile);
byte buf[] = new byte[16 * 1024];
Log.i("FileOutputStream", "Download");
// write to file until complete
do {
int numread = is.read(buf);
if (numread <= 0)
break;
fos.write(buf, 0, numread);
} while (true);
fos.flush();
fos.close();
Log.i("FileOutputStream", "Saved");
MediaPlayer mp = new MediaPlayer();
// create listener to tidy up after playback complete
MediaPlayer.OnCompletionListener listener = new MediaPlayer.OnCompletionListener() {
public void onCompletion(MediaPlayer mp) {
// free up media player
mp.release();
Log.i("MediaPlayer.OnCompletionListener", "MediaPlayer Released");
}
};
mp.setOnCompletionListener(listener);
FileInputStream fis = new FileInputStream(mediaFile);
// set mediaplayer data source to file descriptor of input stream
mp.setDataSource(fis.getFD());
mp.prepare();
Log.i("MediaPlayer", "Start Player");
mp.start();
} catch (Exception e) {
e.printStackTrace();
}
}
Este es un tiro salvaje en la oscuridad, pero he visto un comportamiento similar con el reproductor de flash donde en realidad ignora el nombre del archivo y solo se basa en el tipo MIME enviado por el servidor. ¿Alguna idea de qué encabezados se envían desde example.com ? Es posible que desee tratar de envolver su blah.m4a en una página que puede establecer los encabezados y luego transmitir los datos binarios. Dale una oportunidad a estos tipos y la comunidad apreciaría una confirmación de lo que funciona:
audio / mpeg audio / mp4a audio / mp4a-latm audio / aac audio / x-aac
Existe un OpenMXPlayer de código abierto que ilustra cómo manejar audio tanto para archivos locales como fuentes en línea / de transmisión. No solo es compatible con AAC, sino también con otros formatos populares.
La idea detrás de esto es usar la API MEdiaCodec, que se introdujo en Android 4.1.
Espero que esto proporcione un buen punto de partida para cualquier persona que necesite una implementación rápida y sin problemas del reproductor de audio.
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
Espero que esto ayude
tratar --
1) MP.prepareAsync()
2) onPrepared() { mp.start() }