|
@@ -12,20 +12,15 @@ import Foundation
|
|
|
/// 视频分解成帧
|
|
|
/// - parameter fileUrl : 视频地址
|
|
|
/// - parameter fps : 自定义帧数 每秒内取的帧数
|
|
|
-/// - parameter range : 获取其中几张连续视频帧
|
|
|
+/// - parameter firstImagesCount : 获取首先N张连续视频帧后先返回给调用方使用作为缓冲
|
|
|
/// - parameter splitCompleteClosure : 回调
|
|
|
-func splitVideoFileUrlFps(urlAsset: AVURLAsset, fps: Double, range: NSRange? = nil, splitCompleteClosure: @escaping (([UIImage]) -> Void)) {
|
|
|
+func splitVideoFileUrlFps(urlAsset: AVURLAsset, fps: Double, firstImagesCount:Int = 0, splitCompleteClosure: @escaping ((Bool, [UIImage]) -> Void)) {
|
|
|
var splitImages = [UIImage]()
|
|
|
|
|
|
var times = [NSValue]()
|
|
|
|
|
|
- var start = 0
|
|
|
- var end = Int(urlAsset.duration.seconds * Float64(fps))
|
|
|
-
|
|
|
- if range != nil {
|
|
|
- start = min(range!.location, end)
|
|
|
- end = min(start + range!.length, end)
|
|
|
- }
|
|
|
+ let start = 0
|
|
|
+ let end = Int(urlAsset.duration.seconds * Float64(fps))
|
|
|
|
|
|
for i in start...end {
|
|
|
let timeValue = NSValue(time: CMTimeMake(value: Int64(i * 1000), timescale: Int32(fps * 1000)))
|
|
@@ -56,8 +51,13 @@ func splitVideoFileUrlFps(urlAsset: AVURLAsset, fps: Double, range: NSRange? = n
|
|
|
@unknown default:
|
|
|
break
|
|
|
}
|
|
|
+
|
|
|
+ if cocu == firstImagesCount {
|
|
|
+ splitCompleteClosure(false, splitImages)
|
|
|
+ }
|
|
|
+
|
|
|
if cocu == timesCount { // 最后一帧时 回调赋值
|
|
|
- splitCompleteClosure(splitImages)
|
|
|
+ splitCompleteClosure(true, splitImages)
|
|
|
BFLog(1, message: "splitVideo: complete")
|
|
|
}
|
|
|
}
|