使用On Demand资源从资产目录中获取视频

时间:2015-06-22 10:37:43

标签: xcode7 ios9 asset-catalog on-demand-resources

我将.mp4视频归结为“tokyo”标签,并在应用安装过程中将其设置为已安装。

在我使用Path从我的资源中获取它之前,现在它已经不同了,因为它位于资产目录中。

在找到文件后,我尝试了类似的东西:

NSBundleResourceRequest(tags: ["tokyo"]).beginAccessingResourcesWithCompletionHandler { (error) -> Void in
let tokyoVideo = NSDataAsset(name: "tokyo")

所以我可以这样做:tokyoVideo.data访问NSData,但我使用的是AVPlayer,它接受参数NSURL,而不是数据。

那么你有什么建议我获得我的视频的NSURL? 资产目录仅适用于数据吗?所以我不能在那里设置我的视频?

3 个答案:

答案 0 :(得分:5)

问题是将mp4放在资产目录中。资源不必在资产目录中作为按需资源进行访问。

将资产从目录中移出到工作区并标记它们,然后使用NSBundleResourceRequest的bundle属性

import UIKit

class ViewController: UIViewController {
    var bundleRequest = NSBundleResourceRequest(tags: [])

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.
        let tags: Set<String>  = ["odr"]
        bundleRequest = NSBundleResourceRequest(tags: tags)

        bundleRequest.beginAccessingResourcesWithCompletionHandler { (error:NSError?) -> Void in
            if let e = error {
                print(e)
                return
            }
            NSOperationQueue.mainQueue().addOperationWithBlock({ () -> Void in
                if let url = self.bundleRequest.bundle.URLForResource("tokyo", withExtension: "mp4") {
                    //use the url to play the video with avplayer
                }

            })
        }
    }

}

答案 1 :(得分:2)

当然,电影最终会存储在数据文件中。

NSDataAsset

答案 2 :(得分:0)

我认为可以将资产目录用于视频资料,简化图像管理。使用NSDataAsset。查看下表中的最后一行。

有关详细信息,请参阅此link

下表列出了可以标记为按需资源的资源类型。

enter image description here