1

私は何かをコーディングしています:

  • 内蔵カメラとマイク(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 は圧縮されたオーディオ形式を読み取ることができません。

ご協力いただきありがとうございます :)

4

0 に答える 0