2015-05-05 6 views
13

Как загрузить аудиоклип в реальном времени на сервер во время его записи? В основном мое требование - загрузить аудиоклип в виде патронов/пакетов во время его записи. Я уже сделал запись с помощью IQAudioRecorderController https://github.com/hackiftekhar/IQAudioRecorderController. Он записывает аудио и сохраняет в TemporaryDirectory.Загрузить аудиоклип в реальном времени во время его записи?

Я хотел знать, как загрузить в реальном времени, не сохраняя аудиоклип.

Это запись часть

//Unique recording URL 


NSString *fileName = [[NSProcessInfo processInfo] globallyUniqueString]; 
_recordingFilePath = [NSTemporaryDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"%@.m4a",fileName]]; 


// Initiate and prepare the recorder 

_audioRecorder = [[AVAudioRecorder alloc] initWithURL:[NSURL fileURLWithPath:_recordingFilePath] settings:recordSetting error:nil]; 
_audioRecorder.delegate = self; 
_audioRecorder.meteringEnabled = YES; 


// Recording start 
- (void)recordingButtonAction:(UIBarButtonItem *)item 
{ 
if (_isRecording == NO) 
    { 
    _isRecording = YES; 

    //UI Update 
    { 
     [self showNavigationButton:NO]; 
     _recordButton.tintColor = _recordingTintColor; 
     _playButton.enabled = NO; 
     _trashButton.enabled = NO; 
    } 

    /* 
    Create the recorder 
    */ 
    if ([[NSFileManager defaultManager] fileExistsAtPath:_recordingFilePath]) 
    { 
     [[NSFileManager defaultManager] removeItemAtPath:_recordingFilePath error:nil]; 
    } 

    _oldSessionCategory = [[AVAudioSession sharedInstance] category]; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryRecord error:nil]; 
    [_audioRecorder prepareToRecord]; 
    [_audioRecorder record]; 
} 
else 
{ 
    _isRecording = NO; 

    //UI Update 
    { 
     [self showNavigationButton:YES]; 
     _recordButton.tintColor = _normalTintColor; 
     _playButton.enabled = YES; 
     _trashButton.enabled = YES; 
    } 

    [_audioRecorder stop]; 
    [[AVAudioSession sharedInstance] setCategory:_oldSessionCategory error:nil]; 
} 
} 

// Recording done 

-(void)doneAction:(UIBarButtonItem*)item 
{ 
    if ([self.delegate respondsToSelector:@selector(audioRecorderController:didFinishWithAudioAtPath:)]) 
    { 
     IQAudioRecorderController *controller = (IQAudioRecorderController*)[self navigationController]; 
     [self.delegate audioRecorderController:controller didFinishWithAudioAtPath:_recordingFilePath]; 
    } 

    [self dismissViewControllerAnimated:YES completion:nil]; 
} 

ответ

1

Существуют различные способы решения этого один способ создать свой собственный аудиограф. AudioGraph может захватывать образцы с микрофона или из файла. Затем вы переходите к блоку вывода, но установите обратный вызов для получения выборочных кадров. Затем вы нажимаете на свой сетевой класс, который затем может загружать пакет за пакет.

Хороший пример, который показывает вам, как записать эти захваченные пакеты на диск: AVCaptureAudioDataOutput.

В этом примере пакеты записываются в суде ExtAudioFileWriteAsync. Вы должны заменить это своей собственной логикой для загрузки на сервер. Обратите внимание, что, хотя вы можете сделать это легко, одна проблема заключается в том, что это даст вам исходные образцы звука. Если вам нужны они как волновой файл или аналогичный, вам может потребоваться дождаться окончания записи, так как заголовок файла нуждается в информации об содержащихся образцах аудио.

-1

Код, который вы используете в настоящее время, будет работать для вас, если вы хотите загрузить записанный файл после записи, так как он даст вам окончательный записанный файл.

Если вы хотите, чтобы загрузить живую аудиозапись на сервер, то я думаю, что вы должны пойти с комбинацией,

AudioSession для записи материала

ffmpeg для загрузки вашего живого звука на сервер.

Вы можете получить хорошую помощь для записи звука и управления аудио Буферами от here

Для FFmpeg Я думаю, что вы должны Лиры много. Будет легко отправить статический/сохраненный аудиофайл на сервер с помощью ffmpeg, но для отправки Live Audio Buffer на сервер будет сложная работа.

+0

Вам не нужно «ffmpeg» для загрузки звука, и у вас, вероятно, возникнут проблемы с лицензированием при установке приложения в App Store. – damian

+0

Могут быть другие варианты для ffmpeg, но если вы относитесь к лицензированию, то нет проблем с отправкой сборки в App Store, потому что я успешно отправил приложение с реализацией ffmpeg в App Store, но вы должны упомянуть, что используете его в ваше приложение для целей кредитования. – Yuvrajsinh

+0

ffmpeg имеет лицензию LGPL. Условия LGPL несовместимы с App Store. В основном, вы нарушаете условия лицензирования ffmpeg. https://trac.ffmpeg.org/ticket/1229 – damian