0
모두에게 감사드립니다.AVAssetWriter가 startWriting 메서드를 호출 할 수 없습니다.
내 설정 AVAssetWriter 코드입니다. (- 12780), NSLocalizedDescription = "", NSUnderlyingError = 0x1c465a310 {오류 도메인 = NSOSStatusErrorDomain 코드 = -12780 "
그리고 오류
는 오류 도메인 = AVFoundationErrorDomain 코드 = -11800" "" "사용자 정보 = {NSLocalizedFailureReason =" "입니다 (널) "}}private func createWriter(assetURL: URL) {
guard let assetWriter = try? AVAssetWriter.init(url: assetURL, fileType: AVFileType.mov) else { return }
...
videoWriterInput = AVAssetWriterInput.init(mediaType: AVMediaType.video, outputSettings: outputSettings)
videoWriterInput?.expectsMediaDataInRealTime = true
videoWriterInput?.transform = videoWriterInput!.transform.rotated(by: CGFloat.pi/2)
audioWriterInput = AVAssetWriterInput.init(mediaType: AVMediaType.audio, outputSettings: nil)
audioWriterInput?.expectsMediaDataInRealTime = true
let SPBADictionary: [String: Any] = [kCVPixelBufferPixelFormatTypeKey as String: kCVPixelFormatType_32BGRA,
kCVPixelBufferWidthKey as String: kScreenWidth,
kCVPixelBufferHeightKey as String:kScreenHeight,
kCVPixelFormatOpenGLESCompatibility as String: kCFBooleanTrue]
assetWriterPixelBufferInput = AVAssetWriterInputPixelBufferAdaptor.init(assetWriterInput: videoWriterInput!, sourcePixelBufferAttributes: SPBADictionary)
assetWriter.shouldOptimizeForNetworkUse = true
if assetWriter.canAdd(videoWriterInput!) {
assetWriter.add(videoWriterInput!)
}
if assetWriter.canAdd(audioWriterInput!) {
assetWriter.add(audioWriterInput!)
}
}
그리고 이것은, 내가 충돌 있도록 startWriting에서, AVAssetWriterStatus, 쓰기 수 없습니다를 사용하지 않는 이유를 알고 나를 -11800 에러 제공하지 않습니다 콜백 코드, 알 수없는 오류 .
func captureOutput(_ output: AVCaptureOutput, didOutput sampleBuffer: CMSampleBuffer, from connection: AVCaptureConnection) {
if !isRecoding { return }
guard let assetWriter = assetWriter else { return }
autoreleasepool {
let currentSampleTime = CMSampleBufferGetOutputPresentationTimeStamp(sampleBuffer)
if assetWriter.status != .writing {
assetWriter.startWriting()
assetWriter.startSession(atSourceTime: currentSampleTime)
}
if assetWriter.status != .writing{
print("Warning: writer status is \(assetWriter.status.rawValue)")
if assetWriter.status == AVAssetWriterStatus.failed {
print(assetWriter.error ?? "")
return
}
}
if output == videoOutput {
if let pixelBuffer = CMSampleBufferGetImageBuffer(sampleBuffer),videoWriterInput?.isReadyForMoreMediaData ?? false {
print("videoWriterInput")
assetWriterPixelBufferInput?.append(pixelBuffer, withPresentationTime: currentSampleTime)
}
}
if output == audioOutput {
if audioWriterInput?.isReadyForMoreMediaData ?? false {
print("audioWriterInput")
audioWriterInput?.append(sampleBuffer)
}
}
}
}
오류 도메인 = AVFoundationErrorDomain 코드 = -11800 "" ""사용자 정보 = {NSLocalizedFailureReason = ""(- 12780), NSLocalizedDescription = "", NSUnderlyingError = 0x1c465a310 {오류 도메인 = NSOSStatusErrorDomain Code = -12780 "(null)"}} – Eggplant
주석을 넣지 말고 질문에 넣으십시오. 그게'if assetWriter.status == AVAssetWriterStatus.failed'에서 얻은 오류입니까? – Larme
예, 상태가 실패했지만 startWrtiting 메서드를 호출 할 수없는 이유를 알 수 없습니다. 코드는 모든 데모와 동일합니다. – Eggplant