2017-09-20 59 views
6

Używam AVPlayerViewController do odtwarzania pliku wideo (H.264, AAC, MP4-Container) w aplikacji na iPada. Wszystko działa w iOS 10. A także w iOS 11 poprawnie odtwarza wideo.Czarny ekran AVPlayerViewController podczas przesuwania w systemie iOS 11

Ale w iOS 11, kiedy zaczynam przesuwać w dowolnym kierunku, natychmiast odświeża wideo i wycisza dźwięk. Pokazuje również wskaźnik ładowania obok osi czasu na dole.

także ignoruje właściwość allowsPictureInPicturePlayback, więc nie pokazać PIP-przycisk na iOS 11.

Jest to kod używam:

avPlayerController = AVPlayerViewController() 
avPlayerController?.showsPlaybackControls = true 
avPlayerController?.allowsPictureInPicturePlayback = true 
avPlayerController?.player = AVPlayer(url: videoUrl as URL) 
avPlayerController?.player?.play()    

self.present(self.avPlayerController!, animated: true, completion: nil)    

avPlayerController?.player?.actionAtItemEnd = AVPlayerActionAtItemEnd.none 
NotificationCenter.default.addObserver(self, selector: #selector(onVideoCompleted), name: NSNotification.Name.AVPlayerItemDidPlayToEndTime, object: self.avPlayerController!.player?.currentItem) 

I ta funkcja, aby zamknąć wideo gracz na końcu filmu:

func onVideoCompleted(notification:Notification) { 
    self.avPlayerController?.player = nil 
    self.avPlayerController?.dismiss(animated: true, completion: nil) 
} 

Kiedy czarni? na ekran uzyskać to w konsoli:

AVOutputDeviceDiscoverySession (FigRouteDiscoverer) 
>>>> -[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl 
outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: Setting device discovery 
mode to DiscoveryMode_Presence (client: MyAppName) 

Odpowiedz

3

Ok znalazłem błąd: aby zamknąć odtwarzanie Airplay wideo po naciśnięciu „Gotowe” Kiedyś ten kod:

override func viewWillAppear(_ animated: Bool) { 
    super.viewWillAppear(animated) 

    if avPlayerController?.isBeingDismissed ?? false { 
     avPlayerController?.player = nil 
    } 
} 

Ale z iOS 11, Apple dodatkową funkcję, aby zamknąć odtwarzacz wideo poprzez gest machnięcia. Tak więc, gdy przeciągam, funkcja viewWillAppear zostaje wywołana. Umieszczenie tego kodu wewnątrz viewDidAppear naprawiło to i zachowało poprawkę AirPlay-Fix.

+0

Mam do czynienia z podobnym problemem, który występuje tylko wtedy, gdy przełączam się z MPMoviePlayerViewController na AVPlayerViewController. otrzymuję następujący komunikat o błędzie w konsoli po naciśnięcie przycisku Gotowe na MPMoviePlayer: 'Ustawianie trybu wykrywania urządzenie do DiscoveryMode_None (klient: appName) [Odtwarzanie] ❗️Failed kolejce każdy items.' po tym, nawet gdy Próbuję powyższego rozwiązania, ustawiając odtwarzacz na zero, wideo AVPLayer nie może być odtwarzane i jest zamrożone. Zdarza się to tylko wtedy, gdy urządzenie jest podłączone za pomocą AirPlay. –

+0

Dzięki za to. Szkoda, że ​​nie wiedziałem, że iOS 11 dodał to. Podążałem za próbką wydaną przez Apple, IRT do odtwarzania wideo, i zabijają odtwarzanie wideo w metodzie prezentacji "viewWillAppear". –

0

Też mam ten sam problem. Nie można przesuwać palcem w iOS 11. Korzystaj również z AVPlayera. Koduję z Objective-C. Zakończ dziennik wyjściowy:

2017-09-26 10:21:42.044996+0800[1783:1104059] [] <<<< AVOutputDeviceDiscoverySession (FigRouteDiscoverer) >>>> 
-[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: 
    Setting device discovery mode to DiscoveryMode_None (client:) 


2017-09-26 10:21:42.055354+0800[1783:1104059] [] <<<< AVOutputDeviceDiscoverySession (FigRouteDiscoverer) >>>> 
    -[AVFigRouteDiscovererOutputDeviceDiscoverySessionImpl outputDeviceDiscoverySessionDidChangeDiscoveryMode:]: 
    Setting device discovery mode to DiscoveryMode_Presence (client:)