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