Bläddra i källkod

Improved video

marinofaggiana 4 år sedan
förälder
incheckning
e081e462eb

+ 62 - 25
iOSClient/Viewer/NCViewerImage/NCViewerImage.swift

@@ -43,6 +43,8 @@ class NCViewerImage: UIViewController, UIGestureRecognizerDelegate {
         return self.pageViewController.viewControllers![0] as! NCViewerImageZoom
     }
     
+    let appDelegate = UIApplication.shared.delegate as! AppDelegate
+
     var metadatas: [tableMetadata] = []
     var currentMetadata: tableMetadata = tableMetadata()
     var currentIndex = 0
@@ -58,9 +60,10 @@ class NCViewerImage: UIViewController, UIGestureRecognizerDelegate {
     var singleTapGestureRecognizer: UITapGestureRecognizer!
     var longtapGestureRecognizer: UILongPressGestureRecognizer!
     
-    private var playerVideo: AVPlayer?
+    private var player: AVPlayer?
     private var videoLayer: AVPlayerLayer?
     private var timeObserverToken: Any?
+    private var didPlayToEndTimeObserverToken: Any?
 
     override func viewDidLoad() {
         super.viewDidLoad()
@@ -120,6 +123,12 @@ class NCViewerImage: UIViewController, UIGestureRecognizerDelegate {
         navigationController?.popViewController(animated: true)
     }
     
+    override func viewDidDisappear(_ animated: Bool) {
+        super.viewDidDisappear(animated)
+        
+        videoStop()
+    }
+    
     //MARK: - NotificationCenter
 
     @objc func downloadedFile(_ notification: NSNotification) {
@@ -331,7 +340,7 @@ class NCViewerImage: UIViewController, UIGestureRecognizerDelegate {
                 if CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
                     
                     AudioServicesPlaySystemSound(1519) // peek feedback
-                    self.playVideo(metadata: metadata)
+                    self.videoPlayWith(metadata: metadata)
                     
                 } else {
                     
@@ -354,7 +363,7 @@ class NCViewerImage: UIViewController, UIGestureRecognizerDelegate {
                             
                             if gestureRecognizer.state == .began {
                                 AudioServicesPlaySystemSound(1519) // peek feedback
-                                self.playVideo(metadata: metadata)
+                                self.videoPlayWith(metadata: metadata)
                             }
                         }
                     }
@@ -384,10 +393,8 @@ class NCViewerImage: UIViewController, UIGestureRecognizerDelegate {
         
         if (currentMetadata.typeFile == k_metadataTypeFile_video || currentMetadata.typeFile == k_metadataTypeFile_audio) {
 
-            if CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
-                toolBar.isHidden = false
-                playVideo(metadata: metadata)
-            }
+            toolBar.isHidden = false
+            videoPlayWith(metadata: metadata)
         }
     }
     
@@ -498,22 +505,42 @@ class NCViewerImage: UIViewController, UIGestureRecognizerDelegate {
         return image
     }
     
-    func playVideo(metadata: tableMetadata) {
+    func videoPlayWith(metadata: tableMetadata) {
                 
+        var videoURL: URL?
+        
         currentViewerImageZoom?.statusViewImage.isHidden = true
         currentViewerImageZoom?.statusLabel.isHidden = true
         
-        playerVideo = AVPlayer(url: URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView)!))
-        videoLayer = AVPlayerLayer(player: playerVideo)
+        NCKTVHTTPCache.shared.startProxy(user: appDelegate.user, password: appDelegate.password, metadata: metadata)
+
+        if CCUtility.fileProviderStorageExists(metadata.ocId, fileNameView: metadata.fileNameView) {
+            
+            videoURL = URL(fileURLWithPath: CCUtility.getDirectoryProviderStorageOcId(metadata.ocId, fileNameView: metadata.fileNameView))
+            
+        } else {
+            
+            guard let stringURL = (metadata.serverUrl + "/" + metadata.fileName).addingPercentEncoding(withAllowedCharacters: .urlQueryAllowed) else {
+                return
+            }
+            
+            videoURL = NCKTVHTTPCache.shared.getProxyURL(stringURL: stringURL)
+        }
         
-        if videoLayer != nil && currentViewerImageZoom != nil {
+        if let url = videoURL {
             
-            videoLayer!.frame = currentViewerImageZoom!.imageView.bounds
-            videoLayer!.videoGravity = AVLayerVideoGravity.resizeAspectFill
+            player = AVPlayer(url: url)
+            videoLayer = AVPlayerLayer(player: player)
             
-            currentViewerImageZoom!.imageView.layer.addSublayer(videoLayer!)
-    
-            videoPlay()
+            if videoLayer != nil && currentViewerImageZoom != nil {
+            
+                videoLayer!.frame = currentViewerImageZoom!.imageView.bounds
+                videoLayer!.videoGravity = AVLayerVideoGravity.resizeAspectFill
+                
+                currentViewerImageZoom!.imageView.layer.addSublayer(videoLayer!)
+                
+                videoPlay()
+            }
         }
     }
     
@@ -523,13 +550,13 @@ class NCViewerImage: UIViewController, UIGestureRecognizerDelegate {
         
         if keyPath != nil && keyPath == "rate" {
             
-            if playerVideo?.rate == 1 {
+            if player?.rate == 1 {
                 print("start")
                 let item = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.pause, target: self, action: #selector(videoPause))
                 toolBar.setItems([item], animated: true)
             } else {
                 print("pause")
-                let item = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.play, target: self, action: #selector(self.videoPlay))
+                let item = UIBarButtonItem(barButtonSystemItem: UIBarButtonItem.SystemItem.play, target: self, action: #selector(videoPlay))
                 toolBar.setItems([item], animated: true)
             }
         }
@@ -540,7 +567,7 @@ class NCViewerImage: UIViewController, UIGestureRecognizerDelegate {
     }
     
     @objc func videoPause() {
-        playerVideo?.pause()
+        player?.pause()
     }
     
     @objc func videoPlay() {
@@ -560,21 +587,31 @@ class NCViewerImage: UIViewController, UIGestureRecognizerDelegate {
         
         // At end go back to start
         NotificationCenter.default.addObserver(forName: .AVPlayerItemDidPlayToEndTime, object: nil, queue: .main) { (notification) in
-            self.playerVideo?.seek(to: CMTime.zero)
+            self.player?.seek(to: CMTime.zero)
         }
                     
-        playerVideo?.addObserver(self, forKeyPath: "rate", options: [], context: nil)
+        didPlayToEndTimeObserverToken = player?.addObserver(self, forKeyPath: "rate", options: [], context: nil)
         
-        playerVideo?.play()
+        player?.play()
     }
     
     @objc func videoStop() {
-        playerVideo?.pause()
-        self.playerVideo?.seek(to: CMTime.zero)
+        
+        player?.pause()
+        player?.seek(to: CMTime.zero)
+        
+        if didPlayToEndTimeObserverToken != nil {
+            player?.removeObserver(self, forKeyPath: "rate", context: nil)
+            NotificationCenter.default.removeObserver(self, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
+            self.didPlayToEndTimeObserverToken = nil
+        }
+        
         if let timeObserverToken = timeObserverToken {
-            playerVideo?.removeTimeObserver(timeObserverToken)
+            player?.removeTimeObserver(timeObserverToken)
             self.timeObserverToken = nil
         }
+        
+        NCKTVHTTPCache.shared.stopProxy()
     }
 }
 

+ 4 - 7
iOSClient/Viewer/NCViewerVideoAudio/NCViewerVideoAudio.swift

@@ -67,7 +67,10 @@ class NCViewerVideoAudio: AVPlayerViewController {
         super.viewDidDisappear(animated)
         
         player?.pause()
-        removeObserver()
+        
+        player?.removeObserver(self, forKeyPath: "rate", context: nil)
+        NotificationCenter.default.removeObserver(self, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
+        
         NCKTVHTTPCache.shared.stopProxy()
     }
     
@@ -79,10 +82,4 @@ class NCViewerVideoAudio: AVPlayerViewController {
             NCKTVHTTPCache.shared.saveCache(metadata: metadata)
         }
     }
-    
-    @objc func removeObserver() {
-        
-        player?.removeObserver(self, forKeyPath: "rate", context: nil)
-        NotificationCenter.default.removeObserver(self, name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: nil)
-    }
 }