Procházet zdrojové kódy

1,代码格式化,2 删除不使用代码

jsonwang před 3 roky
rodič
revize
3a2e2fd963

+ 185 - 227
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointPublicController.swift

@@ -49,22 +49,22 @@ class PQStuckPointPublicController: PQBaseViewController {
     var mStickers: [PQEditVisionTrackMaterialsModel]?
 
     var remindView: PQRemindView?
-    //已经选择标题内容,加一个属性接收 使用有不在主线不能直接使用 titleLabel text
-    var selectTitle:String = ""
-    
-    //add by ak 玩法类型 调用 producevideo/saveProject 时使用
-    var rhythmMode:createStickersModel = .createStickersModelPoint
-    
-    //add by ak 设置的速度
-    var syncedUpVideoSpeedMax:Float = 0.0
-    var syncedUpVideoSpeedMin:Float = 0.0
-    
-    //add by ak 是否是再创作模式
-    var isReCreate:Bool = false
-    
-    //最终使用的音频时长,用于拼接音乐使用
-    var finallyUserAudioTime:Float = 0.0
-    //拼接音乐的开始和结束位置
+    // 已经选择标题内容,加一个属性接收 使用有不在主线不能直接使用 titleLabel text
+    var selectTitle: String = ""
+
+    // add by ak 玩法类型 调用 producevideo/saveProject 时使用
+    var rhythmMode: createStickersModel = .createStickersModelPoint
+
+    // add by ak 设置的速度
+    var syncedUpVideoSpeedMax: Float = 0.0
+    var syncedUpVideoSpeedMin: Float = 0.0
+
+    // add by ak 是否是再创作模式
+    var isReCreate: Bool = false
+
+    // 最终使用的音频时长,用于拼接音乐使用
+    var finallyUserAudioTime: Float = 0.0
+    // 拼接音乐的开始和结束位置
     var clipAudioRange: CMTimeRange = CMTimeRange.zero
     // 导出的开始的开始和结束时间
     var playeTimeRange: CMTimeRange = CMTimeRange()
@@ -161,14 +161,14 @@ class PQStuckPointPublicController: PQBaseViewController {
         playerHeaderView.clipsToBounds = true
         return playerHeaderView
     }()
-    
+
     // add by ak 播放器的封面 为了不和原有的播放器层级单独添加一个 view
     lazy var playerHeaderCoverImageView: UIImageView = {
-        let playerHeaderCoverImageView = UIImageView.init()
+        let playerHeaderCoverImageView = UIImageView()
         playerHeaderCoverImageView.isUserInteractionEnabled = true
         playerHeaderCoverImageView.contentMode = .scaleAspectFit
         playerHeaderCoverImageView.clipsToBounds = true
-        
+
         let playBtn = UIButton(type: .custom)
         playBtn.setImage(UIImage().BF_Image(named: "icon_video_play"), for: .normal)
         playBtn.tag = 4
@@ -184,7 +184,7 @@ class PQStuckPointPublicController: PQBaseViewController {
         NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: avPlayer.currentItem, queue: .main) { [weak self] notify in
             BFLog(message: "AVPlayerItemDidPlayToEndTime = \(notify)")
             avPlayer.seek(to: CMTime.zero)
-            if(self?.playerHeaderCoverImageView.image != nil){
+            if self?.playerHeaderCoverImageView.image != nil {
                 self?.playerHeaderCoverImageView.isHidden = false
             }
             self?.playBtn.isHidden = false
@@ -248,7 +248,7 @@ class PQStuckPointPublicController: PQBaseViewController {
         return progressView
     }()
 
-    //提示
+    // 提示
     lazy var remindLab: UILabel = {
         let remindLab = UILabel()
         remindLab.font = UIFont.boldSystemFont(ofSize: 18)
@@ -259,8 +259,8 @@ class PQStuckPointPublicController: PQBaseViewController {
         remindLab.text = "为你的大作起个响亮的标题\n分享秀一下🎉"
         return remindLab
     }()
-    
-    //输入框背景
+
+    // 输入框背景
     lazy var inputBackView: UIView = {
         let inputBackView = UIView()
         inputBackView.backgroundColor = .clear
@@ -269,13 +269,15 @@ class PQStuckPointPublicController: PQBaseViewController {
         inputBackView.layer.borderColor = UIColor.hexColor(hexadecimal: PQBFConfig.shared.styleColor.rawValue).cgColor
         return inputBackView
     }()
+
     // 手势提示
     lazy var pinView: UIImageView = {
         let pinView = UIImageView()
         pinView.kf.setImage(with: URL(fileURLWithPath: Bundle().BF_mainbundle().path(forResource: "editCoverPin", ofType: ".gif")!))
         return pinView
     }()
-    //封面
+
+    // 封面
     lazy var coverImageView: UIImageView = {
         let coverImageView = UIImageView()
         coverImageView.isUserInteractionEnabled = true
@@ -283,7 +285,8 @@ class PQStuckPointPublicController: PQBaseViewController {
         coverImageView.contentMode = .scaleToFill
         return coverImageView
     }()
-    //封面标题
+
+    // 封面标题
     lazy var coverImageTitle: UILabel = {
         let coverImageTitle = UILabel()
         coverImageTitle.text = "换封面"
@@ -293,10 +296,10 @@ class PQStuckPointPublicController: PQBaseViewController {
         coverImageTitle.textColor = .white
         coverImageTitle.font = UIFont.boldSystemFont(ofSize: 12)
         return coverImageTitle
-    
+
     }()
-    
-    //标题
+
+    // 标题
     lazy var titleLabel: UILabel = {
         let titleLabel = UILabel()
         titleLabel.numberOfLines = 2
@@ -308,48 +311,45 @@ class PQStuckPointPublicController: PQBaseViewController {
         titleLabel.addGestureRecognizer(ges)
         return titleLabel
     }()
-    
-    //编辑发布标题
+
+    // 编辑发布标题
     lazy var publicTitleView: PQEditPublicTitleView = {
         let publicTitleView = PQEditPublicTitleView()
         publicTitleView.isHidden = true
         publicTitleView.confirmBtnClock = { [weak self] title in
             BFLog(message: "传出的 title  is :\(String(describing: title))")
-            if(title?.count != 0 && title != self?.titleLabel.text){
+            if title?.count != 0 && title != self?.titleLabel.text {
                 self?.changPlayerIsPause(isPause: false)
 
-                //判断文字是否有效
+                // 判断文字是否有效
                 var inputText = ""
                 inputText = title?.replacingOccurrences(of: "\n", with: "") ?? ""
                 inputText = inputText.replacingOccurrences(of: " ", with: "")
-                 
-                if(inputText.count > 0){
-                    self?.setTitleText(text: title ?? "",textColor: .black)
-                    //更新数据
+
+                if inputText.count > 0 {
+                    self?.setTitleText(text: title ?? "", textColor: .black)
+                    // 更新数据
                     self?.videoData?.title = title
                     self?.updateCoverImagegOrTitle()
                 }
-             
             }
-         
         }
         publicTitleView.viewIsHiddenCallBack = { [weak self] in
-            
+
             self?.changPlayerIsPause(isPause: false)
-             
         }
-        
+
         return publicTitleView
     }()
-    
-    //编辑发布封面
+
+    // 编辑发布封面
     lazy var publicEditCoverView: PQEditPublicCoverImageView = {
-        let publicEditCoverView = PQEditPublicCoverImageView.init(frame: CGRect.init(x: 0, y: 0, width: cScreenWidth, height: cScreenHeigth))
+        let publicEditCoverView = PQEditPublicCoverImageView(frame: CGRect(x: 0, y: 0, width: cScreenWidth, height: cScreenHeigth))
         publicEditCoverView.isHidden = true
         return publicEditCoverView
     }()
- 
-    //分享到朋友圈
+
+    // 分享到朋友圈
     lazy var shareWechatBtn: UIButton = {
         let shareWechatBtn = UIButton(type: .custom)
         shareWechatBtn.frame = CGRect(x: 0, y: 0, width: 70, height: 70)
@@ -360,7 +360,8 @@ class PQStuckPointPublicController: PQBaseViewController {
         shareWechatBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
         return shareWechatBtn
     }()
-    //分享到好友
+
+    // 分享到好友
     lazy var shareFriendBtn: UIButton = {
         let shareFriendBtn = UIButton(type: .custom)
         shareFriendBtn.frame = CGRect(x: 0, y: 0, width: 70, height: 70)
@@ -371,8 +372,8 @@ class PQStuckPointPublicController: PQBaseViewController {
         shareFriendBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
         return shareFriendBtn
     }()
-    
-    //关闭
+
+    // 关闭
     lazy var finishedBtn: UIButton = {
         let finishedBtn = UIButton(type: .custom)
         finishedBtn.setTitle("完成", for: .normal)
@@ -383,7 +384,7 @@ class PQStuckPointPublicController: PQBaseViewController {
         finishedBtn.addCorner(corner: 3)
         finishedBtn.addTarget(self, action: #selector(btnClick(sender:)), for: .touchUpInside)
         return finishedBtn
-        
+
     }()
 
     /// 背景View
@@ -392,15 +393,14 @@ class PQStuckPointPublicController: PQBaseViewController {
         oprationBgView.backgroundColor = .clear
         return oprationBgView
     }()
-    
-    //除了播放器以外的 下半部分操作区
+
+    // 除了播放器以外的 下半部分操作区
     lazy var bottomOprationBgView: UIView = {
         let bottomOprationBgView = UIView(frame: CGRect(x: 0, y: cDevice_iPhoneNavBarAndStatusBarHei + maxHeight, width: cScreenWidth, height: view.frame.height - cDevice_iPhoneNavBarAndStatusBarHei - maxHeight))
         bottomOprationBgView.backgroundColor = .clear
         bottomOprationBgView.isHidden = true
         return bottomOprationBgView
     }()
-    
 
     override func backBtnClick() {
         if isExportSuccess {
@@ -440,8 +440,7 @@ class PQStuckPointPublicController: PQBaseViewController {
         playerHeaderView.frame = CGRect(origin: CGPoint(x: (cScreenWidth - preViewSize.width) / 2, y: (maxHeight - preViewSize.height) / 2), size: preViewSize)
         let ges = UITapGestureRecognizer(target: self, action: #selector(playVideo))
         playerHeaderView.addGestureRecognizer(ges)
-        
-       
+
         if playerLayer.superlayer == nil {
             playerHeaderView.layer.insertSublayer(playerLayer, at: 0)
         }
@@ -449,18 +448,17 @@ class PQStuckPointPublicController: PQBaseViewController {
         playerHeaderView.addSubview(progressView)
         view.addSubview(oprationBgView)
         oprationBgView.addSubview(progressTipsLab)
-        
+
         // 添加导出view
         bgTopView.addSubview(playerHeaderView)
-        
+
         playerHeaderCoverImageView.frame = playerHeaderView.frame
         playerHeaderCoverImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(playVideo)))
- 
+
         (playerHeaderCoverImageView.viewWithTag(4))?.frame =
-        CGRect(x: (preViewSize.width - cDefaultMargin * 5) / 2, y: (preViewSize.height - cDefaultMargin * 5) / 2, width: cDefaultMargin * 5, height: cDefaultMargin * 5)
+            CGRect(x: (preViewSize.width - cDefaultMargin * 5) / 2, y: (preViewSize.height - cDefaultMargin * 5) / 2, width: cDefaultMargin * 5, height: cDefaultMargin * 5)
         bgTopView.addSubview(playerHeaderCoverImageView)
-      
-        
+
         view.addSubview(bottomOprationBgView)
         bottomOprationBgView.addSubview(remindLab)
         bottomOprationBgView.addSubview(shareWechatBtn)
@@ -471,13 +469,13 @@ class PQStuckPointPublicController: PQBaseViewController {
         inputBackView.addSubview(coverImageView)
         coverImageView.addSubview(coverImageTitle)
         inputBackView.addSubview(titleLabel)
-        
+
         view.addSubview(publicTitleView)
         view.addSubview(publicEditCoverView)
-   
+
         coverImageTitle.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(settingCoverImage)))
         coverImageView.addGestureRecognizer(UITapGestureRecognizer(target: self, action: #selector(settingCoverImage)))
-        
+
         progressView.snp.makeConstraints { make in
             make.left.right.centerY.equalTo(playerHeaderView)
             make.height.equalTo(3)
@@ -504,36 +502,35 @@ class PQStuckPointPublicController: PQBaseViewController {
             make.left.equalTo(view.snp_centerX).offset(cDefaultMargin)
             make.width.bottom.height.equalTo(shareWechatBtn)
         }
-     
+
         inputBackView.snp.makeConstraints { make in
             make.centerX.equalToSuperview()
             make.bottom.equalTo(shareWechatBtn.snp_top).offset(-16)
             make.width.equalTo(343)
             make.height.equalTo(109)
-            
         }
-        
-        //根据横竖屏设置不同的 UI
-        let isWidth:Bool = (Float(editProjectModel?.sData?.videoMetaData?.videoWidth ?? 0) /  Float(editProjectModel?.sData?.videoMetaData?.videoHeight ?? 0) ) >= 1
+
+        // 根据横竖屏设置不同的 UI
+        let isWidth: Bool = (Float(editProjectModel?.sData?.videoMetaData?.videoWidth ?? 0) / Float(editProjectModel?.sData?.videoMetaData?.videoHeight ?? 0)) >= 1
         var coverImageViewHeight = 50.0 * Float(editProjectModel?.sData?.videoMetaData?.videoHeight ?? 0) / Float(editProjectModel?.sData?.videoMetaData?.videoWidth ?? 0)
-        if(coverImageViewHeight > 89){
+        if coverImageViewHeight > 89 {
             coverImageViewHeight = 89
         }
-        
+
         coverImageView.snp.makeConstraints { make in
             make.left.equalToSuperview().offset(12)
             make.width.equalTo(50)
             make.top.equalToSuperview().offset(10)
             make.height.equalTo(coverImageViewHeight)
         }
-        
+
         coverImageTitle.snp.makeConstraints { make in
             make.left.equalToSuperview()
             make.width.equalTo(50)
             make.top.equalTo(coverImageView.snp_bottom).offset(isWidth ? 0 : -23)
             make.height.equalTo(23)
         }
-        
+
         remindLab.snp.makeConstraints { make in
             make.centerX.equalToSuperview()
             make.bottom.equalTo(inputBackView.snp_top).offset(-16).priorityHigh()
@@ -541,27 +538,26 @@ class PQStuckPointPublicController: PQBaseViewController {
             make.top.greaterThanOrEqualTo(5)
             make.bottom.lessThanOrEqualTo(inputBackView.snp_top).offset(-5)
         }
- 
+
         titleLabel.snp.makeConstraints { make in
             make.height.equalTo(48)
             make.left.equalTo(coverImageView.snp_right).offset(12)
             make.right.equalToSuperview().offset(-14)
             make.top.equalToSuperview().offset(10)
         }
-        
+
         pinView.snp.makeConstraints { make in
             make.height.width.equalTo(72)
             make.right.equalToSuperview()
             make.bottom.equalTo(inputBackView.snp_bottom)
         }
-        
+
         publicTitleView.snp.makeConstraints { make in
             make.height.equalTo(cScreenHeigth)
             make.width.equalTo(cScreenWidth)
             make.bottom.equalToSuperview()
         }
-        
-        
+
         // 取消所有的导出
         PQSingletoMemoryUtil.shared.allExportSession.forEach { _, exportSession in
             exportSession.cancelExport()
@@ -572,8 +568,8 @@ class PQStuckPointPublicController: PQBaseViewController {
         saveDraftbox()
         // 曝光上报:窗口曝光
         PQEventTrackViewModel.baseReportUpload(businessType: .bt_windowView, objectType: .ot_view_publishSyncedUp, pageSource: .sp_stuck_publishSyncedUp, extParams: nil, remindmsg: "卡点视频数据上报-(曝光上报:窗口曝光)")
-        
-        //取推荐标题
+
+        // 取推荐标题
         getTitles()
     }
 
@@ -582,9 +578,8 @@ class PQStuckPointPublicController: PQBaseViewController {
         PQNotification.addObserver(self, selector: #selector(enterBackground), name: UIApplication.didEnterBackgroundNotification, object: nil)
         PQNotification.addObserver(self, selector: #selector(willEnterForeground), name: UIApplication.willEnterForegroundNotification, object: nil)
         UIApplication.shared.isIdleTimerDisabled = true
-        
-        
-        //从相册选择一个照片后回调
+
+        // 从相册选择一个照片后回调
         addNotification(self, selector: #selector(imageSelectedImage(notify:)), name: cSelectedImageSuccessKey, object: nil)
 
         #if swift(>=4.2)
@@ -631,50 +626,46 @@ class PQStuckPointPublicController: PQBaseViewController {
 extension PQStuckPointPublicController {
     /// fp1 - 导出视频
     /// 开始导出视频
-    
+
     /// 合并声音
     /// - Parameter urls: 所有音频的URL  是全路径方便复用
     /// - Parameter completeHander: 返回的 URL 全路径的 URL 如果要保存替换掉前缀
-    func mergeAudios(originAsset: AVURLAsset, mTotalDuration: Float,clipAudioRange: CMTimeRange = CMTimeRange.zero,mStartTime:CMTime = .zero , completeHander: @escaping (_ fileURL: URL?) -> Void) {
-        
-        
+    func mergeAudios(originAsset: AVURLAsset, mTotalDuration: Float, clipAudioRange: CMTimeRange = CMTimeRange.zero, mStartTime _: CMTime = .zero, completeHander: @escaping (_ fileURL: URL?) -> Void) {
         let timeInterval: TimeInterval = Date().timeIntervalSince1970
         let composition = AVMutableComposition()
- 
+
         let originaDuration = CMTimeGetSeconds(clipAudioRange.duration)
         BFLog(message: "处理主音频 原始时长startTime = \(originaDuration) 要显示时长totalDuration = \(mTotalDuration)")
-        
-        if(Float64(mTotalDuration) <= originaDuration){
-            
+
+        if Float64(mTotalDuration) <= originaDuration {
             BFLog(message: "不用拼接音频文件 \(originAsset.url) 时长is \(CMTimeGetSeconds(originAsset.duration))")
             completeHander(originAsset.url)
             return
         }
-        
-        //整倍数
+
+        // 整倍数
         let count = Int(mTotalDuration) / Int(originaDuration)
 
-        //有余数多 clip 一整段
+        // 有余数多 clip 一整段
         let row = mTotalDuration - Float(count) * Float(originaDuration)
-        //已经拼接的总时长
+        // 已经拼接的总时长
         var totalDuration: CMTime = .zero
-        //第一段的时长
+        // 第一段的时长
         var duration: CMTime = .zero
-        //第一段的区间
-        var timeRange:CMTimeRange = CMTimeRange.zero
+        // 第一段的区间
+        var timeRange: CMTimeRange = CMTimeRange.zero
         if count > 0 {
             for index in 0 ..< count {
-                //第0段从0开始到推荐的结束,播放器的开始时间不是从0开始的
+                // 第0段从0开始到推荐的结束,播放器的开始时间不是从0开始的
                 duration = CMTime(value: CMTimeValue((CMTimeGetSeconds(clipAudioRange.end)) * Double(playerTimescaleInt)), timescale: playerTimescaleInt)
                 BFLog(message: "每一个文件的 duration \(CMTimeGetSeconds(duration))")
                 var timeRange = CMTimeRangeMake(start: .zero, duration: duration)
-                
-                if(index != 0){
-                    //(CMTimeGetSeconds(clipAudioRange.end) - CMTimeGetSeconds(mStartTime))为用户选择的第一段时长
+
+                if index != 0 {
+                    // (CMTimeGetSeconds(clipAudioRange.end) - CMTimeGetSeconds(mStartTime))为用户选择的第一段时长
                     timeRange = clipAudioRange
-                    
                 }
-                
+
                 BFLog(message: "合并的文件地址: \(originAsset.url)")
                 let audioAsset = originAsset
                 let tracks = audioAsset.tracks(withMediaType: .audio)
@@ -683,56 +674,47 @@ extension PQStuckPointPublicController {
                     break
                 }
                 let assetTrack: AVAssetTrack = tracks[0]
-             
+
                 let compositionAudioTrack: AVMutableCompositionTrack = composition.addMutableTrack(withMediaType: AVMediaType.audio, preferredTrackID: CMPersistentTrackID())!
-       
+
                 do {
                     //
                     try compositionAudioTrack.insertTimeRange(timeRange, of: assetTrack, at: totalDuration)
 
                 } catch {
-                  
                     BFLog(message: "error is \(error)")
                     completeHander(URL(string: ""))
                     return
                 }
                 totalDuration = CMTimeAdd(totalDuration, timeRange.duration)
-                
-
-            
-                
             }
         }
-        
-        if(row > 0){
+
+        if row > 0 {
             duration = CMTime(value: CMTimeValue(Float(CMTimeGetSeconds(totalDuration)) * Float(playerTimescaleInt)), timescale: playerTimescaleInt)
             timeRange = CMTimeRange(start: clipAudioRange.start, duration: CMTime(value: Int64(Double(row) * Double(playerTimescaleInt)), timescale: playerTimescaleInt))
-            
-                BFLog(message: "合并的文件地址: \(originAsset.url)")
-                let audioAsset = originAsset
-                let tracks = audioAsset.tracks(withMediaType: .audio)
-                if tracks.count == 0 {
-                    BFLog(message: "音频数据无效不进行合并,所有任务结束要确保输入的数据都正常! \(originAsset.url)")
 
-                }
+            BFLog(message: "合并的文件地址: \(originAsset.url)")
+            let audioAsset = originAsset
+            let tracks = audioAsset.tracks(withMediaType: .audio)
+            if tracks.count == 0 {
+                BFLog(message: "音频数据无效不进行合并,所有任务结束要确保输入的数据都正常! \(originAsset.url)")
+            }
             let assetTrack: AVAssetTrack = tracks[0]
-         
+
             let compositionAudioTrack: AVMutableCompositionTrack = composition.addMutableTrack(withMediaType: AVMediaType.audio, preferredTrackID: CMPersistentTrackID())!
-   
+
             do {
                 //
                 try compositionAudioTrack.insertTimeRange(timeRange, of: assetTrack, at: totalDuration)
 
             } catch {
-              
                 BFLog(message: "error is \(error)")
                 completeHander(URL(string: ""))
                 return
             }
             totalDuration = CMTimeAdd(totalDuration, timeRange.duration)
-                
         }
- 
 
         let assetExport = AVAssetExportSession(asset: composition, presetName: AVAssetExportPresetAppleM4A)
         BFLog(message: "assetExport.supportedFileTypes is \(String(describing: assetExport?.supportedFileTypes))")
@@ -753,7 +735,7 @@ extension PQStuckPointPublicController {
         assetExport?.exportAsynchronously {
             if assetExport!.status == .completed {
                 let audioAsset = AVURLAsset(url: fileUrl, options: avAssertOptions)
-                BFLog(1,message: "拼接声音文件 完成 \(fileUrl) 时长is \(CMTimeGetSeconds(audioAsset.duration))")
+                BFLog(1, message: "拼接声音文件 完成 \(fileUrl) 时长is \(CMTimeGetSeconds(audioAsset.duration))")
                 completeHander(fileUrl)
 
             } else {
@@ -764,20 +746,18 @@ extension PQStuckPointPublicController {
     }
 
     func appendAudio() {
- 
         let inputAsset = AVURLAsset(url: URL(fileURLWithPath: documensDirectory + (audioMixModel?.localPath ?? "")), options: nil)
-        mergeAudios(originAsset: inputAsset, mTotalDuration: finallyUserAudioTime,clipAudioRange: clipAudioRange,mStartTime: CMTime(value: CMTimeValue((mStickers?.first?.timelineIn ?? 0.0) * Float64(playerTimescaleInt)), timescale: playerTimescaleInt)) {  [weak self] completURL in
-             
-            if(completURL != nil){
+        mergeAudios(originAsset: inputAsset, mTotalDuration: finallyUserAudioTime, clipAudioRange: clipAudioRange, mStartTime: CMTime(value: CMTimeValue((mStickers?.first?.timelineIn ?? 0.0) * Float64(playerTimescaleInt)), timescale: playerTimescaleInt)) { [weak self] completURL in
+
+            if completURL != nil {
                 let asset = AVURLAsset(url: completURL!, options: nil)
                 FilterLog(message: "拼接后音频时长\(asset.duration.seconds)  url is \(String(describing: completURL))")
                 self?.beginExport(inputAsset: asset)
             }
-          
         }
     }
-    
-    func beginExport(inputAsset:AVURLAsset!) {
+
+    func beginExport(inputAsset: AVURLAsset!) {
         if !(editProjectModel?.sData?.sections != nil && (editProjectModel?.sData?.sections.count ?? 0) > 0) {
             BFLog(message: "项目段落错误❌")
             return
@@ -791,19 +771,12 @@ extension PQStuckPointPublicController {
         outPutMP4Path.append("video_\(String.qe.timestamp()).mp4")
         let outPutMP4URL = URL(fileURLWithPath: outPutMP4Path)
         BFLog(message: "导出视频地址 \(outPutMP4URL)")
-//        let inputAsset = AVURLAsset(url: URL(fileURLWithPath: documensDirectory + (audioMixModel?.localPath ?? "")), options: nil)
- 
-        // 每次初始化的时候设置初始值 为 nIl
-        var audioMix: AVMutableAudioMix?
-        var composition: AVMutableComposition?
-//        if(finallyUserAudioTime != 0 && finallyUserAudioTime > Float(inputAsset.duration.seconds)){
-//            (audioMix, composition) = PQPlayerViewModel.setupAudioMix(originAsset: inputAsset, bgmData:nil, videoStickers: nil,originMusicDuration:finallyUserAudioTime,clipAudioRange: clipAudioRange,startTime:CMTime(value: CMTimeValue((mStickers?.first?.timelineIn ?? 0.0) * Float64(playerTimescaleInt)), timescale: playerTimescaleInt))
-//        }
+
         exporter = PQCompositionExporter(asset: inputAsset, videoComposition: nil, audioMix: audioMix, filters: nil, stickers: mStickers, animationTool: nil, exportURL: outPutMP4URL)
 
         var orgeBitRate = (editProjectModel?.sData?.videoMetaData?.videoWidth ?? 0) * (editProjectModel?.sData?.videoMetaData?.videoHeight ?? 0) * 3
 
-        if(mStickers != nil){
+        if mStickers != nil {
             for stick in mStickers! {
                 if stick.type == StickerType.VIDEO.rawValue {
                     let asset = AVURLAsset(url: URL(fileURLWithPath: documensDirectory + stick.locationPath), options: avAssertOptions)
@@ -831,8 +804,8 @@ extension PQStuckPointPublicController {
             }
         }
         exporter.completion = { [weak self] url in
-            BFLog(message: "MovieOutput total frames appended:导了完成: \(url) 生成视频时长为:\(CMTimeGetSeconds(AVAsset.init(url: url).duration))")
-            
+            BFLog(message: "MovieOutput total frames appended:导了完成: \(url) 生成视频时长为:\(CMTimeGetSeconds(AVAsset(url: url).duration))")
+
             // 导出完成后取消导出
             if self?.exporter != nil {
                 self?.exporter.cancel()
@@ -841,8 +814,8 @@ extension PQStuckPointPublicController {
             if !(self?.isExportSuccess ?? false) {
                 self?.isExportSuccess = true
                 self?.exportEndDate = Date().timeIntervalSince1970
-                BFLog(message: "视频导出完成-开始去发布视频 总时长为\( (self?.exportEndDate ?? 0) - (self?.startExportDate ?? 0) * 1000)")
-                
+                BFLog(message: "视频导出完成-开始去发布视频 总时长为\((self?.exportEndDate ?? 0) - (self?.startExportDate ?? 0) * 1000)")
+
                 self?.exportLocalURL = url
                 /// fp2-1-1 - 请求权限
 //                self?.authorizationStatus()
@@ -935,13 +908,13 @@ extension PQStuckPointPublicController {
         if isSaveDraftSuccess {
             let sdata = editProjectModel?.sData?.toJSONString(prettyPrint: false) ?? ""
             let draftboxId: String? = editProjectModel?.draftboxId
-            PQBaseViewModel.saveProject(draftboxId: draftboxId, sdata: sdata, videoFromScene: .stuckPoint,rhythmMode: rhythmMode) { [weak self] projectId, msg in
+            PQBaseViewModel.saveProject(draftboxId: draftboxId, sdata: sdata, videoFromScene: .stuckPoint, rhythmMode: rhythmMode) { [weak self] projectId, msg in
                 BFLog(message: "生成的项目id1111 :\(projectId ?? ""),msg = \(msg ?? "")")
                 if projectId == nil || (projectId?.count ?? 0) <= 0 {
-                    PQBaseViewModel.saveProject(draftboxId: draftboxId, sdata: sdata, videoFromScene: .stuckPoint,rhythmMode: self?.rhythmMode ?? .createStickersModelPoint) { [weak self] projectId, msg in
+                    PQBaseViewModel.saveProject(draftboxId: draftboxId, sdata: sdata, videoFromScene: .stuckPoint, rhythmMode: self?.rhythmMode ?? .createStickersModelPoint) { [weak self] projectId, msg in
                         BFLog(message: "生成的项目id222 :\(projectId ?? ""),msg = \(msg ?? "")")
                         if projectId == nil || (projectId?.count ?? 0) <= 0 {
-                            PQBaseViewModel.saveProject(draftboxId: draftboxId, sdata: sdata, videoFromScene: .stuckPoint,rhythmMode: self?.rhythmMode ?? .createStickersModelPoint) { [weak self] projectId, msg in
+                            PQBaseViewModel.saveProject(draftboxId: draftboxId, sdata: sdata, videoFromScene: .stuckPoint, rhythmMode: self?.rhythmMode ?? .createStickersModelPoint) { [weak self] projectId, msg in
                                 BFLog(message: "生成的项目id 3333:\(projectId ?? ""),msg = \(msg ?? "")")
                                 if projectId != nil, (projectId?.count ?? 0) > 0 {
                                     self?.editProjectModel?.projectId = projectId ?? ""
@@ -1246,11 +1219,11 @@ extension PQStuckPointPublicController {
         eventTrackData.syncedUpOriginalMaterialDuration = selectedTotalDuration * 1000
         eventTrackData.syncedUpRhythmNumber = audioMixModel?.speed ?? 2
         eventTrackData.syncedUpVideoDuration = ((audioMixModel?.endTime ?? 0) - (audioMixModel?.startTime ?? 0)) * 1000
-        //add by ak
+        // add by ak
         eventTrackData.syncedUpVideoType = rhythmMode
         eventTrackData.syncedUpVideoSpeedMax = syncedUpVideoSpeedMax
         eventTrackData.syncedUpVideoSpeedMin = syncedUpVideoSpeedMin
-        
+
         return eventTrackData
     }
 
@@ -1258,9 +1231,8 @@ extension PQStuckPointPublicController {
     /// - Returns: description
     @objc func playVideo() {
         playBtn.isHidden = !playBtn.isHidden
-        
+
         changPlayerIsPause(isPause: !playBtn.isHidden)
- 
     }
 
     /// 按钮点击事件
@@ -1304,15 +1276,13 @@ extension PQStuckPointPublicController {
             PQBaseViewModel.h5ShareLinkInfo(videoId: videoData?.uniqueId ?? "", pageSource: videoData?.pageSource ?? .sp_category) { [weak self] path, _ in
                 cHiddenHUB(superView: nil)
                 if path != nil {
-                     
-                    PQBaseViewModel.wxFriendShareInfo(videoId: (self?.videoData?.uniqueId)!) { [weak self] imagePath, title, shareWeappRawId, msg in
+                    PQBaseViewModel.wxFriendShareInfo(videoId: (self?.videoData?.uniqueId)!) { [weak self] imagePath, _, _, msg in
                         if msg != nil {
                             cShowHUB(superView: nil, msg: "网络不佳哦")
                             return
                         }
                         self?.isShared = true
-                        
-                        
+
                         PQSingletoWXApiUtil.shared.share(type: 1, scene: Int32(WXSceneTimeline.rawValue), title: self?.videoData?.title ?? "\(BFLoginUserInfo.shared.nickName)made a music video for you", description: "", imageUrl: imagePath, path: path, videoId: (self?.videoData?.uniqueId)!, pageSource: self?.videoData?.pageSource ?? .sp_category, shareId: shareId).wxApiUtilHander = { _, _ in
                         }
                     }
@@ -1323,14 +1293,13 @@ extension PQStuckPointPublicController {
             // 点击上报:分享朋友圈
             PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_click_shareWechatMoment, pageSource: .sp_stuck_publishSyncedUp, extParams: ["videoId": videoData?.uniqueId ?? ""], remindmsg: "卡点视频数据上报-(点击上报:分享朋友圈)")
         case 3:
- 
+
             // 点击上报:完成
             PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_click_finished, pageSource: .sp_stuck_publishSyncedUp, extParams: ["videoId": videoData?.uniqueId ?? ""], remindmsg: "卡点视频数据上报-(点击上报:完成)")
             navigationController?.viewControllers = [(navigationController?.viewControllers.first)!]
             // 发送通知
             postNotification(name: cFinishedPublishedNotiKey)
 
-
         default:
             break
         }
@@ -1366,10 +1335,9 @@ extension PQStuckPointPublicController {
         if !isExportSuccess {
             appendAudio()
         }
-        
-       playBtn.isHidden = true
-       avPlayer.play()
-    
+
+        playBtn.isHidden = true
+        avPlayer.play()
     }
 
     @objc func didBecomeActiveNotification() {
@@ -1392,81 +1360,75 @@ extension PQStuckPointPublicController {
         attributedText.addAttributes([.font: UIFont.systemFont(ofSize: 34)], range: NSRange(location: 0, length: "\(exportProgrss)%".count))
         progressTipsLab.attributedText = attributedText
     }
-    
-    func changPlayerIsPause(isPause:Bool) {
-        if(isPause){
+
+    func changPlayerIsPause(isPause: Bool) {
+        if isPause {
             playBtn.isHidden = false
             avPlayer.pause()
             playerHeaderCoverImageView.isHidden = false
 
-        }else{
+        } else {
             playBtn.isHidden = true
             avPlayer.play()
             playerHeaderCoverImageView.isHidden = true
-
         }
     }
-    
-    @objc func titleLabelClick()  {
+
+    @objc func titleLabelClick() {
         BFLog(message: "点击输入框")
         changPlayerIsPause(isPause: true)
-        
+
         pinView.isHidden = true
         publicTitleView.show()
-        
-        if(publicTitleView.inputTV.text.count > 0){
+
+        if publicTitleView.inputTV.text.count > 0 {
             publicTitleView.inputTV.text = titleLabel.text
         }
-  
-        PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_shanyinApp_clickButton_changeTitle, pageSource: .sp_stuck_publishSyncedUp, eventData:  ["videoId":videoData?.uniqueId ?? "","rootPageSource":isReCreate ? "shanyinApp-main-syncedUpMusicRecreate" :"shanyinApp-main-syncedUpMusic"], remindmsg: "")
+
+        PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_shanyinApp_clickButton_changeTitle, pageSource: .sp_stuck_publishSyncedUp, eventData: ["videoId": videoData?.uniqueId ?? "", "rootPageSource": isReCreate ? "shanyinApp-main-syncedUpMusicRecreate" : "shanyinApp-main-syncedUpMusic"], remindmsg: "")
     }
-    
+
     @objc func settingCoverImage() {
-  
-        if(exportLocalURL == nil){
+        if exportLocalURL == nil {
             BFLog(message: "导出的视频地址错误???。。。")
             return
         }
         changPlayerIsPause(isPause: true)
-        
+
         let asset = AVURLAsset(url: exportLocalURL!, options: nil)
 
         publicEditCoverView.show(videoURL: exportLocalURL!, duration: CMTimeGetSeconds(asset.duration))
-        
-        //点击了确认 btn
+
+        // 点击了确认 btn
         publicEditCoverView.selectImageCallBack = { [weak self] imageData in
-            
+
             self?.changPlayerIsPause(isPause: false)
-            if(imageData != nil){
-            
+            if imageData != nil {
                 self?.coverImageView.image = imageData
                 self?.playerHeaderCoverImageView.image = imageData
-                self?.uploadData?.image  = imageData
+                self?.uploadData?.image = imageData
                 self?.updateCoverImagegOrTitle()
             }
-           
         }
-        //点击了从相册选择
+        // 点击了从相册选择
         publicEditCoverView.selectPhotoBtnCallBack = { [weak self] in
             let imageSelected = PQImageSelectedController()
-           imageSelected.isAssetImage = true
+            imageSelected.isAssetImage = true
 
-            imageSelected.videoWidth =     CGFloat(self?.editProjectModel?.sData?.videoMetaData?.videoWidth ?? 0)
-            imageSelected.videoHeight =     CGFloat(self?.editProjectModel?.sData?.videoMetaData?.videoHeight ?? 0)
+            imageSelected.videoWidth = CGFloat(self?.editProjectModel?.sData?.videoMetaData?.videoWidth ?? 0)
+            imageSelected.videoHeight = CGFloat(self?.editProjectModel?.sData?.videoMetaData?.videoHeight ?? 0)
 //           imageSelected.uploadData = uploadData
-           //        imageSelected.updataVideoData = updataVideoData
+            //        imageSelected.updataVideoData = updataVideoData
             self?.navigationController?.pushViewController(imageSelected, animated: true)
         }
-        
-        PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_shanyinApp_clickButton_changeCover, pageSource: .sp_stuck_publishSyncedUp, eventData:  ["videoId":videoData?.uniqueId ?? "","rootPageSource":isReCreate ? "shanyinApp-main-syncedUpMusicRecreate" :"shanyinApp-main-syncedUpMusic"], remindmsg: "")
-   
+
+        PQEventTrackViewModel.baseReportUpload(businessType: .bt_buttonClick, objectType: .ot_shanyinApp_clickButton_changeCover, pageSource: .sp_stuck_publishSyncedUp, eventData: ["videoId": videoData?.uniqueId ?? "", "rootPageSource": isReCreate ? "shanyinApp-main-syncedUpMusicRecreate" : "shanyinApp-main-syncedUpMusic"], remindmsg: "")
     }
-    
-    //更新标题或封面
+
+    // 更新标题或封面
     func updateCoverImagegOrTitle() {
-        
         PQLoadingHUB.shared.showHUB(isMode: true)
-        
+
         PQBaseViewModel.ossTempToken { [weak self] response, msg in
             let image: UIImage = (self?.uploadData?.image)!
             let data = image.jpegData(compressionQuality: 1)
@@ -1486,22 +1448,21 @@ extension PQStuckPointPublicController {
 
                 .uploadObjectAsync(bucketName: bucketName, objectKey: objectKey, data: data!, fileExtensions: "png", imageUploadBlock: { _, code, ossObjectKey, _ in
                     if code == 1 && ossObjectKey == objectKey && ossObjectKey.count > 0 {
-                        //add by ak 这里会在服务器生成分享使用的图片到1-2S 时间
+                        // add by ak 这里会在服务器生成分享使用的图片到1-2S 时间
                         PQUploadViewModel.updateVideo(title: self?.videoData?.title ?? "", videoId: self?.videoData?.uniqueId ?? "", coverImgPath: objectKey, descr: "") { newVideoData, msg in
-                            
+
                             if newVideoData == nil {
                                 cShowHUB(superView: self?.view, msg: msg)
-                                //可能有敏感词 要刷一组新标题并自动更新
-                                let numberRandom: UInt32 = UInt32(arc4random_uniform(UInt32(  self?.publicTitleView.titles.count ?? 0)))
-                     
-                                self?.setTitleText(text:   self?.publicTitleView.titles[Int(numberRandom)] ?? "")
+                                // 可能有敏感词 要刷一组新标题并自动更新
+                                let numberRandom: UInt32 = UInt32(arc4random_uniform(UInt32(self?.publicTitleView.titles.count ?? 0)))
+
+                                self?.setTitleText(text: self?.publicTitleView.titles[Int(numberRandom)] ?? "")
                                 self?.updateCoverImagegOrTitle()
                                 sleep(UInt32(1.5))
                                 PQLoadingHUB.shared.dismissHUB()
-                                
+
                                 return
-                            }else{
-                                
+                            } else {
                                 PQLoadingHUB.shared.dismissHUB()
                             }
                         }
@@ -1509,47 +1470,44 @@ extension PQStuckPointPublicController {
                         PQLoadingHUB.shared.dismissHUB()
                     }
                 })
-        
-        }}
-    func  setTitleText(text:String ,textColor:UIColor =     UIColor.hexColor(hexadecimal: "#ABABAB"))  {
- 
+
+    } }
+
+    func setTitleText(text: String, textColor: UIColor = UIColor.hexColor(hexadecimal: "#ABABAB")) {
         selectTitle = text
-        //更新 UI
+        // 更新 UI
         titleLabel.text = text
         titleLabel.textColor = textColor
         publicTitleView.inputTV.placeHolder = text
-        //更新数据
+        // 更新数据
         videoData?.title = text
-        
-
     }
-    //取推荐的10个标题
-    func getTitles(){
-        PQBaseViewModel.getBaseConfig(completeHander: {[weak self] titles in
-             
-            if((titles?.count ?? 0) > 0){
+
+    // 取推荐的10个标题
+    func getTitles() {
+        PQBaseViewModel.getBaseConfig(completeHander: { [weak self] titles in
+
+            if (titles?.count ?? 0) > 0 {
                 self?.publicTitleView.titles = titles!
-            
+
                 let numberRandom: UInt32 = UInt32(arc4random_uniform(UInt32(titles!.count)))
                 BFLog(message: "接收到的 titles\(String(describing: titles))")
                 self?.setTitleText(text: titles?[Int(numberRandom)] ?? "")
-        
             }
-    
+
         })
     }
-    
+
     @objc func imageSelectedImage(notify: Notification) {
         let imageData: UIImage? = notify.userInfo?["image"] as? UIImage
-        if imageData != nil  {
+        if imageData != nil {
             changPlayerIsPause(isPause: false)
             BFLog(message: "从系统相册选择了一个照片")
             publicEditCoverView.isHidden = true
             coverImageView.image = imageData
             playerHeaderCoverImageView.image = imageData
-            uploadData?.image  = imageData
+            uploadData?.image = imageData
             updateCoverImagegOrTitle()
         }
-        
     }
 }