|
@@ -914,6 +914,10 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}
|
|
|
}
|
|
|
jumpTime = model.startTime
|
|
|
+
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
+ itemModels[currItemModelIndex].materialDuraion = jumpTime
|
|
|
+ }
|
|
|
}
|
|
|
} else if action.type == 3 {
|
|
|
// 删除录音
|
|
@@ -934,8 +938,12 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
itemModels[currItemModelIndex].titleStickers.insert(titleTuple.0, at: titleTuple.1)
|
|
|
}
|
|
|
}
|
|
|
+ if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
+ itemModels[currItemModelIndex].materialDuraion = itemModels[currItemModelIndex].voiceStickers.last?.endTime ?? 0
|
|
|
+ }
|
|
|
} else {}
|
|
|
events.removeLast()
|
|
|
+
|
|
|
let dur = itemModels[currItemModelIndex].materialDuraion
|
|
|
if dur > 0 {
|
|
|
changeProgress(progress: Float(jumpTime / dur))
|
|
@@ -997,6 +1005,8 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
}
|
|
|
|
|
|
func searchStopAtRecordRange() {
|
|
|
+ pauseTime = currentAssetProgress.seconds
|
|
|
+
|
|
|
// TODO: 滑动,播放暂停,撤销时,判断是否停止录音区间,是则删除相关录音,画笔,头像,字幕
|
|
|
let elems = itemModels[currItemModelIndex].voiceStickers.enumerated().filter { elem in
|
|
|
elem.1.startTime <= self.currentAssetProgress.seconds && elem.1.endTime > self.currentAssetProgress.seconds
|
|
@@ -1130,7 +1140,9 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
self?.assetPlayer?.volume = self?.noSpeakVolume ?? 0
|
|
|
didPlayToEndTime(recordedAudio, newItem)
|
|
|
}
|
|
|
- _ = recordPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 1000), queue: DispatchQueue.global()) { time in
|
|
|
+ avplayerTimeObserver?.invalidate()
|
|
|
+ avplayerTimeObserver = recordPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 1000), queue: DispatchQueue.global()) { time in
|
|
|
+ BFLog(1, message: "")
|
|
|
periodicTimeObserver(time, newItem)
|
|
|
} as? NSKeyValueObservation
|
|
|
}
|
|
@@ -1176,14 +1188,16 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
func play() {
|
|
|
BFLog(1, message: "开始播放 \(currentAssetProgress.seconds)")
|
|
|
// add by ak 播放前设置 AVAudioSession 为播放状态
|
|
|
- let a = Date()
|
|
|
- do {
|
|
|
- try AVAudioSession.sharedInstance().setCategory(.playback)
|
|
|
- try AVAudioSession.sharedInstance().setActive(true)
|
|
|
- } catch {
|
|
|
-
|
|
|
+ if AVAudioSession.sharedInstance().category != .playback {
|
|
|
+ let a = Date()
|
|
|
+ do {
|
|
|
+ try AVAudioSession.sharedInstance().setCategory(.playback)
|
|
|
+ try AVAudioSession.sharedInstance().setActive(true)
|
|
|
+ } catch {
|
|
|
+
|
|
|
+ }
|
|
|
+ BFLog(1, message: "开启session \(Date().timeIntervalSince(a))")
|
|
|
}
|
|
|
- BFLog(1, message: "开启session \(Date().timeIntervalSince(a))")
|
|
|
|
|
|
isNormalPlaying = true
|
|
|
if isEndPlay {
|
|
@@ -1288,7 +1302,9 @@ public class BFRecordScreenController: BFBaseViewController {
|
|
|
assetPlayer?.replaceCurrentItem(with: item)
|
|
|
} else {
|
|
|
assetPlayer = AVPlayer(playerItem: item)
|
|
|
- assetPlayer?.volume = 0
|
|
|
+ assetPlayer?.volume = self.noSpeakVolume
|
|
|
+
|
|
|
+ avplayerTimeObserver?.invalidate()
|
|
|
avplayerTimeObserver = assetPlayer?.addPeriodicTimeObserver(forInterval: CMTime(value: 1, timescale: 1000), queue: DispatchQueue.global()) { [weak self] time in
|
|
|
// 进度监控
|
|
|
self?.periodicTimeObserver(item: item, time: time)
|
|
@@ -1527,18 +1543,19 @@ extension BFRecordScreenController: UICollectionViewDelegate, UICollectionViewDa
|
|
|
// 更新缩略图
|
|
|
progressThumV.recordItem = recordItem
|
|
|
progressThumV.isHidden = false
|
|
|
+ progreddL.text = "00:00"
|
|
|
// 重置指针
|
|
|
currentAssetProgress = CMTime(seconds: 0, preferredTimescale: 1000)
|
|
|
// 重置播放器
|
|
|
assetPlayer?.seek(to: CMTime.zero)
|
|
|
recordPlayer?.seek(to: CMTime.zero)
|
|
|
-
|
|
|
// 重设撤销栈
|
|
|
events.append(WithDrawModel(type: 0, timestamp: 0))
|
|
|
itemModels[currItemModelIndex].events = events
|
|
|
events = itemModels[page].events
|
|
|
|
|
|
// 更新当前page
|
|
|
+ pauseTime = 0
|
|
|
currItemModelIndex = page
|
|
|
if recordItem.mediaType == .VIDEO {
|
|
|
reloadMaterial(recordItem: recordItem)
|
|
@@ -1574,7 +1591,7 @@ public extension BFRecordScreenController {
|
|
|
}
|
|
|
isNormalPlaying = true
|
|
|
playRecord(at: currentAssetProgress, periodicTimeObserver: { [weak self] currentT, currentItem in
|
|
|
- BFLog(message: "播放第段进度:\(currentT),\(currentItem)")
|
|
|
+ BFLog(1, message: "播放第段进度:\(currentT),\(currentItem)")
|
|
|
self?.imageRecordProgress(progress: CMTimeGetSeconds(currentT))
|
|
|
}, didPlayToEndTime: { [weak self] recordItem, currentItem in
|
|
|
BFLog(message: "播放第段结束:\(String(describing: recordItem)),\(String(describing: currentItem))")
|
|
@@ -1602,7 +1619,7 @@ public extension BFRecordScreenController {
|
|
|
} else {
|
|
|
currentAssetProgress = CMTime(seconds: recordStartPlayTime.seconds + progress, preferredTimescale: 1000)
|
|
|
}
|
|
|
- BFLog(message: "图片录音进度:\(progress),currentAssetProgress=\(currentAssetProgress),\(itemModels[currItemModelIndex].materialDuraion)")
|
|
|
+ BFLog(1, message: "图片录音进度:\(progress),currentAssetProgress=\(currentAssetProgress),\(itemModels[currItemModelIndex].materialDuraion)")
|
|
|
if itemModels[currItemModelIndex].mediaType == .IMAGE {
|
|
|
DispatchQueue.main.async { [weak self] in
|
|
|
self?.progreddL.text = String(format: "%@", (self?.currentAssetProgress.seconds ?? 0).formatDurationToHMS())
|