4

这是我所拥有的,我希望这个视频填满整个屏幕(aspectFill)

playerLayer.videoGravity = kCAGravityResizeAspectFill 应该进行纵横比填充,但我仍然在屏幕的顶部和底部看到黑条。

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

任何建议表示赞赏。

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()
}
4

1 回答 1

7

您使用了错误的视频重力值,请更改为:

playerLayer.videoGravity = AVLayerVideoGravityResizeAspectFill;

请注意,此值适用于视频,因为您使用的值用于重新缩放图像。

为了让您的视频循环播放,您只是忘记在视频播放完毕后倒带。我不使用 swift 但在 Objc C 中你的 loopVideo 函数看起来像这样:

-(void) loopVideo {
    [self.moviePlayer seekToTime:kCMTimeZero];
    [self.moviePlayer play];
}
于 2015-11-03T23:24:32.077 回答