计算视频文件 md5(hash)
Posted
技术标签:
【中文标题】计算视频文件 md5(hash)【英文标题】:Calculate video file md5(hash) 【发布时间】:2017-02-22 09:03:06 【问题描述】:我必须计算所选文件(图像、视频)的校验和
在我的代码中,图像计算效果很好,但视频计算根本不起作用。
我正在使用 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')
这是数据类构造函数
public init(contentsOf url: URL, options: Data.ReadingOptions = default) throws
我的问题是
1.如何获取视频文件的数据
2。如果有另一种获取数据和计算校验和的方法,请建议我
3.如果您知道什么语法错误,请告诉我如何修复它。
【问题讨论】:
【参考方案1】:调用时好像有语法错误
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)
希望这会有所帮助。
【讨论】:
很高兴听到 :) 另请参阅我关于异常处理的编辑。【参考方案2】:试试这个
ALAssetRepresentation *rep = [asset defaultRepresentation]; 字节 buffer = (Byte)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];
【讨论】:
以上是关于计算视频文件 md5(hash)的主要内容,如果未能解决你的问题,请参考以下文章