1

iPhoneでavassetwriterを使用してオーディオをビデオに録音できません。私はカメラのビデオを録画することはできますが、何も問題はありませんが、オーディオを追加しようとすると、写真アルバムのビデオに表示されている時間が実際には何かを表示しています。 15:54:01などのように表示され、ビデオが短くても数字の後に作成されたすべてのビデオが増加します。私はここに他の質問で見られたiveを実行しようとしていますが、運はありません。相続人は、私がAVAssetWriterがオーディオを録音していません

captureSession = [[AVCaptureSession alloc] init]; 
//set up audio input 
AVCaptureDevice *audioDevice  = [AVCaptureDevice defaultDeviceWithMediaType: AVMediaTypeAudio]; 
AVCaptureDeviceInput *audioInput = [AVCaptureDeviceInput deviceInputWithDevice:audioDevice error:&error ]; 
audioOutput = [[AVCaptureAudioDataOutput alloc] init]; 

if([captureSession canAddOutput:audioOutput]) 
{ 
    [captureSession addOutput:audioOutput]; 
}  

[audioOutput setSampleBufferDelegate:self queue:dispatch_get_main_queue()]; 

HERESに私のオーディオ入力設定していどのようにここでは、その後

videoWriter = [[AVAssetWriter alloc] initWithURL:[NSURL fileURLWithPath:MOVIE_PATH] fileType:AVFileTypeQuickTimeMovie error:&error]; 

AudioChannelLayout acl; 
bzero(&acl, sizeof(acl)); 
acl.mChannelLayoutTag = kAudioChannelLayoutTag_Mono; 


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

とはCMSampleBufferRefを使用してオーディオサンプルバッファを書くイムを送信する方法をどのようにイム設定アップAVAssetWriterを

audioOutputコールバック

- (void) captureAudio:(CMSampleBufferRef)sampleBuffer 
{ 
    if([audioWriterInput isReadyForMoreMediaData]){ 
    [audioWriterInput appendSampleBuffer:sampleBuffer]; 
    } 
} 

本当にありがとう助けてください、私はこの一日中立ち往生しました。

+0

あなたは答えを見つけましたか? –

答えて

4

私は[videoWriter startSessionAtSourceTime]を呼び出してもらえません。また、audioWriterInputが準備ができていないときに、オーディオサンプルバッファを破棄しています。

問題は、書いているもののPTS(プレゼンテーションタイムスタンプ)にあります。あなたのタイムラインがstartSessionAtSourceTimeで与えられた時刻tに始まると出力するか、追加したバッファを修正して0に基づくpresentationTimeStampsを持つことができます。

+0

AVCaptureAudioDataOutputでstartSessionAtSourceTime関数を見つけることができません。他に何か意味がありましたか? –

+0

はい、この質問は、オーディオとビデオファイルをエンコードするクラスである 'AVAssetWriter'についてです。マイクからのオーディオをキャプチャするための' AVCaptureAudioDataOutput'について質問しています。 'AVAssetWriter'を使って' AVCaptureAudioDataOutput'でキャプチャしたオーディオをファイルに書き込むことができます。その場合、キャプチャしたバッファのタイムスタンプを 'startSessionAtSourceTime'に渡します。 –

+0

だから、あなたは '[assetWriter startSessionAtSourceTime]' –

関連する問題