cf8f3d05e3
* fix: Add more logs * perf: Init audio AVAssetWriter in parallel * chore: Log Audio Session activation * perf: Init Audio Session asynchronously * chore: Log when category changed * fix: Revert lazy audio initialization * Update Podfile.lock * Pass `sourceFormatHint` to video and audio AVAssetWriter * fix: Remove `sourceFormatHint` from Video Asset Writer * Use default options for Audio Asset Writer * Update Podfile.lock * Revert "Use default options for Audio Asset Writer" This reverts commit e575a14c5342ddc7f9db557d5e3915328ed9e798. * Add time logs * fix: Don't synchronize audio buffers, they are already in sync * shouldOptimizeForNetworkUse = false * fix: Only update `latestTimestamp` once video buffer has been written * perf: Use `AVAssetWriterInput` instead of `AVAssetWriterInputPixelBufferAdaptor` * fix: Fix Audio not being synchronized with Video * Remove logs add comments * Format * feat: Set `.videoRecording` AVAudioSession mode * Refactor `startRecording()` a bit * Format * chore: Throw error directly instead of double-checking
31 lines
1014 B
Swift
31 lines
1014 B
Swift
//
|
|
// AVCaptureSession+synchronizeBuffer.swift
|
|
// VisionCamera
|
|
//
|
|
// Created by Marc Rousavy on 22.11.23.
|
|
// Copyright © 2023 mrousavy. All rights reserved.
|
|
//
|
|
|
|
import AVFoundation
|
|
import Foundation
|
|
|
|
extension AVCaptureSession {
|
|
private var clock: CMClock {
|
|
if #available(iOS 15.4, *), let synchronizationClock {
|
|
return synchronizationClock
|
|
}
|
|
|
|
return masterClock ?? CMClockGetHostTimeClock()
|
|
}
|
|
|
|
/**
|
|
Synchronizes a Buffer received from this [AVCaptureSession] to the timebase of the other given [AVCaptureSession].
|
|
*/
|
|
func synchronizeBuffer(_ buffer: CMSampleBuffer, toSession to: AVCaptureSession) {
|
|
let timestamp = CMSampleBufferGetPresentationTimeStamp(buffer)
|
|
let synchronizedTimestamp = CMSyncConvertTime(timestamp, from: clock, to: to.clock)
|
|
ReactLogger.log(level: .info, message: "Synchronized Timestamp \(timestamp.seconds) -> \(synchronizedTimestamp.seconds)")
|
|
CMSampleBufferSetOutputPresentationTimeStamp(buffer, newValue: synchronizedTimestamp)
|
|
}
|
|
}
|