Видео без звука вылетает приложение на AVMutableComposition () - PullRequest
0 голосов
/ 24 июня 2019

Мое приложение берет видео с 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")
   }

Выдает insertTimeRange, говоря, что indexPath вне диапазона.

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

1 Ответ

0 голосов
/ 24 июня 2019

Я разобрался, как экспортировать видео, когда в оригинальном видео нет звука.В случае, если кто-то еще сталкивается с той же проблемой.

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")
        }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...