|
@@ -11,6 +11,8 @@
|
|
|
|
|
|
videosticker 已经存储好了,在合成时,需要更新下进入的时间就可以了,不需要再切割了
|
|
|
|
|
|
+ 录音1s失败和摄像头1s失败不同步,需要分开计算
|
|
|
+
|
|
|
|
|
|
|
|
|
*/
|
|
@@ -42,10 +44,6 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
// 用于打开摄像头初始流程
|
|
|
static var firstOpenCamera : Bool = true
|
|
|
- //当前录制的缩略图数量
|
|
|
- var currVideoThumImagesNum = 0
|
|
|
- //当前摄像的序号
|
|
|
- var currVideoIndex = 0
|
|
|
|
|
|
var currPlayTime : CMTime = .zero
|
|
|
|
|
@@ -55,6 +53,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
// 录制时音频结果
|
|
|
var recordFinishedResult = false
|
|
|
+ var hadDeleteVideoOfFailed = false
|
|
|
|
|
|
var movieWrite : GPUImageMovieWriter?
|
|
|
|
|
@@ -109,10 +108,9 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
deinit {
|
|
|
if avplayerTimeObserver != nil {
|
|
|
- avplayer.removeTimeObserver(avplayerTimeObserver)
|
|
|
+ avplayer.removeTimeObserver(avplayerTimeObserver as Any)
|
|
|
avplayerTimeObserver?.invalidate()
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
override func resetEnv(){
|
|
@@ -127,14 +125,12 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
if let count = recordItem?.voiceStickers.count, count > 0 {
|
|
|
currentAssetProgress = recordItem!.materialDuraion
|
|
|
- currVideoIndex = count
|
|
|
cameraProgressV?.isHidden = false
|
|
|
progreddL?.isHidden = false
|
|
|
progreddL?.text = CMTimeGetSeconds(currentAssetProgress).formatDurationToHMS()
|
|
|
cameraProgressV?.collectionV.scrollRectToVisible(CGRect(x: (cameraProgressV?.collectionV.contentSize.width)! - 1, y: (cameraProgressV?.collectionV.contentSize.height)! - 1, width: 1, height: 1), animated: false)
|
|
|
dele?.isEndPlay = true
|
|
|
}else {
|
|
|
- currVideoIndex = 0
|
|
|
cameraProgressV?.isHidden = true
|
|
|
progreddL?.isHidden = true
|
|
|
playerCoverIV.isHidden = true
|
|
@@ -160,13 +156,9 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
}
|
|
|
|
|
|
func initplayer(){
|
|
|
-
|
|
|
- guard let preView = playView else {
|
|
|
- return
|
|
|
+ if let preView = playView {
|
|
|
+ preView.addSubview(playerCoverIV)
|
|
|
}
|
|
|
-
|
|
|
- playView?.addSubview(playerCoverIV)
|
|
|
-
|
|
|
}
|
|
|
|
|
|
override func startRecord(){
|
|
@@ -179,15 +171,14 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
super.startRecord()
|
|
|
|
|
|
- currVideoThumImagesNum = 0
|
|
|
startTime = Date()
|
|
|
+ hadDeleteVideoOfFailed = false
|
|
|
|
|
|
videoModel = PQEditVisionTrackMaterialsModel()
|
|
|
videoModel.thumImgs = [UIImage]()
|
|
|
videoModel.timelineCMIn = currentAssetProgress
|
|
|
videoModel.timelineCMOut = currentAssetProgress
|
|
|
videoModel.locationPath = "nil"
|
|
|
- currVideoIndex = recordItem?.videoStickers.count ?? 0
|
|
|
|
|
|
// 为了第一时间能更新collection view数据
|
|
|
if !BFRecordScreenCameraManager.firstOpenCamera{
|
|
@@ -251,7 +242,8 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
}
|
|
|
}else{
|
|
|
// 录制失败后恢复原样
|
|
|
- wself.recordFinished(isSuccess: false)
|
|
|
+ wself.revertLast()
|
|
|
+ wself.recordEndCallBack?(false, nil)
|
|
|
cShowHUB(superView: nil, msg: "shoot_tips_least".BFLocale)
|
|
|
|
|
|
}
|
|
@@ -272,13 +264,12 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
override func recordFinished(isSuccess:Bool) {
|
|
|
recordFinishedResult = isSuccess
|
|
|
+
|
|
|
+ //
|
|
|
if videoModel.locationPath != "nil" {
|
|
|
if isSuccess {
|
|
|
- currentAssetProgress = videoModel.timelineCMOut
|
|
|
- // 屏蔽是因为成功要以摄像头为准
|
|
|
currentAssetProgress = videoModel.timelineCMOut
|
|
|
recordEndCallBack?(true, videoModel)
|
|
|
-
|
|
|
}else{
|
|
|
if (videoModel.thumImgs?.count ?? 0) > 0 { //用图片数量来判断是否已经删除了当次录制
|
|
|
revertLast()
|
|
@@ -350,6 +341,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
// 录制失败 , 不足一秒时恢复上一次状态
|
|
|
func revertLast(_ modIndex : Int = -1){
|
|
|
+ hadDeleteVideoOfFailed = true
|
|
|
var vmod : PQEditVisionTrackMaterialsModel?
|
|
|
if modIndex >= 0 && modIndex < recordItem?.videoStickers.count ?? 0{
|
|
|
vmod = recordItem?.videoStickers[modIndex]
|
|
@@ -448,7 +440,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
if let mod = recordItem?.videoStickers.sorted(by: { m1, m2 in
|
|
|
m1.timelineCMIn.seconds < m2.timelineCMIn.seconds
|
|
|
}).first(where: { mod in
|
|
|
- CMTimeCompare(mod.timelineCMIn, currentAssetProgress + CMTime(seconds: 0.033, preferredTimescale: 1000)) <= 0 && CMTimeCompare((currentAssetProgress + CMTime(seconds: 0.033, preferredTimescale: 1000)), mod.timelineCMOut) < 0
|
|
|
+ CMTimeCompare(mod.timelineCMIn, currentAssetProgress + CMTime(seconds: 0.33, preferredTimescale: 1000)) <= 0 && CMTimeCompare((currentAssetProgress + CMTime(seconds: 0.33, preferredTimescale: 1000)), mod.timelineCMOut) < 0
|
|
|
}){
|
|
|
currPlayTime = mod.timelineCMIn
|
|
|
locationTo(time: currentAssetProgress)
|
|
@@ -468,8 +460,9 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
playRecordVoice(needPlay: needPlay)
|
|
|
}else {
|
|
|
locationTo(time: currentAssetProgress)
|
|
|
+ playerCoverIV.isHidden = true
|
|
|
}
|
|
|
- playerCoverIV.isHidden = (CMTimeCompare(currentAssetProgress, recordItem?.materialDuraion ?? .zero) >= 0)
|
|
|
+// playerCoverIV.isHidden = (CMTimeCompare(currentAssetProgress, recordItem?.materialDuraion ?? .zero) >= 0)
|
|
|
if !playerCoverIV.isHidden {
|
|
|
BFLog(1, message: "stor")
|
|
|
}
|
|
@@ -536,6 +529,8 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
playerCoverIV.isHidden = (CMTimeCompare(currentAssetProgress, recordItem?.materialDuraion ?? .zero) >= 0)
|
|
|
}
|
|
|
|
|
|
+
|
|
|
+ // 获取下一个视频的封面图
|
|
|
func setCoverImage(_ dur: CMTime){
|
|
|
if let mod = recordItem?.videoStickers.first(where: { m in
|
|
|
CMTimeCompare(m.timelineCMIn, (dur + CMTime(seconds: 0.5, preferredTimescale: 1000))) <= 0 && CMTimeCompare(m.timelineCMOut, (dur + CMTime(seconds: 0.5, preferredTimescale: 1000))) > 0
|
|
@@ -544,7 +539,6 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
playerCoverIV.image = PQVideoSnapshotUtil.videoSnapshot(videoURL: URL(fileURLWithPath: mod.locationPath), time: .zero)
|
|
|
}
|
|
|
playerCoverIV.isHidden = (CMTimeCompare(currentAssetProgress, recordItem?.materialDuraion ?? .zero) >= 0)
|
|
|
-
|
|
|
}
|
|
|
|
|
|
override func changeRecordMaterail(){
|
|
@@ -637,7 +631,7 @@ extension BFRecordScreenCameraManager : GPUImageVideoCameraDelegate {
|
|
|
let dur = CMTime(seconds: movieWrite?.duration.seconds ?? 0, preferredTimescale: 1000)
|
|
|
// 获取缩略图
|
|
|
let coculationCount = Int(dur.seconds / 5.0)
|
|
|
- if coculationCount >= currVideoThumImagesNum{
|
|
|
+ if coculationCount >= (videoModel.thumImgs?.count ?? 0) {
|
|
|
imageFromBuffer(sampleBuffer) { [weak self] img in
|
|
|
guard let wself = self else { return }
|
|
|
|
|
@@ -645,7 +639,6 @@ extension BFRecordScreenCameraManager : GPUImageVideoCameraDelegate {
|
|
|
BFLog(1, message: "取一张缩略图出来 \(dur.seconds), \(wself.recordItem?.thumbImgs.count ?? 0)")
|
|
|
wself.recordItem?.thumbImgs.append(img!)
|
|
|
wself.videoModel.thumImgs?.append(img!)
|
|
|
- wself.currVideoThumImagesNum += 1
|
|
|
wself.addNewThumb()
|
|
|
}
|
|
|
}
|