diff --git a/SwiftProject/Pods/Pods.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist b/SwiftProject/Pods/Pods.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist index 23c150d..c59027f 100644 --- a/SwiftProject/Pods/Pods.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/SwiftProject/Pods/Pods.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ Alamofire.xcscheme_^#shared#^_ orderHint - 6 + 7 CocoaAsyncSocket.xcscheme_^#shared#^_ @@ -17,52 +17,52 @@ DeviceKit.xcscheme_^#shared#^_ orderHint - 17 + 14 FirebaseCore.xcscheme_^#shared#^_ orderHint - 16 + 15 FirebaseCoreExtension.xcscheme_^#shared#^_ orderHint - 10 + 5 FirebaseCoreInternal.xcscheme_^#shared#^_ orderHint - 14 + 17 FirebaseCrashlytics.xcscheme_^#shared#^_ orderHint - 18 + 2 FirebaseInstallations.xcscheme_^#shared#^_ orderHint - 3 + 21 FirebaseMessaging.xcscheme_^#shared#^_ orderHint - 5 + 10 FirebaseSessions.xcscheme_^#shared#^_ orderHint - 21 + 12 GoogleDataTransport.xcscheme_^#shared#^_ orderHint - 19 + 20 GoogleUtilities.xcscheme_^#shared#^_ orderHint - 8 + 9 KTVHTTPCache.xcscheme_^#shared#^_ @@ -72,52 +72,52 @@ Kingfisher-Kingfisher.xcscheme_^#shared#^_ orderHint - 9 + 6 Kingfisher.xcscheme_^#shared#^_ orderHint - 4 + 3 LLCycleScrollView.xcscheme_^#shared#^_ orderHint - 20 + 4 Pods-SwiftProject.xcscheme_^#shared#^_ orderHint - 7 + 19 PromisesObjC.xcscheme_^#shared#^_ orderHint - 15 + 16 PromisesSwift.xcscheme_^#shared#^_ orderHint - 12 + 0 SVProgressHUD.xcscheme_^#shared#^_ orderHint - 1 + 13 SnapKit.xcscheme_^#shared#^_ orderHint - 11 + 18 TZImagePickerController.xcscheme_^#shared#^_ orderHint - 0 + 1 nanopb.xcscheme_^#shared#^_ orderHint - 2 + 11 diff --git a/SwiftProject/SwiftProject.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist b/SwiftProject/SwiftProject.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist index 99a1663..4992101 100644 --- a/SwiftProject/SwiftProject.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist +++ b/SwiftProject/SwiftProject.xcodeproj/xcuserdata/aaa.xcuserdatad/xcschemes/xcschememanagement.plist @@ -7,7 +7,7 @@ SwiftProject.xcscheme_^#shared#^_ orderHint - 13 + 8 diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate index 60a246a..f317c37 100644 Binary files a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate and b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/UserInterfaceState.xcuserstate differ diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist index 9bd0aca..321f3e3 100644 --- a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist +++ b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/aaa.xcuserdatad/xcdebugger/Breakpoints_v2.xcbkptlist @@ -238,8 +238,8 @@ filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController.swift" startingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807" - startingLineNumber = "437" - endingLineNumber = "437" + startingLineNumber = "440" + endingLineNumber = "440" landmarkName = "setttinisScreenMirroring(isScreenMirroring:)" landmarkType = "7"> diff --git a/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Contents.json b/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Contents.json new file mode 100644 index 0000000..4830ee5 --- /dev/null +++ b/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Empty_state_导出成功.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Empty_state_导出成功@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Empty_state_导出成功@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Empty_state_导出成功.png b/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Empty_state_导出成功.png new file mode 100644 index 0000000..04f8d67 Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Empty_state_导出成功.png differ diff --git a/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Empty_state_导出成功@2x.png b/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Empty_state_导出成功@2x.png new file mode 100644 index 0000000..54e0495 Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Empty_state_导出成功@2x.png differ diff --git a/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Empty_state_导出成功@3x.png b/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Empty_state_导出成功@3x.png new file mode 100644 index 0000000..b85a428 Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/asset_exported.imageset/Empty_state_导出成功@3x.png differ diff --git a/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Contents.json b/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Contents.json new file mode 100644 index 0000000..29678ca --- /dev/null +++ b/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Contents.json @@ -0,0 +1,23 @@ +{ + "images" : [ + { + "filename" : "Empty_state_导出中.png", + "idiom" : "universal", + "scale" : "1x" + }, + { + "filename" : "Empty_state_导出中@2x.png", + "idiom" : "universal", + "scale" : "2x" + }, + { + "filename" : "Empty_state_导出中@3x.png", + "idiom" : "universal", + "scale" : "3x" + } + ], + "info" : { + "author" : "xcode", + "version" : 1 + } +} diff --git a/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Empty_state_导出中.png b/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Empty_state_导出中.png new file mode 100644 index 0000000..6503e3f Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Empty_state_导出中.png differ diff --git a/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Empty_state_导出中@2x.png b/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Empty_state_导出中@2x.png new file mode 100644 index 0000000..ffe4396 Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Empty_state_导出中@2x.png differ diff --git a/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Empty_state_导出中@3x.png b/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Empty_state_导出中@3x.png new file mode 100644 index 0000000..fe4e2b3 Binary files /dev/null and b/SwiftProject/SwiftProject/Assets.xcassets/asset_exporting.imageset/Empty_state_导出中@3x.png differ diff --git a/SwiftProject/SwiftProject/CCKit/Config/CCCommonFile.swift b/SwiftProject/SwiftProject/CCKit/Config/CCCommonFile.swift index ffa1721..d6a7eaf 100644 --- a/SwiftProject/SwiftProject/CCKit/Config/CCCommonFile.swift +++ b/SwiftProject/SwiftProject/CCKit/Config/CCCommonFile.swift @@ -163,7 +163,7 @@ func KColorFromRGB(rgbValue: UInt32,alpha: CGFloat) -> UIColor { let green = ((rgbValue & 0xFF00) >> 8) / temp let blue = (rgbValue & 0xFF) / temp - return UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: 1) + return UIColor(red: CGFloat(red), green: CGFloat(green), blue: CGFloat(blue), alpha: alpha) } //MARK: - 控件按照屏宽比例尺寸 diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController.swift index eaada6d..dd8cc51 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController.swift @@ -397,10 +397,13 @@ class CCSpatialVideoDisplayController: BaseController, AVPlayerViewControllerDel override func viewDidDisappear(_ animated: Bool) { super.viewDidDisappear(animated) + let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_VideoDisplayController) Analytics.logEvent("preview_pv", parameters: ["refer_page":"视频预览页面","duration":sec]) + player?.pause() } + override func viewDidAppear(_ animated: Bool) { super.viewDidAppear(animated) // 检查当前是否已连接到 AirPlay 设备 diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift index 5578cfc..05d758d 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/VRVideoTransformController.swift @@ -63,11 +63,12 @@ class VRVideoTransformController: BaseController { var mBottomBtn:UIButton? lazy var progressView:CCTransformProgressPopView? = { let pv = CCTransformProgressPopView.init(frame: view.bounds) - pv.closeActionBlock = { - + pv.closeActionBlock = { [weak self] in + self?.navigationController?.popToRootViewController(animated: true) + pv.removeFromSuperview() } pv.transformActionBlock = { - + pv.isHidden = true } return pv }() @@ -93,15 +94,17 @@ class VRVideoTransformController: BaseController { //显示进度条 func showProgress() { if self.progressView?.superview == nil { - self.view .addSubview(self.progressView!) + self.view.addSubview(self.progressView!) } //还未处理完毕... + self.progressView?.resetUI() self.progressView?.isHidden = false } override func viewWillAppear(_ animated: Bool) { super.viewWillAppear(animated) self.setNavgationBarColor(color: UIColor.clear) + } override func viewDidDisappear(_ animated: Bool) { @@ -110,8 +113,13 @@ class VRVideoTransformController: BaseController { Analytics.logEvent("transcode_video_pv", parameters: ["refer_page":"视频转码页面","duration":sec]) } + deinit { + print("deinit--class:\(String(describing: object_getClass(self))) objc:\(self)") + } + override func viewDidLoad() { super.viewDidLoad() + ZZHHelper.setNowTimeToUserDefaultWithKey(kNowTimeToUserDefaultKey_VideoTransformController) self.view.backgroundColor = UIColor.black self.navLine?.isHidden = true @@ -557,7 +565,8 @@ extension VRVideoTransformController { @objc private func videoTransformAction() { // let path = Bundle.main.path(forResource: "IMG_0071", ofType: "MOV") // let videoURL = URL.init(filePath: path!) - + self.showProgress() + self.mAvPlayer?.player?.pause() let videoURL = sourceVideoURL let documentsDirectory = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first! let outputURL = documentsDirectory.appendingPathComponent("output_path.mov") @@ -587,14 +596,24 @@ extension VRVideoTransformController { let outputVideoURL = URL.documentsDirectory.appending(path:"convertor_one.mov") let videoOriginalAsset:AVAsset? = AVAsset(url: sourceVideoURL!) Task { - try await spatialVideoConver.convertVideo(asset: videoOriginalAsset!, outputFile: outputVideoURL ,type: self.selected3DFormat) { [self] (progress,state) in - print(progress) - if(state){ - print("zzh the progress \(progress)") - // 要执行的任务 - self.exportVideo(url: outputVideoURL, outputURL: outputURL, width: width, height: height,codecType:codecType, dataRate: dataRate, horizontalDisparity: horizontalDisparity, horizontalFieldOfView: horizontalFieldOfView) { exportedAsset in - } - } + try await spatialVideoConver.convertVideo(asset: videoOriginalAsset!, outputFile: outputVideoURL ,type: self.selected3DFormat) { [weak self] (progress,state) in + if(state){ + DispatchQueue.main.async { + self?.progressView?.updateProgress(value: 0.8) + } + + // 要执行的任务 + self?.exportVideo(url: outputVideoURL, outputURL: outputURL, width: width, height: height,codecType:codecType, dataRate: dataRate, horizontalDisparity: horizontalDisparity, horizontalFieldOfView: horizontalFieldOfView) { exportedAsset in + } + } + else { + print(".....out pro:\(progress)") + DispatchQueue.main.async { + print(".....in pro:\(progress)") + self?.progressView?.updateProgress(value: progress) + } + + } } } } @@ -604,7 +623,11 @@ extension VRVideoTransformController { let asset = AVAsset(url: url) guard let exportSession = AVAssetExportSession(asset: asset, presetName: AVAssetExportPresetPassthrough) else { - print("Failed to create export session") +// print("Failed to create export session") + DispatchQueue.main.async { + self.progressView?.updateInfo(title: "转码失败", desc: "导出会话创建失败") + } + completion(nil) return } @@ -613,7 +636,10 @@ extension VRVideoTransformController { let videoTrack = composition.addMutableTrack(withMediaType: .video, preferredTrackID: kCMPersistentTrackID_Invalid) guard let assetTrack = asset.tracks(withMediaType: .video).first else { - print("Failed to get video track from asset") +// print("Failed to get video track from asset") + DispatchQueue.main.async { + self.progressView?.updateInfo(title: "转码失败", desc: "未能成功加载视频轨道") + } completion(nil) return } @@ -621,7 +647,10 @@ extension VRVideoTransformController { do { try videoTrack?.insertTimeRange(CMTimeRange(start: .zero, duration: asset.duration), of: assetTrack, at: .zero) } catch { - print("Failed to insert video track into composition") +// print("Failed to insert video track into composition") + DispatchQueue.main.async { + self.progressView?.updateInfo(title: "转码失败", desc: "未能成功插入视频轨道") + } completion(nil) return } @@ -673,14 +702,20 @@ extension VRVideoTransformController { guard let writer = try? AVAssetWriter(outputURL: outputURL, fileType: AVFileType.mp4) else { print("Failed to create AVAssetWriter") +// DispatchQueue.main.async { +// SVProgressHUD.showInfo(withStatus: "视频转码失败") +// } DispatchQueue.main.async { - SVProgressHUD.showInfo(withStatus: "视频转码失败") + self.progressView?.updateInfo(title: "转码失败", desc: "创建媒体写入失败") } completion(nil) return } writer.add(writerInput) + DispatchQueue.main.async { + self.progressView?.updateProgress(value: 1) + } exportSession.videoComposition = AVMutableVideoComposition(propertiesOf: composition) exportSession.outputFileType = AVFileType.mov @@ -698,12 +733,14 @@ extension VRVideoTransformController { if let error = exportSession.error { print("Export failed with error: \(error.localizedDescription)") DispatchQueue.main.async { - SVProgressHUD.showInfo(withStatus: "视频导出失败:\(error.localizedDescription)") +// SVProgressHUD.showInfo(withStatus: "视频导出失败:\(error.localizedDescription)") + self.progressView?.updateInfo(title: "转码完成", desc: "导出内容失败") } } else { print("Export failed") DispatchQueue.main.async { - SVProgressHUD.showInfo(withStatus: "视频导出失败") +// SVProgressHUD.showInfo(withStatus: "视频导出失败") + self.progressView?.updateInfo(title: "转码完成", desc: "导出内容失败") } } @@ -711,7 +748,8 @@ extension VRVideoTransformController { case .cancelled: print("Export cancelled") DispatchQueue.main.async { - SVProgressHUD.showInfo(withStatus: "视频导出失败 cancelled") +// SVProgressHUD.showInfo(withStatus: "视频导出失败 cancelled") + self.progressView?.updateInfo(title: "转码完成", desc: "导出内容失败") } completion(nil) default: @@ -728,13 +766,16 @@ extension VRVideoTransformController { if success { print("Video saved to album") DispatchQueue.main.async { - SVProgressHUD.showSuccess(withStatus: "视频转码成功,已保存到相册") + //SVProgressHUD.showSuccess(withStatus: "视频转码成功,已保存到相册") + self.progressView?.updateInfo(title: "转码完成", desc: "导出内容已存储到相册中") } } else { print("Failed to save video to album: \(error?.localizedDescription ?? "Unknown error")") DispatchQueue.main.async { - SVProgressHUD.showInfo(withStatus: "视频转码失败:\(error?.localizedDescription ?? "Unknown error")") + //SVProgressHUD.showInfo(withStatus: "视频转码失败:\(error?.localizedDescription ?? "Unknown error")") + self.progressView?.updateInfo(title: "转码完成", desc: "导出内容失败") } + } } } diff --git a/SwiftProject/SwiftProject/Project/Util/SpatialVideoConvertor.swift b/SwiftProject/SwiftProject/Project/Util/SpatialVideoConvertor.swift index 3cf6a42..24fa39e 100644 --- a/SwiftProject/SwiftProject/Project/Util/SpatialVideoConvertor.swift +++ b/SwiftProject/SwiftProject/Project/Util/SpatialVideoConvertor.swift @@ -136,7 +136,7 @@ class SpatialVideoConvertor { vw = VideoWriter(url: outputFile, width: Int(cwidth), height: Int(cheight), orientation: orientation, sessionStartTime: CMTimeMake(value: 0, timescale: 1), isRealTime: true, queue: .main) } _ = vw!.add(image: newpb!, presentationTime: time) - print( "Added frame at \(time)") +// print( "Added frame at \(time)") // callback with progress progress?( Float(time.value)/Float(duration.value),false) diff --git a/SwiftProject/SwiftProject/Project/View/Progress/CCTransformProgressPopView.swift b/SwiftProject/SwiftProject/Project/View/Progress/CCTransformProgressPopView.swift index 60c7fc4..9f61e22 100644 --- a/SwiftProject/SwiftProject/Project/View/Progress/CCTransformProgressPopView.swift +++ b/SwiftProject/SwiftProject/Project/View/Progress/CCTransformProgressPopView.swift @@ -17,7 +17,7 @@ class CCTransformProgressPopView: UIView { lazy var iconImageView: UIImageView = { let imageView = UIImageView() - imageView.image = UIImage.init(named: "info_step_head_img_default") + imageView.image = UIImage.init(named: "asset_exporting") // imageView.layer.cornerRadius = KHZSize(40) // imageView.clipsToBounds = true // imageView.layer.borderWidth = KHZSize(2) @@ -48,7 +48,7 @@ class CCTransformProgressPopView: UIView { label.backgroundColor = UIColor.clear label.font = KFont_Medium(18) label.textColor = KTextColor_White - label.text = "10%" + label.text = "0%" return label }() @@ -99,9 +99,9 @@ class CCTransformProgressPopView: UIView { override init(frame: CGRect) { super.init(frame: frame) - progressView.progress = 0.5 //默认进度50% + progressView.progress = 0.0 //默认进度50% - self.backgroundColor = .clear + self.backgroundColor = KColorFromRGB(rgbValue: 0x000000, alpha: 0.9) //加载 self.addSubview(iconImageView) @@ -116,7 +116,7 @@ class CCTransformProgressPopView: UIView { //布局 iconImageView.snp.makeConstraints { (make) in make.centerX.equalTo(self.snp.centerX) - make.centerY.equalTo(self.snp.centerY) + make.centerY.equalTo(self.snp.centerY).offset(KVZSize(-60)) make.width.equalTo(KHZSize(232)) make.height.equalTo(KHZSize(176)) } @@ -158,23 +158,43 @@ class CCTransformProgressPopView: UIView { } } - - func updateProgress(value:CGFloat) { - if value > 0.9 { - titleLabel.text = "导出成功" - detailLabel.text = "导出内容以存储到相册中" - progressLabel.text = "100%" + func resetUI() { + titleLabel.text = "导出中..." + detailLabel.text = "请不要锁屏或者退出APP" + progressLabel.text = "0%" + transformButton.isHidden = true + closeButton.isHidden = true + progressView.progress = Float(0) + progressView.isHidden = false + progressLabel.isHidden = false + } + func updateProgress(value:Float) { + + if value > 0.98 { + titleLabel.text = "转码完成" + detailLabel.text = "正在导出内容至相册中"//"导出内容已存储到相册中" + progressLabel.isHidden = true transformButton.setTitle("继续转码", for: .normal) - }else{ - titleLabel.text = "导出中..." - detailLabel.text = "请不要锁屏或者退出APP" - progressLabel.text = "10%" - transformButton.setTitle("转码导出", for: .normal) + transformButton.isHidden = false + closeButton.isHidden = false + progressView.isHidden = true + iconImageView.image = UIImage.init(named: "asset_exported") - + }else{ + titleLabel.text = "转码中..." + detailLabel.text = "请不要锁屏或者退出APP" + progressLabel.text = String.init(format: "%.f%%", value*100) + transformButton.isHidden = true + closeButton.isHidden = true + progressView.progress = value } } + func updateInfo(title:String,desc:String) { + titleLabel.text = title + detailLabel.text = desc + } + @objc func transformButtonAction(_ btn:UIButton) { print("点击了确认")