2016-08-13 3 views
2

Ich verwende ein Objective-C-Projekt als Referenz für eine sehr ähnliche Swift-App. Grundsätzlich werden Videos auf Firebase hochgeladen und die Download-URL wird in einem "Post" -Objekt gespeichert und beim Abrufen in einer UITableViewCell abgespielt. Im Objective-C-Projekt (auch mit Firebase) funktioniert es perfekt, aber ich habe Probleme mit Swift.AVPlayer wird nicht wiedergegeben und Layer wird nicht angezeigt

Objective-C-Code, innerhalb der Zelle, wie ich schon sagte, funktioniert perfekt.

- (void)playVideoWithURL:(NSURL *)url { 

    self.videoPlayer = [[AVPlayer alloc]initWithURL:url]; 
    AVPlayerLayer *layer = [AVPlayerLayer playerLayerWithPlayer:self.videoPlayer]; 
    layer.frame = self.videoView.bounds; 
    [layer setVideoGravity:AVLayerVideoGravityResizeAspect]; 
    [self.videoView.layer addSublayer:layer]; 

    [self.videoPlayer play]; 

} 

Swift Code, auch innerhalb Zelle, werfen keine Fehler oder Absturz, Compiler sagt URL sowie den Spieler und Schicht vorhanden ist (dessen Rahmen nicht CGRectZero, vergewissert, dass auch).

@IBOutlet var usernameLabel: UILabel! 
@IBOutlet var captionLabel: UILabel! 
@IBOutlet var avPlayerView: UIView! 

var videoPlayer : AVPlayer! 

func playVideoWithURL(url: NSURL) { 

    self.videoPlayer = AVPlayer(URL: url) 

    let layer = AVPlayerLayer(player: self.videoPlayer) 
    layer.frame = avPlayerView.bounds 
    layer.videoGravity = AVLayerVideoGravityResizeAspect 
    avPlayerView.layer.addSublayer(layer) 

    videoPlayer.play() 

} 

Um es einfach zu halten Ich werde keine Firebase Code schreibe nur noch, da sie alle Arbeiten in dem Objective-C-Projekt und den Download-URLs ist erfolgreich in der Swift einer ebenfalls abgerufen, was mich zu glauben, hat nichts mit dem Thema zu tun.

Irgendwelche Ideen? Das macht mich verrückt. Vielen Dank!

UPDATE:

AVPlayer ist eigentlich nicht das Problem, da es mit einem Test-Video arbeitet. Das Problem besteht bei Firebase, das derzeit weitere Untersuchungen anstellt.

Antwort

0

Versuchen Sie, Ihren Player mit einem Player-Element zu initialisieren.

let playerItem = AVPlayerItem(URL: url) 
self.videoPlayer = AVPlayer(playerItem: playerItem) 

Außerdem sollten Sie den Status des Spielers überprüfen, genau zu bestimmen, wann sie bereit ist, mit KVO zu spielen.

Siehe Knowing when AVPlayer object is ready to play. Der Fehler ist in playerItem.error? verfügbar, wenn der Player den Status failed hat. Überprüfen Sie das, um das Problem zu ermitteln.

+0

Nein, immer noch nichts. Ich dachte zuerst das Gleiche, aber ich habe AVPlayer ohne ein Element und nur URL vorher initialisiert, also muss es etwas anderes sein ... danke, obwohl – Echizzle

+1

Ich fügte einige zusätzliche Sachen hinzu, um meine Antwort zu versuchen, Ihnen zu helfen, das Problem zu debuggen. Sie sollten den Player-Status und alle Fehler, die Sie erhalten, melden. – Daniel

+0

Danke, der Fehler ist null und das Element existiert, zeigt die Firebase-Download-URL, genau wie das andere Projekt, wo es funktioniert. Ich werde aber in die KVO schauen. Ich möchte nur wissen, warum der Objective-C-Code so perfekt funktioniert, aber der gleiche Swift-Code nicht. Ich weiß, dass beide Sprachen ein bisschen anders aber immer noch arbeiten! – Echizzle

Verwandte Themen