|
@@ -55,15 +55,15 @@ public class PQGPUImagePlayerView: UIView, RenderViewDelegate {
|
|
|
|
|
|
// 自动隐藏边框
|
|
|
var isAutoHiden: Bool = false
|
|
|
-
|
|
|
- //是否显示边框
|
|
|
- var isShowLine:Bool = true
|
|
|
+
|
|
|
+ // 是否显示边框
|
|
|
+ var isShowLine: Bool = true
|
|
|
|
|
|
// 播放进度
|
|
|
public var playbackTimeChangeClosure: ((_ time: TimeInterval) -> Void)?
|
|
|
// 参数说明:1,当前时间 2,总时长 3,进度
|
|
|
public var progress: ((Double, Double, Double) -> Void)?
|
|
|
-
|
|
|
+
|
|
|
/// 预览区域点击回调
|
|
|
var renderViewOnClickHandle: (() -> Void)?
|
|
|
|
|
@@ -139,18 +139,18 @@ public class PQGPUImagePlayerView: UIView, RenderViewDelegate {
|
|
|
var playerEmptyView: UIImageView!
|
|
|
|
|
|
var borderLayer: CAShapeLayer?
|
|
|
-
|
|
|
- var mPlayeTimeRange:CMTimeRange?
|
|
|
-
|
|
|
+
|
|
|
+ var mPlayeTimeRange: CMTimeRange?
|
|
|
+
|
|
|
var mStickers: [PQEditVisionTrackMaterialsModel]?
|
|
|
-
|
|
|
- //最后一次显示的sticker
|
|
|
- var lastshowSticker:PQEditVisionTrackMaterialsModel?
|
|
|
-
|
|
|
- //是否显示时间条
|
|
|
- var showProgressLab:Bool = true
|
|
|
-
|
|
|
- var cacheFilters:Array<PQBaseFilter> = Array.init()
|
|
|
+
|
|
|
+ // 最后一次显示的sticker
|
|
|
+ var lastshowSticker: PQEditVisionTrackMaterialsModel?
|
|
|
+
|
|
|
+ // 是否显示时间条
|
|
|
+ var showProgressLab: Bool = true
|
|
|
+
|
|
|
+ var cacheFilters: [PQBaseFilter] = Array()
|
|
|
|
|
|
// 渲染区view
|
|
|
private lazy var renderView: RenderView = {
|
|
@@ -160,14 +160,13 @@ public class PQGPUImagePlayerView: UIView, RenderViewDelegate {
|
|
|
view.delegate = self
|
|
|
let tap = UITapGestureRecognizer(target: self, action: #selector(RenderViewOnclick))
|
|
|
view.addGestureRecognizer(tap)
|
|
|
-
|
|
|
return view
|
|
|
}()
|
|
|
|
|
|
// 暂停播放view
|
|
|
lazy var playView: UIImageView = {
|
|
|
let view = UIImageView(frame: CGRect(x: (self.frame.size.width - 52) / 2, y: (self.frame.size.height - 52) / 2, width: 52, height: 52))
|
|
|
- view.image = UIImage.init().BF_Image(named: "gpuplayBtn")
|
|
|
+ view.image = UIImage().BF_Image(named: "gpuplayBtn")
|
|
|
view.isHidden = true
|
|
|
return view
|
|
|
|
|
@@ -218,7 +217,7 @@ public class PQGPUImagePlayerView: UIView, RenderViewDelegate {
|
|
|
|
|
|
playerEmptyView = UIImageView(frame: bounds)
|
|
|
playerEmptyView.backgroundColor = .black
|
|
|
- playerEmptyView.image = UIImage.init().BF_Image(named: "playEmpty")
|
|
|
+ playerEmptyView.image = UIImage().BF_Image(named: "playEmpty")
|
|
|
playerEmptyView.contentMode = .center
|
|
|
addSubview(playerEmptyView)
|
|
|
|
|
@@ -275,7 +274,7 @@ public class PQGPUImagePlayerView: UIView, RenderViewDelegate {
|
|
|
|
|
|
self.frame = frame
|
|
|
|
|
|
- if(isShowLine){
|
|
|
+ if isShowLine {
|
|
|
showBorderLayer()
|
|
|
}
|
|
|
|
|
@@ -298,15 +297,13 @@ public class PQGPUImagePlayerView: UIView, RenderViewDelegate {
|
|
|
if status == .playing {
|
|
|
playView.isHidden = false
|
|
|
pause()
|
|
|
-
|
|
|
|
|
|
} else if status == .stop || status == .pause {
|
|
|
playView.isHidden = true
|
|
|
-
|
|
|
+
|
|
|
movie?.resume()
|
|
|
speaker?.start()
|
|
|
status = .playing
|
|
|
-
|
|
|
}
|
|
|
if renderViewOnClickHandle != nil {
|
|
|
renderViewOnClickHandle!()
|
|
@@ -380,17 +377,17 @@ public class PQGPUImagePlayerView: UIView, RenderViewDelegate {
|
|
|
guard let movie = movie else { return }
|
|
|
movie.progress = { [weak self, movie] currTime, duration, prgressValue in
|
|
|
guard let strongSelf = self else { return }
|
|
|
-
|
|
|
+
|
|
|
self?.findShowStikcer(currTime: movie.currentTime.seconds)
|
|
|
-
|
|
|
+
|
|
|
self?.progress?(currTime, duration, prgressValue)
|
|
|
-
|
|
|
+
|
|
|
DispatchQueue.main.async {
|
|
|
strongSelf.playbackTime = movie.currentTime.seconds
|
|
|
|
|
|
// Non-main thread change this property is not valid
|
|
|
strongSelf.animationLayer?.timeOffset = strongSelf.playbackTime
|
|
|
- if(strongSelf.showProgressLab){
|
|
|
+ if strongSelf.showProgressLab {
|
|
|
if duration < 1 {
|
|
|
strongSelf.progressLab.text = "\(currTime.formatDurationToHMS()) / 00:01"
|
|
|
} else {
|
|
@@ -412,67 +409,56 @@ public class PQGPUImagePlayerView: UIView, RenderViewDelegate {
|
|
|
|
|
|
applyFilters()
|
|
|
}
|
|
|
-
|
|
|
- func findShowStikcer(currTime:Float64) {
|
|
|
-
|
|
|
- if(mStickers?.count ?? 0 == 0){
|
|
|
+
|
|
|
+ func findShowStikcer(currTime: Float64) {
|
|
|
+ if mStickers?.count ?? 0 == 0 {
|
|
|
BFLog(message: "mStickers data is error")
|
|
|
return
|
|
|
}
|
|
|
- var currentSticker:PQEditVisionTrackMaterialsModel?
|
|
|
- var currentIdenx:Int = 0
|
|
|
+ var currentSticker: PQEditVisionTrackMaterialsModel?
|
|
|
+ var currentIdenx: Int = 0
|
|
|
for (index, sticker) in mStickers!.enumerated() {
|
|
|
-
|
|
|
- if(sticker.timelineIn <= currTime && sticker.timelineOut >= currTime){
|
|
|
+ if sticker.timelineIn <= currTime, sticker.timelineOut >= currTime {
|
|
|
currentSticker = sticker
|
|
|
currentIdenx = index
|
|
|
-
|
|
|
+
|
|
|
break
|
|
|
}
|
|
|
}
|
|
|
- //创建不同的filter
|
|
|
- if(currentSticker == nil){
|
|
|
+ // 创建不同的filter
|
|
|
+ if currentSticker == nil {
|
|
|
BFLog(message: "sticker data is error")
|
|
|
return
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
-
|
|
|
- //
|
|
|
- if(movie != nil && currentSticker != lastshowSticker){
|
|
|
-
|
|
|
+
|
|
|
+ //
|
|
|
+ if movie != nil && currentSticker != lastshowSticker {
|
|
|
BFLog(message: "sticker timelineIn is: \(currentSticker!.timelineIn) timelineOut \(currentSticker!.timelineOut) in is :\(currentSticker!.model_in) in out is :\(currentSticker!.out) sticker location::: \(String(describing: currentSticker?.locationPath))")
|
|
|
-
|
|
|
- var showFitler:PQBaseFilter?
|
|
|
+
|
|
|
+ var showFitler: PQBaseFilter?
|
|
|
if currentSticker!.type == StickerType.VIDEO.rawValue {
|
|
|
showFitler = PQMoveFilter(movieSticker: currentSticker!)
|
|
|
-
|
|
|
|
|
|
} else if currentSticker!.type == StickerType.IMAGE.rawValue {
|
|
|
showFitler = PQImageFilter(sticker: currentSticker!)
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
movie!.removeAllTargets()
|
|
|
let currentTarget: ImageSource = movie!
|
|
|
//
|
|
|
currentTarget.addTarget(showFitler!, atTargetIndex: 0)
|
|
|
//
|
|
|
showFitler?.addTarget(renderView, atTargetIndex: 0)
|
|
|
-
|
|
|
+
|
|
|
lastshowSticker = currentSticker
|
|
|
}
|
|
|
-
|
|
|
-
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
/// 设置 filter 是否为 seek 状态
|
|
|
- func setEnableSeek(isSeek:Bool) {
|
|
|
-
|
|
|
+ func setEnableSeek(isSeek: Bool) {
|
|
|
for filter in filters {
|
|
|
(filter as? PQBaseFilter)?.enableSeek = isSeek
|
|
|
}
|
|
|
-
|
|
|
}
|
|
|
|
|
|
private func applyFilters() {
|
|
@@ -493,9 +479,8 @@ public class PQGPUImagePlayerView: UIView, RenderViewDelegate {
|
|
|
public extension PQGPUImagePlayerView {
|
|
|
/// 开始播放
|
|
|
/// - Parameter pauseFirstFrame: 是否暂停到第一帧
|
|
|
- func play(pauseFirstFrame: Bool = false, playeTimeRange:CMTimeRange = CMTimeRange.init()) {
|
|
|
+ func play(pauseFirstFrame: Bool = false, playeTimeRange: CMTimeRange = CMTimeRange()) {
|
|
|
DispatchQueue.main.async {
|
|
|
-
|
|
|
self.playerEmptyView.isHidden = true
|
|
|
self.playView.isHidden = !pauseFirstFrame
|
|
|
self.renderView.isHidden = false
|
|
@@ -505,21 +490,19 @@ public extension PQGPUImagePlayerView {
|
|
|
// BFLog(message: "已经是播放状态")
|
|
|
// return
|
|
|
// }
|
|
|
-
|
|
|
- //如果没有设置开始结束时长 使用默认音频总时长(创作工具就不会传值)
|
|
|
- if(CMTIMERANGE_IS_INVALID(playeTimeRange)){
|
|
|
-
|
|
|
- let endTime = CMTime.init(value: CMTimeValue(CMTimeGetSeconds(self.asset?.duration ?? .zero) * 600), timescale: 600)
|
|
|
- mPlayeTimeRange = CMTimeRange(start: .zero, end:endTime)
|
|
|
-
|
|
|
- }else{
|
|
|
-
|
|
|
+
|
|
|
+ // 如果没有设置开始结束时长 使用默认音频总时长(创作工具就不会传值)
|
|
|
+ if CMTIMERANGE_IS_INVALID(playeTimeRange) {
|
|
|
+ let endTime = CMTime(value: CMTimeValue(CMTimeGetSeconds(asset?.duration ?? .zero) * 600), timescale: 600)
|
|
|
+ mPlayeTimeRange = CMTimeRange(start: .zero, end: endTime)
|
|
|
+
|
|
|
+ } else {
|
|
|
mPlayeTimeRange = playeTimeRange
|
|
|
}
|
|
|
- //清空音频缓存
|
|
|
+ // 清空音频缓存
|
|
|
speaker?.clearBuffer()
|
|
|
-
|
|
|
- movie?.start(timeRange:mPlayeTimeRange ?? CMTimeRange.init())
|
|
|
+
|
|
|
+ movie?.start(timeRange: mPlayeTimeRange ?? CMTimeRange())
|
|
|
|
|
|
speaker?.start()
|
|
|
|
|
@@ -530,7 +513,6 @@ public extension PQGPUImagePlayerView {
|
|
|
func seek(to time: CMTime) {
|
|
|
mPlayeTimeRange?.start = time
|
|
|
play(pauseFirstFrame: false, playeTimeRange: mPlayeTimeRange ?? .zero)
|
|
|
-
|
|
|
}
|
|
|
|
|
|
// 暂停
|
|
@@ -598,12 +580,10 @@ public extension PQGPUImagePlayerView {
|
|
|
filters.removeAll()
|
|
|
filters = newFilters
|
|
|
}
|
|
|
-
|
|
|
+
|
|
|
// // 重置所有 filer
|
|
|
// func appendStickers(stickers: [PQEditVisionTrackMaterialsModel]) {
|
|
|
//
|
|
|
// mStickers = stickers
|
|
|
// }
|
|
|
-
|
|
|
-
|
|
|
}
|