2016-06-30 9 views
5

मैं प्रसारण बटन प्रदर्शित किया अब इस कोडआईओएस एयरप्ले -

var airplayButton: UIBarButtonItem! 
let airView: MPVolumeView = MPVolumeView() 
airView.showsRouteButton = true 
airView.showsVolumeSlider = false 
airView.sizeToFit() 
airView.tintColor = UIColor.blackColor() 

airplayButton = UIBarButtonItem(customView: airView) 
airplayButton.tintColor = UIColor.whiteColor() 

का उपयोग कर "अपने टीवी पर खेल रहा है", मैं एक स्क्रीन प्रदर्शित करना चाहते हैं। आईओएस एयरप्ले ढांचे में इसे प्रदर्शित करने के लिए कोई डिफ़ॉल्ट विधि है। या मुझे खुद को स्क्रीन डिजाइन करना है। साथ ही, यह डिवाइस सत्यापित करने के लिए कोई प्रतिनिधि नहीं है और आईओएस डिवाइस के माध्यम से ऐप्पल टीवी पर फिल्म स्ट्रीमिंग शुरू हो रही है। मेरे पास i.e बाहरी प्लेबैकएक्टिव

समस्या यह है कि यदि मैं चर का उपयोग करता हूं तो यह कुशल समाधान नहीं होगा क्योंकि मेरे पास प्लेबैक के दौरान नियंत्रण से एयरप्ले को जोड़ा जा सकता है। यदि ऐप्पल टीवी पर स्ट्रीमिंग हो रही है तो मैं प्रत्येक सेकेंड के बाद जांच करने के लिए टाइमर नहीं चलाऊंगा। कोई बेहतर विचार?

इस वीडियो पर "एप्पल टीवी"

इस image

उत्तर

2

इस तरह मैंने इसे कार्यान्वित किया। यह एक सम्मोहन की तरह काम करता है !

//Airplay constants 

private var observerContextAirplay = 1 

private var propertyToObserveAirplay = "externalPlaybackActive" 

// MARK: AirPlay Key-value Observing 

    func startObservingForAirPlayStatusChanges() 
    { 
     self.player.moviePlayer.addObserver(self, forKeyPath: propertyToObserveAirplay, options: .New, context: &observerContextAirplay) 
    } 

    func stopObservingForAirPlayStatusChanges() 
    { 
     self.player.moviePlayer.removeObserver(self, forKeyPath: propertyToObserveAirplay) 
    } 

    override func observeValueForKeyPath(keyPath: String?, ofObject object: AnyObject?, change: [String : AnyObject]?, context: UnsafeMutablePointer<Void>) { 
     if context == &observerContextAirplay { 
      if self.player.moviePlayer.externalPlaybackActive == true 
      {      
       self.setUpAirPlayView() 
      } 
      else if self.player.moviePlayer.externalPlaybackActive == false 
      { 
       self.resetPlayerView() 
      } 

     } 
     else { 
      super.observeValueForKeyPath(keyPath, ofObject: object, change: change, context: context) 
     } 
    } 

// सेटअप AirplayView

func setUpAirPlayView() 
{ 
    //Airplay Button 

    if self.airPlay_PlayBtn == nil 
    { 
     let playImage = UIImage(named: "player_play.png")! 
     if let _ = self.airPlay_PlayBtnFrame 
     { 
      self.airPlay_PlayBtn = UIButton(frame: self.airPlay_PlayBtnFrame) 
      self.airPlay_PlayBtn.setBackgroundImage(playImage, forState: UIControlState.Normal) 
      self.airPlay_PlayBtn.addTarget(self, action: #selector(ICFPlayerViewController.airPlayButtonAction), forControlEvents: UIControlEvents.TouchUpInside) 

      self.airPlay_PlayBtn.setBackgroundImage(UIImage(named: "player_play.png"), forState: .Normal) 
      self.airPlay_PlayBtn.setBackgroundImage(UIImage(named: "player_pause.png"), forState: .Selected) 
      self.airPlay_PlayBtn.center = self.view.center 

      self.view.addSubview(self.airPlay_PlayBtn) 
      if let _ = self.player 
      { 
       self.player.playPauseButton.hidden = true 
      } 
     } 
    } 
    else 
    { 
     self.airPlay_PlayBtn.hidden = false 
     if let _ = self.player 
     { 
      self.player.playPauseButton.hidden = true 
     } 
    } 

    // Airplay Label 
    if self.airPlayLabel == nil 
    { 
     self.airPlayLabel = UILabel() 
     self.airPlayLabel.frame = CGRectMake(0, 0, 280, 20) 

     self.airPlayLabel.text = "Your video is now playing on Apple TV" 
     self.airPlayLabel.textAlignment = NSTextAlignment.Center 
     self.airPlayLabel.backgroundColor = UIColor.blackColor().colorWithAlphaComponent(0.6) 

     self.airPlayLabel.textColor = UIColor.whiteColor() 

     self.airPlayLabel.sizeToFit() 

     self.airPlayLabel.center = self.view.center 

     self.airPlayLabel.center.y = self.view.center.y - self.activityIndicator.frame.size.height*1.5 
     self.view.addSubview(self.airPlayLabel) 
    } 
    else 
    { 
     self.airPlayLabel.hidden = false 
    } 

    // Thumbnail 
    self.setupContentThumbnailImageView() //Fetch Thumbnail image 
    if let _ = self.thumbnailImage 
    { 
     self.view.addSubview(self.thumbnailImage) 
    } 

    self.view.bringSubviewToFront(bottomToolbar) 
    self.view.bringSubviewToFront(topToolbar) 

    if let _ = self.airPlayLabel 
    { 
     self.view.bringSubviewToFront(self.airPlayLabel) 
    } 
    if let _ = self.airPlay_PlayBtn 
    { 
     self.view.bringSubviewToFront(self.airPlay_PlayBtn) 
    } 

} 
+0

तुम भी नहीं दिखा क्या 'self.setUpAirPlayView()' करता है। क्या आपने मेरा सुझाव लिया और 'contentOverlayView' का उपयोग किया? – JAL

+0

हाँ मैंने किया और यह काम नहीं किया। 'ContentOverlayView' नाम का कोई सदस्य नहीं है। मैं एवीप्लेयर का उपयोग कर रहा हूँ। self.setUpAirPlayView() केवल मेरे फ़ंक्शन के शीर्ष पर एक दृश्य प्रदर्शित करने के लिए एक फ़ंक्शन है। उस समारोह को भी पोस्ट करेंगे। –

+0

ठीक है, यही कारण है कि मैंने कहा कि यह काम करेगा यदि आप 'AVPlayerViewController' का उपयोग कर रहे थे, तो आपने यह निर्दिष्ट नहीं किया था कि आप' AVPlayer' का उपयोग कर रहे थे। – JAL

0

ऐसा लगता है कि आप एक AVPlayerViewController है, जो एक contentOverlayViewUIView संपत्ति जो वीडियो प्लेयर के बीच बैठता है है का उपयोग कर रहे हैं खेल रहा है और नियंत्रण।

एयरप्ले प्लेबैक शुरू होने पर यह जानने के लिए आप externalPlaybackActive पर एक संपत्ति पर्यवेक्षक डालकर शुरू कर सकते हैं। एक बार इसका मान सही हो जाने पर, अपना UIView प्रारंभ करें, इसे अपने प्लेयर के contentOverlayView के सबव्यूव के रूप में जोड़ें, और इसे अधिग्रहण करें।

let subview = UIView() // your view you want to show when AirPlay is active 
subview.frame = CGRect(...) 
playerVC.contentOverlayView?.addSubview(subview) 
playerVC.contentOverlayView?.bringSubviewToFront(subview) 
संबंधित मुद्दे