我必须计算所选文件(图像,视频)的校验和
在我的代码图像计算中运行良好,但视频计算根本无法正常工作。
我正在使用CryptoSwift
这是我的代码
import CryptoSwift
class MD5Calculator {
static func imageChecksum(imageArray: [UIImage], onCalculated: @escaping ([String]) -> Void){
DispatchQueue.global(qos: .userInitiated).async {
var array: [String] = []
for chosenImage in imageArray {
if let jpegData = UIImageJPEGRepresentation(chosenImage, 80) {
let checksum = jpegData.md5()
let chsum = checksum.toHexString()
array.append(chsum)
}
}
DispatchQueue.main.async {
onCalculated(array)
}
}
}
static func videoChecksum(videoURLs:[NSURL], onCalculated: @escaping ([String]) -> Void) {
DispatchQueue.global(qos: .userInitiated).async {
var array: [String] = []
for url in videoURLs {
if let videoData = Data(contentsOf: url as URL, options: Data.ReadingOptions) {
let checksum = videoData.md5()
let chsum = checksum.toHexString()
array.append(chsum)
}
}
DispatchQueue.main.async {
onCalculated(array)
}
}
}
}
在videoChecksum中的我无法获取数据我在行
中有语法错误 if let videoData = Data(contentsOf: url as URL, options: Data.ReadingOptions)
错误是:
Cannot convert value of type 'Data.ReadingOptions.Type' (aka 'NSData.ReadingOptions.Type') to expected argument type 'Data.ReadingOptions' (aka 'NSData.ReadingOptions')
这是Data类构造函数
public init(contentsOf url: URL, options: Data.ReadingOptions = default) throws
我的问题是
1。我怎样才能获得视频文件数据
2。如果有另一种方法来获取数据并计算校验和,请建议我
第3。如果你知道它的语法错误,请告诉我如何修复它。
答案 0 :(得分:2)
调用
时似乎有语法错误let videoData = Data(contentsOf: url as URL, options: Data.ReadingOptions)
因为options
参数期望ReadingOptions
个值之一并且您正在传递类型本身。有效的通话如下:
let videoData = Data(contentsOf: url as URL, options: Data.ReadingOptions.uncached)
(有关可能的值,请参阅official documentation。)
如果您不确定要提供的值,可以省略传递参数,因为它是默认值,即:
let videoData = Data(contentsOf: url as URL)
修改强>
另请注意,Data(contentsOf:options:)
初始化“throws
”理想情况下,您应该将调用包装在do / try / catch语句中,如下所示:
for url in videoURLs {
do {
let videoData = try Data(contentsOf: url as URL)
let checksum = videoData.md5()
let chsum = checksum.toHexString()
array.append(chsum)
} catch {
// TODO: Handle error
print(error.localizedDescription)
}
}
希望这有帮助。
答案 1 :(得分:0)
试试这个
ALAssetRepresentation * rep = [asset defaultRepresentation]; 字节缓冲区=(字节)malloc((NSUInteger)rep.size); NSUInteger buffered = [rep getBytes:buffer fromOffset:0.0 length:(NSUInteger)rep.size error:nil]; NSData * data = [NSData dataWithBytesNoCopy:buffer length:buffered freeWhenDone:YES];