CNLivePlayerViewController.swift
6.36 KB
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
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
//
// CNLivePlayerViewController.swift
// metaCode
//
// Created by zx on 2023/11/24.
//
import Foundation
typealias popActionCallBackBlock = (_ time: Double,_ isPause:Bool,_ isPlayEnd:Bool) -> Void
class CNLivePlayerViewController:CNLiveBaseViewController{
// MARK: - 播放设置
/**
初始化视频链接地址 为空为停止播放
*/
var playUrl:URL?
/**
视频链接是否为直播
*/
var isLive:Bool = false
/// 初始化视频
/// @param playUrl 视频链接地址 为空为停止播放
/// @param playTime 播放时间
func setPlayUrl(playUrl:URL,playTime:Double){
self.playUrl = playUrl
self.isLive = false
if self.playUrl?.scheme == "file"{
self.isLocalUrl = true
}else{
self.isLocalUrl = false
}
self.playerView?.setPlayUrl(playUrl: self.playUrl!, isLive: self.isLive)
self.playerView?.startPlayTime = playTime
}
// MARK: - 封面图
/**
封面图(不传封面图就不显示)
*/
var _coverImage:UIImage?
var coverImage:UIImage?{
get{
_coverImage
}
set{
_coverImage = newValue
self.playerView?.controlView.coverImage = self.coverImage
}
}
/**
封面图url(先检测封面图,后检测封面图url,不传封面图就不显示)
*/
var _coverImageUrl:String?
var coverImageUrl:String?{
get{
_coverImageUrl
}
set{
_coverImageUrl = newValue
self.playerView?.controlView.coverImageUrl = self.coverImageUrl
}
}
// MARK: - 回调
/// 返回观看时间回调
var popActionCallBack:popActionCallBackBlock?
//播放器
private var _playerView:CNLivePlayerView?
private var playerView:CNLivePlayerView?{
get{
if (_playerView == nil) {
_playerView = CNLivePlayerView()
_playerView?.controlView.fullScreenType = .inCurrentViewOrientation
_playerView?.popCallBack = {[weak self] in
if ((self!.popActionCallBack?(self!.playerView!.getPlayTime(), self!.playerView!.isUserStop, self!.playerView!.isPlayEnd)) != nil)
{
self!.popActionCallBack!(self!.playerView!.getPlayTime(), self!.playerView!.isUserStop, self!.playerView!.isPlayEnd)
}
}
_playerView?.switchAlphaMessageStateCallBack = { playerView in
UIView.animate(withDuration: kDSPlayerAnimateTimeInterval) {
if (playerView.controlView.isLockScreen || playerView.controlView.isAlphaMessage) {
self.isStatusBarHidden = true
self.setNeedsStatusBarAppearanceUpdate()
}else {
self.isStatusBarHidden = false
}
}
}
_playerView?.switchInterfaceOrientationCallBack = { playerView in
//全屏时不允许手势返回
if (playerView.controlView.isFullScreen!) {
self.popGestureRecognizerEnable = false
}else {
self.popGestureRecognizerEnable = true
}
}
}
return _playerView
}
set{
_playerView = newValue
}
}
//是否是本地的url
private var isLocalUrl:Bool = false
var isStatusBarLight:Bool = true
var isStatusBarHidden:Bool = true
// MARK: - 播放链接
/**
初始化视频
@param playUrl 视频链接地址 为空为停止播放
@param isLive 是否为直播
*/
func setPlayUrl(playUrl:URL,isLive:Bool){
self.playUrl = playUrl
self.isLive = isLive
if self.playUrl?.scheme == "file"{
self.isLocalUrl = true
}else{
self.isLocalUrl = false
}
self.playerView?.setPlayUrl(playUrl: self.playUrl!, isLive: self.isLive)
}
// MARK: - viewDidLoad
override func viewDidLoad() {
super.viewDidLoad()
self.topNavView.removeFromSuperview()
self.view.backgroundColor = .black
self.view.addSubview(self.playerView!)
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
isStatusBarLight = true
setNeedsStatusBarAppearanceUpdate()
self.playerView?.viewControllerIsDisappear = false
}
override var preferredStatusBarStyle: UIStatusBarStyle {
let _ = super.preferredStatusBarStyle
if isStatusBarLight == true{
return UIStatusBarStyle.lightContent
}else{
return UIStatusBarStyle.default
}
}
override var prefersStatusBarHidden: Bool{
return self.isStatusBarHidden
}
override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated)
if (!self.isLocalUrl) {
// if ([DSNetworkRequest shareClient].netStatus == DSNetworkStatusNotReachable) {
// self.playerView.controlView.failureView.hidden = NO;
// self.playerView.controlView.failureView.errorMessage = @"当前网络不可用,请检查网络后重试";
// return;
// }
// if ([DSNetworkRequest shareClient].netStatus == DSNetworkStatusWWAN) {
// DS_showMessage(@"当前正在用流量播放");
// }
}
if (!self.playerView!.isUserStop && !self.playerView!.isPlayEnd) {
self.playerView?.play()
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
isStatusBarLight = false
self.playerView?.viewControllerIsDisappear = true
}
override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated)
self.playerView?.stop()
}
override func viewWillLayoutSubviews() {
super.viewWillLayoutSubviews()
self.playerView?.frame = CGRect(x: 0, y: 0, width: self.view.width, height: self.view.height)
}
deinit {
print("CNLivePlayerViewController释放")
}
// MARK: - iPhoneX黑条隐藏
override var prefersHomeIndicatorAutoHidden: Bool{
return true
}
}