2016-01-02 20 views
11

Próbuję odtworzyć wideo za pomocą MPMoviePlayerController dla aplikacji na iOS w Swift.Ustaw MPNowPlayingInfoCenter z innym dźwiękiem odtwarzanym w tle

Moim celem jest odtwarzanie muzyki systemowej za pomocą muzyki typu jabłko, a następnie otwieranie aplikacji i włączanie miksu audio, ale chcę, aby moja aplikacja mogła przejąć kontrolę nad MPNowPlayingInfoCenter.

Jak korzystać z AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback, withOptions: .MixWithOthers), gdy wciąż ustawi się MPNowPlayingInfoCenter?

Google Maps miksuje dźwięk podczas wykonywania ustawień MPNowPlayingInfoCenter. Poniżej jest jak próbuję ustawić MPNowPlayingInfoCenter:

func setMeta(){ 
    UIApplication.sharedApplication().beginReceivingRemoteControlEvents() 
    self.becomeFirstResponder() 
    if let player = PlayWorkoutViewController.player{ 
     let coverArt = MPMediaItemArtwork(image: UIImage(named: "AlbumArt")!) 
     let dict: [String: AnyObject] = [ 
      MPMediaItemPropertyArtwork: coverArt, 
      MPMediaItemPropertyTitle:workout.title, 
      MPMediaItemPropertyArtist:"Alex", 
      MPMediaItemPropertyAlbumTitle:workout.program.title, 
      MPNowPlayingInfoPropertyPlaybackRate: player.currentPlaybackRate, 
      MPNowPlayingInfoPropertyElapsedPlaybackTime: player.currentPlaybackTime, 
      MPMediaItemPropertyPlaybackDuration: player.playableDuration 
     ] 
     MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = dict 
    } 
} 

Powyższa funkcja działa, gdy jestem nie próbuje odtwarzać muzykę na zewnątrz z opcją (.MixWithOthers) w tym samym czasie, ale gdy próbuję odtwarzaj muzykę z zewnątrz z opcją (.MixWithOthers) centrum informacyjne nie aktualizuje się.

Edytuj 1: Tylko po to, aby wszystko było super jasne, już prawidłowo odtwarzam wideo Próbuję odtworzyć wideo z innym dźwiękiem w tle, jednocześnie będąc w stanie ustawić MPNowPlayingInfoCenter.

Odpowiedz

3

To nie jest obecnie możliwe w iOS. Nawet zmiana opcji kategorii na .MixWithOthers powoduje zignorowanie Twojego nowPlayingInfo.

Domyślam się, że system iOS uwzględnia tylko aplikacje, które nie są miksowane, aby można je było umieścić w MPNowPlayingInfoCenter, ponieważ nie ma pewności, która aplikacja pojawi się w (np.) Centrum sterowania, jeśli w tym samym czasie jest wiele aplikacji do miksowania.

ja bym bardzo podobny do tego, czy iOS stosowane podejście najlepiej wysiłku wyborze „Now Playing aplikację”, coś takiego:

  1. Jeśli istnieje zakaz mieszania app gry, odebrać to. Inaczej ..
  2. Jeśli jest tylko jedna aplikacja do miksowania, wybierz to. Else ..
  3. Jeśli gra się wiele aplikacji do miksowania, po prostu wybierz jedną :) Lub wybierz brak, nie mam nic przeciwko.

Jeśli chcesz zachować takie zachowanie, zachęcam do zgłoszenia błędu w firmie Apple.

0

Czy próbowałeś zaimplementować własną funkcję niestandardową, aby zaktualizować MPNowPlayingInfoCenter? Ostatnio używałem urządzenia AVAudioPlayer do odtwarzania muzyki i trzeba było ręcznie aktualizować.

Jest to w zasadzie funkcja, którą wywołałem przy ładowaniu nowego utworu.

func updateNowPlayingCenter() { 
    let center = MPNowPlayingInfoCenter.defaultCenter() 
    if nowPlayingItem == nil { 
     center.nowPlayingInfo = nil 
    } else { 
     var songInfo = [String: AnyObject]() 

     // Add item to dictionary if it exists 
     if let artist = nowPlayingItem?.artist { 
      songInfo[MPMediaItemPropertyArtist] = artist 
     } 
     if let title = nowPlayingItem?.title { 
      songInfo[MPMediaItemPropertyTitle] = title 
     } 
     if let albumTitle = nowPlayingItem?.albumTitle { 
      songInfo[MPMediaItemPropertyAlbumTitle] = albumTitle 
     } 
     if let playbackDuration = nowPlayingItem?.playbackDuration { 
      songInfo[MPMediaItemPropertyPlaybackDuration] = playbackDuration 
     } 
     if let artwork = nowPlayingItem?.artwork { 
      songInfo[MPMediaItemPropertyArtwork] = artwork 
     } 
     center.nowPlayingInfo = songInfo 
    } 
} 

Nie jestem pewien, czy robi to na filmie jest załadowany zastąpi MPMoviePlayerController, ale wydaje się, warto spróbować.

Dodatkowo, stracili MPMoviePlayerController i zastąpili go AVPlayerViewController, więc warto się nim zajrzeć.

Edytuj: Sprawdziłbym również, czy prawidłowo odbierasz zdarzenia zdalnego sterowania, ponieważ ma to wpływ na dane wyświetlane przez centrum informacyjne.

+0

Witam, dziękuję za odpowiedź. Zaktualizowałem pytanie. Problem nie polega na ustawianiu centrum informacyjnego w normalny sposób ustawia centrum informacyjne podczas odtwarzania muzyki z opcją .MixWithOthers. –

0

Aby odtworzyć film w szybkim wykorzystania w ten sposób: -

func playVideoEffect() { 
    let path = NSBundle.mainBundle().pathForResource("egg_grabberAnmi", ofType:"mp4") 
    let url = NSURL.fileURLWithPath(path!) 
    self.moviePlayer = MPMoviePlayerController(contentURL: url) 
    if let player = moviePlayer { 
     let screenSize: CGRect = UIScreen.mainScreen().bounds 
     player.view.frame = CGRect(x: frame.size.width*0.10,y: frame.size.width/2, width:screenSize.width * 0.80, height: screenSize.width * 0.80) 
     player.view.sizeToFit() 
     player.scalingMode = MPMovieScalingMode.Fill 
     player.fullscreen = true 
     player.controlStyle = MPMovieControlStyle.None 
     player.movieSourceType = MPMovieSourceType.File 
     player.play() 
     self.view?.addSubview(player.view) 
     var timer = NSTimer.scheduledTimerWithTimeInterval(6.0, target: self, selector: Selector("update"), userInfo: nil, repeats: false)  
    } 
} 


// And Use the function to play Video 
playVideoEffect() 
+1

OK Nice one, ale mogę odtwarzać wideo z adresu URL Jak "http: //" w swift –

+0

tak, możemy: - var url: NSURL = NSURL (ciąg: "Twój adres URL") – Rex

+0

@Raksha Myślę, że całkowicie przegapiłeś pytanie. Już wiem, jak odtwarzać wideo, proszę ponownie przeczytać pytanie. –

Powiązane problemy