Commit 933db8ea authored by Alex朱枝文's avatar Alex朱枝文

首页banner和小窗逻辑调整

parent c9c486f7
...@@ -33,10 +33,6 @@ class YHHomePageViewController: YHBaseViewController { ...@@ -33,10 +33,6 @@ class YHHomePageViewController: YHBaseViewController {
var configModel: YHHomeInfoModel? { var configModel: YHHomeInfoModel? {
didSet { didSet {
homeHeaderView.kingModel = configModel?.king_kong_list ?? [] homeHeaderView.kingModel = configModel?.king_kong_list ?? []
if let live_info = configModel?.live_info {
setupLiveFloating(liveInfo: live_info)
}
} }
} }
...@@ -74,11 +70,13 @@ class YHHomePageViewController: YHBaseViewController { ...@@ -74,11 +70,13 @@ class YHHomePageViewController: YHBaseViewController {
override func viewWillDisappear(_ animated: Bool) { override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated) super.viewWillDisappear(animated)
isTopMostAndVisible = false isTopMostAndVisible = false
YHPlayerManager.shared.handlePageChanged(isRecommendPage: false)
} }
override func viewWillAppear(_ animated: Bool) { override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated) super.viewWillAppear(animated)
isTopMostAndVisible = true isTopMostAndVisible = true
YHPlayerManager.shared.handlePageChanged(isRecommendPage: true)
} }
override func viewDidAppear(_ animated: Bool) { override func viewDidAppear(_ animated: Bool) {
...@@ -119,14 +117,14 @@ class YHHomePageViewController: YHBaseViewController { ...@@ -119,14 +117,14 @@ class YHHomePageViewController: YHBaseViewController {
private extension YHHomePageViewController { private extension YHHomePageViewController {
private func setupLiveFloating(liveInfo: YHHomeLiveInfoModel) { private func setupLiveFloating(liveInfo: YHHomeLiveInfoModel) {
printLog("#####setupLiveFloating(liveInfo: YHHomeLiveInfoModel) ") printLog("#####setupLiveFloating(liveInfo: YHHomeLiveInfoModel) ")
guard !didShowFloating else { guard YHPlayerManager.shared.isConfigFloating != false else {
return return
} }
if liveInfo.status == 1 { if liveInfo.status == 1 {
didShowFloating = true
let playbackInfo = YHPlayerManager.PlaybackInfo(id: liveInfo.id, token: liveInfo.token, channelId: liveInfo.rtmp_channel, uid: UInt(liveInfo.id), isLive: true, scene: .floating, playerType: .main) let playbackInfo = YHPlayerManager.PlaybackInfo(id: liveInfo.id, token: liveInfo.token, channelId: liveInfo.rtmp_channel, uid: UInt(liveInfo.id), isLive: true, scene: .floating, playerType: .main)
YHPlayerManager.shared.enterFloating(from: nil, playbackInfo: playbackInfo) YHPlayerManager.shared.enterFloating(from: nil, playbackInfo: playbackInfo, isConfigured: true)
} else {
YHPlayerManager.shared.exitFloating()
} }
} }
...@@ -415,8 +413,17 @@ extension YHHomePageViewController { ...@@ -415,8 +413,17 @@ extension YHHomePageViewController {
func getData() { func getData() {
loadFirstData() loadFirstData()
getHomeBannerData() getHomeBannerData()
viewModel.getHomeFloatingLive { [weak self] success, error in
guard let self = self else {
return
}
if success {
if let liveInfo = self.viewModel.liveInfo {
setupLiveFloating(liveInfo: liveInfo)
}
}
}
} }
// 请求订单数据 // 请求订单数据
func requestOrder() { func requestOrder() {
......
...@@ -20,6 +20,7 @@ class YHHomePageViewModel : YHBaseViewModel { ...@@ -20,6 +20,7 @@ class YHHomePageViewModel : YHBaseViewModel {
var categoryArr:[YHHomeLifeCategoryModel?] = [] var categoryArr:[YHHomeLifeCategoryModel?] = []
var detailModel: YHHomeLifeCategoryDetailModel = YHHomeLifeCategoryDetailModel() var detailModel: YHHomeLifeCategoryDetailModel = YHHomeLifeCategoryDetailModel()
var liveArr: [YHLiveModel] = [] var liveArr: [YHLiveModel] = []
var liveInfo: YHHomeLiveInfoModel?
//首页相关参数 //首页相关参数
private var curPageIndex : Int = 1 private var curPageIndex : Int = 1
private var page_Size : Int = 50 private var page_Size : Int = 50
...@@ -574,4 +575,24 @@ extension YHHomePageViewModel { ...@@ -574,4 +575,24 @@ extension YHHomePageViewModel {
callBackBlock(false, err) callBackBlock(false, err)
} }
} }
//获取首页浮动小窗
func getHomeFloatingLive(callBackBlock:@escaping (_ success: Bool,_ error:YHErrorModel?)->()) {
let strUrl = YHBaseUrlManager.shared.curURL() + YHAllApiName.Home.homeFloatingLive
let _ = YHNetRequest.getRequest(url: strUrl) { [weak self] json, code in
//1. json字符串 转 对象
guard let self = self else { return }
guard let dic = json.data?.peel as? [String : Any], let resultModel = YHHomeLiveInfoModel.deserialize(from: dic) else {
callBackBlock(false,nil)
return
}
self.liveInfo = resultModel
callBackBlock(true,nil)
} failBlock: { err in
callBackBlock(false,err)
}
}
} }
...@@ -35,6 +35,9 @@ class YHH5WebViewVC: YHBaseViewController, WKUIDelegate, WKNavigationDelegate { ...@@ -35,6 +35,9 @@ class YHH5WebViewVC: YHBaseViewController, WKUIDelegate, WKNavigationDelegate {
webview.scrollView.contentInsetAdjustmentBehavior = .never webview.scrollView.contentInsetAdjustmentBehavior = .never
webview.navigationDelegate = self webview.navigationDelegate = self
webview.scrollView.delegate = self webview.scrollView.delegate = self
// config.allowsInlineMediaPlayback = true
// /// 开启让自动播放
// config.mediaTypesRequiringUserActionForPlayback = []
webview.setDebugMode(false) webview.setDebugMode(false)
return webview return webview
......
...@@ -54,6 +54,7 @@ class YHBasePlayerViewController: YHBaseViewController { ...@@ -54,6 +54,7 @@ class YHBasePlayerViewController: YHBaseViewController {
gk_navBarAlpha = 0 gk_navBarAlpha = 0
gk_navigationBar.isHidden = true gk_navigationBar.isHidden = true
view.backgroundColor = .black view.backgroundColor = .black
UIApplication.shared.isIdleTimerDisabled = true
} }
override func viewWillDisappear(_ animated: Bool) { override func viewWillDisappear(_ animated: Bool) {
...@@ -63,6 +64,7 @@ class YHBasePlayerViewController: YHBaseViewController { ...@@ -63,6 +64,7 @@ class YHBasePlayerViewController: YHBaseViewController {
view.backgroundColor = .black view.backgroundColor = .black
controlsAutoHideTimer?.invalidate() controlsAutoHideTimer?.invalidate()
controlsAutoHideTimer = nil controlsAutoHideTimer = nil
UIApplication.shared.isIdleTimerDisabled = false
} }
deinit { deinit {
......
...@@ -54,6 +54,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController { ...@@ -54,6 +54,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
} }
vc.closeEvent = { [weak self] in vc.closeEvent = { [weak self] in
self?.leaveLiveRoom()
self?.closeLive() self?.closeLive()
} }
...@@ -135,6 +136,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController { ...@@ -135,6 +136,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
} }
topBarView.zoomButtonClickEvent = { [weak self] in topBarView.zoomButtonClickEvent = { [weak self] in
self?.leaveLiveRoom()
self?.enterFloating() self?.enterFloating()
} }
...@@ -206,7 +208,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController { ...@@ -206,7 +208,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
messageListView.anchorName = liveDetail.hxNickname messageListView.anchorName = liveDetail.hxNickname
if needJoinLiveChannel { if needJoinLiveChannel {
if !liveDetail.rtmp_channel.isEmpty, !liveDetail.token.isEmpty, let uid = playbackInfo?.uid, let player = player { if !liveDetail.rtmp_channel.isEmpty, !liveDetail.token.isEmpty, let uid = playbackInfo?.uid, let player = player {
YHPlayerManager.shared.joinChannel(for: player, token: liveDetail.token, channelId: liveDetail.rtmp_channel, uid: uid, view: playerView) YHPlayerManager.shared.joinChannel(for: player, token: liveDetail.token, channelId: liveDetail.rtmp_channel, uid: uid, view: playerView, defaultMuted: false)
} else if currentPlayingURL == nil, !liveDetail.pullUrl.isEmpty { } else if currentPlayingURL == nil, !liveDetail.pullUrl.isEmpty {
play(url: liveDetail.pullUrl) // 如果没有预设URL,使用接口返回的URL播放 play(url: liveDetail.pullUrl) // 如果没有预设URL,使用接口返回的URL播放
} }
...@@ -338,7 +340,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController { ...@@ -338,7 +340,7 @@ class YHLivePlayerViewController: YHBasePlayerViewController {
guard let liveModel = viewModel.liveDetailModel else { guard let liveModel = viewModel.liveDetailModel else {
return return
} }
YHShareAlertView.show(image: liveModel.live_image, title: "@" + liveModel.account, subMessage: liveModel.live_title, linkUrl: liveModel.live_h5_url, isLive: true) YHShareAlertView.show(image: liveModel.live_image, title: "@" + liveModel.account, subMessage: liveModel.live_title, linkUrl: liveModel.live_h5_url, isLive: true, fromAiSale: true)
} }
private func showGoods() { private func showGoods() {
......
...@@ -72,6 +72,10 @@ class YHPlayerManager: NSObject { ...@@ -72,6 +72,10 @@ class YHPlayerManager: NSObject {
private var activePlayers: [YHPlayerType: YHPlayer] = [:] private var activePlayers: [YHPlayerType: YHPlayer] = [:]
private var currentPlaybackInfo: [YHPlayerType: PlaybackInfo] = [:] private var currentPlaybackInfo: [YHPlayerType: PlaybackInfo] = [:]
private var floatingWindow: YHFloatingWindow? private var floatingWindow: YHFloatingWindow?
private(set) var isInRecommendPage: Bool = false
private(set) var isConfigFloating: Bool? = nil
private var bannerAutoPlayEnabled: Bool = true
private var bannerPlayerView: UIView?
private var transitionSourceView: UIView? private var transitionSourceView: UIView?
...@@ -213,7 +217,7 @@ class YHPlayerManager: NSObject { ...@@ -213,7 +217,7 @@ class YHPlayerManager: NSObject {
func joinChannel(for player: YHPlayer, func joinChannel(for player: YHPlayer,
token: String, token: String,
channelId: String, channelId: String,
uid: UInt, view: UIView?) { uid: UInt, view: UIView?, defaultMuted: Bool = false) {
let option = AgoraRtcChannelMediaOptions() let option = AgoraRtcChannelMediaOptions()
option.publishCameraTrack = false option.publishCameraTrack = false
option.publishMicrophoneTrack = false option.publishMicrophoneTrack = false
...@@ -227,6 +231,11 @@ class YHPlayerManager: NSObject { ...@@ -227,6 +231,11 @@ class YHPlayerManager: NSObject {
connection.localUid = uid connection.localUid = uid
secondaryChannelDelegate?.channelId = channelId secondaryChannelDelegate?.channelId = channelId
if defaultMuted {
agoraKit.disableAudio()
} else {
agoraKit.enableAudio()
}
let result = agoraKit.joinChannelEx(byToken: token, let result = agoraKit.joinChannelEx(byToken: token,
connection: connection, connection: connection,
delegate: secondaryChannelDelegate, delegate: secondaryChannelDelegate,
...@@ -236,6 +245,11 @@ class YHPlayerManager: NSObject { ...@@ -236,6 +245,11 @@ class YHPlayerManager: NSObject {
} }
} else { } else {
mainChannelDelegate?.channelId = channelId mainChannelDelegate?.channelId = channelId
if defaultMuted {
agoraKit.disableAudio()
} else {
agoraKit.enableAudio()
}
let result = agoraKit.joinChannel(byToken: token, let result = agoraKit.joinChannel(byToken: token,
channelId: channelId, channelId: channelId,
uid: uid, uid: uid,
...@@ -282,7 +296,11 @@ class YHPlayerManager: NSObject { ...@@ -282,7 +296,11 @@ class YHPlayerManager: NSObject {
if playbackInfo.scene == .banner, if playbackInfo.scene == .banner,
let bannerPlayer = activePlayers[.secondary] { let bannerPlayer = activePlayers[.secondary] {
startPosition = bannerPlayer.getPosition() startPosition = bannerPlayer.getPosition()
bannerPlayer.stop() if playbackInfo.isLive {
leaveChannel(for: bannerPlayer)
} else {
bannerPlayer.pause()
}
} }
let playerVC = YHVODPlayerViewController(id: playbackInfo.id, url: playbackInfo.url, title: playbackInfo.title) let playerVC = YHVODPlayerViewController(id: playbackInfo.id, url: playbackInfo.url, title: playbackInfo.title)
...@@ -323,9 +341,14 @@ class YHPlayerManager: NSObject { ...@@ -323,9 +341,14 @@ class YHPlayerManager: NSObject {
updatedInfo.scene = .fullscreen updatedInfo.scene = .fullscreen
updatedInfo.playerType = playerType updatedInfo.playerType = playerType
// 如果是从banner跳转,释放副播放器 // 如果是从banner跳转,需要转移播放进度
if playbackInfo.scene == .banner { if playbackInfo.scene == .banner,
activePlayers[.secondary]?.pause() let bannerPlayer = activePlayers[.secondary] {
if playbackInfo.isLive {
leaveChannel(for: bannerPlayer)
} else {
bannerPlayer.pause()
}
} }
let playerVC = YHLivePlayerViewController(id: playbackInfo.id, let playerVC = YHLivePlayerViewController(id: playbackInfo.id,
...@@ -375,7 +398,10 @@ class YHPlayerManager: NSObject { ...@@ -375,7 +398,10 @@ class YHPlayerManager: NSObject {
} }
} }
func enterFloating(from viewController: UIViewController? = nil, playbackInfo: PlaybackInfo) { func enterFloating(from viewController: UIViewController? = nil, playbackInfo: PlaybackInfo, isConfigured: Bool = false) {
if isConfigured {
self.isConfigFloating = isConfigured
}
guard let window = UIApplication.shared.yhKeyWindow() else { return } guard let window = UIApplication.shared.yhKeyWindow() else { return }
guard floatingWindow == nil else { guard floatingWindow == nil else {
return return
...@@ -383,6 +409,10 @@ class YHPlayerManager: NSObject { ...@@ -383,6 +409,10 @@ class YHPlayerManager: NSObject {
let isCurrentFromLive = viewController is YHLivePlayerViewController let isCurrentFromLive = viewController is YHLivePlayerViewController
let isCurrentFromVod = viewController is YHVODPlayerViewController let isCurrentFromVod = viewController is YHVODPlayerViewController
// 如果是配置产生的小窗,但不在推荐页,则不创建
if isConfigured && !isInRecommendPage {
return
}
if !isCurrentFromLive, !isCurrentFromVod, let topVC = UIApplication.shared.yhKeyWindow()?.rootViewController?.topMostViewController() { if !isCurrentFromLive, !isCurrentFromVod, let topVC = UIApplication.shared.yhKeyWindow()?.rootViewController?.topMostViewController() {
// 如果当前顶部控制器是播放器页面,则不创建浮窗 // 如果当前顶部控制器是播放器页面,则不创建浮窗
...@@ -391,8 +421,32 @@ class YHPlayerManager: NSObject { ...@@ -391,8 +421,32 @@ class YHPlayerManager: NSObject {
} }
} }
// 如果是从banner跳转,需要转移播放进度
if playbackInfo.scene == .banner,
let bannerPlayer = activePlayers[.secondary] {
if playbackInfo.isLive {
leaveChannel(for: bannerPlayer)
} else {
bannerPlayer.pause()
}
}
let playerType = determinePlayerType(for: .floating) let playerType = determinePlayerType(for: .floating)
let player: YHPlayer = player(for: playerType) let player: YHPlayer = player(for: playerType)
var needMuteLive: Bool = false
if isConfigured {
if playbackInfo.isLive {
needMuteLive = true
} else {
player.isMuted = true
}
} else {
if playbackInfo.isLive {
needMuteLive = false
} else {
player.isMuted = false
}
}
var updatedInfo = playbackInfo var updatedInfo = playbackInfo
updatedInfo.scene = .floating updatedInfo.scene = .floating
...@@ -412,6 +466,7 @@ class YHPlayerManager: NSObject { ...@@ -412,6 +466,7 @@ class YHPlayerManager: NSObject {
floatingWindow.delegate = self floatingWindow.delegate = self
floatingWindow.player = player floatingWindow.player = player
player.delegate = floatingWindow player.delegate = floatingWindow
floatingWindow.source = isConfigured ? .configured : .userAction
self.floatingWindow = floatingWindow self.floatingWindow = floatingWindow
// 添加截图视图到窗口 // 添加截图视图到窗口
...@@ -426,7 +481,7 @@ class YHPlayerManager: NSObject { ...@@ -426,7 +481,7 @@ class YHPlayerManager: NSObject {
let uid = playbackInfo.uid, !token.isEmpty, !channelId.isEmpty { let uid = playbackInfo.uid, !token.isEmpty, !channelId.isEmpty {
if player.isJoined { if player.isJoined {
leaveChannel(for: player) leaveChannel(for: player)
joinChannel(for: player, token: token, channelId: channelId, uid: uid, view: floatingWindow.contentView) joinChannel(for: player, token: token, channelId: channelId, uid: uid, view: floatingWindow.contentView, defaultMuted: needMuteLive)
// // 先清理上次的播放状态 // // 先清理上次的播放状态
// player.clearPlayerView() // player.clearPlayerView()
// // 将播放状态转移到floating // // 将播放状态转移到floating
...@@ -462,6 +517,7 @@ class YHPlayerManager: NSObject { ...@@ -462,6 +517,7 @@ class YHPlayerManager: NSObject {
floatingWindow.delegate = self floatingWindow.delegate = self
floatingWindow.player = player floatingWindow.player = player
floatingWindow.playbackInfo = updatedInfo floatingWindow.playbackInfo = updatedInfo
floatingWindow.source = isConfigured ? .configured : .userAction
self.floatingWindow = floatingWindow self.floatingWindow = floatingWindow
player.delegate = floatingWindow player.delegate = floatingWindow
// 检查是否存在当前播放器 // 检查是否存在当前播放器
...@@ -469,14 +525,13 @@ class YHPlayerManager: NSObject { ...@@ -469,14 +525,13 @@ class YHPlayerManager: NSObject {
let channelId = playbackInfo.channelId, let channelId = playbackInfo.channelId,
let uid = playbackInfo.uid, !token.isEmpty, !channelId.isEmpty { let uid = playbackInfo.uid, !token.isEmpty, !channelId.isEmpty {
leaveChannel(for: player) leaveChannel(for: player)
joinChannel(for: player, token: token, channelId: channelId, uid: uid, view: floatingWindow.contentView) joinChannel(for: player, token: token, channelId: channelId, uid: uid, view: floatingWindow.contentView, defaultMuted: needMuteLive)
} else if let url = playbackInfo.url, !url.isEmpty { } else if let url = playbackInfo.url, !url.isEmpty {
player.play(url: url, title: playbackInfo.title, view: floatingWindow.contentView) player.play(url: url, title: playbackInfo.title, view: floatingWindow.contentView)
} }
let showFloatingWindow = { let showFloatingWindow = {
floatingWindow.show(in: window) floatingWindow.show(in: window)
// player.setPlayView(floatingWindow.contentView)
} }
if let viewController = viewController { if let viewController = viewController {
...@@ -490,26 +545,34 @@ class YHPlayerManager: NSObject { ...@@ -490,26 +545,34 @@ class YHPlayerManager: NSObject {
} }
func enterBanner(playbackInfo: PlaybackInfo, inView view: UIView) { func enterBanner(playbackInfo: PlaybackInfo, inView view: UIView) {
// 检查是否应该播放banner
if !shouldPlayBanner() {
return
}
let playerType = determinePlayerType(for: .banner) let playerType = determinePlayerType(for: .banner)
var updatedInfo = playbackInfo var updatedInfo = playbackInfo
updatedInfo.scene = .banner updatedInfo.scene = .banner
updatedInfo.playerType = playerType updatedInfo.playerType = playerType
currentPlaybackInfo[playerType] = updatedInfo currentPlaybackInfo[playerType] = updatedInfo
bannerPlayerView = view
let player = player(for: playerType) let player = player(for: playerType)
if playbackInfo.isLive {
// 加入频道 // 加入频道
if let token = playbackInfo.token, if let token = playbackInfo.token,
let channelId = playbackInfo.channelId, let uid = playbackInfo.uid, !token.isEmpty, !channelId.isEmpty { let channelId = playbackInfo.channelId, let uid = playbackInfo.uid, !token.isEmpty, !channelId.isEmpty {
if player.isJoined { if player.isJoined {
leaveChannel(for: player) leaveChannel(for: player)
joinChannel(for: player, token: token, channelId: channelId, uid: uid, view: view) joinChannel(for: player, token: token, channelId: channelId, uid: uid, view: view, defaultMuted: true)
} else { } else {
joinChannel(for: player, token: token, channelId: channelId, uid: uid, view: view) joinChannel(for: player, token: token, channelId: channelId, uid: uid, view: view, defaultMuted: true)
} }
} else if let url = playbackInfo.url, !url.isEmpty { }
} else {
if let url = playbackInfo.url, !url.isEmpty {
player.play(url: url, title: playbackInfo.title, view: view) player.play(url: url, title: playbackInfo.title, view: view)
} }
} }
}
func exitFloating() { func exitFloating() {
// 直播退出channel // 直播退出channel
...@@ -605,6 +668,9 @@ extension YHPlayerManager: YHFloatingWindowDelegate { ...@@ -605,6 +668,9 @@ extension YHPlayerManager: YHFloatingWindowDelegate {
//player.stop() //player.stop()
floatingWindow = nil floatingWindow = nil
leaveChannel(for: player) leaveChannel(for: player)
if window.source == .configured {
isConfigFloating = false
}
} }
func floatingWindow(_ window: YHFloatingWindow, didChangeSize size: CGSize) { func floatingWindow(_ window: YHFloatingWindow, didChangeSize size: CGSize) {
...@@ -657,3 +723,117 @@ extension UIViewController { ...@@ -657,3 +723,117 @@ extension UIViewController {
return self return self
} }
} }
extension YHPlayerManager {
// MARK: - Page Management
func handlePageChanged(isRecommendPage: Bool) {
self.isInRecommendPage = isRecommendPage
if isRecommendPage {
if isConfigFloating == true {
if let window = floatingWindow,
let player = window.player, window.source == .configured {
window.isHidden = false
resumeConfiguredFloatingWindow(window, player)
}
stopBannerPlayback()
} else {
if let window = floatingWindow,
let player = window.player, window.source == .configured {
window.isHidden = true
stopConfiguredFloatingWindow(window, player)
}
enableBannerAutoPlay()
//resumeBannerPlayback()
}
} else {
if let window = floatingWindow,
let player = window.player, window.source == .configured {
window.isHidden = true
stopConfiguredFloatingWindow(window, player)
}
stopBannerPlayback()
}
}
private func resumeConfiguredFloatingWindow(_ window: YHFloatingWindow, _ player: YHPlayer) {
if let playbackInfo = window.playbackInfo {
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: window.contentView)
}
} else {
if let url = playbackInfo.url {
player.play(url: url,
title: playbackInfo.title,
view: window.contentView)
}
}
}
}
private func stopConfiguredFloatingWindow(_ window: YHFloatingWindow, _ player: YHPlayer) {
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 enableBannerAutoPlay() {
bannerAutoPlayEnabled = true
}
func shouldPlayBanner() -> Bool {
if let window = floatingWindow,
!window.isHidden {
return false
}
return bannerAutoPlayEnabled
}
}
...@@ -110,7 +110,7 @@ class YHVODPlayerViewController: YHBasePlayerViewController { ...@@ -110,7 +110,7 @@ class YHVODPlayerViewController: YHBasePlayerViewController {
guard let recordedDetailModel = viewModel.recordedDetailModel else { guard let recordedDetailModel = viewModel.recordedDetailModel else {
return return
} }
YHShareAlertView.show(image: recordedDetailModel.recorded_image, title: "@" + recordedDetailModel.account, subMessage: recordedDetailModel.recorded_title, linkUrl: recordedDetailModel.recorded_h5_url, isLive: false) YHShareAlertView.show(image: recordedDetailModel.recorded_image, title: "@" + recordedDetailModel.account, subMessage: recordedDetailModel.recorded_title, linkUrl: recordedDetailModel.recorded_h5_url, isLive: false, fromAiSale: true)
} }
// MARK: - Data Loading // MARK: - Data Loading
......
...@@ -21,7 +21,14 @@ protocol YHFloatingWindowDelegate: AnyObject { ...@@ -21,7 +21,14 @@ protocol YHFloatingWindowDelegate: AnyObject {
class YHFloatingWindow: NSObject { class YHFloatingWindow: NSObject {
// MARK: - Properties // MARK: - Properties
enum Source {
case configured // 配置产生的小窗(只在推荐页显示)
case userAction // 用户操作产生的小窗(全局显示)
}
weak var player: YHPlayer? weak var player: YHPlayer?
var source: Source = .userAction
weak var delegate: YHFloatingWindowDelegate? weak var delegate: YHFloatingWindowDelegate?
var playbackInfo: YHPlayerManager.PlaybackInfo? var playbackInfo: YHPlayerManager.PlaybackInfo?
...@@ -63,6 +70,20 @@ class YHFloatingWindow: NSObject { ...@@ -63,6 +70,20 @@ class YHFloatingWindow: NSObject {
private var initialDistance: CGFloat = 0 private var initialDistance: CGFloat = 0
private let scaleMultiplier: CGFloat = 1.5 private let scaleMultiplier: CGFloat = 1.5
var isHidden: Bool = false {
didSet {
if isHidden {
player?.isMuted = true
} else {
if source == .configured {
player?.isMuted = true
} else {
player?.isMuted = false
}
}
}
}
// UI组件 // UI组件
private lazy var closeButton: UIButton = { private lazy var closeButton: UIButton = {
let button = UIButton(type: .custom) let button = UIButton(type: .custom)
......
...@@ -11,6 +11,7 @@ import AttributedString ...@@ -11,6 +11,7 @@ import AttributedString
import Photos import Photos
class YHShareAlertView: UIView { class YHShareAlertView: UIView {
var fromAiSale: Bool = false
var centerView: UIView! var centerView: UIView!
var leftButton: YHShareButton! var leftButton: YHShareButton!
var centerButton: YHShareButton! var centerButton: YHShareButton!
...@@ -266,13 +267,14 @@ class YHShareAlertView: UIView { ...@@ -266,13 +267,14 @@ class YHShareAlertView: UIView {
dismiss() dismiss()
} }
static func show(image: String = "", title: String = "", subMessage: String = "", linkUrl: String = "", isLive: Bool = false) { static func show(image: String = "", title: String = "", subMessage: String = "", linkUrl: String = "", isLive: Bool = false, fromAiSale: Bool = false) {
let view = YHShareAlertView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: KScreenHeight)) let view = YHShareAlertView(frame: CGRect(x: 0, y: 0, width: KScreenWidth, height: KScreenHeight))
view.image = image view.image = image
view.title = title view.title = title
view.subMessage = subMessage view.subMessage = subMessage
view.linkUrl = linkUrl view.linkUrl = linkUrl
view.isLive = isLive view.isLive = isLive
view.fromAiSale = fromAiSale
let window = UIApplication.shared.yhKeyWindow() let window = UIApplication.shared.yhKeyWindow()
window?.addSubview(view) window?.addSubview(view)
} }
...@@ -293,8 +295,12 @@ class YHShareAlertView: UIView { ...@@ -293,8 +295,12 @@ class YHShareAlertView: UIView {
} }
@objc func wxClick() { @objc func wxClick() {
if fromAiSale {
YHShareManager.shared.sendLinkContent(subMessage, "", mainImageView.image ?? UIImage(), link: linkUrl)
} else {
YHShareManager.shared.sendLinkContent(title, subMessage, mainImageView.image ?? UIImage(), link: linkUrl) YHShareManager.shared.sendLinkContent(title, subMessage, mainImageView.image ?? UIImage(), link: linkUrl)
} }
}
func saveImageToPhotosAlbum(image: UIImage) { func saveImageToPhotosAlbum(image: UIImage) {
// 确保应用有权访问相册 // 确保应用有权访问相册
......
...@@ -84,6 +84,9 @@ class YHAllApiName { ...@@ -84,6 +84,9 @@ class YHAllApiName {
//获取签约用户信息 //获取签约用户信息
static let signerInfoApi = "super-app/infoflow/signer/info" static let signerInfoApi = "super-app/infoflow/signer/info"
// 获取首页小窗
static let homeFloatingLive = "super-app/live/app-live-latest"
} }
//接口 模块名 Common //接口 模块名 Common
......
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