2016-08-13 56 views
2

我正在使用一個Objective-C項目作爲一個非常相似的Swift應用程序的參考。基本上,視頻上傳到Firebase,下載URL保存到「Post」對象,並在檢索時播放到UITableViewCell中。在Objective-C項目(也使用Firebase)中,它完美地工作,但我在Swift中遇到了一些麻煩。如我所說,在單元格內部的Objective-C代碼完美地工作。AVPlayer不播放和圖層不顯示

- (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]; 

} 

銀行代碼,也在裏面細胞,不會引發任何錯誤或崩潰,編譯器說URL作爲球員和層中也存在(其框架是 CGRectZero,經檢查發現太)。

@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() 

} 

爲了簡單起見,我將不會發布任何火力地堡代碼,只是還沒有,因爲它在Objective-C的項目,所有的作品的下載網址在斯威夫特一個成功檢索爲好,導致我相信它與這個問題無關。

任何想法?這真讓我抓狂。謝謝!

UPDATE:

AVPlayer實際上不是問題,因爲它與測試視頻作品。問題在於Firebase,目前正在進一步調查。

回答

0

嘗試用播放器項目初始化播放器。

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

此外,你應該檢查球員的狀態,以確定什麼時候它已經準備好使用志願玩。

請參閱Knowing when AVPlayer object is ready to play

如果玩家的狀態爲failed,則該錯誤在playerItem.error?有效。檢查以幫助確定問題。

+0

不,沒什麼。我起初以爲是同樣的事情,但我已經初始化AVPlayer沒有一個項目,只是網址之前,所以它必須是別的東西......謝謝 – Echizzle

+1

我添加了一些額外的東西來嘗試我的答案來幫助您調試問題。您應該報告玩家狀態以及您收到的任何錯誤。 – Daniel

+0

謝謝,錯誤爲零且存在該項目,顯示Firebase下載網址,就像其他項目一樣工作。但我會考慮KVO。我只是想知道爲什麼Objective-C代碼可以很好地工作,但Swift代碼卻沒有。我知道兩種語言的工作方式都有所不同,但仍然存在 – Echizzle