Skip to content

Instantly share code, notes, and snippets.

@Pyrolr
Last active May 2, 2020 14:33
Show Gist options
  • Star 3 You must be signed in to star a gist
  • Fork 1 You must be signed in to fork a gist
  • Save Pyrolr/debb4fca8f608b1300e099a5b3547031 to your computer and use it in GitHub Desktop.
Save Pyrolr/debb4fca8f608b1300e099a5b3547031 to your computer and use it in GitHub Desktop.
AVPlayerController overlay custom view
class ViewController: UIViewController {
let AVPlayerVC = AVPlayerViewController()
var commmentQueuePlayer = AVQueuePlayer()
var OverlayView = UIView()
var prevItem:AVPlayerItem?
override func viewDidLoad() {
super.viewDidLoad()
setupCustomPlayer()
}
func setupCustomPlayer() {
AVPlayerVC.view.frame = self.view.frame
AVPlayerVC.view.sizeToFit()
AVPlayerVC.showsPlaybackControls = true
self.view.addSubview(AVPlayerVC.view)
let videoURL: String = "http://cdnapi.kaltura.com/p/11/sp/11/playManifest/entryId/0_6swapj1k/format/applehttp/protocol/http/a.m3u8"
let firstItemURL: String = "http://cdnapi.kaltura.com/p/11/sp/11/playManifest/entryId/0_2p3957qy/format/applehttp/protocol/http/a.m3u8"
let secondItemURL: String = "http://cdnapi.kaltura.com/p/11/sp/11/playManifest/entryId/0_buy5xjol/format/applehttp/protocol/http/a.m3u8"
let firstItem = AVPlayerItem(URL: NSURL(string: firstItemURL)! )
let secondItem = AVPlayerItem(URL: NSURL(string: secondItemURL)! )
let playerItem = AVPlayerItem(URL: NSURL(string: videoURL)! )
let items = [firstItem,secondItem,playerItem]
commmentQueuePlayer = AVQueuePlayer(items: items)
commmentQueuePlayer.actionAtItemEnd = .None
AVPlayerVC.player = commmentQueuePlayer
NSNotificationCenter.defaultCenter().addObserver(self, selector: #selector(stopedPlaying), name: AVPlayerItemDidPlayToEndTimeNotification, object: nil)
addContentOverlayView()
AVPlayerVC.player?.play()
}
func addContentOverlayView() {
OverlayView.frame = CGRectMake(0,30,AVPlayerVC.view.bounds.width, 100)
OverlayView.hidden = true
OverlayView.backgroundColor = UIColor ( red: 0.5, green: 0.5, blue: 0.5, alpha: 0.379 )
let btnNext = UIButton(frame:CGRectMake(AVPlayerVC.view.bounds.width - 60,0,60,44))
btnNext.setTitle(">>", forState:.Normal)
btnNext.addTarget(self, action:"playNext", forControlEvents:.TouchUpInside)
// btnNext.layer.borderColor = UIColor ( red: 0.0, green: 0.0, blue: 1.0, alpha: 0.670476140202703 ).CGColor
// btnNext.layer.borderWidth = 1.0
OverlayView.addSubview(btnNext)
let btnReplay = UIButton(frame:CGRectMake((AVPlayerVC.view.bounds.width/2)-40,0,80,44))
btnReplay.setTitle("Replay", forState:.Normal)
btnReplay.addTarget(self, action:"replayVideo", forControlEvents:.TouchUpInside)
OverlayView.addSubview(btnReplay)
let btnPrevious = UIButton(frame:CGRectMake(0,0,80,44))
btnPrevious.setTitle("<<", forState:.Normal)
btnPrevious.addTarget(self, action:"previousVideo", forControlEvents:.TouchUpInside)
OverlayView.addSubview(btnPrevious)
let btnComment = UIButton(frame:CGRectMake((AVPlayerVC.view.bounds.width/2)-70,40,140,44))
btnComment.setTitle("Comments", forState:.Normal)
btnComment.addTarget(self, action:"openComments", forControlEvents:.TouchUpInside)
OverlayView.addSubview(btnComment)
AVPlayerVC.view.addSubview(OverlayView);
}
func playNext() {
prevItem = AVPlayerVC.player?.currentItem
OverlayView.hidden = true
commmentQueuePlayer.advanceToNextItem()
}
func replayVideo() {
OverlayView.hidden = true
AVPlayerVC.player?.currentItem?.seekToTime(kCMTimeZero)
AVPlayerVC.player?.play()
}
func previousVideo() {
OverlayView.hidden = true
if prevItem != AVPlayerVC.player?.currentItem {
if (commmentQueuePlayer.canInsertItem(prevItem!, afterItem:AVPlayerVC.player?.currentItem)) {
//commmentQueuePlayer.insertItem(prevItem!, afterItem:AVPlayerVC.player?.currentItem)
commmentQueuePlayer.replaceCurrentItemWithPlayerItem(prevItem)
prevItem = AVPlayerVC.player?.currentItem
replayVideo()
}
} else {
replayVideo()
//Else display alert no prev video found
}
}
func openComments() {
//Open the comment View/VC
}
func stopedPlaying() {
if prevItem == nil {
prevItem = AVPlayerVC.player?.currentItem
}
OverlayView.hidden = false
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment