2013-05-28 5 views
14

Ich wechsle von MPMoviePlayerController zu , da ich feinere Kontrolle über Video-Swapping brauche. Die .mov Datei, die ich spielte mit MPMoviePlayerController spielte gut, aber nach dem Umschalten auf höre ich das Audio aus dem Video, aber das Video zeigt nur die Ansicht Hintergrund, dass ich die AVPlayerLayer hinzugefügt. Hier ist, wie ich die initialisieren.AVPlayer Video Blank aber Hear Sound

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

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

Dann später ich nur eine Ausgabe.

Wenn das Video spielt Ich höre das Audio, aber sehe kein Video. Ich habe auch versucht, die zPosition auf kein Glück zu setzen.

playerLayer.zPosition = 1; 

Antwort

7

Gefunden, es war ein Ergebnis der Verwendung AutoLayout. In der viewDidLoad ist die self.playerContainer.bounds eine CGRectZero.

Ich musste den playerLayer Rahmen in viewDidAppear zuweisen, um den playerContainer zu entsprechen.

+1

Ich benutze nicht automatisches Layout, aber habe das gleiche Problem. http://stackoverflow.com/questions/16872193/avqueueplayer-shows-black-screen-when-called-from-app-delegate Wie können Sie es lösen? – Burak

+0

Für mich war das Video ein CGRectZero und nicht sichtbar. Es wurde tatsächlich gespielt, nur in einem 0.0x0.0 Bildschirm. –

+0

@Gary Ich habe genau dasselbe Problem, aber mit einem MacOS-Projekt - ich höre Ton, aber kein Video nur schwarzes Fenster - hier ist mein Gesamtcode: 'Lassen Sie FileURL = URL (String:" http://commondatastorage.googleapis.com/gtv -videos-Eimer/sample/BigBuckBunny.mp4") lassen avAsset = AVURLAsset (url: fileURL !, Optionen: null) lassen playerItem = AVPlayerItem (Asset: avAsset) videoplayer = AVPlayer (playerItem: playerItem) lassen playerView = playerView? .player = videoPlayer videoPlayer.play() 'Hast du eine Idee, was ich hinzufügen muss, damit Video angezeigt wird? –

1

Da wir AVPlayerLayer (eine Unterklasse von CALayer) zu verwenden, müssen wir den Rahmen

- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 

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

Achten Sie darauf, die Aussage setzen, um das Video spielt:

[self.player play] 

von Haupt-Dispatch aufgerufen wird Warteschlange so (Swift 3):

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

Sorry, es hat mir nicht geholfen. –

Verwandte Themen