为啥我不能在 Playground 中使用 AVURLAsset 从媒体文件中提取数据?

Posted

技术标签:

【中文标题】为啥我不能在 Playground 中使用 AVURLAsset 从媒体文件中提取数据?【英文标题】:Why can't I extract data from media file using AVURLAsset in a Playground?为什么我不能在 Playground 中使用 AVURLAsset 从媒体文件中提取数据? 【发布时间】:2016-01-05 16:11:59 【问题描述】:

在我的游乐场:

import Cocoa
import Foundation
import AVFoundation

var path2 = "/Users/me/Movies/bukesiyi.mp4"
var video2 = NSURL(fileURLWithPath: path2, isDirectory: false)
// it shows: file:///Users/me/Movies/bukesiyi.mp4
video2.checkResourceIsReachableAndReturnError(nil)
// it's true
var asset = AVURLAsset(URL: video2)
// it shows: <AVURLAsset: 0x7fc0a9f13500, URL = file:///Users/me/Movies/bukesiyi.mp4>
asset.tracksWithMediaType(AVMediaTypeVideo)
// it's []
asset.readable
// it's false
asset.playable
// it's false
asset.commonMetadata
// it's []

我不知道出了什么问题,也许是路径?文档不清楚。

【问题讨论】:

你在命令行项目中尝试过同样的事情吗? Playgrounds 有关于访问文件系统的有趣规则。我相信要访问资源文件,您需要将其导入到 Playground 的 Resources 文件夹中,否则将无法访问。奇怪的是,它以“可达”的形式返回。 【参考方案1】:

它不起作用,因为 Playgrounds 是 sandboxed。

虽然您可以通过.checkResourceIsReachableAndReturnError 看到您的文件 URL,但您实际上无法从 Playground 访问文件系统。

解决方案是将文件嵌入 Playground 本身。

打开文件导航器(使用菜单或 CMD+1),然后将您的 MP4 文件拖放到导航器的 Resources 文件夹中。

完成后,您可以使用 NSBundle 访问该文件 - 甚至只需将文件从导航器拖放到 Playground:

let video2 = #

然后将文件放在我放# 的位置,它会粘贴一个图标,该图标实际上是文件的 URL。

现在此 URL 将适用于您的代码。

【讨论】:

对我来说没问题。非常感谢!

以上是关于为啥我不能在 Playground 中使用 AVURLAsset 从媒体文件中提取数据?的主要内容,如果未能解决你的问题,请参考以下文章

为啥某些 Swift 标准库函数在 Playground 中无法识别?

为啥 google oauth2 playground 无法返回数据?

为啥 UILabel TextColor 在 Playground 中有动画效果,但在设备上没有?

为啥这个 Swift Playground 打印和循环两次?

斯威夫特 2.1,xcode 7.2。简单的新手关于为啥它在 Playground 中有效但在应用程序中无效

如何在 PlayGround 中安装 Alamofire