AVPlayer
会随机播放音频,而不会显示视频曲目......
在AVPlayer
的活动压缩会话中,使用AVAssetExportSession:exportAsynchronouslyWithCompletionHandler
正确播放视频现在失败了。它似乎会导致一些不稳定,直到应用程序进入后台并返回。
在视频播放失败时检查AVURLAsset
,即使没有视频输出,也会有视频轨道。我也没有从压缩器或其他播放组件中得到任何错误......压缩会话返回后,问题就会发生。
我尝试过不同方式的单独线程但没有成功。
似乎从iOS 10开始,有些事情会导致两个进程之间发生某种冲突......
答案 0 :(得分:8)
刚刚收到Apple DTS的消息。他们也同意这一点指向Apple iOS错误并要求我记录它。
我完全删除了AVAssetExportSession
的用法,它解决了这个问题。因此,将AVAssetExportSession
与其他AV方法结合使用会导致iOS不稳定。
在我的情况下,我使用AVAssetExportSession
进行捕获后压缩。所以我使用AVAssetWriter
实时地将每个帧采样到我需要的格式......
Apple希望很快就能解决这个问题。
答案 1 :(得分:1)
我找到了解决问题的方法。像萨米说的那样,这个问题似乎出现在我用来为我的视频加水印的AVVideoCompositionCoreAnimationTool中。我转而使用CIFilter,无论如何它实际上都有更清晰的代码。
我使用CoreAnimationTool删除了所有内容并使用了它(mixComposition是我的AVMutableComposition):
let watermarkFilter = CIFilter(name: "CISourceOverCompositing")!
let watermarkImage = CIImage(image: #imageLiteral(resourceName: "watermark"))!
let videoComposition = AVVideoComposition(asset: mixComposition) { (filteringRequest) in
let source = filteringRequest.sourceImage.clampingToExtent()
watermarkFilter.setValue(source, forKey: "inputBackgroundImage")
let transform = CGAffineTransform(translationX: filteringRequest.sourceImage.extent.width - watermarkImage.extent.width - 2, y: 0)
watermarkFilter.setValue(watermarkImage.applying(transform), forKey: "inputImage")
filteringRequest.finish(with: watermarkFilter.outputImage!, context: nil)
}
然后在AVAssetExportSession中添加了这个:
exporter!.videoComposition = videoComposition
希望能帮助别人!