Подтвердить что ты не робот

Аудиоформат для 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 и предоставить поддерживаемые файлы мобильным телефонам на основе версий.

4b9b3361

Ответ 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