使用点播资源从资产目录获取视频

Getting videos from Assets catalog using On Demand resources

我将标签“tokyo”归因于我的 .mp4 视频,并在应用程序安装期间将其设置为已安装。

最初,我使用路径从我的资源中加载它,但是,现在不同了,因为它位于资产目录中。

阅读文档后,我尝试了类似的方法:

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

要以 NSData 形式访问此视频,我可以使用:

tokyoVideo.data

但是,我使用的 AVPlayer 将参数作为 NSURL,而不是 NSData。

那么如何获取视频的 NSURL? 资产目录是否仅用于存储数据,我应该使用它来存储我的视频,还是有更好的选择?

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

请参阅此 link 了解更多信息

下面table列出了可以标记为点播资源的资源类型。

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

NSDataAsset

问题是将 mp4 放入资产目录。资源不必位于资产目录中即可作为按需资源进行访问。

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

的包 属性
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
                }

            })
        }
    }

}