初步修复视频不能投屏的问题

This commit is contained in:
bluesea 2024-04-08 16:37:08 +08:00
parent ad884b0055
commit aef0834757
9 changed files with 247 additions and 173 deletions

View File

@ -563,42 +563,10 @@
filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift" filePath = "SwiftProject/Project/Controller/RecordingVideo/CCSpatialVideoDisplayController/CCSpatialVideoDisplayController.swift"
startingColumnNumber = "9223372036854775807" startingColumnNumber = "9223372036854775807"
endingColumnNumber = "9223372036854775807" endingColumnNumber = "9223372036854775807"
startingLineNumber = "440" startingLineNumber = "567"
endingLineNumber = "440" endingLineNumber = "567"
landmarkName = "navgationButtonClick2(sender:)" landmarkName = "navgationButtonClick2(sender:)"
landmarkType = "7"> landmarkType = "7">
<Locations>
<Location
uuid = "AC3AF843-C4D6-4749-834A-B1DCA686B7CC - 151cde592e5f7ae5"
shouldBeEnabled = "Yes"
ignoreCount = "0"
continueAfterRunningActions = "No"
symbolName = "closure #1 (Swift.Int) -&gt; () in SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -&gt; ()"
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) -&gt; () in SwiftProject.CCSpatialVideoDisplayController.navgationButtonClick2(sender: __C.UIButton) -&gt; ()"
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> </BreakpointContent>
</BreakpointProxy> </BreakpointProxy>
<BreakpointProxy <BreakpointProxy

View File

@ -18,7 +18,7 @@ import UIKit
import SVProgressHUD import SVProgressHUD
import Firebase import Firebase
import FirebaseCore import FirebaseCore
import AVFoundation
@main @main
@ -28,9 +28,17 @@ class AppDelegate: UIResponder, UIApplicationDelegate {
// var root:RootManager? // var root:RootManager?
var newWindow:UIWindow? var newWindow:UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool { 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) SVProgressHUD.setDefaultStyle(.dark)

View File

@ -6,6 +6,8 @@
// //
import UIKit import UIKit
import AVKit
import AVFoundation
class ExternalSceneDelegate: UIResponder, UIWindowSceneDelegate { class ExternalSceneDelegate: UIResponder, UIWindowSceneDelegate {
@ -14,13 +16,19 @@ class ExternalSceneDelegate: UIResponder, UIWindowSceneDelegate {
func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) { func scene(_ scene: UIScene, willConnectTo session: UISceneSession, options connectionOptions: UIScene.ConnectionOptions) {
print("ExternalSceneDelegate scene.......") print("ExternalSceneDelegate scene.......")
// let ac = UISceneActivationConditions()
// ac.canActivateForTargetContentIdentifierPredicate = NSPredicate(value: true)
// ac.prefersToActivateForTargetContentIdentifierPredicate = NSPredicate(value: true)
// scene.activationConditions = ac
// self.window?.rootViewController = ZZHExternalViewController() // self.window?.rootViewController = ZZHExternalViewController()
// guard let _ = (scene as? UIWindowScene) else { return } // guard let _ = (scene as? UIWindowScene) else { return }
// guard let rootViewController = window?.rootViewController else { // guard let rootViewController = window?.rootViewController else {
// return // return
// } // }
} }
func sceneDidDisconnect(_ scene: UIScene) { 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. // Use this method to restart any tasks that were paused (or not yet started) when the scene was inactive.
print("ExternalSceneDelegate sceneDidBecomeActive") print("ExternalSceneDelegate sceneDidBecomeActive")
} }
func sceneWillResignActive(_ scene: UIScene) { func sceneWillResignActive(_ scene: UIScene) {
// Called when the scene will move from an active state to an inactive state. // Called when the scene will move from an active state to an inactive state.

View File

@ -7,10 +7,14 @@
import Foundation import Foundation
import UIKit import UIKit
import AVKit
class ZZHExternalViewController: UIViewController { class ZZHExternalViewController: UIViewController {
var imageView: UIImageView? var imageView: UIImageView?
// var avplayerController:AVPlayerViewController?
// var player:AVPlayer?
var playerLayer:AVPlayerLayer?
override func viewDidLoad() { override func viewDidLoad() {
super.viewDidLoad() super.viewDidLoad()
print("ZZHExternalViewController viewDidLoad..") print("ZZHExternalViewController viewDidLoad..")
@ -22,5 +26,17 @@ class ZZHExternalViewController: UIViewController {
make.left.top.right.bottom.equalTo(0) 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
} }
} }

View File

@ -39,5 +39,9 @@
</array> </array>
</dict> </dict>
</dict> </dict>
<key>UIBackgroundModes</key>
<array>
<string>audio</string>
</array>
</dict> </dict>
</plist> </plist>

View File

@ -278,85 +278,22 @@ class CCSpatialPhotoDisplayController: BaseController {
externalVC = ws.windows.first?.rootViewController as? ZZHExternalViewController externalVC = ws.windows.first?.rootViewController as? ZZHExternalViewController
externalDispalylink = ws.windows.first?.screen.displayLink(withTarget: self, selector: #selector(displayUpdate(caDisplayLink:))) externalDispalylink = ws.windows.first?.screen.displayLink(withTarget: self, selector: #selector(displayUpdate(caDisplayLink:)))
externalDispalylink?.add(to: RunLoop.main, forMode: RunLoop.Mode.common) 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{ else{
print("变化为 断开。。。。") print("变化为 断开。。。。")
externalVC = nil externalVC = nil
externalDispalylink?.invalidate() externalDispalylink?.invalidate()
externalDispalylink = nil 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) { @objc func displayUpdate(caDisplayLink:CADisplayLink) {
// if externalImageView?.image != mImgView.image {
// externalImageView?.image = mImgView.image
// }
if let has_exvc = externalVC { if let has_exvc = externalVC {
has_exvc.imageView?.image = mImgView.image has_exvc.imageView?.image = mImgView.image
} }

View File

@ -31,7 +31,8 @@ enum SpatialType : Int {
} }
class CCSpatialVideoDisplayController: BaseController { class CCSpatialVideoDisplayController: BaseController {
var externalDispalylink:CADisplayLink?
var externalVC:ZZHExternalViewController?
var isAirPlayActive:Bool = false { var isAirPlayActive:Bool = false {
didSet{ didSet{
//selectedIndextypeData //selectedIndextypeData
@ -53,7 +54,10 @@ class CCSpatialVideoDisplayController: BaseController {
(icon:"type_check",title:NSLocalizedString("交叉眼", comment: ""),isHiden:false)] (icon:"type_check",title:NSLocalizedString("交叉眼", comment: ""),isHiden:false)]
} }
//UI //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() await self.loadVideoAssetReader()
DispatchQueue.main.async { DispatchQueue.main.async {
self.configureInfo() self.configureInfo()
print("ccs viewdid load +++++++") // print("ccs viewdid load +++++++")
// AirPlay // AirPlay
self.checkAirPlayStatus() self.checkAirPlayStatus()
} }
@ -241,9 +245,14 @@ class CCSpatialVideoDisplayController: BaseController {
func configureInfo(){ func configureInfo(){
print("getPlayerItem ========") 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 >>>>>>>") print("getPlayerItem >>>>>>>")
self.view.backgroundColor = UIColor(hexString: "#060507") 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) playerController?.view.frame = CGRect.init(x: 0, y: 170, width: self.view.frame.size.width, height: 400)
self.addChild(playerController!) self.addChild(playerController!)
self.view.addSubview(playerController!.view) self.view.addSubview(playerController!.view)
self.view.addSubview(tipsButton) self.view.addSubview(tipsButton)
// AirPlay // 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) 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) { override func viewDidDisappear(_ animated: Bool) {
super.viewDidDisappear(animated) super.viewDidDisappear(animated)
if externalVC != nil {
externalVC?.playerLayer?.player = nil
}
player?.pause() player?.pause()
releaseVideoComposition()
let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_VideoDisplayController) let sec:TimeInterval = ZZHHelper.getSecFromUserDefaultByKey(kNowTimeToUserDefaultKey_VideoDisplayController)
Analytics.logEvent("preview_pv", parameters: ["refer_page":"视频预览页面","duration":sec]) Analytics.logEvent("preview_pv", parameters: ["refer_page":"视频预览页面","duration":sec])
} }
override func viewWillDisappear(_ animated: Bool) { override func viewWillDisappear(_ animated: Bool) {
@ -304,7 +321,31 @@ class CCSpatialVideoDisplayController: BaseController {
override func viewDidAppear(_ animated: Bool) { override func viewDidAppear(_ animated: Bool) {
super.viewDidAppear(animated) 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: - //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() { private func checkAirPlayStatus() {
print("设备连接变化") print("设备连接变化")
@ -331,74 +383,149 @@ class CCSpatialVideoDisplayController: BaseController {
} }
func setttinisScreenMirroring(isScreenMirroring:Bool){ func setttinisScreenMirroring(isScreenMirroring:Bool){
// releaseVideoComposition()
if(isScreenMirroring){
print("已连接") //
link = true if(isScreenMirroring){
isPlaying = true self.dealTaskWhenExternalScreenConnect()
playerController!.player!.usesExternalPlaybackWhileExternalScreenIsActive = true
playerController!.player!.allowsExternalPlayback = true
}else{
// //
mTopCenterTypeButton.setImage(UIImage.init(named: "linked_button"), for: .normal) self.dealTaskWhenExternalScreenDisConnect()
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) }
//session
// func activeSession(){
if isPlaying { do {
// --- try AVAudioSession.sharedInstance().setActive(true)
menuView.showFooterView(isShow: true, showText: NSLocalizedString("结束串流", comment: "")) try AVAudioSession.sharedInstance().setCategory(.playback,options: .allowAirPlay)
mTopCenterTypeButton.setTitle(NSLocalizedString("外部串流中", comment: ""), for: UIControl.State.normal) }
}else{ catch {
// --- print("err: set audiosession:\(error)")
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: "")
} }
} }
//
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 { deinit {
print("patialvideodisplaycontroler deinit......") print("patialvideodisplaycontroler deinit......")
self.player?.currentItem?.videoComposition = nil releaseVideoComposition()
assetReader?.cancelReading() assetReader?.cancelReading()
NotificationCenter.default.removeObserver(self) 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 //MARK: - action
@objc public func navgationButtonClick2(sender:UIButton){ @objc public func navgationButtonClick2(sender:UIButton){

View File

@ -113,6 +113,11 @@ class VRVideoTransformController: BaseController {
Analytics.logEvent("transcode_video_pv", parameters: ["refer_page":"视频转码页面","duration":sec]) Analytics.logEvent("transcode_video_pv", parameters: ["refer_page":"视频转码页面","duration":sec])
} }
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
self.mAvPlayer?.player?.pause()
}
deinit { deinit {
print("deinit--class:\(String(describing: object_getClass(self))) objc:\(self)") print("deinit--class:\(String(describing: object_getClass(self))) objc:\(self)")
} }