AVCaptureSession и AudioQueue

Я новичок в Objective-C и iOS, и мне нужна ваша помощь. Я хотел бы взять аудио вход моего микрофона и перенаправить его непосредственно в выход динамика (не пропуская файл).

Я здесь: использую AVCaptureSession, чтобы получить мой микрофонный вход, и AudioQueue, чтобы попытаться воспроизвести выходной буфер. Но я ничего не могу найти в интернете, похоже, это никому не нужно. Я что-то неправильно понимаю? Я просто хочу знать, как преобразовать мой CMsampleBufferRef в хороший pcmbuffer, который мой AudioQueue может использовать для воспроизведения (и так, что изменить в моем AudioQueue, чтобы связать его с моим AVCaptureSession). Это хороший способ сделать? Я нашел много вещей, чтобы записать выходной буфер в файл, но для того, чтобы что-то делать на лету, ничего, или только короткие объяснения, которые я пока не могу использовать.

Пожалуйста, не могли бы вы дать мне очень подробные объяснения с примером кода, потому что я новичок. Пока я могу заставить работать мой AVCaptureSession (что-то есть в CMSampleBufferRef), я могу воспроизводить файл с помощью AudioQueue, но когда я хочу связать эти два, я не могу понять, как это сделать.

заранее спасибо

1 ответ

Посмотрите код ниже, который я написал (используя ссылки, которые я нашел в Интернете). Я не проверил это полностью.

-(void)captureOutput:(AVCaptureOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection
{
    AudioBufferList bufList;
    CMBlockBufferRef blockBuffer;
    CMSampleBufferGetAudioBufferListWithRetainedBlockBuffer(sampleBuffer, NULL, &bufList, sizeof(bufList), NULL, NULL, kCMSampleBufferFlag_AudioBufferList_Assure16ByteAlignment, &blockBuffer);


    NSMutableData *currentSample = nil;
    for(int i = 0; i < bufList.mNumberBuffers; i++)
    {
        if(i == 0)
        {
            currentSample = [NSMutableData dataWithBytes:bufList.mBuffers[i].mData length:bufList.mBuffers[i].mDataByteSize];
        }else
        {
            [currentSample appendBytes:bufList.mBuffers[i].mData length:bufList.mBuffers[i].mDataByteSize];
        }
    }
}
Другие вопросы по тегам