2013-05-28 12 views
14

Przełączam z MPMoviePlayerController na AVPlayer, ponieważ potrzebuję drobniejszej kontroli nad wideo-zamianą. Plik .mov grałem z MPMoviePlayerController grałem dobrze, ale po przełączeniu na AVPlayer słyszę dźwięk z wideo, ale wideo pokazuje tylko tło widoku, które dodałem do AVPlayerLayer. Oto jak inicjuję AVPlayer.AVPlayer Video Blank ale Sound Sound

self.player = [[AVPlayer alloc] initWithURL:video]; 

AVPlayerLayer* playerLayer = [AVPlayerLayer playerLayerWithPlayer:self.player]; 
playerLayer.frame = self.playerContainer.bounds; 
[self.playerContainer.layer addSublayer:playerLayer]; 

Później po prostu wydaje się.

[self.player play]; 

Po odtworzeniu wideo słyszę dźwięk, ale nie widzę wideo. Próbowałem też ustawić zPosition bez powodzenia.

playerLayer.zPosition = 1; 

Odpowiedz

7

Okazało się, że był to wynik użycia AutoLayout. W modelu viewDidLoadself.playerContainer.bounds jest to .

Musiałem przypisać ramkę playerLayer w viewDidAppear, aby dopasować playerContainer.

+1

Nie używam autolayout, ale mam ten sam problem. http://stackoverflow.com/questions/16872193/avqueueplayer-shows-black-screen-when-called-from-app-delegate Jak możesz go rozwiązać? – Burak

+0

Film był dla mnie CGRectZero i niewidoczny. W rzeczywistości grał, tylko na ekranie 0.0x0.0. –

+0

@Gary Mam dokładnie ten sam problem, ale z projektem MacOS - słyszę dźwięk, ale nie ma wideo tylko czarne okno - oto mój całkowity kod: 'let fileURL = URL (ciąg znaków:" http://commondatastorage.googleapis.com/gtv -videos-wiadro/sample/BigBuckBunny.mp4") niech avAsset = AVURLAsset (URL: fileURL !, opcje: nil) niech playerItem = AVPlayerItem (aktywo: avAsset) magnetowid = AVPlayer (playerItem: playerItem) niech playerView = self.playerView playerView? .player = videoPlayer videoPlayer.play() 'Jakiś pomysł, co muszę dodać, aby wyświetlić wideo? –

1

Ponieważ używamy AVPlayerLayer (podklasa CALayer), musimy ustawić ramkę

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 

    self.avPlayerLayer.frame = self.movieContainerView.bounds; 
} 
0

Upewnij się stwierdzenie, że gra wideo:

[self.player play] 

jest wywoływana z głównego wysyłki kolejka w ten sposób (Swift 3):

DispatchQueue.main.async { 
    self.player.play() 
} 
+0

Przepraszam, że to mi nie pomogło. –