【问题标题】:Video with no audio crashes app on AVMutableComposition()AVMutableComposition() 上没有音频的视频崩溃应用程序
【发布时间】:2019-06-24 03:17:22
【问题描述】:

我的应用程序从 URL 获取视频,并允许您向其中添加文本等。 当视频没有任何音频开始时,它似乎崩溃了,似乎无法解决这个问题。

这是我在制作视频时所拥有的:

let asset = AVAsset(url: URL(string: self.videoURL)!)
let mixComposition = AVMutableComposition()
let videoTrack = mixComposition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
try! videoTrack?.insertTimeRange(CMTimeRangeMake(start: .zero, duration: asset.duration), of: asset.tracks(withMediaType: .video)[0], at: CMTime.zero)
let audioTrack = mixComposition.addMutableTrack(withMediaType: .audio, preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
do {
       try audioTrack!.insertTimeRange(CMTimeRangeMake(start: .zero, duration: asset.duration), of: asset.tracks(withMediaType: .audio)[0], at: CMTime.zero)
   } catch {
       print("error")
   }

它抛出insertTimeRangeindexPath 超出范围。

 [__NSArray0 objectAtIndex:]: index 0 beyond bounds for empty NSArray

【问题讨论】:

    标签: swift avfoundation avasset avmutablecomposition


    【解决方案1】:

    我想出了如何在原始视频没有音频时导出视频。以防其他人遇到同样的问题。

    let asset = AVAsset(url: URL(string: self.videoURL)!)
    
        let mixComposition = AVMutableComposition()
    
        let videoTrack = mixComposition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid)
    
        try! videoTrack?.insertTimeRange(CMTimeRangeMake(start: .zero, duration: asset.duration), of: asset.tracks(withMediaType: .video)[0], at: CMTime.zero)
    
        let audioTrack = mixComposition.addMutableTrack(withMediaType: .audio, preferredTrackID: Int32(kCMPersistentTrackID_Invalid))
    
            if let track = asset.tracks(withMediaType: .audio).first {
    
                do {
                    try audioTrack?.insertTimeRange(CMTimeRangeMake(start: .zero, duration: asset.duration), of: track, at: .zero)
                } catch {
                    print("error")
                }
    
            } else {
                mixComposition.removeTrack(audioTrack!)
                print("no audio detected, removed the track")
            }
    

    【讨论】:

    • 这拯救了我的一天
    猜你喜欢
    • 2014-03-18
    • 1970-01-01
    • 1970-01-01
    • 2020-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-08
    相关资源
    最近更新 更多