在我的应用程序,显示所有的视频从照片。当选择视频时,将使用avplayer播放该视频。但当我尝试获取所选视频文件的大小(kb)时,它显示错误。当我试图复制视频文件时也出现了同样的错误。
我已获得以下权限:
<key>NSCameraUsageDescription</key>
<string>App needs to access camera</string>
<key>NSMicrophoneUsageDescription</key>
<string>App need to access microphone</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>App needs to access photos and videos</string>
获取大小的代码:
func fileSize(forURL url: Any) -> Double {
var fileURL: URL?
var fileSize: Double = 0.0
if url is URL || url is String {
if url is URL {
fileURL = url as? URL
}
else {
fileURL = URL(fileURLWithPath: url as! String)
}
var fileSizeValue = 0.0
do{
try fileSizeValue = (fileURL?.resourceValues(forKeys: [URLResourceKey.fileSizeKey]).allValues.first?.value as! Double?)!
if fileSizeValue > 0.0 {
fileSize = (Double(fileSizeValue) / (1024 * 1024))
}
} catch {
print("file size error: \(error)")
}
}
return fileSize
}
let fileSize = fileSize(forURL: selectedVideos[0] as Any)
视频文件URL:“file:///var/mobile/media/dcim/107apple/img_7728.mov”
错误:Error domain=nscocoaerrordomain code=257“无法打开文件IMG_7728.MOV,因为您没有查看该文件得权限。”UserInfo=nsurl=file:///var/mobile/media/dcim/107apple/img_7728.mov,nsFilePath=/var/mobile/media/dcim/107apple/img_7728.mov,nsUnderlyingError=0x1C445ef90 Error Domain=nsposixErrordomain Code=1“不允许操作}
编辑:我已将url更改为路径。但仍显示错误:
let selectedFilePath = (selectedVideos[0] as! URL).path
print("video path: \(selectedFilePath)")
do{
let attributes = try FileManager.default.attributesOfItem(atPath: selectedFilePath)
let fileSize = attributes[.size] as! NSNumber
print("file size: \(fileSize)")
} catch {
print("file size error: \(error)")
}
let filePath = get_directory().appendingPathComponent("video\(CACurrentMediaTime()).MOV")
print("copy to path: \(filePath.path)")
do {
try FileManager.default.copyItem(atPath: selectedFilePath, toPath: filePath.path)
} catch {
print("copy error: \(error)")
}
错误:
视频路径:/var/mobile/media/dcim/107apple/img_7789.mov
文件大小错误:Error domain=nscocoaerrordomain code=257“无法打开文件img_7789.mov,因为您没有查看该文件得权限。”UserInfo=nsFilePath=/var/mobile/media/dcim/107apple/img_7789.mov,NsUnderlyingError=0x1C0259530 Error Domain=nsPosixErrordomain Code=1“不允许操作}
复制到路径:/var/mobile/containers/data/application/5AAD29BD-489D-4737-AA98-E6131EFBA94D/Documents/AddMusictoVideos/Voices/Video1171047.69338271.mov
复制错误:Error domain=nscocoaerrordomain code=257“无法打开文件img_7789.mov,因为您没有查看该文件得权限。”UserInfo=nsFilePath=/var/mobile/media/dcim/107apple/img_7789.mov,NsUnderlyingError=0x1C4859830 Error Domain=nsPosixErrordomain Code=1“不允许操作}
通过使用这个AvurlaSast扩展,您可以非常容易地从URL获取视频文件的大小。确保导入AVFoundation框架。代码如下:
extension AVURLAsset {
var fileSize: Int? {
let keys: Set<URLResourceKey> = [.totalFileSizeKey, .fileSizeKey]
let resourceValues = try? url.resourceValues(forKeys: keys)
return resourceValues?.fileSize ?? resourceValues?.totalFileSize
}
}
此扩展以Int(bytes)形式返回视频大小。您可以根据需要修改单元。要调用它,请使用以下方法:
let asset = AVURLAsset(url: urlOfYourAsset)
print(asset.fileSize ?? 0)
你没有提供足够的信息。问题出在文件系统上。你在iOS中把视频文件放在哪里很重要,你如何获得URL,这就是问题所在。也许你的URL不允许在沙箱中使用。请进一步研究并阅读苹果文档。