在swift中为AVPlayer添加自定义控件 [英] Add custom controls to AVPlayer in swift
问题描述
我正在尝试创建一个表格视图,以便我可以播放视频。我可以使用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屋!