【问题标题】:AVPlayer with playback controls of avplayerviewcontroller带有 avplayerviewcontroller 播放控件的 AVPlayer
【发布时间】:2015-11-12 17:24:38
【问题描述】:

我将 n avplayer 放在视图控制器中以自定义视图控制器的其他一些元素,但我仍然希望在 AVPlayerViewController 中使用播放和擦除控件。当我不使用 AvPlayerViewcontroller 时,有没有办法为 Avplayer 启用这些控件?

【问题讨论】:

  • 嘿,你得到解决方案了吗?我将 AVPlayerViewController 添加为子视图控制器并保持其框架自定义。但是播放、暂停、擦洗控制等控件是不可见的。请帮忙。

标签: ios swift tvos apple-tv avplayerviewcontroller


【解决方案1】:

没有。通常的解决方案(Apple 明确建议)是使用 AVPlayerViewController 作为嵌入式视图控制器 - 即,使您的视图控制器成为自定义父视图控制器,并将 AVPlayerViewController 作为其子视图,现在您可以放置​​它的视图(电影和控件) 在您的视图中作为子视图处于良好状态。示例(self 是您的视图控制器):

let url = // whatever
let player = AVPlayer(URL:url)
let avPlayerViewController = AVPlayerViewController()
avPlayerViewController.player = player
avPlayerViewController.view.frame = // whatever
self.addChild(avPlayerViewController)
self.view.addSubview(avPlayerViewController.view)
avPlayerViewController.didMove(toParent: self)

【讨论】:

  • 虽然这很好用,但 Xcode 会显示如下错误:无法同时满足约束。似乎问题在于 AVPlayerViewController 中播放控件的自动布局。确实认为这是一个错误。
  • 不能在 swift 3.0 中创建 avplayerviewcontroller 对象
【解决方案2】:

要使用 Swift 5 更新这篇文章,您可以尝试以下代码:

let videoURL = URL(string: "https://your_video_in_internet.mp4")
let player = AVPlayer(url: videoUrl)
let playerViewController: AVPlayerViewController!
playerViewController = AVPlayerViewController()
playerViewController.view.frame = YOUR_FRAME_OR_EMBED_IN_STORYBOARD
playerViewController.player = player
playerViewController.showsPlaybackControls = true
playerViewController.videoGravity = .resizeAspectFill
YOUR_FRAME_OR_EMBED_IN_STORYBOARD.addSubview(playerViewController.view)
playerViewController.player!.play()  

【讨论】:

  • 这不会显示播放和拖拽控件
  • 对不起,我以为是这样,如果控件没有显示,你必须在AVPlayerController中添加这句话:“showsPlaybackControls = true”
  • 您可以使用控件编辑您的答案吗?您在解决方案中没有提到任何关于 AVPlayerController 的内容,因此,我们不能只放 showPlaybackControlls = true
  • 完成!我已经在答案中添加了控制器。
【解决方案3】:
let player = AVPlayer(url: url)    
let playerViewController = AVPlayerViewController()
playerViewController.view.frame = self.videoPlayerView.bounds
playerViewController.player = player
self.addChild(playerViewController)
self.videoPlayerView.addSubview(playerViewController.view)
playerViewController.didMove(toParent: self)

【讨论】:

    猜你喜欢
    • 2015-05-05
    • 2021-01-08
    • 1970-01-01
    • 2015-09-14
    • 1970-01-01
    • 2017-08-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多