如何在添加视频块的同时播放AVMutableComposition

时间:2019-05-21 12:08:05

标签: ios swift xcode avplayer avmutablecomposition

我正在开发一个系统,该系统应播放以前下载的视频块。

首先,我创建一个全局AVMutableComposition,一个带有addMutableTrack的本地轨道,下载3个块并将它们通过insertTimeRange添加到先前创建的轨道中。 然后,用AVPlayerItem创建一个AVMutableComposition。好吧。

我会演奏,并且工作无懈可击。我每0.5秒控制一次视频的进度,当剩余时间少于10秒时,它会准备并下载新的视频块。

重复前面的步骤,创建一个新轨道并将其添加到全局乐曲中。它已正确添加,但没有添加到当前的播放项目中,即使有新的组成部分也可以完成。

合成是作为全局变量创建的


    self.composition = AVMutableComposition()
    guard let composition = self.composition else { return } // Always succeeded, for check if is OK.
    guard let track = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid) else { return }

    self.downloadStuff(track: track) { (_) in
        let item = AVPlayerItem(asset: composition)            
        self.playVideo(item: item)
    }

检查轨道是否存在,或创建一个新轨道


    guard let composition = self.composition else { return }

    var usableTrack = track
    if usableTrack == nil {
        guard let ltrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid) else { return }
        usableTrack = ltrack
    }

下载并保存在pathURL中,文件地址为


    do {
        let asset = AVURLAsset(url: pathURL)
        let assetTrack = asset.tracks(withMediaType: .video)[0]

        try usableTrack!.insertTimeRange(assetTrack.timeRange, of: assetTrack, at: CMTime(seconds: offset, preferredTimescale: CMTimeScale.zero))
        self.helper.totalLenght! += duration
        handleFinish(true)
    } catch {
        print("Error")
        handleFinish(false)
    }

我现在还没有任何想法。我试图将它们全部添加到同一轨道,但是仍然具有相同的行为。有什么想法吗?

0 个答案:

没有答案