Аудиоформат для iOS и Android
Извините, если я задаю слишком общий вопрос.
Мы находимся в разработке приложения, которое записывает звуки воспроизведения на мобильных устройствах. Это приложение разрабатывается как для Android, так и для iOS. Приложение будет записывать аудио с помощью микрофона устройства и хранить его на сервере. Пользователь (от android и iOS) может открыть приложение и воспроизвести звук, который хранится на сервере. Используемый формат звука - формат AAC. В iOS работает нормально. Мы можем записывать и воспроизводить файлы AAC.
Но от android (Samsung S3 и Sansung Galaxy Y) мы не можем записывать звук в формате AAC. Но в S3 мы можем играть в файл AAC.
Мой вопрос в том, какой формат мы можем выбрать для записи и воспроизведения на Android (должен поддерживаться от 2,3 до Jellybean) и iOS. Это Mp4?
Одним из решений является то, что на стороне сервера мы можем преобразовать аудиофайл в AAC, MP4 или 3GP и предоставить поддерживаемые файлы мобильным телефонам на основе версий.
Ответы
Ответ 1
Android и iOS используют один и тот же сервер для хранения записей. Все записи сохраняются без какого-либо расширения.
Когда Android загружает запись с сервера, мое приложение добавляет расширение .aac.
Когда iOS, он добавляет расширение .m4a.
То же самое записывается на обеих мобильных платформах.
Запись на 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];
Для 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);
Ответ 2
Недавно мы завершили одно приложение с такой функциональной записью как из обоих, так и для прослушивания как с iOS, так и с Android. Ниже приведен код, который мы использовали для вашей ссылки. Мы полагались на наш веб-сервис и сервер для преобразования в формат .mp3, который может быть легко играл на обеих платформах.
//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);
}
Вы можете легко найти код преобразования из m4a в mp3 в .Net, осмотритесь с помощью googling (lame или faad какая-то утилита вроде этого).
Надеюсь, что это поможет.
Ответ 3
Недавно мы столкнулись с проблемой взаимодействия. Мы пытались записать файл в формате aac на обеих платформах, но файлы, записанные с использованием телефонов Samsung, не воспроизводились в iOS. Поэтому нам пришлось использовать как 3gp, так и aac-форматы, чтобы воспроизводить файл на нескольких устройствах в android и ios.
Ниже приведен код, который мы использовали при записи файла на Android:
mRecorder = new MediaRecorder();
mRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
mRecorder.setOutputFormat(MediaRecorder.OutputFormat.THREE_GPP);
mRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
mRecorder.setOutputFile(fileName);
Мы сохранили расширение записанного файла как .3gp.
В iOS, однако запись не может быть выполнена в 3gp, поэтому мы записали файл в .aac в iOS, который можно воспроизводить на обеих платформах.
Ответ 4
В сочетании с MPEG4 и AAC все аудио воспроизводится на Android. Но на iOS нам пришлось использовать "m4a" в качестве расширения файла, чтобы воспроизводить звук Android.
Ответ 5
Программно это поможет вам и расширению файла mp3/mp4 для аудио; оба будут поддерживать медиаплееры.
Отладчик Android:
myRecorder.setAudioSource(MediaRecorder.AudioSource.MIC);
myRecorder.setOutputFormat(MediaRecorder.OutputFormat.MPEG_4);
myRecorder.setAudioEncoder(MediaRecorder.AudioEncoder.AAC);
снимок iOS
AVFormatIDKey: @(kAudioFormatMPEG4AAC)
Ответ 6
Android использует формат вывода MPEG 4 и аудиокодер AAC
iOS использует kAudioFormatMPEG