初步修复视频不能投屏的问题
This commit is contained in:
parent
ad884b0055
commit
aef0834757
Binary file not shown.
@ -563,42 +563,10 @@
|
||||
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "440"
|
||||
endingLineNumber = "440"
|
||||
startingLineNumber = "567"
|
||||
endingLineNumber = "567"
|
||||
landmarkName = "navgationButtonClick2(sender:)"
|
||||
landmarkType = "7">
|
||||
<Locations>
|
||||
<Location
|
||||
uuid = "AC3AF843-C4D6-4749-834A-B1DCA686B7CC - 151cde592e5f7ae5"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
symbolName = "closure #1 (Swift.Int) -> () in SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -> ()"
|
||||
moduleName = "SwiftProject"
|
||||
usesParentBreakpointCondition = "Yes"
|
||||
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "437"
|
||||
endingLineNumber = "437"
|
||||
offsetFromSymbolStart = "608">
|
||||
</Location>
|
||||
<Location
|
||||
uuid = "AC3AF843-C4D6-4749-834A-B1DCA686B7CC - 151cde592e5f7b80"
|
||||
shouldBeEnabled = "Yes"
|
||||
ignoreCount = "0"
|
||||
continueAfterRunningActions = "No"
|
||||
symbolName = "closure #1 (Swift.Int) -> () in SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -> ()"
|
||||
moduleName = "SwiftProject"
|
||||
usesParentBreakpointCondition = "Yes"
|
||||
urlString = "file:///Users/aaa/Documents/IOS%20Dev/VR/SwiftProject/SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
|
||||
startingColumnNumber = "9223372036854775807"
|
||||
endingColumnNumber = "9223372036854775807"
|
||||
startingLineNumber = "442"
|
||||
endingLineNumber = "442"
|
||||
offsetFromSymbolStart = "608">
|
||||
</Location>
|
||||
</Locations>
|
||||
</BreakpointContent>
|
||||
</BreakpointProxy>
|
||||
<BreakpointProxy
|
||||
|
||||
@ -18,7 +18,7 @@ import UIKit
|
||||
import SVProgressHUD
|
||||
import Firebase
|
||||
import FirebaseCore
|
||||
|
||||
import AVFoundation
|
||||
@main
|
||||
|
||||
|
||||
@ -28,9 +28,17 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
|
||||
// var root:RootManager?
|
||||
var newWindow:UIWindow?
|
||||
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
|
||||
// Task {
|
||||
FirebaseApp.configure()
|
||||
// }
|
||||
|
||||
FirebaseApp.configure()
|
||||
|
||||
do {
|
||||
try AVAudioSession.sharedInstance().setActive(true)
|
||||
try AVAudioSession.sharedInstance().setCategory(.playback,options: .allowAirPlay)
|
||||
}
|
||||
catch {
|
||||
print("err: set audiosession:\(error)")
|
||||
}
|
||||
|
||||
|
||||
SVProgressHUD.setDefaultStyle(.dark)
|
||||
|
||||
|
||||
@ -6,6 +6,8 @@
|
||||
//
|
||||
|
||||
import UIKit
|
||||
import AVKit
|
||||
import AVFoundation
|
||||
|
||||
class ExternalSceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
|
||||
@ -14,13 +16,19 @@ class ExternalSceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
|
||||
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
|
||||
print("ExternalSceneDelegate scene.......")
|
||||
|
||||
// let ac = UISceneActivationConditions()
|
||||
// ac.canActivateForTargetContentIdentifierPredicate = NSPredicate(value: true)
|
||||
// ac.prefersToActivateForTargetContentIdentifierPredicate = NSPredicate(value: true)
|
||||
// scene.activationConditions = ac
|
||||
// self.window?.rootViewController = ZZHExternalViewController()
|
||||
// guard let _ = (scene as? UIWindowScene) else { return }
|
||||
// guard let rootViewController = window?.rootViewController else {
|
||||
// return
|
||||
// }
|
||||
|
||||
|
||||
|
||||
|
||||
}
|
||||
|
||||
func sceneDidDisconnect(_ scene: UIScene) {
|
||||
@ -36,6 +44,7 @@ class ExternalSceneDelegate: UIResponder, UIWindowSceneDelegate {
|
||||
// Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
|
||||
print("ExternalSceneDelegate sceneDidBecomeActive")
|
||||
}
|
||||
|
||||
|
||||
func sceneWillResignActive(_ scene: UIScene) {
|
||||
// Called when the scene will move from an active state to an inactive state.
|
||||
|
||||
@ -7,10 +7,14 @@
|
||||
|
||||
import Foundation
|
||||
import UIKit
|
||||
import AVKit
|
||||
|
||||
class ZZHExternalViewController: UIViewController {
|
||||
|
||||
var imageView: UIImageView?
|
||||
|
||||
// var avplayerController:AVPlayerViewController?
|
||||
// var player:AVPlayer?
|
||||
var playerLayer:AVPlayerLayer?
|
||||
override func viewDidLoad() {
|
||||
super.viewDidLoad()
|
||||
print("ZZHExternalViewController viewDidLoad..")
|
||||
@ -22,5 +26,17 @@ class ZZHExternalViewController: UIViewController {
|
||||
make.left.top.right.bottom.equalTo(0)
|
||||
})
|
||||
|
||||
|
||||
// player = AVPlayer()
|
||||
playerLayer = AVPlayerLayer()
|
||||
playerLayer!.frame = self.view.bounds
|
||||
self.view.layer.addSublayer(playerLayer!)
|
||||
//// player?.allowsExternalPlayback = true
|
||||
//// player?.usesExternalPlaybackWhileExternalScreenIsActive = true
|
||||
// avplayerController = AVPlayerViewController()
|
||||
// avplayerController?.player = player
|
||||
// self.addChild(avplayerController!)
|
||||
// self.view.addSubview(avplayerController!.view)
|
||||
// avplayerController!.view.frame = self.view.bounds
|
||||
}
|
||||
}
|
||||
|
||||
@ -39,5 +39,9 @@
|
||||
</array>
|
||||
</dict>
|
||||
</dict>
|
||||
<key>UIBackgroundModes</key>
|
||||
<array>
|
||||
<string>audio</string>
|
||||
</array>
|
||||
</dict>
|
||||
</plist>
|
||||
|
||||
@ -278,85 +278,22 @@ class CCSpatialPhotoDisplayController: BaseController {
|
||||
externalVC = ws.windows.first?.rootViewController as? ZZHExternalViewController
|
||||
externalDispalylink = ws.windows.first?.screen.displayLink(withTarget: self, selector: #selector(displayUpdate(caDisplayLink:)))
|
||||
externalDispalylink?.add(to: RunLoop.main, forMode: RunLoop.Mode.common)
|
||||
|
||||
externalVC?.imageView?.isHidden = false
|
||||
externalVC?.playerLayer?.isHidden = true
|
||||
}
|
||||
}
|
||||
// 获取所有打开的会话
|
||||
// let sessions:Set<UISceneSession> = UIApplication.shared.openSessions
|
||||
// sessions.forEach { ss in
|
||||
// print("role:\(ss.role.rawValue)")
|
||||
// }
|
||||
// // 过滤会话以找到来自其他屏幕的场景
|
||||
// let otherScreenSessions:Set<UISceneSession> = sessions.filter {
|
||||
// $0.role.rawValue.contains("External")
|
||||
// }
|
||||
//
|
||||
// otherScreenSessions.forEach { ssn in
|
||||
// print("ssn role:\(ssn.role.rawValue) first:\(otherScreenSessions.first)")
|
||||
// }
|
||||
//
|
||||
// UIApplication.shared.connectedScenes.forEach { us in
|
||||
// print("conn sc:\(us)")
|
||||
// }
|
||||
|
||||
|
||||
|
||||
// if let session = otherScreenSessions.first{
|
||||
// let ssar = UISceneSessionActivationRequest.init(session: session)
|
||||
// UIApplication.shared.activateSceneSession(for: ssar) { err in
|
||||
// print("error:\(err)")
|
||||
// }
|
||||
// guard let scene = session.scene else {
|
||||
// return
|
||||
// }
|
||||
// self.externalWindow.windowScene = scene as! UIWindowScene
|
||||
// let nvc = UIViewController()
|
||||
// self.externalWindow.rootViewController = nvc
|
||||
// var imageView = UIImageView(frame: CGRectMake(0, 0, KScreenHeight*2, KScreenHeight*2))
|
||||
// imageView.contentMode = .scaleAspectFit
|
||||
// externalImageView = imageView
|
||||
// nvc.view.addSubview(imageView)
|
||||
// self.externalWindow.isHidden = false
|
||||
// var dispalylink:CADisplayLink? = self.externalWindow.windowScene?.windows.first?.screen.displayLink(withTarget: self, selector: #selector(displayUpdate(caDisplayLink:)))
|
||||
// dispalylink?.add(to: RunLoop.main, forMode: RunLoop.Mode.common)
|
||||
// }
|
||||
// else {
|
||||
// print("未发现外接屏....")
|
||||
// }
|
||||
}
|
||||
else{
|
||||
print("变化为 断开。。。。")
|
||||
externalVC = nil
|
||||
externalDispalylink?.invalidate()
|
||||
externalDispalylink = nil
|
||||
// if let imv = externalImageView{
|
||||
// imv .removeFromSuperview()
|
||||
// }
|
||||
// externalImageView = nil
|
||||
// self.externalWindow.isHidden = true
|
||||
// self.externalWindow.rootViewController = nil
|
||||
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
// @objc func hasNewWindowExternal(notification:Notification){
|
||||
// print("hasNewWindowExternal notifi...")
|
||||
// let window = notification.userInfo?["newwindow"] as! UIWindow
|
||||
// let imageView = UIImageView(frame: CGRectMake(0, 0, KScreenHeight*2, KScreenHeight*2))
|
||||
// imageView.contentMode = .scaleAspectFit
|
||||
// externalImageView = imageView
|
||||
// window.rootViewController?.view.addSubview(imageView)
|
||||
// let dispalylink:CADisplayLink? = window.screen.displayLink(withTarget: self, selector: #selector(displayUpdate(caDisplayLink:)))
|
||||
// dispalylink?.add(to: RunLoop.main, forMode: RunLoop.Mode.common)
|
||||
//
|
||||
// }
|
||||
|
||||
|
||||
@objc func displayUpdate(caDisplayLink:CADisplayLink) {
|
||||
// if externalImageView?.image != mImgView.image {
|
||||
// externalImageView?.image = mImgView.image
|
||||
// }
|
||||
|
||||
if let has_exvc = externalVC {
|
||||
has_exvc.imageView?.image = mImgView.image
|
||||
}
|
||||
|
||||
@ -31,7 +31,8 @@ enum SpatialType : Int {
|
||||
}
|
||||
|
||||
class CCSpatialVideoDisplayController: BaseController {
|
||||
|
||||
var externalDispalylink:CADisplayLink?
|
||||
var externalVC:ZZHExternalViewController?
|
||||
var isAirPlayActive:Bool = false {
|
||||
didSet{
|
||||
//跟新selectedIndex、typeData的值
|
||||
@ -53,7 +54,10 @@ class CCSpatialVideoDisplayController: BaseController {
|
||||
(icon:"type_check",title:NSLocalizedString("交叉眼", comment: ""),isHiden:false)]
|
||||
}
|
||||
//更新串流UI
|
||||
setttinisScreenMirroring(isScreenMirroring: isAirPlayActive)
|
||||
// DispatchQueue.main.asyncAfter(deadline: .now() + 5, execute: {
|
||||
self.setttinisScreenMirroring(isScreenMirroring: self.isAirPlayActive)
|
||||
// })
|
||||
|
||||
}
|
||||
|
||||
|
||||
@ -231,7 +235,7 @@ class CCSpatialVideoDisplayController: BaseController {
|
||||
await self.loadVideoAssetReader()
|
||||
DispatchQueue.main.async {
|
||||
self.configureInfo()
|
||||
print("ccs viewdid load +++++++")
|
||||
// print("ccs viewdid load +++++++")
|
||||
// 检查当前是否已连接到 AirPlay 设备
|
||||
self.checkAirPlayStatus()
|
||||
}
|
||||
@ -241,9 +245,14 @@ class CCSpatialVideoDisplayController: BaseController {
|
||||
func configureInfo(){
|
||||
|
||||
print("getPlayerItem ========")
|
||||
let playerItem = self.getPlayerItem()
|
||||
// let playerItem = self.getPlayerItem()
|
||||
|
||||
// player = AVPlayer(playerItem: playerItem)
|
||||
player = AVPlayer()
|
||||
player?.allowsExternalPlayback = true
|
||||
player?.usesExternalPlaybackWhileExternalScreenIsActive = true
|
||||
|
||||
|
||||
player = AVPlayer(playerItem: playerItem)
|
||||
print("getPlayerItem >>>>>>>")
|
||||
self.view.backgroundColor = UIColor(hexString: "#060507")
|
||||
|
||||
@ -264,15 +273,17 @@ class CCSpatialVideoDisplayController: BaseController {
|
||||
playerController?.view.frame = CGRect.init(x: 0, y: 170, width: self.view.frame.size.width, height: 400)
|
||||
self.addChild(playerController!)
|
||||
self.view.addSubview(playerController!.view)
|
||||
|
||||
|
||||
self.view.addSubview(tipsButton)
|
||||
|
||||
|
||||
|
||||
|
||||
// 监听 AirPlay 设备的连接状态
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(airPlayStatusDidChange(_:)), name: AVAudioSession.routeChangeNotification, object: nil)
|
||||
//添加外接屏幕链接通知
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(exScreenWillConnectNotification(notification:)), name: UIScene.willConnectNotification, object: nil)
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(exScreenDisConnectNotification(notification:)), name: UIScene.didDisconnectNotification, object: nil)
|
||||
|
||||
|
||||
|
||||
|
||||
NotificationCenter.default.addObserver(self, selector: #selector(notification_PlayerEndTime(notification:)), name: AVPlayerItem.didPlayToEndTimeNotification, object: nil)
|
||||
@ -291,10 +302,16 @@ class CCSpatialVideoDisplayController: BaseController {
|
||||
|
||||
override func viewDidDisappear(_ animated: Bool) {
|
||||
super.viewDidDisappear(animated)
|
||||
if externalVC != nil {
|
||||
externalVC?.playerLayer?.player = nil
|
||||
}
|
||||
player?.pause()
|
||||
releaseVideoComposition()
|
||||
|
||||
let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_VideoDisplayController)
|
||||
Analytics.logEvent("preview_pv", parameters: ["refer_page":"视频预览页面","duration":sec])
|
||||
|
||||
|
||||
}
|
||||
|
||||
override func viewWillDisappear(_ animated: Bool) {
|
||||
@ -304,7 +321,31 @@ class CCSpatialVideoDisplayController: BaseController {
|
||||
|
||||
override func viewDidAppear(_ animated: Bool) {
|
||||
super.viewDidAppear(animated)
|
||||
|
||||
if self.player?.currentItem == nil {//此处需要判断是否为空:1,在didload的时候会设置一次,在viewDidDisappear的时候会被置空
|
||||
let playerItem = self.getPlayerItem()
|
||||
self.player?.replaceCurrentItem(with: playerItem)
|
||||
}
|
||||
|
||||
if self.externalVC != nil {//恢复外接屏幕的视频播放
|
||||
if self.externalVC?.playerLayer?.player == nil {
|
||||
self.activeSession()
|
||||
self.externalVC?.playerLayer?.player = self.player
|
||||
}
|
||||
}
|
||||
self.player?.play()
|
||||
// else if self.playerController?.player {
|
||||
// let playerItem = self.getPlayerItem()
|
||||
// Task {
|
||||
// print("ccs viewdid load ---------")
|
||||
// await self.loadVideoAssetReader()
|
||||
// DispatchQueue.main.async {[weak self] in
|
||||
// self?.player?.replaceCurrentItem(with: playerItem)
|
||||
// self?.player?.play()
|
||||
// }
|
||||
// }
|
||||
// }
|
||||
|
||||
}
|
||||
|
||||
//MARK: - 监听设备投流
|
||||
@ -320,6 +361,17 @@ class CCSpatialVideoDisplayController: BaseController {
|
||||
}
|
||||
}
|
||||
|
||||
@objc func exScreenWillConnectNotification(notification:Notification){
|
||||
print("exScreenWillConnectNotification>>>>>")
|
||||
airPlayStatusDidChange( notification)
|
||||
}
|
||||
|
||||
@objc func exScreenDisConnectNotification(notification:Notification){
|
||||
print("exScreenDisConnectNotification>>>>>")
|
||||
airPlayStatusDidChange( notification)
|
||||
}
|
||||
|
||||
|
||||
private func checkAirPlayStatus() {
|
||||
print("设备连接变化")
|
||||
|
||||
@ -331,74 +383,149 @@ class CCSpatialVideoDisplayController: BaseController {
|
||||
}
|
||||
|
||||
func setttinisScreenMirroring(isScreenMirroring:Bool){
|
||||
//已连接
|
||||
if(isScreenMirroring){
|
||||
print("已连接")
|
||||
link = true
|
||||
isPlaying = true
|
||||
playerController!.player!.usesExternalPlaybackWhileExternalScreenIsActive = true
|
||||
playerController!.player!.allowsExternalPlayback = true
|
||||
|
||||
//串流播放中
|
||||
mTopCenterTypeButton.setImage(UIImage.init(named: "linked_button"), for: .normal)
|
||||
mTopCenterTypeButton.setTitleColor(UIColor(hexString: "#D0C0FF"), for: .normal)
|
||||
mTopCenterTypeButton.layer.borderColor = UIColor(hexString: "#D0C0FF").cgColor
|
||||
mTopCenterTypeButton.backgroundColor = UIColor(hexString: "#5326D6")
|
||||
mTopCenterTypeButton.updateBtnEdgeInsets(style: .Left, space: 5)
|
||||
|
||||
|
||||
//展示弹出列表尾部
|
||||
if isPlaying {
|
||||
//正在串流中 --- 按钮显示为【结束串流】
|
||||
menuView.showFooterView(isShow: true, showText: NSLocalizedString("结束串流", comment: ""))
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("外部串流中", comment: ""), for: UIControl.State.normal)
|
||||
}else{
|
||||
//未串流 --- 按钮显示为【开始串流】
|
||||
menuView.showFooterView(isShow: true, showText: NSLocalizedString("开始串流", comment: ""))
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("已连接外部设备", comment: ""), for: UIControl.State.normal)
|
||||
}
|
||||
|
||||
|
||||
}else{
|
||||
//未连接
|
||||
print("未连接")
|
||||
link = false
|
||||
isPlaying = false
|
||||
// 当前未连接到 AirPlay 设备
|
||||
playerController!.player!.usesExternalPlaybackWhileExternalScreenIsActive = false
|
||||
playerController!.player!.allowsExternalPlayback = false
|
||||
|
||||
if self.selectedIndex == .monocular2D {
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("单眼2D", comment: ""), for: UIControl.State.normal)
|
||||
}else if self.selectedIndex == .redBlueSolid {
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("红蓝立体", comment: ""), for: UIControl.State.normal)
|
||||
}else if self.selectedIndex == .crossedEyes {
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("交叉眼", comment: ""), for: UIControl.State.normal)
|
||||
}
|
||||
else if self.selectedIndex == .parallelEyes {
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("平行眼", comment: ""), for: UIControl.State.normal)
|
||||
}
|
||||
|
||||
mTopCenterTypeButton.setImage(UIImage.init(named: "type_button_arrow_down"), for: .normal)
|
||||
mTopCenterTypeButton.setTitleColor(UIColor.white, for: UIControl.State.normal)
|
||||
mTopCenterTypeButton.layer.borderColor = UIColor.white.cgColor
|
||||
mTopCenterTypeButton.backgroundColor = UIColor(hexString: "#1F1E20")
|
||||
mTopCenterTypeButton.updateBtnEdgeInsets(style: .Right, space: 10)
|
||||
|
||||
//隐藏弹出列表尾部
|
||||
menuView.showFooterView(isShow: false, showText: "")
|
||||
|
||||
releaseVideoComposition()
|
||||
|
||||
//已连接
|
||||
if(isScreenMirroring){
|
||||
self.dealTaskWhenExternalScreenConnect()
|
||||
|
||||
|
||||
}else{
|
||||
//未连接
|
||||
self.dealTaskWhenExternalScreenDisConnect()
|
||||
}
|
||||
|
||||
|
||||
}
|
||||
|
||||
//激活一下session
|
||||
func activeSession(){
|
||||
do {
|
||||
try AVAudioSession.sharedInstance().setActive(true)
|
||||
try AVAudioSession.sharedInstance().setCategory(.playback,options: .allowAirPlay)
|
||||
}
|
||||
catch {
|
||||
print("err: set audiosession:\(error)")
|
||||
}
|
||||
}
|
||||
|
||||
//当外接屏幕连接时
|
||||
func dealTaskWhenExternalScreenConnect(){
|
||||
if link == true {
|
||||
return
|
||||
}
|
||||
|
||||
link = true
|
||||
isPlaying = true
|
||||
let playerItem = self.getPlayerItem()
|
||||
player?.replaceCurrentItem(with: playerItem)
|
||||
print("外接屏幕已连接.....")
|
||||
activeSession()
|
||||
|
||||
UIApplication.shared.connectedScenes.forEach { us in
|
||||
print("uisence:\(us)\n")
|
||||
let ws = us as! UIWindowScene
|
||||
if ws.session.role.rawValue == "UIWindowSceneSessionRoleExternalDisplayNonInteractive"{
|
||||
externalVC = ws.windows.first?.rootViewController as? ZZHExternalViewController
|
||||
if let evc = externalVC {
|
||||
if let ed = externalDispalylink {
|
||||
externalDispalylink?.invalidate()
|
||||
externalDispalylink = nil
|
||||
}
|
||||
externalDispalylink = ws.windows.first?.screen.displayLink(withTarget: self, selector: #selector(displayUpdate(caDisplayLink:)))
|
||||
externalDispalylink?.add(to: RunLoop.main, forMode: RunLoop.Mode.common)
|
||||
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
//串流播放中
|
||||
mTopCenterTypeButton.setImage(UIImage.init(named: "linked_button"), for: .normal)
|
||||
mTopCenterTypeButton.setTitleColor(UIColor(hexString: "#D0C0FF"), for: .normal)
|
||||
mTopCenterTypeButton.layer.borderColor = UIColor(hexString: "#D0C0FF").cgColor
|
||||
mTopCenterTypeButton.backgroundColor = UIColor(hexString: "#5326D6")
|
||||
mTopCenterTypeButton.updateBtnEdgeInsets(style: .Left, space: 5)
|
||||
|
||||
|
||||
//展示弹出列表尾部
|
||||
if isPlaying {
|
||||
//正在串流中 --- 按钮显示为【结束串流】
|
||||
menuView.showFooterView(isShow: true, showText: NSLocalizedString("结束串流", comment: ""))
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("外部串流中", comment: ""), for: UIControl.State.normal)
|
||||
}else{
|
||||
//未串流 --- 按钮显示为【开始串流】
|
||||
menuView.showFooterView(isShow: true, showText: NSLocalizedString("开始串流", comment: ""))
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("已连接外部设备", comment: ""), for: UIControl.State.normal)
|
||||
}
|
||||
}
|
||||
|
||||
//当外接屏幕断开时
|
||||
func dealTaskWhenExternalScreenDisConnect(){
|
||||
print("外接屏幕已断开.....")
|
||||
let playerItem = self.getPlayerItem()
|
||||
player?.replaceCurrentItem(with: playerItem)
|
||||
|
||||
link = false
|
||||
isPlaying = false
|
||||
// 当前未连接到 AirPlay 设备
|
||||
if self.selectedIndex == .monocular2D {
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("单眼2D", comment: ""), for: UIControl.State.normal)
|
||||
}else if self.selectedIndex == .redBlueSolid {
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("红蓝立体", comment: ""), for: UIControl.State.normal)
|
||||
}else if self.selectedIndex == .crossedEyes {
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("交叉眼", comment: ""), for: UIControl.State.normal)
|
||||
}
|
||||
else if self.selectedIndex == .parallelEyes {
|
||||
mTopCenterTypeButton.setTitle(NSLocalizedString("平行眼", comment: ""), for: UIControl.State.normal)
|
||||
}
|
||||
|
||||
mTopCenterTypeButton.setImage(UIImage.init(named: "type_button_arrow_down"), for: .normal)
|
||||
mTopCenterTypeButton.setTitleColor(UIColor.white, for: UIControl.State.normal)
|
||||
mTopCenterTypeButton.layer.borderColor = UIColor.white.cgColor
|
||||
mTopCenterTypeButton.backgroundColor = UIColor(hexString: "#1F1E20")
|
||||
mTopCenterTypeButton.updateBtnEdgeInsets(style: .Right, space: 10)
|
||||
|
||||
//隐藏弹出列表尾部
|
||||
menuView.showFooterView(isShow: false, showText: "")
|
||||
externalVC?.playerLayer?.player = nil
|
||||
self.playerController?.player = player
|
||||
player?.play()
|
||||
}
|
||||
|
||||
@objc func displayUpdate(caDisplayLink:CADisplayLink) {
|
||||
if let has_exvc = externalVC {
|
||||
if has_exvc.playerLayer?.player == nil {
|
||||
has_exvc.imageView?.isHidden = true
|
||||
has_exvc.playerLayer?.isHidden = false
|
||||
self.playerController?.player = nil
|
||||
has_exvc.playerLayer?.player = player
|
||||
player?.play()
|
||||
// externalDispalylink?.invalidate()
|
||||
// externalDispalylink = nil
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
|
||||
deinit {
|
||||
print("patialvideodisplaycontroler deinit......")
|
||||
self.player?.currentItem?.videoComposition = nil
|
||||
|
||||
releaseVideoComposition()
|
||||
assetReader?.cancelReading()
|
||||
NotificationCenter.default.removeObserver(self)
|
||||
}
|
||||
|
||||
func releaseVideoComposition() {
|
||||
if let ed = externalDispalylink {
|
||||
externalDispalylink?.invalidate()
|
||||
externalDispalylink = nil
|
||||
}
|
||||
self.player?.currentItem?.videoComposition = nil
|
||||
self.player?.replaceCurrentItem(with: nil)
|
||||
}
|
||||
|
||||
|
||||
//MARK: - action
|
||||
@objc public func navgationButtonClick2(sender:UIButton){
|
||||
|
||||
@ -113,6 +113,11 @@ class VRVideoTransformController: BaseController {
|
||||
Analytics.logEvent("transcode_video_pv", parameters: ["refer_page":"视频转码页面","duration":sec])
|
||||
}
|
||||
|
||||
override func viewWillDisappear(_ animated: Bool) {
|
||||
super.viewWillDisappear(animated)
|
||||
self.mAvPlayer?.player?.pause()
|
||||
}
|
||||
|
||||
deinit {
|
||||
print("deinit--class:\(String(describing: object_getClass(self))) objc:\(self)")
|
||||
}
|
||||
|
||||
Loading…
Reference in New Issue
Block a user