完成图片投屏的功能

This commit is contained in:
bluesea 2024-03-19 12:05:38 +08:00
parent d6cbb444f0
commit 079c4693cc

View File

@ -22,6 +22,13 @@ enum VideoReaderError : Error {
class CCSpatialPhotoDisplayController: BaseController {
//
lazy var externalWindow:UIWindow = {
return UIWindow(frame: self.view.bounds)
}()
var externalImageView:UIImageView?
var player:AVPlayer = AVPlayer()
var outputVideoURL:URL?
@ -115,10 +122,6 @@ class CCSpatialPhotoDisplayController: BaseController {
lazy var menuView: CCSpatialDisplayTypeView = {
//icon
// let popData = [(icon:"type_check",title:"2D",isHiden:false),
// (icon:"type_check",title:"",isHiden:false),
// (icon:"type_check",title:"",isHiden:false),
// (icon:"type_check",title:"",isHiden:false)]
//
let parameters:[CCSpatialDisplayTypeConfigure] = [
@ -138,8 +141,23 @@ class CCSpatialPhotoDisplayController: BaseController {
return popMenu
}()
var isAirPlayActive:Bool = false {
didSet{
//UI
setttinisScreenMirroring(isScreenMirroring: isAirPlayActive)
}
}
deinit {
NotificationCenter.default.removeObserver(self)
}
override func viewDidLoad() {
super.viewDidLoad()
//
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)
self.view.backgroundColor = UIColor(hexString: "#060507")
outputVideoURL = URL.documentsDirectory.appending(path:"output11114.jpg")
@ -162,12 +180,7 @@ class CCSpatialPhotoDisplayController: BaseController {
image = image?.getUpImg()
mImgView.image = image
// dvc = UIDocumentViewController()
// self.addChild(dvc!)
// self.view.addSubview(dvc!.view)
// var uidc = UIDocument(fileURL: URL(string: "https://nimg.ws.126.net/?url=http%3A%2F%2Fdingyue.ws.126.net%2F2024%2F0208%2F17870067j00s8iidm0066d000xc00mzp.jpg&thumbnail=660x2147483647&quality=80&type=jpg")!)
// dvc?.document = uidc
let isSpatial = isSpatialImage(originalData: originalData!)
if !isSpatial {
print("这不是一张空间图片")
@ -188,8 +201,66 @@ class CCSpatialPhotoDisplayController: BaseController {
self.view.addSubview(mImgView)
checkAirPlayStatus()
}
//MARK: -
@objc func exScreenWillConnectNotification(notification:Notification) {
checkAirPlayStatus()
print("外连接。。。。。")
}
@objc func exScreenDisConnectNotification(notification:Notification) {
print("已断开 屏幕。。。。。")
checkAirPlayStatus()
}
private func checkAirPlayStatus() {
print("设备连接变化")
let currentRoute = AVAudioSession.sharedInstance().currentRoute
self.isAirPlayActive = currentRoute.outputs.contains { output in
return output.portType == AVAudioSession.Port.HDMI ||
output.portType == AVAudioSession.Port.airPlay
}
}
func setttinisScreenMirroring(isScreenMirroring:Bool){
//
if(isScreenMirroring){
if let screen = UIScreen.screens.last {
self.externalWindow.screen = screen
let nvc = UIViewController()
self.externalWindow.rootViewController = nvc
var imageView = UIImageView(frame: CGRectMake(500, 0, KScreenHeight, KScreenHeight))
imageView.contentMode = .scaleAspectFit
externalImageView = imageView
nvc.view.addSubview(imageView)
self.externalWindow.isHidden = false
var dispalylink:CADisplayLink? = screen.displayLink(withTarget: self, selector: #selector(displayUpdate(caDisplayLink:)))
dispalylink?.add(to: RunLoop.main, forMode: RunLoop.Mode.common)
}
}
else{
if let imv = externalImageView{
imv .removeFromSuperview()
}
externalImageView = nil
self.externalWindow.isHidden = true
self.externalWindow.rootViewController = nil
}
}
@objc func displayUpdate(caDisplayLink:CADisplayLink) {
if externalImageView?.image != mImgView.image {
externalImageView?.image = mImgView.image
}
}
@ -329,9 +400,16 @@ class CCSpatialPhotoDisplayController: BaseController {
}
}
if selectedIndex != 0 {
SVProgressHUD.showInfo(withStatus: "串流VR眼镜建设中")
}
// if selectedIndex != 0 {
// SVProgressHUD.showInfo(withStatus: "VR")
// }
// if let imv = externalImageView {
// imv.image = mImgView.image
// imv.image = mImgView.image
// self.externalWindow.layoutIfNeeded()
// self.externalWindow.viewController()?.view.setNeedsDisplay()
//
// }
}
//MARK: -
@ -392,21 +470,7 @@ class CCSpatialPhotoDisplayController: BaseController {
return buffer
}
func airPlayScreen(imageData:NSData){
//
// let airplaySession = UIScreen.main.startAirPlaySession(withCompletionHandler: { (success, error) in
// if success {
// print("")
// } else {
// print("\(error)")
// }
// })
//
// // AirPlay
// airplaySession.send(imageData, withType: .image)
}
//
func joinImages2( leftImage:CIImage, rightImage:CIImage) -> CIImage {