From c38e6a78deecad4762b8d7addbefa88f84ee5262 Mon Sep 17 00:00:00 2001 From: Zhihai Zhu <> Date: Sat, 20 Apr 2024 11:39:52 +0800 Subject: [PATCH] =?UTF-8?q?=E6=B3=A8=E9=87=8A=E6=9C=AA=E4=BD=BF=E7=94=A8?= =?UTF-8?q?=E7=9A=84=E4=BB=A3=E7=A0=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SwiftProject.xcodeproj/project.pbxproj | 8 ++------ .../UserInterfaceState.xcuserstate | Bin 30799 -> 35935 bytes .../ZZHCustomPlayer.swift | 6 +++--- .../ZZHCustomPlayerForVideoTask.swift | 10 +++++----- ...ZZHCustomVideoCompositionInstruction.swift | 0 .../ZZHCustomVideoCompositor.swift | 10 +++++----- .../Util/PlayByTransferConvertor.swift | 12 ++++++------ 7 files changed, 21 insertions(+), 25 deletions(-) rename SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/{ => deapt}/ZZHCustomVideoCompositionInstruction.swift (100%) rename SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/{ => deapt}/ZZHCustomVideoCompositor.swift (88%) diff --git a/SwiftProject/SwiftProject.xcodeproj/project.pbxproj b/SwiftProject/SwiftProject.xcodeproj/project.pbxproj index 2071191..97abac5 100644 --- a/SwiftProject/SwiftProject.xcodeproj/project.pbxproj +++ b/SwiftProject/SwiftProject.xcodeproj/project.pbxproj @@ -19,8 +19,6 @@ 006B61D32BBAA938003FCB49 /* StoreKit.framework in Frameworks */ = {isa = PBXBuildFile; fileRef = 006B61D22BBAA938003FCB49 /* StoreKit.framework */; }; 006B61DC2BBCFAC4003FCB49 /* CustomSheetController.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006B61DB2BBCFAC4003FCB49 /* CustomSheetController.swift */; }; 006B61DE2BBCFB45003FCB49 /* CustomSheetCell.swift in Sources */ = {isa = PBXBuildFile; fileRef = 006B61DD2BBCFB45003FCB49 /* CustomSheetCell.swift */; }; - 0072361F2BD13B9D000595A9 /* ZZHCustomVideoCompositor.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0072361E2BD13B9D000595A9 /* ZZHCustomVideoCompositor.swift */; }; - 007236212BD13C75000595A9 /* ZZHCustomVideoCompositionInstruction.swift in Sources */ = {isa = PBXBuildFile; fileRef = 007236202BD13C75000595A9 /* ZZHCustomVideoCompositionInstruction.swift */; }; 0073BD142BCE80F700721885 /* ZZHCustomPlayer.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0073BD132BCE80F700721885 /* ZZHCustomPlayer.swift */; }; 0073BD182BCF7B3400721885 /* ZZHCustomSlider.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0073BD172BCF7B3400721885 /* ZZHCustomSlider.swift */; }; 0073BD1A2BCFC8E800721885 /* ZZHCustomPlayerForVideoTask.swift in Sources */ = {isa = PBXBuildFile; fileRef = 0073BD192BCFC8E800721885 /* ZZHCustomPlayerForVideoTask.swift */; }; @@ -296,6 +294,8 @@ children = ( 0073BD1B2BCFCC4500721885 /* CCSpatialVideoDisplayController1.swift */, 0073BD1D2BCFCC6900721885 /* CCSpatialVideoDisplayForVideoTask1.swift */, + 0072361E2BD13B9D000595A9 /* ZZHCustomVideoCompositor.swift */, + 007236202BD13C75000595A9 /* ZZHCustomVideoCompositionInstruction.swift */, ); path = deapt; sourceTree = ""; @@ -318,8 +318,6 @@ 0073BD132BCE80F700721885 /* ZZHCustomPlayer.swift */, 0073BD192BCFC8E800721885 /* ZZHCustomPlayerForVideoTask.swift */, 0073BD172BCF7B3400721885 /* ZZHCustomSlider.swift */, - 0072361E2BD13B9D000595A9 /* ZZHCustomVideoCompositor.swift */, - 007236202BD13C75000595A9 /* ZZHCustomVideoCompositionInstruction.swift */, ); path = CCSpatialVideoDisplayController; sourceTree = ""; @@ -822,7 +820,6 @@ 009DFB0E2BC8CFA2007B56E8 /* FeedbackView.swift in Sources */, AF2120C42B4E95DA00400B7F /* UIImage+Add.swift in Sources */, 1EFAF0C02B8B7A59002A1773 /* VRPhotoTransformController.swift in Sources */, - 0072361F2BD13B9D000595A9 /* ZZHCustomVideoCompositor.swift in Sources */, AF2120D82B4E9AC500400B7F /* CCAddImageView.swift in Sources */, 00D33BF42B998BF700604A44 /* SpatialImageConvertor.swift in Sources */, 006B61CA2BBA4B0D003FCB49 /* MembershipVC.swift in Sources */, @@ -859,7 +856,6 @@ AF2120E62B4E9DE000400B7F /* CCTableSwitchView.swift in Sources */, 0096624D2BB3BA3B00FCA65F /* ZZHExternalViewController.swift in Sources */, 00D33BFA2B9AB21A00604A44 /* ZZHAVExtension.swift in Sources */, - 007236212BD13C75000595A9 /* ZZHCustomVideoCompositionInstruction.swift in Sources */, 009661F82BAD6C7100FCA65F /* CCSpaceAlbumFilterPopView2.swift in Sources */, 009DFB132BC8EA90007B56E8 /* MenuVCCell.swift in Sources */, AF2120E02B4E9C8000400B7F /* Timer+Add.swift in Sources */, diff --git a/SwiftProject/SwiftProject.xcworkspace/xcuserdata/zhihaizhu.xcuserdatad/UserInterfaceState.xcuserstate b/SwiftProject/SwiftProject.xcworkspace/xcuserdata/zhihaizhu.xcuserdatad/UserInterfaceState.xcuserstate index 2b822ac4695341e947c47839cfcdb6ba0feccb83..571278021698be5b25a803c3cc9466df986dfc4c 100644 GIT binary patch literal 35935 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 diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift index 1f988ee..99c2aec 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayer.swift @@ -28,17 +28,17 @@ class ZZHCustomPlayer: UIView { var assetReader:AVAssetReader? var assetOutput:AVAssetReaderTrackOutput? { didSet { - custominstruction?.assetOutput = assetOutput +// custominstruction?.assetOutput = assetOutput } } - var custominstruction:ZZHCustomVideoCompositionInstruction? +// var custominstruction:ZZHCustomVideoCompositionInstruction? let videoTranserConvertor = PlayByTransferConvertor() var selectedIndex:SpatialType = .parallelEyes//记录当前选择的菜单选项 { didSet{ //进行相应解码操作,边解边播 - custominstruction?.selectedIndex = selectedIndex +// custominstruction?.selectedIndex = selectedIndex } } diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift index c89a781..36682c9 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomPlayerForVideoTask.swift @@ -100,26 +100,26 @@ extension ZZHCustomPlayer { var presentTime:CMTime? = nil switch mode { case .crossedEyes://交叉眼 - (ciImg,presentTime) = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime) + ciImg = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime) break case .fsbs://3d全宽 - (ciImg,presentTime) = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime) + ciImg = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime) break case .hsbs://3d半宽 - (ciImg,presentTime) = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime) + ciImg = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime) break case .parallelEyes://平行眼 - (ciImg,presentTime) = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime) + ciImg = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime) break case .redBlueSolid://红蓝立体 - (ciImg,presentTime) = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime) + ciImg = self.videoTranserConvertor.convertVideo(asset: self.videoOriginalAsset, assetOutput: ao, type: self.selectedIndex, time: compositionTime) break default: break diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomVideoCompositionInstruction.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/deapt/ZZHCustomVideoCompositionInstruction.swift similarity index 100% rename from SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomVideoCompositionInstruction.swift rename to SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/deapt/ZZHCustomVideoCompositionInstruction.swift diff --git a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomVideoCompositor.swift b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/deapt/ZZHCustomVideoCompositor.swift similarity index 88% rename from SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomVideoCompositor.swift rename to SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/deapt/ZZHCustomVideoCompositor.swift index 56397d5..892a3d5 100644 --- a/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/ZZHCustomVideoCompositor.swift +++ b/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/deapt/ZZHCustomVideoCompositor.swift @@ -137,26 +137,26 @@ final class ZZHCustomVideoCompositor: NSObject, AVVideoCompositing { var presentTime:CMTime? = nil switch mode { case .crossedEyes://交叉眼 - (ciImg,presentTime) = self.videoTranserConvertor.convertVideo(asset: videoOriginalAsset, assetOutput: ao, type:mode, time: compositionTime) + ciImg = self.videoTranserConvertor.convertVideo(asset: videoOriginalAsset, assetOutput: ao, type:mode, time: compositionTime) break case .fsbs://3d全宽 - (ciImg,presentTime) = self.videoTranserConvertor.convertVideo(asset: videoOriginalAsset, assetOutput: ao, type: mode, time: compositionTime) + ciImg = self.videoTranserConvertor.convertVideo(asset: videoOriginalAsset, assetOutput: ao, type: mode, time: compositionTime) break case .hsbs://3d半宽 - (ciImg,presentTime) = self.videoTranserConvertor.convertVideo(asset: videoOriginalAsset, assetOutput: ao, type: mode, time: compositionTime) + ciImg = self.videoTranserConvertor.convertVideo(asset: videoOriginalAsset, assetOutput: ao, type: mode, time: compositionTime) break case .parallelEyes://平行眼 - (ciImg,presentTime) = self.videoTranserConvertor.convertVideo(asset: videoOriginalAsset, assetOutput: ao, type: mode, time: compositionTime) + ciImg = self.videoTranserConvertor.convertVideo(asset: videoOriginalAsset, assetOutput: ao, type: mode, time: compositionTime) break case .redBlueSolid://红蓝立体 - (ciImg,presentTime) = self.videoTranserConvertor.convertVideo(asset: videoOriginalAsset, assetOutput: ao, type: mode, time: compositionTime) + ciImg = self.videoTranserConvertor.convertVideo(asset: videoOriginalAsset, assetOutput: ao, type: mode, time: compositionTime) break default: break diff --git a/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift b/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift index 20ae8a9..cf49fd9 100644 --- a/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift +++ b/SwiftProject/SwiftProject/Project/Util/PlayByTransferConvertor.swift @@ -14,14 +14,14 @@ import ImageIO class PlayByTransferConvertor { - func convertVideo(asset:AVAsset, assetOutput:AVAssetReaderTrackOutput,type:SpatialType,time: CMTime)->(CIImage?,CMTime?) { + func convertVideo(asset:AVAsset, assetOutput:AVAssetReaderTrackOutput,type:SpatialType,time: CMTime)->(CIImage?) { var newpb:CIImage? = nil - var presentationTime:CMTime? = nil - print("sta.....>>>>>>>thread") +// var presentationTime:CMTime? = nil +// print("sta.....>>>>>>>thread") while let nextSampleBuffer = assetOutput.copyNextSampleBuffer() { - presentationTime = CMSampleBufferGetPresentationTimeStamp(nextSampleBuffer) - print("presentationTime: \(presentationTime) \ntime: \(time)") + var presentationTime = CMSampleBufferGetPresentationTimeStamp(nextSampleBuffer) +// print("presentationTime: \(presentationTime) \ntime: \(time)") // if presentationTime! > time {//如果当前获取的buffer的时间>time的时间,则直接返回即可 // print("如果当前获取的buffer的时间>time的时间,则直接返回即可...") // break @@ -85,7 +85,7 @@ class PlayByTransferConvertor { } } // print("PlayByTransferConvertor 测试看是否有返回....") - return (newpb,presentationTime) + return (newpb) }