mirror of
https://github.com/samsonjs/SJSAssetExportSession.git
synced 2026-04-27 14:57:46 +00:00
Typealias Error in the SampleWriter
This commit is contained in:
parent
a73fe1173e
commit
ee61962f0c
1 changed files with 10 additions and 8 deletions
|
|
@ -17,6 +17,8 @@ private extension AVAsset {
|
||||||
}
|
}
|
||||||
|
|
||||||
actor SampleWriter {
|
actor SampleWriter {
|
||||||
|
typealias Error = ExportSession.Error
|
||||||
|
|
||||||
private let queue = DispatchSerialQueue(
|
private let queue = DispatchSerialQueue(
|
||||||
label: "SJSAssetExportSession.SampleWriter",
|
label: "SJSAssetExportSession.SampleWriter",
|
||||||
autoreleaseFrequency: .workItem,
|
autoreleaseFrequency: .workItem,
|
||||||
|
|
@ -81,7 +83,7 @@ actor SampleWriter {
|
||||||
let writer = try AVAssetWriter(outputURL: outputURL, fileType: fileType)
|
let writer = try AVAssetWriter(outputURL: outputURL, fileType: fileType)
|
||||||
writer.shouldOptimizeForNetworkUse = optimizeForNetworkUse
|
writer.shouldOptimizeForNetworkUse = optimizeForNetworkUse
|
||||||
guard writer.canApply(outputSettings: videoOutputSettings, forMediaType: .video) else {
|
guard writer.canApply(outputSettings: videoOutputSettings, forMediaType: .video) else {
|
||||||
throw ExportSession.Error.setupFailure(reason: "Cannot apply video output settings")
|
throw Error.setupFailure(reason: "Cannot apply video output settings")
|
||||||
}
|
}
|
||||||
|
|
||||||
let audioTracks = try await asset.sendTracks(withMediaType: .audio)
|
let audioTracks = try await asset.sendTracks(withMediaType: .audio)
|
||||||
|
|
@ -114,10 +116,10 @@ actor SampleWriter {
|
||||||
throw CancellationError()
|
throw CancellationError()
|
||||||
} else if writer.status == .failed {
|
} else if writer.status == .failed {
|
||||||
reader.cancelReading()
|
reader.cancelReading()
|
||||||
throw ExportSession.Error.writeFailure(writer.error)
|
throw Error.writeFailure(writer.error)
|
||||||
} else if reader.status == .failed {
|
} else if reader.status == .failed {
|
||||||
writer.cancelWriting()
|
writer.cancelWriting()
|
||||||
throw ExportSession.Error.readFailure(reader.error)
|
throw Error.readFailure(reader.error)
|
||||||
} else {
|
} else {
|
||||||
await withCheckedContinuation { continuation in
|
await withCheckedContinuation { continuation in
|
||||||
writer.finishWriting {
|
writer.finishWriting {
|
||||||
|
|
@ -134,7 +136,7 @@ actor SampleWriter {
|
||||||
audioOutput.alwaysCopiesSampleData = false
|
audioOutput.alwaysCopiesSampleData = false
|
||||||
audioOutput.audioMix = audioMix
|
audioOutput.audioMix = audioMix
|
||||||
guard reader.canAdd(audioOutput) else {
|
guard reader.canAdd(audioOutput) else {
|
||||||
throw ExportSession.Error.setupFailure(reason: "Can't add audio output to reader")
|
throw Error.setupFailure(reason: "Can't add audio output to reader")
|
||||||
}
|
}
|
||||||
reader.add(audioOutput)
|
reader.add(audioOutput)
|
||||||
self.audioOutput = audioOutput
|
self.audioOutput = audioOutput
|
||||||
|
|
@ -142,7 +144,7 @@ actor SampleWriter {
|
||||||
let audioInput = AVAssetWriterInput(mediaType: .audio, outputSettings: audioOutputSettings)
|
let audioInput = AVAssetWriterInput(mediaType: .audio, outputSettings: audioOutputSettings)
|
||||||
audioInput.expectsMediaDataInRealTime = false
|
audioInput.expectsMediaDataInRealTime = false
|
||||||
guard writer.canAdd(audioInput) else {
|
guard writer.canAdd(audioInput) else {
|
||||||
throw ExportSession.Error.setupFailure(reason: "Can't add audio input to writer")
|
throw Error.setupFailure(reason: "Can't add audio input to writer")
|
||||||
}
|
}
|
||||||
writer.add(audioInput)
|
writer.add(audioInput)
|
||||||
self.audioInput = audioInput
|
self.audioInput = audioInput
|
||||||
|
|
@ -150,7 +152,7 @@ actor SampleWriter {
|
||||||
|
|
||||||
private func setUpVideo(videoTracks: [AVAssetTrack]) throws {
|
private func setUpVideo(videoTracks: [AVAssetTrack]) throws {
|
||||||
guard !videoTracks.isEmpty else {
|
guard !videoTracks.isEmpty else {
|
||||||
throw ExportSession.Error.setupFailure(reason: "No video tracks")
|
throw Error.setupFailure(reason: "No video tracks")
|
||||||
}
|
}
|
||||||
|
|
||||||
let videoOutput = AVAssetReaderVideoCompositionOutput(
|
let videoOutput = AVAssetReaderVideoCompositionOutput(
|
||||||
|
|
@ -160,7 +162,7 @@ actor SampleWriter {
|
||||||
videoOutput.alwaysCopiesSampleData = false
|
videoOutput.alwaysCopiesSampleData = false
|
||||||
videoOutput.videoComposition = videoComposition
|
videoOutput.videoComposition = videoComposition
|
||||||
guard reader.canAdd(videoOutput) else {
|
guard reader.canAdd(videoOutput) else {
|
||||||
throw ExportSession.Error.setupFailure(reason: "Can't add video output to reader")
|
throw Error.setupFailure(reason: "Can't add video output to reader")
|
||||||
}
|
}
|
||||||
reader.add(videoOutput)
|
reader.add(videoOutput)
|
||||||
self.videoOutput = videoOutput
|
self.videoOutput = videoOutput
|
||||||
|
|
@ -168,7 +170,7 @@ actor SampleWriter {
|
||||||
let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: videoOutputSettings)
|
let videoInput = AVAssetWriterInput(mediaType: .video, outputSettings: videoOutputSettings)
|
||||||
videoInput.expectsMediaDataInRealTime = false
|
videoInput.expectsMediaDataInRealTime = false
|
||||||
guard writer.canAdd(videoInput) else {
|
guard writer.canAdd(videoInput) else {
|
||||||
throw ExportSession.Error.setupFailure(reason: "Can't add video input to writer")
|
throw Error.setupFailure(reason: "Can't add video input to writer")
|
||||||
}
|
}
|
||||||
writer.add(videoInput)
|
writer.add(videoInput)
|
||||||
self.videoInput = videoInput
|
self.videoInput = videoInput
|
||||||
|
|
|
||||||
Loading…
Reference in a new issue