杨锴
2024-11-14 1cc03dff6006c235686f87fe0f80af2fde97abf4
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
//
//  VoiceView.swift
//  XQMuse
//
//  Created by 无故事王国 on 2024/8/19.
//
 
import UIKit
import JQTools
import AVKit
import RxSwift
 
class VideoView: UIView {
 
                private var url:String?
                private var disposeBag = DisposeBag()
                private var placeHoderImageUrl:String?
 
                private(set) lazy var player: CLPlayer = {
                                let p = CLPlayer(frame: .zero) { config in
                                                config.topBarHiddenStyle = .always
                                                config.isHiddenMorePanel = true
                                                config.image.max = UIImage(named: "video_max")
                                                config.image.min = UIImage(named: "video_min")
                                                config.image.pause = UIImage(named: "video_pause")
                                                config.image.play = UIImage(named: "video_play")
                                                config.color.progressFinished = UIColor(hexStr: "#B7DC90")
                                                config.color.progress = .white
                                                config.color.progressBuffer = UIColor(hexStr: "#B7DC90").withAlphaComponent(0.75)
                                                config.image.thumb = UIImage.jq_image(color: UIColor(hexStr: "#B7DC90"), size: CGSize(width: 6.5, height: 6.5), corners: .allCorners, radius: 3.25)
                                }
                                return p
                }()
 
    required    init(url:String? = nil,autoPlay:Bool = false,placeHoderImageUrl:String? = nil,needFirstImage:Bool = false,delegate:CLPlayerDelegate? = nil) {
                                super.init(frame: .zero)
                                addSubview(player)
                                player.delegate = delegate
                                player.snp.makeConstraints { make in
                                                make.edges.equalToSuperview()
                                }
                                self.placeHoderImageUrl = placeHoderImageUrl
        if placeHoderImageUrl != nil && needFirstImage == false{
                                                addPlaceHoderView(placeHoderImage: placeHoderImageUrl!)
                                }
 
                                if let Url = URL(string: url){
                                                self.url = url
                                                player.url = Url
 
            if needFirstImage{
                if let imageV = Url.jq_getVideoThumbnail(){
                    self.addPlaceHoderView(firstFPSImage:imageV)
                }
            }
 
                                                if autoPlay{
                                                                player.play()
                                                }
                                }
                }
 
 
                func updateVideoUrl(_ url:String,autoPlay:Bool = false,placeHoderImageUrl:String? = nil){
 
                                self.placeHoderImageUrl = placeHoderImageUrl
                                if placeHoderImageUrl != nil{
                                                addPlaceHoderView(placeHoderImage: placeHoderImageUrl!)
                                }
 
                                if let Url = URL(string: url){
                                                player.url = Url
                                                if autoPlay{
                                                                player.play()
                                                }
                                }
                }
 
    private func addPlaceHoderView(placeHoderImage:String? = nil,firstFPSImage:UIImage? = nil){
                                let placeV = UIView()
                                placeV.backgroundColor = .black
                                placeV.frame = player.frame
 
                                let imageView = UIImageView()
 
        if placeHoderImage != nil{
            imageView.sd_setImage(with: URL(string: placeHoderImage))
        }
 
        if firstFPSImage != nil{
            imageView.image = firstFPSImage
        }
 
        imageView.contentMode = .scaleAspectFit
                                placeV.addSubview(imageView)
 
 
                                let btn_placeholder = UIButton(type: .custom)
                                btn_placeholder.setImage(UIImage(named: "icon_play"), for: .normal)
                                btn_placeholder.addTarget(self, action: #selector(continueVideo), for: .touchUpInside)
                                placeV.addSubview(btn_placeholder)
                                btn_placeholder.snp.makeConstraints { make in
                                                make.center.equalToSuperview()
                                }
 
        imageView.snp.makeConstraints { make in
            make.edges.equalToSuperview()
        }
 
                                player.placeholder = placeV
                }
 
                func pauseVideo(){
                                player.pause()
                }
 
                @objc func continueVideo(){
                                player.play()
                }
 
                required init?(coder: NSCoder) {
                                fatalError("init(coder:) has not been implemented")
                }
}