【问题标题】:Set size for Video with AVPlayerViewController使用 AVPlayerViewController 设置视频的大小
【发布时间】:2016-04-04 12:28:15
【问题描述】:

我需要在游戏结束时播放一段短视频。

我在我的故事板上创建了一个 AVPlayerViewController,它使用来自前一个视图控制器的 segue 进行模态演示。

但是我希望视频不要覆盖整个屏幕。假设屏幕大小的 50%(居中)。

这是我试过的代码:

import AVKit
import AVFoundation
import UIKit

class VideoPlayerViewController: AVPlayerViewController {

override func viewDidLoad() {
    super.viewDidLoad()
}

override func viewDidAppear(animated: Bool) {
    // Play video
    player?.play()
}

override func viewDidLayoutSubviews() {
    print(videoBounds)
    self.view.bounds = videoBounds
}

}

问题是视频缩放到整个屏幕非常小(比如大约 100*70 像素)。我相信默认大小在某个时候是 100*100,它会缩放以匹配我的视频比例。

如果我不指定边界,它会缩放到整个屏幕(视频重力不让我选择)。

如果我在 viewDidLayoutSubviews 中减小整个视图的大小,仍然不行,因为此方法被多次调用,所以我不断更改视图边界。

我无法相信使用 AVPlayerViewController 在部分屏幕上显示本地视频是多么困难...

有什么帮助吗?

【问题讨论】:

  • 你有解决办法吗?
  • @Khush 否定

标签: ios swift avplayerviewcontroller


【解决方案1】:

您可以将视图控制器设置为您想要的任何大小。像这样,如果你想:

let videoURL = URL(fileURLWithPath: videoPath)
let player = AVPlayer(url: videoURL)
let playerViewController = AVPlayerViewController()
playerViewController.view.frame = CGRect (x:100, y:100, width:200, height:100)
playerViewController.player = player  

self.addChildViewController(playerViewController)
self.view.addSubview(playerViewController.view)
playerViewController.didMove(toParentViewController: self)

(显然,上面的尺寸会很奇怪,但你可以。如果你愿意的话)。

如果您想要自动管理的播放器控件,请使用 ViewController。如果你想滚动自己的控件,图层可能会更好。

发布此内容是为了更正表明您不应使用 VC 的答案,除非全屏显示。对我来说似乎工作得很好。

【讨论】:

    【解决方案2】:

    AVPlayerViewController 只能以全屏方式使用,您最好使用AVPlayerLayer,这样您可以根据自己的选择调整大小/放置它。

    let player = AVPlayer(url: myURL)
    let layer = AVPlayerLayer(player: player)
    layer.frame.size = CGSize(100,100)
    layer.frame.origin = myView.center
    
    player.play()
    

    【讨论】:

    • 我没有看到任何表明这种情况的 Apple 文档 - 如果有,请添加文档链接。
    猜你喜欢
    • 2018-04-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-21
    • 1970-01-01
    • 2017-08-24
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多