私はビデオを再生できるようにテーブルビューを作成しようとしています。 AVPlayerとレイヤーを使用してこれを行うことができます。
ビデオビューの下部にスライダー付きのカスタム再生ボタンと一時停止ボタンを追加したい。
AVPlayerControllerにはこれらのコントロールが組み込まれています。
これらをAVPlayerに実装するにはどうすればよいですか。私は例を探してきました。しかし、私は何も見つけていません。
従うことができるGitHubの例やコードサンプルはありますか?どんな助けも本当に感謝されます。
ここにポイントを追加します。必要に応じてカスタマイズする必要があります。
ステップ-1
最初にAVPlayer
コントロールを非表示にし、
_ YourAVPlayerViewController.showsPlaybackControls = false
_
ステップ-2
のような構造を作成する
現在の期間の1つのラベル、全体の期間の1つのラベル、現在のプレーヤーの一時停止と再生用の1つのUIbutton、ビデオのシーク用の1つのUISlider。
ステップ-3
最初に簡単な手順を閉じます。
最初にbutton actionを使用してプレーヤーを停止して再生します。currentPlayerはAVPlayer名です。
_@IBAction func handlePlayPauseButtonPressed(_ sender: UIButton) {
// sender.isSelected ? currentPlayer.pause() : currentPlayer.play()
if 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)
_
3番目に、プレーヤーの現在時刻を現在の期間ラベルに設定します
_ 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)
}
_