问题描述
我做了以下工作正常
let audioCompositionTrack = mixComposition.addMutableTrack(withMediaType: .audio,preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
let blankAudioUrl = Bundle.main.url(forResource: "silence",withExtension: "wav")!
let blankAudio = AVAsset(url: blankAudioUrl)
let blankAudioTrack = blankAudio.tracks(withMediaType: .audio).first
var audioTrack: AVAssetTrack?
if videoAsset.tracks(withMediaType: .audio).count > 0 {
audioTrack = videoAsset.tracks(withMediaType: .audio).first
} else {
audioTrack = blankAudioTrack
}
do {
if let audioTrack = audioTrack {
try audioCompositionTrack?.insertTimeRange(myTimeRange,of: audioTrack,at: .zero)
} else {
print("audio track is nil") // never gets hit
}
} catch let err as NSError {
print(err.localizedDescription) // never gets hit
}
但是当我有 blankAudioUrl、blankAudio 和 blankAudioTrack 到一个函数时,do-try
一直说 操作无法完成。奇怪的是我在函数的每个返回行上都设置了断点,return nil
永远不会被命中。在 do-try
中,打印语句音轨为零从不打印。
功能:
func useSilentAudioTrack() -> AVAssetTrack? {
guard let blankAudioUrl = Bundle.main.url(forResource: "silence",withExtension: "wav") else {
return nil
}
let blankAudio = AVAsset(url: blankAudioUrl)
guard let blankAudioTrack = blankAudio.tracks(withMediaType: .audio).first else {
return nil
}
return blankAudioTrack // this always returns
}
var audioTrack: AVAssetTrack?
if videoAsset.tracks(withMediaType: .audio).count > 0 {
audioTrack = videoAsset.tracks(withMediaType: .audio).first
} else {
audioTrack = useSilentAudioTrack()
}
do {
if let audioTrack = audioTrack {
try audioCompositionTrack?.insertTimeRange(myTimeRange,at: .zero)
} else {
print("audio track is nil") // never gets hit
}
} catch let err as NSError {
print(err.localizedDescription) // Gets hit
}
解决方法
暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!
如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。
小编邮箱:dio#foxmail.com (将#修改为@)