Commit 98325ece authored by Alex朱枝文's avatar Alex朱枝文

直播优化

parent 91244bed
......@@ -136,7 +136,7 @@ private extension YHHomePageViewController {
if liveInfo.status == 1 {
let playbackInfo = YHPlayerManager.PlaybackInfo(id: liveInfo.id, token: liveInfo.token, channelId: liveInfo.rtmp_channel, uid: UInt(liveInfo.user_id), isLive: true, scene: .floating, playerType: .main)
YHPlayerManager.shared.enterFloating(from: nil, playbackInfo: playbackInfo, isConfigured: true)
} else {
} else if YHPlayerManager.shared.floatingWindow?.source == .configured {
YHPlayerManager.shared.exitFloating()
}
}
......
......@@ -24,17 +24,19 @@ class YHHomeBannerView: UIView {
self.indicatorView.curIndicatorIndex = 0
// 指定显示图片为第一个
bannerView.selectItem(at: 0, animated: false)
if let index = dataArr.firstIndex(where: {
$0.skip_type == 100
}) {
// 开启定时器开始滚动
bannerView.automaticSlidingInterval = 0
bannerView.scrollToItem(at: index, animated: false)
indicatorView.curIndicatorIndex = index
} else {
// 开启定时器开始滚动
bannerView.automaticSlidingInterval = bannerSildingInterval
}
// 开启定时器开始滚动
bannerView.automaticSlidingInterval = bannerSildingInterval
// if let index = dataArr.firstIndex(where: {
// $0.skip_type == 100
// }) {
// // 开启定时器开始滚动
// bannerView.automaticSlidingInterval = 0
// bannerView.scrollToItem(at: index, animated: false)
// indicatorView.curIndicatorIndex = index
// } else {
// // 开启定时器开始滚动
// bannerView.automaticSlidingInterval = bannerSildingInterval
// }
bannerView.removesInfiniteLoopForSingleItem = true
bannerView.alwaysBounceHorizontal = true
}
......@@ -244,10 +246,10 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
return
}
let cell: YHHomeBannerCollectionViewCell? = pagerView.cellForItem(at: index) as? YHHomeBannerCollectionViewCell
if let player = YHPlayerManager.shared.getPlayer(.secondary) {
YHPlayerManager.shared.leaveChannel(for: player)
player.clearPlayerView()
}
// if let player = YHPlayerManager.shared.getPlayer(.secondary) {
// YHPlayerManager.shared.leaveChannel(for: player)
// player.clearPlayerView()
// }
let playbackInfo = YHPlayerManager.PlaybackInfo(id: model.live_id, url: nil, title: nil, roomId: nil, token: model.token, channelId: model.rtmp_channel, uid: model.user_id != 0 ? UInt(model.user_id) : nil, isLive: true, scene: .fullscreen)
YHPlayerManager.shared.enterLive(from: cell?.bannerImagV, playbackInfo: playbackInfo)
printLog("跳转直播")
......@@ -268,10 +270,10 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
if !checkLogin() {
return
}
if let player = YHPlayerManager.shared.getPlayer(.secondary) {
YHPlayerManager.shared.leaveChannel(for: player)
player.clearPlayerView()
}
// if let player = YHPlayerManager.shared.getPlayer(.secondary) {
// YHPlayerManager.shared.leaveChannel(for: player)
// player.clearPlayerView()
// }
let cell: YHHomeBannerCollectionViewCell? = pagerView.cellForItem(at: index) as? YHHomeBannerCollectionViewCell
let playbackInfo = YHPlayerManager.PlaybackInfo(id: model.live_id, url: model.live_pull_url, title: nil, roomId: nil, token: model.token, channelId: model.rtmp_channel, uid: UInt(model.user_id), isLive: true, scene: .fullscreen)
YHPlayerManager.shared.enterLive(from: cell?.bannerImagV, playbackInfo: playbackInfo)
......@@ -291,7 +293,7 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
func pagerViewDidEndScrollAnimation(_ pagerView: FSPagerView) {
self.indicatorView.curIndicatorIndex = pagerView.currentIndex
}
/*
func pagerView(_ pagerView: FSPagerView, willDisplay cell: FSPagerViewCell, forItemAt index: Int) {
if index >= dataArr.count {
......@@ -333,4 +335,5 @@ extension YHHomeBannerView: FSPagerViewDataSource, FSPagerViewDelegate {
}
}
}
*/
}
......@@ -630,10 +630,10 @@ extension YHJsApi {
return
}
if type == 1 {
let playbackInfo = YHPlayerManager.PlaybackInfo(id: id.intValue(), isLive: true)
let playbackInfo = YHPlayerManager.PlaybackInfo(id: id.intValue(), isLive: true, isFromSaleDetail: true)
YHPlayerManager.shared.enterLive(from: nil, playbackInfo: playbackInfo)
} else if type == 2 {
let playbackInfo = YHPlayerManager.PlaybackInfo(id: id.intValue(), isLive: false, needHideZoomButton: true)
let playbackInfo = YHPlayerManager.PlaybackInfo(id: id.intValue(), isLive: false, isFromSaleDetail: true)
YHPlayerManager.shared.enterVOD(from: nil, playbackInfo: playbackInfo)
}
......
......@@ -27,6 +27,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
private var isFirstAppear = true
private var timer: DispatchSourceTimer?
private var isDisappearFromZoom = false
private let timeCount: Int = 120
// MARK: - UI Components
......@@ -182,9 +183,20 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
}
topBarView.zoomButtonClickEvent = { [weak self] in
self?.isDisappearFromZoom = true
self?.leaveLiveRoom()
self?.enterFloating()
if let playbackInfo = self?.playbackInfo, playbackInfo.isFromSaleDetail {
self?.clearInfo()
if let nav = self?.navigationController, nav.viewControllers.count > 1 {
nav.popViewController(animated: true)
} else {
self?.dismiss(animated: true)
}
} else {
self?.isDisappearFromZoom = true
self?.quitChatRoom()
self?.leaveLiveRoom()
// self?.clearInfo()
self?.enterFloating()
}
}
topBarView.shareButtonClickEvent = { [weak self] in
......@@ -315,11 +327,11 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
// MARK: - Public Methods
func play(url: String, title: String? = nil) {
currentPlayingURL = url
currentVideoTitle = title
YHPlayerManager.shared.play(url: url, inView: playerView, title: title)
}
// func play(url: String, title: String? = nil) {
// currentPlayingURL = url
// currentVideoTitle = title
// YHPlayerManager.shared.play(url: url, inView: playerView, title: title)
// }
func enterFloating() {
guard let playbackInfo = playbackInfo else {
......@@ -377,15 +389,23 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
}
}
}
private func closeLive() {
private func clearInfo() {
quitChatRoom()
leaveLiveRoom()
// YHPlayerManager.shared.stop(type: .main)
if let player = player {
YHPlayerManager.shared.leaveChannel(for: player)
}
dismiss(animated: true)
}
private func closeLive() {
clearInfo()
if let nav = navigationController, nav.viewControllers.count > 1 {
nav.popViewController(animated: true)
} else {
dismiss(animated: true)
}
}
private func shareLive() {
......@@ -618,7 +638,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
/// 设置定时器
private func setupTimer() {
timer = DispatchSource.makeTimerSource(queue: .main)
timer?.schedule(deadline: .now(), repeating: .seconds(120))
timer?.schedule(deadline: .now(), repeating: .seconds(timeCount))
timer?.setEventHandler(handler: { [weak self] in
guard let self = self else {
return
......
......@@ -31,7 +31,7 @@ class YHPlayerManager: NSObject {
let isLive: Bool
var scene: PlaybackScene
var playerType: YHPlayerType
var needHideZoomButton: Bool = false
var isFromSaleDetail: Bool = false
init(id: Int,
url: String? = nil,
......@@ -43,7 +43,7 @@ class YHPlayerManager: NSObject {
isLive: Bool,
scene: PlaybackScene = .fullscreen,
playerType: YHPlayerType = .main,
needHideZoomButton: Bool = false) {
isFromSaleDetail: Bool = false) {
self.id = id
self.url = url
self.title = title
......@@ -54,7 +54,7 @@ class YHPlayerManager: NSObject {
self.isLive = isLive
self.scene = scene
self.playerType = playerType
self.needHideZoomButton = needHideZoomButton
self.isFromSaleDetail = isFromSaleDetail
}
static func == (lhs: Self, rhs: Self) -> Bool {
......@@ -71,7 +71,7 @@ class YHPlayerManager: NSObject {
private var secondaryChannelDelegate: YHSecondaryChannelDelegate?
private var activePlayers: [YHPlayerType: YHPlayer] = [:]
private var currentPlaybackInfo: [YHPlayerType: PlaybackInfo] = [:]
private var floatingWindow: YHFloatingWindow?
private(set) var floatingWindow: YHFloatingWindow?
private(set) var isInRecommendPage: Bool = false
private(set) var isConfigFloating: Bool? = nil
private var bannerAutoPlayEnabled: Bool = true
......@@ -145,7 +145,7 @@ class YHPlayerManager: NSObject {
activePlayers.forEach { $0.value.stop() }
// 释放副播放器
releasePlayer(.secondary)
//releasePlayer(.secondary)
// 清理播放信息
currentPlaybackInfo.removeAll()
......@@ -302,14 +302,14 @@ class YHPlayerManager: NSObject {
// 如果是从banner跳转,需要转移播放进度
var startPosition: Int = 0
if let bannerPlayer = activePlayers[.secondary] {
startPosition = bannerPlayer.getPosition()
if bannerPlayer.playMode == .live {
leaveChannel(for: bannerPlayer)
} else {
bannerPlayer.pause()
}
}
// if let bannerPlayer = activePlayers[.secondary] {
// startPosition = bannerPlayer.getPosition()
// if bannerPlayer.playMode == .live {
// leaveChannel(for: bannerPlayer)
// } else {
// bannerPlayer.pause()
// }
// }
var lastVodVC: YHVODPlayerViewController?
var lastNav: UINavigationController?
var lastLiveVC: YHLivePlayerViewController?
......@@ -372,13 +372,13 @@ class YHPlayerManager: NSObject {
updatedInfo.playerType = playerType
// 如果是从banner跳转,需要转移播放进度
if let bannerPlayer = activePlayers[.secondary] {
if bannerPlayer.playMode == .live {
leaveChannel(for: bannerPlayer)
} else {
bannerPlayer.pause()
}
}
// if let bannerPlayer = activePlayers[.secondary] {
// if bannerPlayer.playMode == .live {
// leaveChannel(for: bannerPlayer)
// } else {
// bannerPlayer.pause()
// }
// }
var lastVodVC: YHVODPlayerViewController?
var lastNav: UINavigationController?
var lastLiveVC: YHLivePlayerViewController?
......@@ -471,13 +471,13 @@ class YHPlayerManager: NSObject {
}
// 如果是从banner跳转,需要转移播放进度
if let bannerPlayer = activePlayers[.secondary] {
if bannerPlayer.playMode == .live {
leaveChannel(for: bannerPlayer)
} else {
bannerPlayer.pause()
}
}
// if let bannerPlayer = activePlayers[.secondary] {
// if bannerPlayer.playMode == .live {
// leaveChannel(for: bannerPlayer)
// } else {
// bannerPlayer.pause()
// }
// }
let playerType = determinePlayerType(for: .floating)
let player: YHPlayer = player(for: playerType)
......@@ -781,20 +781,20 @@ extension YHPlayerManager {
if isRecommendPage {
if isConfigFloating == true {
if let window = floatingWindow, let player = window.player, window.source == .configured {
stopBannerPlayback()
//stopBannerPlayback()
resumeConfiguredFloatingWindow(window, player)
}
} else {
if let window = floatingWindow, window.source == .configured {
exitFloating()
}
enableBannerAutoPlay()
//enableBannerAutoPlay()
}
} else {
if let window = floatingWindow, window.source == .configured {
exitFloating()
}
stopBannerPlayback()
//stopBannerPlayback()
}
}
......@@ -828,45 +828,45 @@ extension YHPlayerManager {
}
}
private func stopBannerPlayback() {
bannerAutoPlayEnabled = false
if let player = getPlayer(.secondary) {
if player.playMode == .live {
leaveChannel(for: player)
} else {
player.stop()
}
}
}
// private func stopBannerPlayback() {
// bannerAutoPlayEnabled = false
// if let player = getPlayer(.secondary) {
// if player.playMode == .live {
// leaveChannel(for: player)
// } else {
// player.stop()
// }
// }
// }
private func resumeBannerPlayback() {
guard bannerAutoPlayEnabled, let bannerPlayerView = bannerPlayerView else {
return
}
if let player = getPlayer(.secondary) {
if let playbackInfo = currentPlaybackInfo[.secondary] {
if playbackInfo.isLive {
if let token = playbackInfo.token,
let channelId = playbackInfo.channelId,
let uid = playbackInfo.uid {
joinChannel(for: player,
token: token,
channelId: channelId,
uid: uid,
view: bannerPlayerView, defaultMuted: true)
}
} else {
if let url = playbackInfo.url {
player.play(url: url,
title: playbackInfo.title,
view: bannerPlayerView)
player.isMuted = true
}
}
}
}
}
// private func resumeBannerPlayback() {
// guard bannerAutoPlayEnabled, let bannerPlayerView = bannerPlayerView else {
// return
// }
// if let player = getPlayer(.secondary) {
// if let playbackInfo = currentPlaybackInfo[.secondary] {
// if playbackInfo.isLive {
// if let token = playbackInfo.token,
// let channelId = playbackInfo.channelId,
// let uid = playbackInfo.uid {
// joinChannel(for: player,
// token: token,
// channelId: channelId,
// uid: uid,
// view: bannerPlayerView, defaultMuted: true)
// }
// } else {
// if let url = playbackInfo.url {
// player.play(url: url,
// title: playbackInfo.title,
// view: bannerPlayerView)
// player.isMuted = true
// }
// }
// }
//
// }
// }
private func enableBannerAutoPlay() {
bannerAutoPlayEnabled = true
......
......@@ -22,6 +22,11 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
return view
}()
private lazy var bottomImageView: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "live_player_bg"))
return imageView
}()
private var isFirstAppear = true
// MARK: - Initialization
......@@ -58,16 +63,27 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
// if !isFirstAppear {
// player?.resume()
// }
if player?.currentURL != nil {
player?.resume()
if !isFirstAppear {
if player?.getPlayState() != .paused {
if let url = playbackInfo?.url {
play(url: url, title: playbackInfo?.title)
player?.seek(to: startPosition)
player?.resume()
DispatchQueue.main.asyncAfter(deadline: .now() + 0.25, execute: {
self.progressControl.setPlaying(self.player?.getPlayState() == .playing)
})
}
} else {
player?.resume()
}
}
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
if let player = player {
startPosition = player.getPosition()
}
player?.pause()
}
......@@ -81,6 +97,11 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
// MARK: - SetupView
private func setupUI() {
playerView.addSubview(bottomImageView)
bottomImageView.snp.makeConstraints { make in
make.edges.equalToSuperview()
}
containerView.addSubview(progressControl)
progressControl.snp.makeConstraints { make in
make.left.right.bottom.equalToSuperview()
......@@ -127,7 +148,11 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
private func closeLive() {
YHPlayerManager.shared.stop(type: .main)
dismiss(animated: true)
if let nav = navigationController, nav.viewControllers.count > 1 {
nav.popViewController(animated: true)
} else {
dismiss(animated: true)
}
}
private func shareLive() {
......
......@@ -118,6 +118,11 @@ class YHFloatingWindow: NSObject {
view.frame = CGRect(x: 0, y: 0, width: Size.defaultWidth, height: 20)
return view
}()
private lazy var bottomImageView: UIImageView = {
let imageView = UIImageView(image: UIImage(named: "live_player_bg"))
return imageView
}()
// MARK: - Initialization
......@@ -143,7 +148,7 @@ class YHFloatingWindow: NSObject {
containerView.layer.shadowOffset = CGSize(width: 0, height: 2)
containerView.layer.shadowRadius = 4
containerView.layer.shadowOpacity = 0.3
containerView.addSubview(contentView)
contentView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
......@@ -152,6 +157,15 @@ class YHFloatingWindow: NSObject {
contentView.topAnchor.constraint(equalTo: containerView.topAnchor),
contentView.bottomAnchor.constraint(equalTo: containerView.bottomAnchor),
])
contentView.addSubview(bottomImageView)
bottomImageView.translatesAutoresizingMaskIntoConstraints = false
NSLayoutConstraint.activate([
bottomImageView.leadingAnchor.constraint(equalTo: contentView.leadingAnchor),
bottomImageView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor),
bottomImageView.topAnchor.constraint(equalTo: contentView.topAnchor),
bottomImageView.bottomAnchor.constraint(equalTo: contentView.bottomAnchor),
])
containerView.addSubview(closeButtonContainer)
closeButtonContainer.translatesAutoresizingMaskIntoConstraints = false
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment