私は何かをコーディングしています:
- 内蔵カメラとマイク(AVCaptureSession)で動画+音声を記録し、
- ビデオとオーディオのサンプルバッファをリアルタイムで処理し、
- AVAssetWritter を使用して、結果をローカルの .mp4 ファイルに保存します。
- 次に(後で)AVAssetReaderを使用してファイル(ビデオ+オーディオ)を読み取り、
- サンプルバッファで他のことを行います(今のところ何もしません)。
- AVAssetWriter を使用して、結果を最終的なビデオ ファイルに書き込みます。
すべて正常に動作しますが、オーディオ形式に問題があります。
キャプチャ セッションからオーディオ サンプルをキャプチャすると、約 44 サンプル/秒をログに記録できます。これは正常な継ぎ目です。.mp4 ファイルを読むと、1 秒あたり約 3 ~ 5 のオーディオ サンプルしかログに記録されません。ただし、2 つのファイルの外観とサウンドはまったく同じです (QuickTime で)。
- キャプチャ セッションのオーディオ設定は行いませんでした (Apple が許可していないため)。
2 つのオーディオ AVAssetWriterInput の outputSettings を次のように構成しました。
NSDictionary *settings = @{ AVFormatIDKey:@(kAudioFormatLinearPCM), AVNumberOfChannelsKey:@(2), AVSampleRateKey:@(44100.), AVLinearPCMBitDepthKey:@(16), AVLinearPCMIsNonInterleaved:@(NO), AVLinearPCMIsFloatKey:@(NO), AVLinearPCMIsBigEndianKey:@(NO) };
トラックに保存されているサンプルを受け取るために、オーディオ AVAssetReaderTrackOutput の outputSettings に nil を渡します (ドキュメントによると)。
したがって、CaptureSession から最終ファイルまでのサンプル レートは 44100Hz である必要があります。いくつかのオーディオ サンプルしか読み取っていないのはなぜですか? そして、なぜそれはとにかく働いているのですか?サンプルを操作する必要がある場合、うまく機能しないという直感があります (たとえば、タイムスタンプを更新する必要があります)。
他のいくつかの設定 (kAudioFormatMPEG4AAC など) を試しましたが、AVAssetReader は圧縮されたオーディオ形式を読み取ることができません。
ご協力いただきありがとうございます :)