|
@@ -50,6 +50,8 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
var currPlayTime : CMTime = .zero
|
|
|
|
|
|
fileprivate var timerr:Timer?
|
|
|
+
|
|
|
+ var writerlock = false
|
|
|
|
|
|
var movieWrite : GPUImageMovieWriter?
|
|
|
|
|
@@ -165,7 +167,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
}
|
|
|
|
|
|
override func startRecord(){
|
|
|
- guard let movieWrite = movieWrite else {
|
|
|
+ guard let movieWrite = movieWrite, !writerlock else {
|
|
|
cShowHUB(superView: nil, msg: "option_fail_record".BFLocale)
|
|
|
return
|
|
|
}
|
|
@@ -181,6 +183,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
videoModel.thumImgs = [UIImage]()
|
|
|
videoModel.timelineCMIn = currentAssetProgress
|
|
|
videoModel.timelineCMOut = currentAssetProgress
|
|
|
+ videoModel.locationPath = "nil"
|
|
|
currVideoIndex = recordItem?.videoStickers.count ?? 0
|
|
|
|
|
|
// 为了第一时间能更新collection view数据
|
|
@@ -212,7 +215,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
override func endRecord(){
|
|
|
super.endRecord()
|
|
|
-
|
|
|
+ writerlock = true
|
|
|
timerr?.invalidate()
|
|
|
timerr = nil
|
|
|
// BFLog(1, message: " 拍摄时长 \(Date().timeIntervalSince(startTime))")
|
|
@@ -227,21 +230,14 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
let dur = AVURLAsset(url: URL(fileURLWithPath: finalPath))
|
|
|
wself.videoModel.timelineCMOut = wself.videoModel.timelineCMIn + CMTime(seconds: dur.duration.seconds, preferredTimescale: 1000)
|
|
|
BFLog(1, message: "拍摄文件时长:\(wself.videoModel.timelineCMIn.seconds)~\(wself.videoModel.timelineCMOut.seconds), \(dur.duration.seconds)")
|
|
|
- if (wself.videoModel.timelineCMOut - wself.videoModel.timelineCMIn).seconds > 1 {
|
|
|
- wself.videoModel.locationPath = finalPath
|
|
|
- wself.currentAssetProgress = wself.videoModel.timelineCMOut
|
|
|
- wself.recordEndCallBack?(true, wself.videoModel)
|
|
|
- }else{
|
|
|
- wself.revertLast()
|
|
|
- BFLog(1, message: "摄像录制小于1s")
|
|
|
- wself.recordEndCallBack?(false, nil)
|
|
|
+ wself.videoModel.locationPath = finalPath
|
|
|
+ if (wself.videoModel.timelineCMOut - wself.videoModel.timelineCMIn).seconds < 1 {
|
|
|
+ wself.recordFinished(isSuccess: false)
|
|
|
}
|
|
|
-
|
|
|
}else{
|
|
|
// 录制失败后恢复原样
|
|
|
- wself.revertLast()
|
|
|
- cShowHUB(superView: nil, msg: "option_fail_file".BFLocale)
|
|
|
- wself.recordEndCallBack?(false, nil)
|
|
|
+ wself.recordFinished(isSuccess: false)
|
|
|
+ cShowHUB(superView: nil, msg: "shoot_tips_least".BFLocale)
|
|
|
|
|
|
}
|
|
|
DispatchQueue.main.asyncAfter(deadline: .now() + 0.1) {[weak self] in
|
|
@@ -250,16 +246,28 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
wself.updateUI(progress: wself.currentAssetProgress)
|
|
|
}
|
|
|
|
|
|
- }else{
|
|
|
- wself.hasInitCallBack?()
|
|
|
}
|
|
|
}
|
|
|
|
|
|
// 重置writer,提前为下次录制做准备
|
|
|
wself.initerlizeWriter()
|
|
|
+ wself.writerlock = false
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+ override func recordFinished(isSuccess:Bool){
|
|
|
+ if isSuccess {
|
|
|
+ currentAssetProgress = videoModel.timelineCMOut
|
|
|
+ recordEndCallBack?(true, videoModel)
|
|
|
+ }else{
|
|
|
+ if (videoModel.thumImgs?.count ?? 0) > 0 {
|
|
|
+ revertLast()
|
|
|
+ recordEndCallBack?(false, nil)
|
|
|
+ }
|
|
|
+ BFLog(1, message: "摄像录制小于1s")
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
override func cancelRecord(){
|
|
|
|
|
|
revertLast()
|
|
@@ -329,20 +337,31 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
if vmod != nil {
|
|
|
vmod!.timelineCMOut = vmod!.timelineCMIn
|
|
|
currentAssetProgress = vmod!.timelineCMOut
|
|
|
- recordItem?.thumbImgs.removeAll(where: { img in
|
|
|
- vmod!.thumImgs?.contains(img) ?? false
|
|
|
- })
|
|
|
- DispatchQueue.main.async {[weak self] in
|
|
|
- guard let wself = self else { return }
|
|
|
-
|
|
|
- wself.cameraProgressV?.collectionV.reloadData()
|
|
|
- }
|
|
|
// vmod.thumImgs?.removeAll()
|
|
|
recordItem?.videoStickers.removeAll(where: { mod in
|
|
|
mod == vmod
|
|
|
})
|
|
|
}
|
|
|
|
|
|
+ resetThumbImg()
|
|
|
+ }
|
|
|
+
|
|
|
+ func resetThumbImg(){
|
|
|
+ videoModel.thumImgs?.removeAll()
|
|
|
+ let vidos = recordItem?.videoStickers
|
|
|
+ var tmpThumbs = [UIImage]()
|
|
|
+ vidos?.forEach({ mod in
|
|
|
+ if let imgs = mod.thumImgs{
|
|
|
+ tmpThumbs.append(contentsOf: imgs)
|
|
|
+ }
|
|
|
+ })
|
|
|
+ recordItem?.thumbImgs = tmpThumbs
|
|
|
+ DispatchQueue.main.async {[weak self] in
|
|
|
+ guard let wself = self else { return }
|
|
|
+
|
|
|
+ wself.cameraProgressV?.collectionV.reloadData()
|
|
|
+ }
|
|
|
+
|
|
|
}
|
|
|
|
|
|
// 使用avplayer进行播放视频和音频
|