2016-03-31 9 views
3

Ich engagierte sich in diesem mehr als zwei Tage. Ich konnte keine Lösung finden.Detect Video im Vollbildmodus im Hoch- oder Querformat

Ich habe Anforderung ist Video sollte Portrait Inline, Vollbild, Landschaft spielen. Mein Problem hier ist, wie man das Video findet, das Vollbildlandschaft oder Portrait spielt. Ich habe viewWillTransitionToSize Methode implementiert. Aber hat Vollbild-Pfeil-Taste. Wie ich feststellen kann, dass der Benutzer auf diese Option geklickt hat.

Die zweite Anforderung, sobald das Video abgeschlossen ist, erstellen Sie eine Ansicht über Video-Show-Wiedergabe oder nächste oder vorherige Option.

Dies ist mein Code;

if videoCellVal == nil { 
      videoCellVal = videoCell 

      comPlayerControl = AVPlayerViewController() 

      if let player = comPlayerControl { 

       let videoURL: String = "http://cdnapi.kaltura.com/p/11/sp/11/playManifest/entryId/"+selectedSubmission.transcodeRefId+"/format/applehttp/protocol/http/a.m3u8" 
       let playerItem = AVPlayerItem(URL: NSURL(string: videoURL)!) 
       commmentPlayer = AVPlayer(playerItem: playerItem) 
       player.player = commmentPlayer 
       player.view.frame = videoCell.frame 
       player.view.sizeToFit() 
       player.showsPlaybackControls = true 
       NSNotificationCenter.defaultCenter().addObserver(self, selector: "playerDidFinishPlaying:", 
        name: AVPlayerItemDidPlayToEndTimeNotification, object: playerItem) 


       videoCell.addSubview(player.view) 
      } 

     } 

     func playerDidFinishPlaying(note: NSNotification) { 
    print("Video Finished") 
    let DynamicView=UIView(frame: CGRectMake(100, 200, 100, 100)) 
    DynamicView.backgroundColor=UIColor.greenColor() 
    DynamicView.layer.cornerRadius=25 
    DynamicView.layer.borderWidth=2 
    DynamicView.bringSubviewToFront(self.view) 
    self.view.addSubview(DynamicView) 
} 

enter image description here

+0

versuchen können Warum Sie, in welchem ​​Modus Video wissen tun müssen, ist zu spielen (Portrait im Vollbild oder Querformat Vollbild) ? – Ramis

+0

Ich habe 3 Szenarien. Inline-Video (fest und unter anderen UI), Vollbild-Hochformat oder Querformat. Hier nur im Hoch- oder Querformat muss ich die nächste, vorherige Video-Taste zeigen. – Piraba

Antwort

0

wenn man sich die AVPlayerItem der AVPlayer schaut dann hat es eine videoComposition Einstellung, die ein renderSize hat - man könnte die renderSizewidth und height untersuchen, um festzustellen, ob Sie in Quer- oder Hochformat sind .

+0

können Sie die 'currentItem' -Eigenschaft verwenden, um auf das Element im' AVPlayer' zu kommen. – Edward

+0

'videoComposition' ist nur für" File Based Playback "anwendbar, es wird nicht für das Streaming über' http' unterstützt, was eindeutig nicht bedeutet Arbeit bei OP. – Annjawn

4

Für die das Vollbild oder Videogröße ändern Erfassen Sie KVO für die AVPlayerViewController verwenden können, können Code wie folgt sein:

[comPlayerControl .addObserver(self, forKeyPath:"videoBounds" , options: NSKeyValueObservingOptions.New, context: nil)] 

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
      print("KeyPath \(keyPath)") 
     if keyPath == "videoBounds" { 
      print("New Video Bounds \(change)") 
     } 
    } 

Im change Wörterbuch Sie die Änderung in den Videorahmen/Grenzen überprüfen ändern

Für die Rotation wie Sie bereits erwähnt können Sie viewWillTransitionToSize oder UIDeviceOrientationDidChangeNotification Benachrichtigung verwenden, oder Sie können die aktuelle Ausrichtung überprüfen mit UIDevice.currentDevice().orientation wie ich keine Methode gefunden, die die Änderung in der laufenden Video überprüfen

Dennoch, wenn Sie benötigen Video Orientierung erkennen, können Sie diese Verbindung überprüfen: https://stackoverflow.com/a/25833399/4557505 und andere Antwort in diesem Link

Für die Wiederholung des Videos, das Sie sich die Zeit, wie dies im Code festgelegt auf Null:

func playerDidFinishPlaying(notification: NSNotification) { 
     if let item = notification.object as? AVPlayerItem { 
      item.seekToTime(kCMTimeZero) 
      //you may directly play the video or can do further processing 
     } 
    } 

Element in der Warteschlange am Ende des Artikels spielen Sie mit commmentQueuePlayer.advanceToNextItem()

versuchen können Sie versuchen, Replay setzen können, als nächste, vorherige Schaltfläche in den contentOverlayView

let topView = UIView(frame: CGRectMake(0,0, comPlayerControl.view.bounds.width,44)) 
     topView.backgroundColor = UIColor (red: 0.5, green: 0.5, blue: 0.5, alpha: 0.379) 
     let btnNext = UIButton(frame:CGRectMake(0,0,80,44)) 
     btnNext.setTitle("Next", forState:.Normal) 
     btnNext.addTarget(self, action:"playNext", forControlEvents:.TouchUpInside) 
     btnNext.userInteractionEnabled = true 
     btnNext.enabled = true 
     topView.addSubview(btnNext) 
     comPlayerControl.contentOverlayView?.addSubview(topView) 

aktualisieren

Für die observeValueForKeyPath Sie so etwas wie dieses

var avWidth:CGFloat = 0 
var avHeight:CGFloat = 0 

override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
    if keyPath == "videoBounds" { 
     let rect = change!["new"]! as! NSValue 

     if let newrect = rect.CGRectValue() as CGRect? { 
      if newrect.width > 0 || newrect.height > 0 { 
       if avWidth > 0 || avHeight > 0 { 
        if newrect.width > avWidth || newrect.height > avHeight { 
         print("Full Screen") 
        } else if newrect.width < avWidth || newrect.height < avHeight { 
         print("Normal screen") 
        } else { 

        } 
       } 
       avWidth = newrect.width 
       avHeight = newrect.height 
      } 
     } 
    } 
} 
+0

Danke für die Antwort. Wenn ich auf die Schaltfläche Weiter klicke, wurde die Schaltfläche nicht ausgelöst. 'func playNext() { print (" === playNext ") }' – Piraba

+0

Könnten Sie mir 'observeValueForKeyPath' Code geben – Piraba

+0

im ersten Code-Block gibt es Code von' observeValueForKeyPath 'Funktion, oder wollen Sie den vollständigen Code um die gebundene Größe zu überprüfen? – HardikDG

Verwandte Themen