[英]How to save encoded CMSampleBuffer samples to mp4 file on iOS
我正在使用 VideoToolbox 框架從 AVCaptureSession 檢索數據並將其編碼為 h264 和 acc。
我正處於以下狀態:
func captureOutput(_ captureOutput: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection)
CMSampleBuffer
轉換為CVImageBuffer
並使用VTCompressionSession
將其編碼為 h264, VTCompressionSession
在VTCompressionOutputCallback
傳遞編碼幀CMSampleBuffer
編碼為 acc 並將其作為UnsafeMutableAudioBufferListPointer
傳遞。 我現在被阻止,我想正確地將這些流轉換為Data
字節以通過FileHandle
寫入 url 。 我應該怎么做?
我需要在最終確定實際文件之前訪問編碼流,所以我不能使用(我認為) AVAssetWriter
將未編碼的流保存到 mp4 文件中,因為據我所知,我需要將未編碼的樣本傳遞給AVAssetWriter
以便它好好工作。 還是我錯了?
原來你可以使用AVAssetWriter
保存編碼的CMSampleBuffer
但你需要在AVAssetWriterInput
傳遞nil
作為AVAssetWriterInput
以防止重新編碼數據:
let input AVAssetWriterInput(mediaType: mediaType, outputSettings: nil, sourceFormatHint: sourceFormatHint)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.