|
@@ -44,6 +44,14 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
var mStickers: [PQEditVisionTrackMaterialsModel]?
|
|
|
// 播放器的开始和结束时间,1,刚进界面使用推荐的开始结束时间,2,用户修改起结点时修改
|
|
|
var playeTimeRange: CMTimeRange = CMTimeRange()
|
|
|
+ // 首帧图片
|
|
|
+ var firstFrameImage: UIImage?{
|
|
|
+ didSet{
|
|
|
+ if firstFrameImage != nil {
|
|
|
+ self.playerView.layer.contents = firstFrameImage?.cgImage
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// add by ak 是否是再创作模式
|
|
|
var isReCreate: Bool = false
|
|
@@ -92,11 +100,11 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
|
|
|
// 播放器显示 view
|
|
|
lazy var playerView: PQGPUImagePlayerView = {
|
|
|
- let playerHeight = cScreenWidth
|
|
|
- let playerView = PQGPUImagePlayerView(frame: CGRect(x: 0, y: navHeadImageView?.frame.maxY ?? 0, width: playerHeight, height: playerHeight))
|
|
|
+ let playerView = PQGPUImagePlayerView(frame: .zero)
|
|
|
playerView.backgroundColor = PQBFConfig.shared.styleBackGroundColor
|
|
|
playerView.isShowLine = false
|
|
|
playerView.showGaussianBlur = true
|
|
|
+ playerView.pause()
|
|
|
playerView.renderViewOnClickHandle = { [weak self] in
|
|
|
self?.musicEditBGView.pausePlayer()
|
|
|
}
|
|
@@ -183,14 +191,13 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
}
|
|
|
|
|
|
DispatchQueue.global().async { // 并行、异步
|
|
|
- let beginTime: TimeInterval = Date().timeIntervalSince1970
|
|
|
+ let beginTime = Date()
|
|
|
|
|
|
self?.mStickers = self?.createStickers(sections: self?.projectModel.sData?.sections ?? List(), inputSize: CGSize(width: CGFloat(self?.projectModel.sData?.videoMetaData?.videoWidth ?? 0), height: CGFloat(self?.projectModel.sData?.videoMetaData?.videoHeight ?? 0)), model: self?.currentCreateStickersModel ?? .createStickersModelSpeed)
|
|
|
|
|
|
DispatchQueue.main.async { // 串行、异步
|
|
|
self?.playerView.mStickers = self?.mStickers
|
|
|
- var endTime: TimeInterval = Date().timeIntervalSince1970
|
|
|
- BFLog(message: "endTime is endTimeendTime \(endTime = beginTime)")
|
|
|
+ BFLog(message: "endTime is endTimeendTime \(Date().timeIntervalSince(beginTime))")
|
|
|
self?.playerView.play(pauseFirstFrame: false, playeTimeRange: self!.playeTimeRange)
|
|
|
|
|
|
// 更新一下时间条的UI总时间 及数据
|
|
@@ -370,15 +377,6 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
return speedSetView
|
|
|
|
|
|
}()
|
|
|
-
|
|
|
- override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
|
|
|
- super.touchesBegan(touches, with: event)
|
|
|
- if touches.first?.view != self.customSpeedSettingView {
|
|
|
- if !customSpeedSettingView.isHidden {
|
|
|
- customSpeedSettingView.isHidden = true
|
|
|
- }
|
|
|
- }
|
|
|
- }
|
|
|
|
|
|
// 自定义速度
|
|
|
lazy var customSpeedSettingView: PQCustomSpeedSettingView = {
|
|
@@ -658,7 +656,7 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
}
|
|
|
|
|
|
override func viewWillAppear(_ animated: Bool) {
|
|
|
- super.viewDidAppear(animated)
|
|
|
+ super.viewWillAppear(animated)
|
|
|
lineView?.isHidden = true
|
|
|
UIApplication.shared.isIdleTimerDisabled = true
|
|
|
musicNameLab.move()
|
|
@@ -692,6 +690,11 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
PQEventTrackViewModel.baseReportUpload(businessType: .bt_windowView, objectType: .ot_view_previewSyncedUp, pageSource: .sp_stuck_previewSyncedUp, extParams: nil, remindmsg: "卡点视频数据上报-(曝光上报:预览页面曝光上报)")
|
|
|
}
|
|
|
|
|
|
+ override func viewDidLayoutSubviews() {
|
|
|
+ super.viewDidLayoutSubviews()
|
|
|
+ playerView.resetCanvasFrame(frame: coculationPlayViewRect())
|
|
|
+ }
|
|
|
+
|
|
|
func prepareMeta(){
|
|
|
// 导出相册视频
|
|
|
exportPhotoData()
|
|
@@ -851,6 +854,15 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
// 点击上报:去合成
|
|
|
PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_click_commit, pageSource: .sp_stuck_previewSyncedUp, extParams: ["musicName": stuckPointMusicData?.musicName ?? "", "musicId": stuckPointMusicData?.musicId ?? "", "rhythmNumber": stuckPointMusicData?.speed ?? 2, "duration": ((stuckPointMusicData?.endTime ?? 0) - (stuckPointMusicData?.startTime ?? 0)) * 1000], remindmsg: "点击上报:去合成")
|
|
|
}
|
|
|
+
|
|
|
+ override func touchesBegan(_ touches: Set<UITouch>, with event: UIEvent?) {
|
|
|
+ super.touchesBegan(touches, with: event)
|
|
|
+ if touches.first?.view != self.customSpeedSettingView {
|
|
|
+ if !customSpeedSettingView.isHidden {
|
|
|
+ customSpeedSettingView.isHidden = true
|
|
|
+ }
|
|
|
+ }
|
|
|
+ }
|
|
|
|
|
|
// MARK: - 播放器相关操作
|
|
|
|
|
@@ -894,19 +906,23 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
}
|
|
|
|
|
|
// 设置播放器
|
|
|
- func settingPlayerView() {
|
|
|
- stuckPointCuttingView.resetDefaultsColor()
|
|
|
- synchroMarskView.removeFromSuperview()
|
|
|
- if synchroMarskView.superview == nil {
|
|
|
- UIApplication.shared.keyWindow?.addSubview(synchroMarskView)
|
|
|
- synchroMarskView.show()
|
|
|
- }
|
|
|
-
|
|
|
- // 1,设置播放器的显示区域 和画布大小
|
|
|
- // - 按第一个素材尺寸自适应
|
|
|
- playerView.pause()
|
|
|
+ func coculationPlayViewRect() -> CGRect {
|
|
|
let playerShowHeight = pointEditBGView.frame.minY - (navHeadImageView?.frame.maxY ?? 0)
|
|
|
- var showRect: CGRect = PQPlayerViewModel.getShowCanvasRect(editProjectModel: projectModel, showType: 1, playerViewHeight: playerShowHeight)
|
|
|
+ var showRect: CGRect = CGRect(x: (cScreenWidth - playerShowHeight) / 2, y: 0, width: playerShowHeight, height: playerShowHeight)
|
|
|
+ if self.firstFrameImage != nil {
|
|
|
+ let w = self.firstFrameImage!.size.width
|
|
|
+ let h = self.firstFrameImage!.size.height
|
|
|
+ let ratioMaterial: Float = Float(w / max(h, 1))
|
|
|
+ if ratioMaterial > 1 {
|
|
|
+ // 横屏
|
|
|
+ let tempPlayerHeight = min(cScreenWidth * CGFloat(h / w), playerShowHeight)
|
|
|
+ showRect = CGRect(x: (cScreenWidth - tempPlayerHeight * CGFloat(ratioMaterial)) / 2, y: (playerShowHeight - tempPlayerHeight) / 2, width: tempPlayerHeight * CGFloat(ratioMaterial), height: tempPlayerHeight)
|
|
|
+ } else {
|
|
|
+ // 竖屏
|
|
|
+ let playerViewWidth = (CGFloat(w) / CGFloat(h)) * playerShowHeight
|
|
|
+ showRect = CGRect(x: (cScreenWidth - playerViewWidth) / 2, y: 0, width: playerViewWidth, height: playerShowHeight)
|
|
|
+ }
|
|
|
+ }
|
|
|
if showRect.size.width == showRect.size.height {
|
|
|
if cScreenWidth > playerShowHeight {
|
|
|
showRect.origin.x = (cScreenWidth - playerShowHeight) / 2
|
|
@@ -929,7 +945,21 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
|
|
|
}
|
|
|
showRect.origin.y = (playerShowHeight - showRect.size.height) / 2.0 + (navHeadImageView?.frame.maxY ?? 0)
|
|
|
- playerView.resetCanvasFrame(frame: showRect)
|
|
|
+
|
|
|
+ return showRect
|
|
|
+ }
|
|
|
+
|
|
|
+ func settingPlayerView() {
|
|
|
+ stuckPointCuttingView.resetDefaultsColor()
|
|
|
+ synchroMarskView.removeFromSuperview()
|
|
|
+ if synchroMarskView.superview == nil {
|
|
|
+ UIApplication.shared.keyWindow?.addSubview(synchroMarskView)
|
|
|
+ synchroMarskView.show()
|
|
|
+ }
|
|
|
+
|
|
|
+ // 1,设置播放器的显示区域 和画布大小
|
|
|
+ // - 按第一个素材尺寸自适应
|
|
|
+ playerView.pause()
|
|
|
|
|
|
var firstModel: PQEditVisionTrackMaterialsModel?
|
|
|
for part in projectModel.sData!.sections {
|
|
@@ -951,6 +981,10 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
} else {
|
|
|
videoSize = CGSize(width: minSlider, height: maxSlider)
|
|
|
}
|
|
|
+ if videoSize.width.isNaN || videoSize.height.isNaN {
|
|
|
+ BFLog(1, message: "宽高无效NaN")
|
|
|
+ return
|
|
|
+ }
|
|
|
|
|
|
let maxValue = max(videoSize.width, videoSize.height)
|
|
|
if maxValue > 1920 {
|
|
@@ -971,7 +1005,7 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
projectModel.sData?.videoMetaData?.videoWidth = Int(videoSize.width)
|
|
|
projectModel.sData?.videoMetaData?.videoHeight = Int(videoSize.height)
|
|
|
|
|
|
- let beginTime: TimeInterval = Date().timeIntervalSince1970
|
|
|
+ let beginTime = Date()
|
|
|
dealParameter(model: currentCreateStickersModel)
|
|
|
|
|
|
// 更新裁剪时间条的的ui数据
|
|
@@ -991,8 +1025,7 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
DispatchQueue.main.async { // 串行、异步
|
|
|
self.playerView.mStickers = self.mStickers
|
|
|
|
|
|
- let end: TimeInterval = Date().timeIntervalSince1970
|
|
|
- BFLog(message: "createStickers tiskskskskme \(end - beginTime)")
|
|
|
+ BFLog(message: "createStickers tiskskskskme \(Date().timeIntervalSince(beginTime))")
|
|
|
|
|
|
// 3,设置音频
|
|
|
let audioPath = self.stuckPointMusicData?.localPath ?? ""
|
|
@@ -1004,8 +1037,6 @@ class PQStuckPointEditerController: PQBaseViewController {
|
|
|
|
|
|
self.playerView.updateAsset(URL(fileURLWithPath: documensDirectory + audioPath), videoComposition: nil, audioMixModel: nil, originMusicDuration: self.finallyUserAudioTime, clipAudioRange: self.getClipAudioRange())
|
|
|
|
|
|
- let end2: TimeInterval = Date().timeIntervalSince1970
|
|
|
- BFLog(message: "updateAsset tiskskskskme \(end2 - end)")
|
|
|
// 4, 设置播放器的输出画布大小
|
|
|
self.playerView.movie?.mShowVidoSize = CGSize(width: CGFloat(self.projectModel.sData?.videoMetaData?.videoWidth ?? 0), height: CGFloat(self.projectModel.sData?.videoMetaData?.videoHeight ?? 0))
|
|
|
|
|
@@ -1799,7 +1830,7 @@ extension PQStuckPointEditerController {
|
|
|
}
|
|
|
|
|
|
createPorjectData()
|
|
|
- BFLog(message: "界面编辑界面时参数 选择素材时长:\(selectedTotalDuration) 选择素材总数:\(selectedDataCount) 选择图片总数\(selectedImageDataCount) 再创建类型:\(String(describing: reCreateVideoData?.rhythmMode))")
|
|
|
+ BFLog(1, message: "界面编辑界面时参数 选择素材时长:\(selectedTotalDuration) 选择素材总数:\(selectedDataCount) 选择图片总数\(selectedImageDataCount) 再创建类型:\(String(describing: reCreateVideoData?.rhythmMode))")
|
|
|
|
|
|
if(resetSelectIndex){
|
|
|
// 1 生成默认参数值
|