|
@@ -69,9 +69,11 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
guard let wself = self else { return }
|
|
|
|
|
|
- wself.currentAssetProgress = CMTime(seconds: (currTime + wself.currPlayTime).seconds, preferredTimescale: 1000)
|
|
|
- wself.dele?.currentAssetProgress = wself.currentAssetProgress
|
|
|
-// BFLog(1, message: "camera currTime: \(currTime.seconds)")
|
|
|
+ // 拖动的跳跃,不要修改时间点
|
|
|
+ if (wself.dele?.isNormalPlaying ?? false){
|
|
|
+ wself.currentAssetProgress = CMTime(seconds: (currTime + wself.currPlayTime).seconds, preferredTimescale: 1000)
|
|
|
+ BFLog(1, message: "拖动 currTime: \(currTime.seconds)")
|
|
|
+ }
|
|
|
DispatchQueue.main.async {[weak self] in
|
|
|
guard let wself = self else { return }
|
|
|
wself.dele?.updateSubtitle(time: wself.currentAssetProgress)
|
|
@@ -273,7 +275,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
let currDuration = videoS.1.timelineCMOut - videoS.1.timelineCMIn
|
|
|
item.materialDuraion = item.materialDuraion - currDuration
|
|
|
currentAssetProgress = videoS.1.timelineCMIn
|
|
|
-
|
|
|
+
|
|
|
// 更新音频的时间点
|
|
|
for model in item.voiceStickers {
|
|
|
if CMTimeCompare(currentAssetProgress, model.startCMTime) < 0 {
|
|
@@ -364,7 +366,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- func prepareToPlayNext(){
|
|
|
+ func prepareToPlayNext(_ tt:CMTime = .zero, needPlay:Bool = true){
|
|
|
if let mod = recordItem?.videoStickers.sorted(by: { m1, m2 in
|
|
|
m1.timelineCMIn.seconds < m2.timelineCMIn.seconds
|
|
|
}).first(where: { mod in
|
|
@@ -373,23 +375,33 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
currPlayTime = mod.timelineCMIn
|
|
|
locationTo(time: mod.timelineCMIn)
|
|
|
avplayerReplaceItem(newItem: AVPlayerItem(url: URL(fileURLWithPath: mod.locationPath)))
|
|
|
- avplayer.play()
|
|
|
- playRecordVoice(.zero)
|
|
|
+
|
|
|
+ avplayer.currentItem?.seek(to: tt, toleranceBefore: CMTime(seconds: 1, preferredTimescale: 1000), toleranceAfter: CMTime(seconds: 1, preferredTimescale: 1000), completionHandler: {[weak avplayer] _ in
|
|
|
+ if needPlay {
|
|
|
+ avplayer?.play()
|
|
|
+ }
|
|
|
+ })
|
|
|
+
|
|
|
+ playRecordVoice(.zero, needPlay: needPlay)
|
|
|
}
|
|
|
}
|
|
|
|
|
|
- func avplayerReplaceItem(newItem: AVPlayerItem){
|
|
|
+ func avplayerReplaceItem(newItem: AVPlayerItem?){
|
|
|
if let item = avplayer.currentItem {
|
|
|
NotificationCenter.default.removeObserver(self as Any, name: .AVPlayerItemDidPlayToEndTime, object: item)
|
|
|
}
|
|
|
|
|
|
avplayer.replaceCurrentItem(with: newItem)
|
|
|
+ if newItem == nil {
|
|
|
+ return
|
|
|
+ }
|
|
|
+
|
|
|
NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: avplayer.currentItem, queue: .main) { [weak self] notice in
|
|
|
guard let wself = self else {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
- BFLog(1, message: "endPlay:\(wself.currentAssetProgress.seconds), 总时长:\(wself.recordItem!.materialDuraion.seconds), currplayer:\(wself.avplayer.currentItem?.currentTime().seconds)")
|
|
|
+ BFLog(1, message: "endPlay:\(wself.currentAssetProgress.seconds), 总时长:\(wself.recordItem!.materialDuraion.seconds), currplayer:\(wself.avplayer.currentItem?.currentTime().seconds ?? 0)")
|
|
|
|
|
|
// 如果离结束大于0.7s,代表还有下一段视频
|
|
|
if ((wself.recordItem?.materialDuraion ?? .zero) - wself.currentAssetProgress).seconds > 0.7 {
|
|
@@ -420,9 +432,7 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
let tt = currentAssetProgress - currPlayTime
|
|
|
BFLog(1, message: "asset - tt: \(tt.seconds), curr:\(currentAssetProgress.seconds)")
|
|
|
- avplayer.seek(to: tt, toleranceBefore: CMTime(seconds: 1, preferredTimescale: 1000), toleranceAfter: CMTime(seconds: 1, preferredTimescale: 1000))
|
|
|
-
|
|
|
- playRecordVoice(tt, needPlay: false)
|
|
|
+ prepareToPlayNext(tt, needPlay: false)
|
|
|
}
|
|
|
}
|
|
|
|
|
@@ -438,6 +448,9 @@ class BFRecordScreenCameraManager : BFRecordScreenBaseManager{
|
|
|
|
|
|
cameraProgressV?.isHidden = false
|
|
|
|
|
|
+ prepareToPlayNext(currentAssetProgress, needPlay: false)
|
|
|
+ avplayerReplaceItem(newItem: nil)
|
|
|
+
|
|
|
if currentAssetProgress == .zero {
|
|
|
// 按钮为删除
|
|
|
}
|