2016-05-19 7 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]; 
} 

Ich weiß nicht, wie NSdata in Audio Buffer konvertieren.So erstellen Sie AudioBuffer (Audio) von NSdata

AVAudioPlayer mit obigen Daten gibt nil zurück, mit diesem Fehler: Fehler = Fehler Domain = NSOSStatusErrorDomain Code = 1954115647

Antwort

0

Versuchen Hinzufügen Spieler als Instanzvariable

@property (strong, nonatomic) AVAudioPlayer *player; 

Und dann Alloc Ihr Spieler von captureOutput:

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

Hope this funktioniert :)

+0

thx Sie r answer.Aut AVAudioPlayer tritt immer noch Fehler: Fehler Domain = NSOSStatusErrorDomain Code = 1954115647 – WENHUI

+0

Ok, dann versuchen, [[NSMutableData Alloc] Init] anstelle von [NSMutableData Daten]; zB: NSMutableData * data = [[NSMutableData alloc] init]; und jetzt einmal versuchen –

+0

Problem existiert immer noch, ist es meine obige Methode ist nicht korrekt? – WENHUI