Jon*_*ono 8 objective-c avfoundation ios swift photosframework
当我尝试使用此快速库(https://github.com/piemonte/player)播放多个视频时,我收到此错误.不确定它是否与该播放器相关,或者与Photos框架有关或者是什么.
会发生什么,我有一个视图,将显示照片或视频.一切正常,直到几个视频播放,然后会弹出此消息,然后所有视频无法播放,在他们的位置,你只看到一个黑屏,然后我得到一个内存使用错误.
我正在使用一个名为SwipeView的库,这里有一些可能有用的相关代码.
func swipeView(swipeView: SwipeView!, viewForItemAtIndex index: Int, reusingView view: UIView!) -> UIView! {
let asset: PHAsset = self.photosAsset[index] as PHAsset
// Create options for retrieving image (Degrades quality if using .Fast)
// let imageOptions = PHImageRequestOptions()
// imageOptions.resizeMode = PHImageRequestOptionsResizeMode.Fast
var imageView: UIImageView!
let screenSize: CGSize = UIScreen.mainScreen().bounds.size
let targetSize = CGSizeMake(screenSize.width, screenSize.height)
var options = PHImageRequestOptions()
options.resizeMode = PHImageRequestOptionsResizeMode.Exact
options.synchronous = true
if (asset.mediaType == PHAssetMediaType.Image) {
PHImageManager.defaultManager().requestImageForAsset(asset, targetSize: targetSize, contentMode: .AspectFill, options: options, resultHandler: {(result, info) in
if (result.size.width > 200) {
imageView = UIImageView(image: result)
}
})
return imageView
} else if (asset.mediaType == PHAssetMediaType.Video) {
self.currentlyPlaying = Player()
PHImageManager.defaultManager().requestAVAssetForVideo(asset, options: nil, resultHandler: {result, audio, info in
self.currentlyPlaying.delegate = self
self.currentlyPlaying.playbackLoops = true
self.addChildViewController(self.currentlyPlaying)
self.currentlyPlaying.didMoveToParentViewController(self)
var t = result as AVURLAsset
var url = t.valueForKey("URL") as NSURL
var urlString = url.absoluteString
self.currentlyPlaying.path = urlString
})
return self.currentlyPlaying.view
}
return UIView()
}
func swipeViewItemSize(swipeView: SwipeView!) -> CGSize {
return self.swipeView.bounds.size;
}
func swipeView(swipeView: SwipeView!, didSelectItemAtIndex index: Int) {
self.currentlyPlaying.playFromBeginning()
}
func swipeViewCurrentItemIndexDidChange(swipeView: SwipeView!) {
self.currentlyPlaying.stop()
}
Run Code Online (Sandbox Code Playgroud)
任何想法都会很棒.
Sir*_*der 15
我有同样的" 连接资产被中断或资产死亡 "错误.
通常后跟内存警告.我试图找到保留周期,但事实并非如此.
对我来说,问题已经与已知事实做resultHandler任何的块PHImageManager request...()是不是叫主队列.
因此,我们无法在这些块中直接运行UIView代码,而不会在应用程序生命周期中遇到麻烦.
为了解决这个问题,我们可以运行所有UIView代码,这些代码将在一个内部的resultHandler块的范围内执行dispatch_async(dispatch_get_main_queue(), block)
我遇到了这个问题,因为我没有意识到我在我的应用程序的resultHandler .s 之一中调用的函数之一最终调用了一些UIView代码.所以我没有将该调用转发给主线程.
希望这可以帮助.
您的问题可能是每次开始播放视频时都会创建一个新的播放器对象:
self.currentlyPlaying = Player()
Run Code Online (Sandbox Code Playgroud)
我建议您在文件播放完毕后将其删除,或者创建一个您将重复使用的播放器。否则它将留在内存中。v
| 归档时间: |
|
| 查看次数: |
15448 次 |
| 最近记录: |