视频转换出现问题,现需要回退
This commit is contained in:
parent
55827d2fb0
commit
44e71b472c
@ -59,7 +59,6 @@ class SpatialVideoConvertor {
|
||||
]
|
||||
)
|
||||
assetReader.add(output_video)
|
||||
|
||||
//加载音频轨道
|
||||
// let outputSettings_Audio:[String:Any] = [
|
||||
// AVFormatIDKey:kAudioFormatLinearPCM,
|
||||
@ -87,7 +86,14 @@ class SpatialVideoConvertor {
|
||||
track: asset.loadTracks(withMediaType: .audio).first!,
|
||||
outputSettings:outputSettings_Audio
|
||||
)
|
||||
if assetReader.canAdd(output_audio){
|
||||
assetReader.add(output_audio)
|
||||
print("添加音频read output成功。。。。")
|
||||
}
|
||||
else{
|
||||
print("添加音频read output失败。。。。")
|
||||
}
|
||||
|
||||
|
||||
|
||||
// let output_audio = AVAssetReaderAudioMixOutput(audioTracks: asset.tracks(withMediaType: .audio), audioSettings: nil)
|
||||
@ -156,6 +162,7 @@ class SpatialVideoConvertor {
|
||||
|
||||
if vw == nil {
|
||||
vw = VideoWriter(url: outputFile, width: Int(cwidth), height: Int(cheight), orientation: orientation, sessionStartTime: CMTime(value: 1, timescale: 30 ), isRealTime: false, queue: .main)
|
||||
// vw = VideoWriter(url: outputFile, width: Int(cwidth), height: Int(cheight), orientation: orientation, sessionStartTime: CMTimeMake(value: 0, timescale: 1), isRealTime: false, queue: .main)
|
||||
}
|
||||
_ = vw!.add(image: newpb!, presentationTime: time)
|
||||
print( "Added frame at \(time)")
|
||||
@ -168,26 +175,18 @@ class SpatialVideoConvertor {
|
||||
}
|
||||
}
|
||||
|
||||
while let nextAudioBuffer = output_audio.copyNextSampleBuffer() {
|
||||
print("audio read buffer....")
|
||||
vw!.addAudio(sample: nextAudioBuffer)
|
||||
}
|
||||
|
||||
// let vw2 = vw!
|
||||
// await vw!.addAudio(assetTrackOutput: output_audio){
|
||||
// _ = try! await vw2.finish()
|
||||
// }
|
||||
|
||||
|
||||
print( "status - \(assetReader.status)")
|
||||
print( "status - \(assetReader.error?.localizedDescription ?? "None")")
|
||||
print( "Finished")
|
||||
|
||||
// DispatchQueue.main.asyncAfter(deadline: .now() + 2) {
|
||||
// DispatchQueue.main.sync {
|
||||
// try await vw!.finish()
|
||||
// }
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
// _ = try await vw!.finish()
|
||||
_ = try await vw!.finish()
|
||||
|
||||
|
||||
}
|
||||
|
||||
@ -74,8 +74,10 @@ class VideoWriter {
|
||||
|
||||
// self.writerInput_Audio = AVAssetWriterInput(mediaType: AVMediaType.audio, outputSettings: outputSettings_Audio)
|
||||
// let outputSettings_Audio = AVOutputSettingsAssistant.init(preset: .preset1920x1080)?.audioSettings
|
||||
self.writerInput_Audio = AVAssetWriterInput.init(mediaType: .audio, outputSettings: outputSettings_Audio, sourceFormatHint: nil)
|
||||
self.writerInput_Audio = AVAssetWriterInput.init(mediaType: .audio, outputSettings: outputSettings_Audio)
|
||||
|
||||
self.writerInput_Audio.expectsMediaDataInRealTime = false
|
||||
// self.writerInput_Audio.
|
||||
if writer.canAdd(self.writerInput_Audio) {
|
||||
writer.add(self.writerInput_Audio)
|
||||
print("writer 添加input audio成功...")
|
||||
@ -96,36 +98,37 @@ class VideoWriter {
|
||||
self.writer = writer
|
||||
self.writerInput = input
|
||||
}
|
||||
|
||||
//追加音频
|
||||
func addAudio(sample:CMSampleBuffer) {
|
||||
let formatDesc:CMFormatDescription = // 1
|
||||
CMSampleBufferGetFormatDescription(sample)!;
|
||||
func addAudio(assetTrackOutput:AVAssetReaderTrackOutput,callback:@escaping @Sendable () async -> Void) async {
|
||||
// self.writerInput_Audio.requestMediaDataWhenReady(on: DispatchQueue.main) {
|
||||
while let sample = assetTrackOutput.copyNextSampleBuffer() {
|
||||
print("audio read buffer....")
|
||||
let formatDesc:CMFormatDescription = CMSampleBufferGetFormatDescription(sample)!
|
||||
let mediaType:CMMediaType = CMFormatDescriptionGetMediaType(formatDesc);
|
||||
if mediaType == kCMMediaType_Audio {
|
||||
if self.writerInput_Audio.isReadyForMoreMediaData {
|
||||
if self.writerInput_Audio.append(sample) == false {
|
||||
print("追加音频失败....")
|
||||
print("追加音频失败....:\(String(describing: self.writer.error?.localizedDescription))")
|
||||
}
|
||||
else{
|
||||
print("audio 追加成功....")
|
||||
}
|
||||
}
|
||||
else {
|
||||
print("auiod 追加还未准备好...")
|
||||
self.writerInput_Audio.requestMediaDataWhenReady(on: DispatchQueue.main) {
|
||||
if self.writerInput_Audio.append(sample) == false {
|
||||
print("追加音频失败....")
|
||||
}
|
||||
else{
|
||||
print("audio 追加成功....")
|
||||
}
|
||||
}
|
||||
print("audio 追加还未准备好...")
|
||||
|
||||
}
|
||||
}
|
||||
else {
|
||||
print("不是audio类型...")
|
||||
}
|
||||
try! await Task.sleep(nanoseconds: 200_000_000)
|
||||
}
|
||||
|
||||
// }
|
||||
print("audio读取完毕。。。。")
|
||||
await callback()
|
||||
print("audio func 执行完毕。。。。...")
|
||||
}
|
||||
|
||||
func add(image: CIImage, presentationTime: CMTime) -> Bool {
|
||||
@ -164,8 +167,12 @@ class VideoWriter {
|
||||
}
|
||||
|
||||
func finish() async throws -> AVAsset? {
|
||||
print("开始调用finish...")
|
||||
// return nil
|
||||
writerInput_Audio.markAsFinished()
|
||||
writerInput.markAsFinished()
|
||||
print("VideoWriter: calling writer.finishWriting()")
|
||||
|
||||
await writer.finishWriting()
|
||||
if self.writer.status != .completed {
|
||||
print("VideoWriter finish: error in finishWriting - \(self.writer.error?.localizedDescription ?? "Unknown")")
|
||||
|
||||
Loading…
Reference in New Issue
Block a user