0

AVAssetWriter を使用してオーディオを録音しようとしています。ただし、ファイルを再生すると、元のオーディオよりも 2 倍遅く再生されます。私がやったことは、次の方法でAVAssetWriterを作成することです..

_writer = [AVAssetWriter assetWriterWithURL:url fileType:AVFileTypeMPEG4 error:nil];
AudioChannelLayout acl;
bzero( &acl, sizeof(acl));
acl.mChannelLayoutTag = kAudioChannelLayoutTag_Mono;

NSDictionary *audioOutputSettings = [NSDictionary dictionaryWithObjectsAndKeys:
                                     [ NSNumber numberWithInt: kAudioFormatMPEG4AAC ], AVFormatIDKey,
                                     [ NSNumber numberWithInt: 1 ], AVNumberOfChannelsKey,
                                     [ NSNumber numberWithFloat: 44100.0 ], AVSampleRateKey,
                                     [ NSNumber numberWithInt: 64000 ], AVEncoderBitRateKey,
                                     [ NSData dataWithBytes: &acl length: sizeof( acl ) ], AVChannelLayoutKey,
                                     nil];

_audioWriterInput = [AVAssetWriterInput assetWriterInputWithMediaType:AVMediaTypeAudio outputSettings:audioOutputSettings];
_audioWriterInput.expectsMediaDataInRealTime=YES;
[_writer addInput:_audioWriterInput];

その後、次のようにデータにバッファを追加し始めます

if (_audioWriterInput.readyForMoreMediaData == YES) {
            [_audioWriterInput appendSampleBuffer:sampleBuffer];
            return  YES;
        }

私がやっていることは、次のデリゲート関数で AVCapureSession を使用してマイク出力を取得することです

- (void)captureOutput:(AVCaptureFileOutput *)captureOutput didOutputSampleBuffer:(CMSampleBufferRef)sampleBuffer fromConnection:(AVCaptureConnection *)connection 

sampleBuffer を avassetWriter に直接渡してファイルに書き込みます。

オーディオ データのファイルへの書き込みが非常に遅い理由を教えてください。他の誰かが同様の問題に直面していますか? そして、問題の可能な解決策は何ですか..

4

1 に答える 1