2016-05-19 2 views
1
- (void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection { 

    AudioBufferList audioBufferList; 
    NSMutableData *data= [NSMutableData data]; 
    CMBlockBufferRef blockBuffer; 
    CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, NULL, &audioBufferList, sizeof(audioBufferList), NULL, NULL, 0, &blockBuffer); 

    for(int y=0; y< audioBufferList.mNumberBuffers; y++){ 

     AudioBuffer audioBuffer = audioBufferList.mBuffers[y]; 
     Float32 *frame = (Float32*)audioBuffer.mData; 

     [data appendBytes:frame length:audioBuffer.mDataByteSize]; 

    } 

    CFRelease(blockBuffer); 
    CFRelease(ref); 

    AVAudioPlayer *player = [[AVAudioPlayer alloc] initWithData:data error:nil]; 
    [player play]; 
} 

Я не знаю, как преобразовать NSdata в Audio Buffer.Как создать AudioBuffer (аудио) из NSdata

AVAudioPlayer вышеизложенным возвращает данные NIL с этой ошибкой: Error = Ошибка домена = NSOSStatusErrorDomain Код = 1954115647

ответ

0

Попробуйте добавить игрока в качестве экземпляра переменной

@property (strong, nonatomic) AVAudioPlayer *player; 

А потом Alloc плеер от captureOutput:

self.player = [[AVAudioPlayer alloc] initWithData:data error:nil]; 

Надеется, что это будет работать :)

+0

ТНХА вам r ответ. Но AVAudioPlayer все еще встречается с ошибкой: Error Domain = NSOSStatusErrorDomain Code = 1954115647 – WENHUI

+0

Итак, попробуйте добавить [[NSMutableData alloc] init] вместо [NSMutableData data]; например: NSMutableData * data = [[NSMutableData alloc] init]; и теперь попробуйте один раз –

+0

Проблема все еще существует, это мой метод выше не подходит? – WENHUI

Смежные вопросы