在swift中为AVPlayer添加自定义控件

我正在尝试创建一个表格视图,以便我可以播放video。 我能够使用AVPlayer和图层完成此操作。

我想在video视图的底部添加一个带滑块的自定义播放和暂停按钮。

AVPlayerController内置了这些控件。

如何在AVPlayer中实现这些function。 我一直在寻找例子。 但我还没有发现任何。

我可以遵循任何GitHub示例或代码示例吗? 任何帮助将非常感激。

在这里我添加点,您需要根据您的需要进行自定义。

步骤1

最初隐藏你的AVPlayer控件,

  YourAVPlayerViewController.showsPlaybackControls = false 

第2步

创建像这样的结构

在此处输入图像描述

一个标签用于当前持续时间,一个标签用于整体持续时间,一个UI按钮用于暂停和播放当前播放器,一个UISlider用于搜索video。

第3步

最初关闭简单的步骤。

首先停止并使用按钮动作播放播放器,currentPlayer是您的AVPlayer名称。

 @IBAction func handlePlayPauseButtonPressed(_ sender: UIButton) { if sender.isSelected { currentPlayer.pause() } else { currentPlayer.play() } } 

第二个设置video持续时间,就像

  let duration : CMTime = currentPlayer.currentItem!.asset.duration let seconds : Float64 = CMTimeGetSeconds(duration) lblOverallDuration.text = self.stringFromTimeInterval(interval: seconds) 

第三个将玩家当前时间设置为当前持续时间标签

  let duration : CMTime = currentPlayer.currentTime() let seconds : Float64 = CMTimeGetSeconds(duration) lblcurrentText.text = self.stringFromTimeInterval(interval: seconds) 

以下方法从NSTimeinterval转换为HH:MM:SS

 func stringFromTimeInterval(interval: TimeInterval) -> String { let interval = Int(interval) let seconds = interval % 60 let minutes = (interval / 60) % 60 let hours = (interval / 3600) return String(format: "%02d:%02d:%02d", hours, minutes, seconds) } 

最后我们去滑块控制来计算寻道时间

 _playheadSlider.addTarget(self, action: #selector(self.handlePlayheadSliderTouchBegin), for: .touchDown) _playheadSlider.addTarget(self, action: #selector(self.handlePlayheadSliderTouchEnd), for: .touchUpInside) _playheadSlider.addTarget(self, action: #selector(self.handlePlayheadSliderTouchEnd), for: .touchUpOutside) _playheadSlider.addTarget(self, action: #selector(self.handlePlayheadSliderValueChanged), for: .valueChanged) 

让我们采取行动,最初当touchbegin开始然后停止播放器

handlePlayheadSliderTouchBegin

 @IBAction func handlePlayheadSliderTouchBegin(_ sender: UISlider) { currentPlayer.pause() } 

设置当前项标签以计算sender.value * CMTimeGetSeconds(currentPlayer.currentItem.duration)

 @IBAction func handlePlayheadSliderValueChanged(_ sender: UISlider) { let duration : CMTime = currentPlayer.currentItem!.asset.duration let seconds : Float64 = CMTimeGetSeconds(duration) * sender.value // var newCurrentTime: TimeInterval = sender.value * CMTimeGetSeconds(currentPlayer.currentItem.duration) lblcurrentText.text = self.stringFromTimeInterval(interval: seconds) } 

最后根据搜索移动玩家

  @IBAction func handlePlayheadSliderTouchEnd(_ sender: UISlider) { let duration : CMTime = currentPlayer.currentItem!.asset.duration var newCurrentTime: TimeInterval = sender.value * CMTimeGetSeconds(duration) var seekToTime: CMTime = CMTimeMakeWithSeconds(newCurrentTime, 600) currentPlayer.seek(toTime: seekToTime) }