VideoFlint / Cabbage

A video composition framework build on top of AVFoundation. It's simple to use and easy to extend.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

selectedTimeRange 问题

MorningStarJ opened this issue · comments

AVAssetTrackResource 设置selectedTimeRange后生成的trackItem, 或是生成的playeritem 还是asset的全部资源,未裁剪到选中时间,以下是代码示例-

        let resource = AVAssetTrackResource(asset: model.asset)// model.asset duration 7秒
        resource.setSpeed(model.speed)
        if let startTime = model.startTime, let endTime = model.endTime {
            let startTime = CMTime(seconds: startTime, preferredTimescale: model.asset.duration.timescale)
            let endTime = CMTime(seconds: endTime, preferredTimescale: model.asset.duration.timescale)
            let timeRange = CMTimeRange(start: startTime, end: endTime)
            print(CMTimeGetSeconds(timeRange.start),
                  CMTimeGetSeconds(timeRange.end),
                  CMTimeGetSeconds(timeRange.duration))// 0, 4, 4
            resource.selectedTimeRange = CMTimeRange(start: startTime, end: endTime)
        }
        let trackItem = TrackItem(resource: resource)// 这里打印trackItem.duration 还是7秒
        trackItem.videoConfiguration.transform = model.transform
        trackItem.videoConfiguration.contentMode = .aspectFit
        timeline.videoChannel.append(trackItem)
        timeline.audioChannel.append(trackItem)`

    try! Timeline.reloadVideoStartTime(providers: timeline.videoChannel)
    try! Timeline.reloadAudioStartTime(providers: timeline.audioChannel)

    let playerItem = CompositionGenerator(timeline: timeline).buildPlayerItem()//这里playitem.duration 还是7 秒

发现是先设置区间在设置速度即可。。。设置速度的时候取了selectedTimeRange计算,先设置速度scaledDuration就不对了。。。