在swift中为AVPlayer添加自定义控件 [英] Add custom controls to AVPlayer in swift

查看:206
本文介绍了在swift中为AVPlayer添加自定义控件的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

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



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



AVPlayerController内置了这些控件。



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



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

解决方案

这里我添加积分,你需要根据需要自定义。



Step-1



最初隐藏你的 AVPlayer 控件,

  YourAVPlayerViewController.showsPlaybackControls = false 

步骤2



创建类似

的结构


当前持续时间的一个标签,一个持续时间的标签,一个用于暂停的UI按钮并播放你当前的玩家和一个UISlider寻找视频。


step-3



最初关闭简单步骤。


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




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




第二次设置视频持续时间,如




  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) - >字符串{

let interval = Int(interval)
let seconds = interval%60
let minutes =(interval / 60)%60
let hours =(interval / 3600)
return String(格式:%02d:%02d:%02d,小时,分钟,秒)
}




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




  _playheadSlider.addTarget(self,action:#selector(self.handlePlayheadSliderTouchBegin),for:.touchDown)
_playheadSlider.addTarget(self,action:#selector(self) .handlePlayheadSliderTouchEnd),用于:.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)
}


I am trying to create a table view such that I am able to play videos . I am able to do this using AVPlayer and layer.

I want to add a custom play and pause button with a slider to the bottom of a video view.

AVPlayerController comes built in with these controls.

How can I implement these in AVPlayer. I have been looking for examples. But I haven't found any.

Are there any GitHub examples or code samples that I can follow? Any help will be really appreciated.

解决方案

here I add the points , you need to customize based on your need.

Step-1

initially hide your AVPlayer controls,

 YourAVPlayerViewController.showsPlaybackControls = false

Step-2

create the structure like

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.

step-3

initially close the simple steps.

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

@IBAction func handlePlayPauseButtonPressed(_ sender: UIButton) {
    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)
}

这篇关于在swift中为AVPlayer添加自定义控件的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆