使用AVPlayer在后台播放视频时,使用AspectFill和循环会出现问题。

4

这是我的代码,我希望视频可以填满整个屏幕(采用aspectFill)。

playerLayer.videoGravity = kCAGravityResizeAspectFill 应该可以实现Aspect Fill,但我仍然在屏幕的顶部和底部看到黑色边框。

最后一行本来应该循环播放视频,但它只会变暗并停止播放。

如果有任何建议,将不胜感激。

var moviePlayer: AVPlayer!

override func viewDidLoad() {
    super.viewDidLoad()    

    // Load the video from the app bundle.
    let videoURL: NSURL = NSBundle.mainBundle().URLForResource("video", withExtension: "mp4")!

    self.moviePlayer = AVPlayer(URL: videoURL)
    self.moviePlayer.muted = true

    let playerLayer = AVPlayerLayer(player: self.moviePlayer)
    playerLayer.videoGravity = kCAGravityResizeAspectFill //this not working
    playerLayer.zPosition = -1

    playerLayer.frame = self.view.frame

    self.view.layer.addSublayer(playerLayer)

    self.moviePlayer.play()

    // Loop video.
    NSNotificationCenter.defaultCenter().addObserver(self, selector: "loopVideo", name: AVPlayerItemDidPlayToEndTimeNotification, object: self.moviePlayer)
}

func loopVideo() {
    self.moviePlayer.play()
}
1个回答

7
您正在使用错误的视频重力值,请更改为以下内容:
playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

请注意,此值适用于视频,而您使用的值用于重新调整图像大小。
要使您的视频循环播放,只需在播放完成后将视频倒回即可。我不使用Swift,但在Objective-C中,您的loopVideo函数应如下所示:
-(void) loopVideo {
    [self.moviePlayer seekToTime:kCMTimeZero];
    [self.moviePlayer play];
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接