Closed AbySwifter closed 5 years ago
最终,我通过如下方式解决了问题: 源代码: AVAssetTrackResource.swift line:96
// MARK: - NSCopying
override public func copy(with zone: NSZone? = nil) -> Any {
let resource = super.copy(with: zone) as! AVAssetTrackResource
resource.asset = asset
return resource
}
修改后的代码:
// MARK: - NSCopying
override public func copy(with zone: NSZone? = nil) -> Any {
let resource = super.copy(with: zone) as! AVAssetTrackResource
resource.asset = asset?.copy() as? AVAsset
resource.scaledDuration = CMTime.invalid
return resource
}
这里的疑问是关于resource.scaledDuration属性,何时应该将其值赋为 invalid?
如果期望视频选择时间就是时间线上的时间那么 resource.scaledDuration 就应该为 invalid。 如果视频选择的时间需要做变速效果就需要设置 scaledDuration。 如果设置了 scaledDuration 之后要记得已经设置了这个,无论之后视频选择了多少视频时间都会变成 scaledDuration,所以要同步修改选择时间和 scaledDuration。看业务需求
当我通过以下方式去填充音频轨道时,我遇到了以下问题: 1、对resouorce实例不进行深拷贝,所有音频资源的selectTimeRange属性总是会与最后一次循环的设置一致。 2、对resource实例进行深拷贝,音频资源的scaledDuration属性,总是为音频长度。 代码如下: