AVAssetExportSession未启动导出/卡住等待

fru*_*cup 6 avfoundation ios swift

我正在尝试使用AVFoundation加入2个视频片段.出于测试目的,这里我尝试加载单个视频剪辑,将其视频和音频曲目添加到合成中,然后使用导出AVAssetExportSession.

当我运行下面的代码时,输​​出"Exporting",但永远不会执行导出回调.此外,如果我定期检查export(print(exporter.progress))的进度,我发现进度始终为0.0,即使在几分钟后也是如此.如果我打印状态,我发现它正在"等待"某些东西.

// URL to video file
let fileURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("video.mov")

// Create composition and tracks
let comp = AVMutableComposition()
let videoTrack = comp.addMutableTrack(withMediaType: AVMediaType.video, preferredTrackID: kCMPersistentTrackID_Invalid)
let audioTrack = comp.addMutableTrack(withMediaType: AVMediaType.audio, preferredTrackID: kCMPersistentTrackID_Invalid)

// Create asset from file
let asset = AVAsset(url: fileURL)

// Insert video
try! videoTrack?.insertTimeRange(CMTimeRangeMake(kCMTimeZero, asset.duration), of: asset.tracks(withMediaType: AVMediaType.video)[0] as AVAssetTrack, at: kCMTimeZero)

// Insert audio
try! audioTrack?.insertTimeRange(CMTimeRangeMake(kCMTimeZero, asset.duration), of: asset.tracks(withMediaType: AVMediaType.audio)[0] as AVAssetTrack, at: kCMTimeZero)

// Delete existing movie file if exists
let finalURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask)[0].appendingPathComponent("FINAL.mov")
try? FileManager.default.removeItem(at: finalURL)

// Create the exporter
exporter = AVAssetExportSession(asset: comp, presetName: AVAssetExportPresetLowQuality)
exporter.outputURL = finalURL
exporter.outputFileType = AVFileType.mov

print("Exporting")
exporter.exportAsynchronously(completionHandler: {
    // This statement is never reached
    print(self.exporter.error)
})
Run Code Online (Sandbox Code Playgroud)

不会抛出任何错误.看起来好像出口永远不会开始.我不确定它在等什么.

编辑:有些怪异的事情正在发生.如果我重新启动手机然后运行代码,它就可以了.但它只运行一次.如果我第二次运行,没有任何事情像往常一样发生.但是,当我重新启动手机并再次运行时,它再次起作用.

编辑2:我在别人的手机上试过它,每次都可以正常工作.我的手机世界上有什么问题?

小智 -1

我猜想,您的一个麦克风无法正常工作,并且因此被卡住,我的后置摄像头也有类似的行为。您是否尝试过在不同时录制的情况下导出电影,只是为了测试是否涉及可能损坏的麦克风?