Formato de audio para iOS y Android

Lo siento si estoy haciendo una pregunta demasiado genérica.

Estamos en el desarrollo de una aplicación que graba una reproducción de audio en dispositivos móviles. Esta aplicación se está desarrollando tanto en Android como en iOS. La aplicación grabará audio utilizando el micrófono del dispositivo y lo almacenará en el servidor. El usuario (desde android e iOS) puede abrir la aplicación y reproducir el sonido que se almacena en el servidor. El formato de sonido que usamos es el formato AAC. En iOS está funcionando bien. Podemos grabar y reproducir los archivos AAC.

Pero desde android (Samsung S3 y Sansung Galaxy Y) no podemos grabar sonido en formato AAC. Pero en S3 podemos reproducir el archivo AAC.

Mi pregunta es, qué formato podemos seleccionar para la grabación y reproducción en Android (debe apoyar de 2,3 a Jellybean) e iOS. ¿Es Mp4?

Una solución que tenemos es, en el lado del backend podemos convertir el archivo de audio a AAC, MP4 o 3GP y dar los archivos compatibles a móviles basados ​​en las versiones.

Android e iOS utilizan el mismo servidor en los registros de almacenamiento. Todos los registros guardados sin ninguna extensión.

Cuando registro de descarga de Android desde el servidor, mi aplicación agrega extensión " .aac ".
Cuando iOS agrega la extensión " .m4a ".

El mismo registro juega bien en ambas plataformas móviles.

Grabar en iOS:

NSDictionary recorderSettings = [[NSDictionary alloc] initWithObjectsAndKeys:             [NSNumber numberWithInt:kAudioFormatMPEG4AAC], AVFormatIDKey,             [NSNumber numberWithInt:16000],AVSampleRateKey,             [NSNumber numberWithInt:1],AVNumberOfChannelsKey,             [NSNumber numberWithInt:16],AVLinearPCMBitDepthKey,             [NSNumber numberWithBool:NO],AVLinearPCMIsBigEndianKey,             [NSNumber numberWithBool:NO],AVLinearPCMIsFloatKey,             nil]; 

Para Android:

 myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); myRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); myRecorder.setAudioSamplingRate(16000); myRecorder.setAudioChannels(1); mRecorder.setOutputFile(fileName); 

Hemos completado recientemente una aplicación con este tipo de funcionalidad de grabación de ambos y escuchar tanto de iOS y Android, a continuación es el código que utilizamos para su reference.We se basó en nuestro servicio webservidor y para la conversión al formato .mp3 que se puede jugar fácilmente en ambos plataforma.

 //iPhone side code. records m4a file format (small in size) NSDictionary *recordSettings = [NSDictionary dictionaryWithObjectsAndKeys: [NSNumber numberWithInt: kAudioFormatMPEG4AAC], AVFormatIDKey, [NSNumber numberWithFloat:16000.0], AVSampleRateKey, [NSNumber numberWithInt: 1], AVNumberOfChannelsKey, nil]; NSError *error = nil; audioRecorder = [[AVAudioRecorder alloc] initWithURL:soundFileURL settings:recordSettings error:&error]; if (error) NSLog(@"error: %@", [error localizedDescription]); else [audioRecorder prepareToRecord]; //Android side code. (records mp4 format and it works straight away by giving mp3 extension.) MediaRecorder recorder = new MediaRecorder(); recorder.setAudioSource(MediaRecorder.AudioSource.MIC); recorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); recorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); recorder.setAudioEncodingBitRate(256); recorder.setAudioChannels(1); recorder.setAudioSamplingRate(44100); recorder.setOutputFile(getFilename()); try { recorder.prepare(); recorder.start(); myCount=new MyCount(thirtysec, onesecond); myCount.start(); recordingDone=true; count=0; handler.sendEmptyMessage(0); if(progressDialog.isShowing()) progressDialog.dismiss(); } catch (IllegalStateException e) { e.printStackTrace(); StringWriter strTrace = new StringWriter(); e.printStackTrace(new PrintWriter(strTrace)); CrashReportActivity.appendLog( "\nEXCEPTION : \n" + strTrace.toString() + "\n", Comment.this); } catch (IOException e) { e.printStackTrace(); StringWriter strTrace = new StringWriter(); e.printStackTrace(new PrintWriter(strTrace)); CrashReportActivity.appendLog( "\nEXCEPTION : \n" + strTrace.toString() + "\n", Comment.this); } 

Usted puede encontrar el código de conversión de m4a a mp3 en. Net fácilmente, mire alrededor de googling (cojo o faad alguna utilidad como eso).

Espero que esto ayude.

Hace poco nos enfrentamos a este problema de interoperabilidad. Estábamos tratando de grabar un archivo en formato aac en ambas plataformas, pero los archivos grabados con los teléfonos Samsung no se reproducían en iOS. Así que tuvimos que usar tanto 3gp como formatos aac para reproducir el archivo a través de múltiples dispositivos en android y ios.

A continuación se muestra el código que utilizamos al grabar un archivo en Android:

  mRecorder = new MediaRecorder(); mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP); mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); mRecorder.setOutputFile(fileName); 

Mantuvimos la extensión del archivo grabado como .3gp.

En iOS, sin embargo, la grabación no se puede realizar en 3gp por lo que el archivo grabado en. AAC en iOS que se puede reproducir en ambas plataformas.

Con la combinación de MPEG4 y AAC, todo el audio se reproduce en Android. Pero en iOS, tuvimos que usar "m4a" como la extensión de archivo para que el audio de Android se reproduce.

Programatically esto le ayudará y la extensión de archivo puede mp3 / mp4 para audio; Ambos apoyarán a los reproductores multimedia. Snippet de Android:

 myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC); myRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4); myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC); 

Fragmento de iOS

 AVFormatIDKey: @(kAudioFormatMPEG4AAC) 

Android utiliza formato de salida MPEG 4 y codificador de audio AAC

IOS utiliza kAudioFormatMPEG

  • No se puede agregar un nodo que no tenga un nodo CSS a un nodo sin una función de medida
  • El audio multipartito en WebRTC en iOS / Android se distorsiona
  • WebRTC con PeerJS - Funcionará en aplicaciones Android e IOS
  • Barra de estado Ocultar Cordova
  • Notificaciones push iOS y código nativo cliente-cliente de Android
  • ¿Existe un equivalente a 'adb shell texto de teclado de entrada' para iOS?
  • Cómo deshabilitar la rotación de la pantalla (reaccionar-nativo)?
  • Cordova tarea de programación
  • ReferenceError: La cámara no está definida
  • Implementación de la notificación push del servidor
  • Aplicaciones multipágina en QML
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.