I embed a video on every page of my pageview controller. I am using the page view template template application with Xcode since I am noob. The first few videos work and play the content, but after several attempts, all the videos turn black.
I use this Swift video game library: https://github.com/piemonte/Player
Any help would be appreciated!
Model controller code, the same values that are deliberately repeated for example ...
class ModelController: NSObject, UIPageViewControllerDataSource {
var pageTitleData: [String] = [
"Banana",
"Banana",
"Banana",
"Banana",
"Banana",
"Banana",
"Banana",
"Banana",
"Banana",
"Banana"
]
var videoURLData: [String] = [
NSBundle.mainBundle().pathForResource("banana", ofType:"mp4")!,
NSBundle.mainBundle().pathForResource("banana", ofType:"mp4")!,
NSBundle.mainBundle().pathForResource("banana", ofType:"mp4")!,
NSBundle.mainBundle().pathForResource("banana", ofType:"mp4")!,
NSBundle.mainBundle().pathForResource("banana", ofType:"mp4")!,
NSBundle.mainBundle().pathForResource("banana", ofType:"mp4")!,
NSBundle.mainBundle().pathForResource("banana", ofType:"mp4")!,
NSBundle.mainBundle().pathForResource("banana", ofType:"mp4")!,
NSBundle.mainBundle().pathForResource("banana", ofType:"mp4")!,
NSBundle.mainBundle().pathForResource("banana", ofType:"mp4")!
]
override init() {
super.init()
}
func viewControllerAtIndex(index: Int, storyboard: UIStoryboard) -> DataViewController? {
if (self.pageTitleData.count == 0) || (index >= self.pageTitleData.count) {
return nil
}
let dataViewController = storyboard.instantiateViewControllerWithIdentifier("DataViewController") as! DataViewController
dataViewController.pageTitleDataObject = self.pageTitleData[index]
dataViewController.videoURLDataObject = self.videoURLData[index]
return dataViewController
}
func indexOfViewController(viewController: DataViewController) -> Int {
return pageTitleData.indexOf(viewController.pageTitleDataObject) ?? NSNotFound
}
func pageViewController(pageViewController: UIPageViewController, viewControllerBeforeViewController viewController: UIViewController) -> UIViewController? {
var index = self.indexOfViewController(viewController as! DataViewController)
if (index == 0) || (index == NSNotFound) {
return nil
}
index--
return self.viewControllerAtIndex(index, storyboard: viewController.storyboard!)
}
func pageViewController(pageViewController: UIPageViewController, viewControllerAfterViewController viewController: UIViewController) -> UIViewController? {
var index = self.indexOfViewController(viewController as! DataViewController)
if index == NSNotFound {
return nil
}
index++
if index == self.pageTitleData.count {
return nil
}
return self.viewControllerAtIndex(index, storyboard: viewController.storyboard!)
}
}
DataViewController Code ...
class DataViewController: UIViewController, PlayerDelegate {
@IBOutlet weak var veggieLabel: UILabel!
@IBOutlet weak var videoWrapper: UIView!
private var player: Player!
convenience init() {
self.init(nibName: nil, bundle:nil)
}
required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
}
override init(nibName nibNameOrNil: String?, bundle nibBundleOrNil: NSBundle?) {
super.init(nibName: nibNameOrNil, bundle: nibBundleOrNil)
}
var pageTitleDataObject: String = ""
var videoURLDataObject: String = ""
override func viewDidLoad() {
super.viewDidLoad()
self.view.autoresizingMask = ([UIViewAutoresizing.FlexibleWidth, UIViewAutoresizing.FlexibleHeight])
self.player = Player()
self.player.delegate = self
self.player.view.frame = self.view.bounds
self.addChildViewController(self.player)
self.videoWrapper.addSubview(self.player.view)
self.player.didMoveToParentViewController(self)
let fileUrl = NSURL.fileURLWithPath(videoURLDataObject)
self.player.setUrl(fileUrl)
self.player.fillMode = "AVLayerVideoGravityResizeAspectFill"
self.player.playbackLoops = true
let tapGestureRecognizer: UITapGestureRecognizer = UITapGestureRecognizer(target: self, action: "handleTapGestureRecognizer:")
tapGestureRecognizer.numberOfTapsRequired = 1
self.player.view.addGestureRecognizer(tapGestureRecognizer)
}
override func viewWillAppear(animated: Bool) {
super.viewWillAppear(animated)
self.veggieLabel!.text = pageTitleDataObject
self.player.playFromBeginning()
}
func handleTapGestureRecognizer(gestureRecognizer: UITapGestureRecognizer) {
switch (self.player.playbackState.rawValue) {
case PlaybackState.Stopped.rawValue:
self.player.playFromBeginning()
case PlaybackState.Paused.rawValue:
self.player.playFromCurrentTime()
case PlaybackState.Playing.rawValue:
self.player.pause()
case PlaybackState.Failed.rawValue:
self.player.pause()
default:
self.player.pause()
}
}
func playerReady(player: Player) { }
func playerPlaybackStateDidChange(player: Player) { }
func playerBufferingStateDidChange(player: Player) { }
func playerPlaybackWillStartFromBeginning(player: Player) { }
func playerPlaybackDidEnd(player: Player) { }
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
}
}