studio play developer android audio aac m4a

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.



tratar --

1) MP.prepareAsync()

2) onPrepared() { mp.start() }