ios - AVPlayer 不播放,图层不显示

标签 ios swift avplayer avplayerlayer

我正在使用一个 Objective-C 项目作为一个非常相似的 Swift 应用程序的引用。基本上,视频被上传到 Firebase,下载 URL 被保存到“Post”对象,并在检索时在 UITableViewCell 中播放。在 Objective-C 项目(也使用 Firebase)中,它工作得很好,但我在 Swift 中遇到了一些麻烦。

Objective-C 代码,就像我说的,在单元格内,运行完美。

- (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 代码不会抛出任何错误或崩溃,编译器说 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()

}

为简单起见,我暂时不会发布任何 Firebase 代码,因为它在 Objective-C 项目中都能正常工作,而且下载 URL 也能在 Swift 项目中成功检索到,这让我相信它与此无关问题。

有什么想法吗?这真让我抓狂。谢谢!

更新:

AVPlayer 实际上不是问题,因为它适用于测试视频。问题出在 Firebase 上,目前正在进一步调查。

最佳答案

尝试使用播放器项目初始化您的播放器。

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

另外,您应该检查播放器的状态以确定它何时可以使用 KVO 播放。

参见 Knowing when AVPlayer object is ready to play .

如果播放器的状态为 failed,则该错误在 playerItem.error? 中可用。检查以帮助确定问题。

关于ios - AVPlayer 不播放,图层不显示,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38928312/

相关文章:

ios - iPad Air 2 和 iPad Pro 的不同布局

ios - 如何让stackview在向下滚动时消失,向上滚动时重新出现?

ios - 如何从自定义 View 过渡到 AVPlayerViewController?

ios - 如何用AVPlayer解析m3u文件

ios - 欢迎屏幕中的视频使用 AVPlayer 导致内存泄漏?

ios - 如何用 Storyboard表示查看/编辑模式?

ios - Phonegap 3.4.0 和相机插件 (iOS) : CDVPlugin class CDVCamera (pluginName: camera) does not exist 的问题

iphone - 在真实 IO 设备中调试 CoreLocation 应用程序

Swift 变通使 `AnyObject.Type` 符合 `Equatable` ?

ios - 将事件保存到用户的日历