ios - 快速将自定义控件添加到 AVPlayer

标签 ios swift swift3 avplayer avplayeritem

我正在尝试创建一个表格 View 以便我能够播放视频。我可以使用 AVPlayer 和层来做到这一点。

我想在视频 View 的底部添加一个带有 slider 的自定义播放和暂停按钮。

AVPlayerController 内置了这些控件。

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

是否有任何我可以遵循的 GitHub 示例或代码示例?任何帮助将不胜感激。

最佳答案

这里我加点,大家可以根据自己的需要定制。

第一步

最初隐藏您的 AVPlayer 控件,

 YourAVPlayerViewController.showsPlaybackControls = false

第二步

创建如下结构

enter image description here

one label for current Duration, One label for overall Duration, one UIbutton for pause and play your current player and one UISlider for seek The video.

第三步

初步关闭简单的步骤。

first stop and play the player using button action , currentPlayer is your AVPlayer name.

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

second set the video duration, as like

    let duration : CMTime = currentPlayer.currentItem!.asset.duration
    let seconds : Float64 = CMTimeGetSeconds(duration)

    lblOverallDuration.text = self.stringFromTimeInterval(interval: seconds)

third set the player current time to current duration label

    let duration : CMTime = currentPlayer.currentTime()
    let seconds : Float64 = CMTimeGetSeconds(duration)

    lblcurrentText.text = self.stringFromTimeInterval(interval: seconds)

the following method is convert from NSTimeinterval to 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)
}

finally we go for slider control for calulate the seek time

_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)

lets we go for action, initially when touchbegin is start then stop the player

handlePlayheadSliderTouchBegin

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

set the current item label for calculate the 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)
   }

finally move the player based on seek

 @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)
}

关于ios - 快速将自定义控件添加到 AVPlayer,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43062870/

相关文章:

ios - 从 iOS 应用程序打开 Telegram 聊天(使用机器人)

ios - 将文件复制到/从 iOS 应用程序的数据目录?

ios - 使用 Firebase Auth 和 Swift 设置 currentUserID 的最佳方式

ios - 如何为所有iphone屏幕设置动态高度

ios - xcode - 从 TableView 中删除一行

swift - 如何在 Scene Delegate iOS 13 中设置 rootViewController

swift - NSCollectionView 内拖放示例

ios - 无法找到目标 'IQKeyboardManagerSwift' 的模块 'armv7-apple-ios' ;

ios - Swift - tableview contentsize 不匹配内容?

ios - 在我的简单案例中,http 正文中的 JSON 数据包含特殊字符