Selaa lähdekoodia

1,视频+图片 ,图片播放不全问题

jsonwang 3 vuotta sitten
vanhempi
commit
076d0d3b7b

+ 31 - 45
BFFramework/Classes/Stuckpoint/Controller/PQStuckPointEditerController.swift

@@ -69,6 +69,11 @@ class PQStuckPointEditerController: PQBaseViewController {
     var finallyStuckPoints: Array = Array<Float>.init()
     // 最终使用的音频时长
     var finallyUserAudioTime: Float = 0.0
+    
+    // 注意推荐时间位置和后面最近的卡点时间与0.3的关系
+    // 保存丢卡点处理后的卡点信息推荐开始到最后倒数第二个
+    // 经过档位处理后的卡点信息
+    var stuckPointsTemp: Array = Array<Float>.init()
     // 下一步
     lazy var nextBtn: UIButton = {
         let nextBtn = UIButton(type: .custom)
@@ -1150,12 +1155,6 @@ extension PQStuckPointEditerController {
                         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)
-
-//                                var realUsedMusicDuration = 0.0
-                                
-//                                if(model == .createStickersModelOnlyMusic){
-//                                    sticker.clipCount = 1
-//                                }
                                 BFLog(message: "单个视频\(sticker.locationPath)时长::\(CMTimeGetSeconds(asset.duration)) ,clipNum is:\(sticker.clipCount)")
                                 var lastOutTime: Float64 = 0.0
                                 for clipindex in 0 ... sticker.clipCount  {
@@ -1230,13 +1229,13 @@ extension PQStuckPointEditerController {
                                 }
                                 totalClipNum = totalClipNum + sticker.clipCount
                             } else if sticker.type == StickerType.IMAGE.rawValue {
-                                if totalClipNum + 1 >= finallyStuckPoints.count {
-                                    BFLog(message: "数据出现错误!!!查正")
+                                if totalClipNum + 2 >= finallyStuckPoints.count {
+                                    BFLog(message: "数据出现错误!!!查正")//155.318253
                                     break
                                 }
                                 sticker.generateDefaultValues()
-                                sticker.timelineIn = Float64(finallyStuckPoints[totalClipNum])
-                                sticker.timelineOut = Float64(finallyStuckPoints[totalClipNum + 1])
+                                sticker.timelineIn = Float64(finallyStuckPoints[totalClipNum + 1])
+                                sticker.timelineOut = Float64(finallyStuckPoints[totalClipNum + 2])
                                 totalClipNum = totalClipNum + 1
                                 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)")
@@ -1258,7 +1257,7 @@ extension PQStuckPointEditerController {
         // 推荐卡点数
         var stuckPoints: Array = Array<Float>.init()
 
-        var stuckPointsTemp = Array<Float>.init()
+        var pointsTemp = Array<Float>.init()
         //
         // 最后一个卡点时间(原推荐卡点的倒数第二位时间)
         let lastPoint = Float((stuckPointMusicData!.rhythmSdata[0].pointTimes[stuckPointMusicData!.rhythmSdata[0].pointTimes.count - 1])) / Float(BASE_FILTER_TIMESCALE)
@@ -1266,7 +1265,7 @@ extension PQStuckPointEditerController {
         for (index, dunshu) in stuckPointMusicData!.rhythmSdata[0].pointTimes.enumerated() {
             if Float64(dunshu) / Float64(BASE_FILTER_TIMESCALE) > (stuckPointMusicData?.startTime ?? 0) && Float64(dunshu) / Float64(BASE_FILTER_TIMESCALE) < Float64(lastPoint) {
                 BFLog(message: "原所有卡点数:\(index) \(Float(dunshu) / Float(BASE_FILTER_TIMESCALE))")
-                stuckPointsTemp.append(Float(dunshu) / Float(BASE_FILTER_TIMESCALE))
+                pointsTemp.append(Float(dunshu) / Float(BASE_FILTER_TIMESCALE))
             }
         }
 
@@ -1279,10 +1278,10 @@ extension PQStuckPointEditerController {
          */
         // 不丢
         if seed == 1 {
-            stuckPoints = stuckPointsTemp
+            stuckPoints = pointsTemp
         } else {
             // 根据档位要丢
-            for (index, point) in stuckPointsTemp.enumerated() {
+            for (index, point) in pointsTemp.enumerated() {
                 if index % seed == 0 {
                     stuckPoints.append(point)
                 }
@@ -1311,6 +1310,12 @@ extension PQStuckPointEditerController {
     
     func clipPoint(clipCount:Int,oldPoints: Array<Float>)  {
         BFLog(message: "拼接卡点数:\(clipCount)")
+        
+        //如果是第一次拼接先补第0位
+        if(finallyStuckPoints.count == 0){
+            finallyStuckPoints.append(stuckPointsTemp.first ?? 0.0)
+            
+        }
         for i in finallyStuckPoints.count...clipCount + finallyStuckPoints.count  {
  
             if ((i % (oldPoints.count - 1)) != 0){
@@ -1327,10 +1332,7 @@ extension PQStuckPointEditerController {
     func dealParameter(model: createStickersModel) {
         // 清空上一次使用的卡点数据
         finallyStuckPoints.removeAll()
-        // 注意推荐时间位置和后面最近的卡点时间与0.3的关系
-        // 保存丢卡点处理后的卡点信息推荐开始到最后倒数第二个
-        let stuckPointsTemp: Array<Float>
-
+     
         // 已经取到的视频素材总长度,用于和原视频素材时长做对比,不够多加一个点
         var useAssestDuration: Float = 0.0
         switch model {
@@ -1360,7 +1362,7 @@ extension PQStuckPointEditerController {
                 }
 
                 // 拼接要使用的卡点信息
-                finallyStuckPoints.append(stuckPointsTemp.first ?? 0.0)
+           
                 clipPoint(clipCount:clipNum , oldPoints: stuckPointsTemp)
             }
    
@@ -1450,12 +1452,7 @@ extension PQStuckPointEditerController {
                                 BFLog(message: "卡点数据有错误!!!")
                                 return
                             }
-                            
-                            if(finallyStuckPoints.count == 0){
-                                finallyStuckPoints.append(stuckPointsTemp.first ?? 0.0)
-                                
-                            }
-                           
+             
                             //sticker.clipCount + 1 是都先补一位,当不用补时删除最后多的一位
                             clipPoint(clipCount: sticker.clipCount , oldPoints: stuckPointsTemp)
                             BFLog(message: "finallyStuckPoints\(finallyStuckPoints)")
@@ -1509,27 +1506,16 @@ extension PQStuckPointEditerController {
             break
         }
         // 拼接图片所使用的时长.选择一组图片 按图片数量计算卡点的总时长
-        var oneSelectImageDuration:Float = 0.0
         if selectedImageDataCount > 0 {
-            //二,最一个卡点在原数组中的位置,从这个位置开始拼接图片所要使用的卡点
-            var pointIndex = stuckPointsTemp.firstIndex(where: { (point) -> Bool in
-                (point == (finallyStuckPoints.last ?? 0).truncatingRemainder(dividingBy: (stuckPointsTemp.last ?? 0)))
-            })
-            pointIndex = (pointIndex ?? 0)
-
-            var tempStartTime:Float = -1
-            var tempEndTime:Float = -1
-            for i in 0 ... selectedImageDataCount {
-                let a = stuckPointsTemp[(i + Int(pointIndex ?? 0)) % stuckPointsTemp.count]
-                let b = Float((i + Int(pointIndex ?? 0)) / stuckPointsTemp.count) * (stuckPointsTemp.first ?? 0)
-                finallyStuckPoints.append(a + b)
-                if(tempStartTime == -1){
-                    tempStartTime = a + b
-                }
-                tempEndTime = a + b
-               
-            }
-            oneSelectImageDuration = tempEndTime - tempStartTime
+            clipPoint(clipCount:selectedImageDataCount - 1, oldPoints: stuckPointsTemp)
+  
+        }
+        
+        //全是图片时数组里放着的一定都是图片的使用的卡点
+        //定义一次循环的总时长
+        var oneSelectImageDuration:Float = 0.0
+        if(selectedDataCount == selectedImageDataCount){
+            oneSelectImageDuration = (finallyStuckPoints.last ?? 0) - (finallyStuckPoints.first ?? 0)
         }
 
         // 3)素材全是图片时如果时长 < 10s要做轮播处理