2013-05-28 15 views
14

Sto passando da MPMoviePlayerController a AVPlayer in quanto ho bisogno di un controllo a grana più fine sullo scambio di video. Il file .mov che stavo giocando con MPMoviePlayerController ha funzionato correttamente, ma dopo il passaggio a AVPlayer ho sentito l'audio dal video, ma il video mostra solo lo sfondo della vista che ho aggiunto il AVPlayerLayer a. Ecco come sto inizializzando lo AVPlayer.Vuoto video AVPlayer ma ascolto audio

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

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

Successivamente, ho appena emesso un messaggio.

[self.player play]; 

Quando il video viene riprodotto, sento l'audio ma non vedo video. Ho anche provato a impostare zPosition senza fortuna.

playerLayer.zPosition = 1; 

risposta

7

scoperto che era un risultato dell'utilizzo AutoLayout. Nel viewDidLoad il self.playerContainer.bounds è un CGRectZero.

Ho dovuto assegnare il frame playerLayer nello viewDidAppear per far corrispondere il playerContainer.

+1

Non uso l'autolayout ma ho lo stesso problema. http://stackoverflow.com/questions/16872193/avqueueplayer-shows-black-screen-when-called-from-app-delegate Come hai potuto risolverlo? – Burak

+0

Per me il video era un CGRectZero e non visibile. In realtà stava giocando, proprio in uno schermo 0.0x0.0. –

+0

@Gary Ho esattamente lo stesso problema ma con un progetto MacOS - Ho sentito il suono ma nessun video solo una finestra nera - ecco il mio codice totale: 'let fileURL = URL (stringa:" http://commondatastorage.googleapis.com/gtv -Video-bucket/campione/BigBuckBunny.mp4") lasciare avAsset = AVURLAsset (URL: fileURL !, opzioni: nil) lasciare playerItem = AVPlayerItem (asset: avAsset) videoPlayer = AVPlayer (playerItem: playerItem) lasciare PlayerView = self.playerView playerView? .player = videoPlayer videoPlayer.play() 'Qualche idea di cosa ho bisogno di aggiungere a questo per mostrare il video? –

1

Dal momento che usiamo AVPlayerLayer (una sottoclasse di CALayer), abbiamo bisogno di impostare il fotogramma

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 

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

Assicurati l'affermazione che riproduce il video:

[self.player play] 

viene richiamato dalla spedizione principale coda come questa (Swift 3):

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

Mi dispiace, non mi ha aiutato. –

Problemi correlati