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];
}
}
}