Переглянути джерело

修复视频图片混合预览时黑屏问题

huzhiqiang 3 роки тому
батько
коміт
3943d66ca7

+ 1 - 1
BFFramework/Classes/PQGPUImage/akfilters/PQImageFilter.swift

@@ -94,7 +94,7 @@ open class PQImageFilter: PQBaseFilter {
         let inputFramebuffer: Framebuffer = inputFramebuffers[0]!
         let inputSize = inputFramebuffer.sizeForTargetOrientation(.portrait)
 
-        print("renderFrame timestamp is \(inputFramebuffer.timingStyle)")
+//        print("renderFrame timestamp is \(inputFramebuffer.timingStyle)")
 
         let currTime = CMTimeGetSeconds(CMTime(value: inputFramebuffer.timingStyle.timestamp!.value, timescale: inputFramebuffer.timingStyle.timestamp!.timescale))
 

+ 6 - 13
BFFramework/Classes/PQGPUImage/akfilters/PQMovieInput.swift

@@ -87,7 +87,6 @@ public class PQMovieInput: ImageSource {
     public  var readingShouldWait = false
     public   var videoInputStatusObserver: NSKeyValueObservation?
     public var audioInputStatusObserver: NSKeyValueObservation?
-//    var audioPlayerObserver : NSKeyValueObservation?
     var avPlayerTimeObserver: NSKeyValueObservation?
     
     public var useRealtimeThreads = false
@@ -184,12 +183,8 @@ public class PQMovieInput: ImageSource {
     public convenience init(url: URL, playAtActualSpeed: Bool = false, loop: Bool = false, audioSettings: [String: Any]? = nil) throws {
         let inputAsset = AVURLAsset(url: url, options: nil)
         try self.init(asset: inputAsset, videoComposition: nil, audioMix: nil, playAtActualSpeed: playAtActualSpeed, loop: loop, audioSettings: audioSettings)
-
-      
     }
 
-  
-
     // 析构方法
     deinit {
         self.movieFramebuffer?.unlock()
@@ -259,8 +254,6 @@ public class PQMovieInput: ImageSource {
                     self.start(isFreeBuffer: true,timeRange: playeTimeRange)
                 }
             }
-          
-        
 
             if let movieOutput = self.synchronizedMovieOutput {
                 self.conditionLock.lock()
@@ -689,7 +682,7 @@ extension PQMovieInput {
         self.musicPlayRanges = ranges
         let playerItem = AVPlayerItem(url: assetUrl)
         avPlayer = AVPlayer.init(playerItem: playerItem)
-        let range = ranges.first
+//        let range = ranges.first
         // 当前版本设置无限大
         let loopCount = 10000 // ranges.count
 
@@ -702,11 +695,11 @@ extension PQMovieInput {
             }
 //            strongSelf.indexRage += 1
 
-            if strongSelf.indexRage < loopCount && strongSelf.isPlay {
+            if strongSelf.indexRage < loopCount && strongSelf.isPlay && CMTimeGetSeconds(strongSelf.playeTimeRange.end) > CMTimeGetSeconds((strongSelf.musicPlayRanges?.first!.end)!) {
                 
-                let range = ranges[strongSelf.indexRage]
-                playerItem.forwardPlaybackEndTime = range.end
-                playerItem.reversePlaybackEndTime = range.start
+                let range = strongSelf.musicPlayRanges?[strongSelf.indexRage]
+                playerItem.forwardPlaybackEndTime = range!.end
+                playerItem.reversePlaybackEndTime = range!.start
 //                HHZPrint("curr: start ********************\(CMTimeGetSeconds(range.start)) - \(playerItem.reversePlaybackEndTime) - \(playerItem.forwardPlaybackEndTime)")
                 strongSelf.avPlayer!.seek(to: playerItem.reversePlaybackEndTime) { isSuccess in
                     playerItem.seek(to: playerItem.reversePlaybackEndTime) { isSuccess in
@@ -728,7 +721,7 @@ extension PQMovieInput {
         let playerItem = self.avPlayer?.currentItem
         let rangeee = CMTimeRangeMake(start: playeTimeRange.start, duration: self.musicPlayRanges?.first?.duration ?? CMTime(value: 1200, timescale: 40))
         playerItem?.reversePlaybackEndTime = rangeee.start
-        playerItem?.forwardPlaybackEndTime = self.musicPlayRanges?.first?.end ?? CMTime(value: 4000, timescale: 40)
+        playerItem?.forwardPlaybackEndTime = CMTimeMinimum(self.musicPlayRanges?.first?.end ?? CMTime(value: 1000, timescale: 1), playeTimeRange.end)
 
         playerItem?.seek(to: playerItem!.reversePlaybackEndTime) { [weak self]_ in
             self?.avPlayer?.play()

+ 9 - 11
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointEditerController.swift

@@ -1157,13 +1157,13 @@ extension PQStuckPointEditerController {
                         BFLog(message: "stuckPoints count is \(finallyStuckPoints.count)")
 
                         // 一共裁剪的段数
-                        var totalClipNum: Int = 0
+//                        var totalClipNum: Int = 0
                         for sticker in section.sectionTimeline!.visionTrack!.getEnableVisionTrackMaterials() {
                             if sticker.type == StickerType.VIDEO.rawValue {
                                 let asset: AVURLAsset = AVURLAsset(url: URL(fileURLWithPath: documensDirectory + sticker.locationPath), options: nil)
                                 BFLog(message: "单个视频\(sticker.locationPath)时长::\(CMTimeGetSeconds(asset.duration)) ,clipNum is:\(sticker.clipCount)")
                                 var lastOutTime: Float64 = 0.0
-                                for clipindex in 0 ... sticker.clipCount {
+                                for _ in 0 ... sticker.clipCount {
                                     // deep copy sticker model 防止只有一个对象
                                     let deepCopyStickerDecoderTime: TimeInterval = Date().timeIntervalSince1970
                                     
@@ -1176,16 +1176,16 @@ extension PQStuckPointEditerController {
                                     // 当前分段的速度
                                     var tempSpeed: Float = 1.0
                                     if model == .createStickersModelSpeed {
-                                        tempSpeed = (totalClipNum + clipindex) % 2 == 0 ? maxSpeed : minSpeed
+                                        tempSpeed = (stickers.count % 2) == 0 ? maxSpeed : minSpeed
                                     }
 
-                                    if totalClipNum + clipindex + 1 < finallyStuckPoints.count {
+                                    if stickers.count + 1 < finallyStuckPoints.count {
                                         deepCopySticker?.speedRate = tempSpeed
                                         // 定义临时使用的变量
                                         // 素材显示的开始时间和结束时间
-                                        let tempTimelineIn:Float64 = Float64(String(format: "%.6f",finallyStuckPoints[totalClipNum + clipindex])) ?? 0.0
+                                        let tempTimelineIn:Float64 = Float64(String(format: "%.6f",finallyStuckPoints[stickers.count])) ?? 0.0
                                         
-                                        let timelineOut:Float64 = Float64(String(format: "%.6f",finallyStuckPoints[totalClipNum + 1 + clipindex])) ?? 0.0
+                                        let timelineOut:Float64 = Float64(String(format: "%.6f",finallyStuckPoints[stickers.count + 1])) ?? 0.0
 
                                         // 素材分割的开始时间和结束时间
                                         let tempModel_In = lastOutTime
@@ -1232,17 +1232,15 @@ extension PQStuckPointEditerController {
                                         stickers.append(deepCopySticker!)
                                     }
                                 }
-                                totalClipNum = totalClipNum + sticker.clipCount
                             } else if sticker.type == StickerType.IMAGE.rawValue {
-                                if totalClipNum + 1 >= finallyStuckPoints.count {
+                                if stickers.count + 1 >= finallyStuckPoints.count {
                                     BFLog(message: "数据出现错误!!!查正") // 155.318253
                                     break
                                 }
                                 sticker.generateDefaultValues()
                             
-                                sticker.timelineIn = Float64(String(format: "%.6f",finallyStuckPoints[totalClipNum])) ?? 0.0
-                                sticker.timelineOut = Float64(String(format: "%.6f",finallyStuckPoints[totalClipNum + 1])) ?? 0.0
-                                totalClipNum = totalClipNum + 1
+                                sticker.timelineIn = Float64(String(format: "%.6f",finallyStuckPoints[stickers.count])) ?? 0.0
+                                sticker.timelineOut = Float64(String(format: "%.6f",finallyStuckPoints[stickers.count + 1])) ?? 0.0
                                 stickers.append(sticker)
                                 BFLog(message: "测试人员创建 sticker  crilp is in 图片 \(String(format: "%.6f", sticker.model_in))  out  \(String(format: "%.6f", sticker.out)) ,分段素材时长:\(String(format: "%.6f", (sticker.out) - (sticker.model_in))) ,分段显示时长:\(String(format: "%.6f", (sticker.timelineOut) - (sticker.timelineIn))),   timelineIN: \(String(format: "%.6f", sticker.timelineIn)) timelineOUT:\(String(format: "%.6f", sticker.timelineOut)) speedRate:\(sticker.speedRate)")
                             }