finished Playback Finished error pending Preloading Finished buffering paused playing › Clearer - Flow of playback status › Less effort - Observing only one property & handling in one place › Easier - Maintaining player module
rendererView.player = player coverImageView.player = player // Setting to use default player control view controlView.attach(to: rendererView) controlView.componentInsets = UIEdgeInsets( top: 0, left: 0, bottom: 0, right: 30 ) controlView.attachToContainerView(with: button) // Presenting Fullscreen View Controller let fullscreenVC = LineMediaPlayerViewController() let transition = PlayerViewControllerTransition() fullscreenVC.transitioningDelegate = transition present(fullscreenVC, animated: true) › UI can be used with little code › Consider extensibility › Customization of UIView › Inheritance of UIViewController › Consider complexity within module
› Manages a list of all player objects › Player Pool can › Easily handle exceptions › Limit the number of players › Reuse inactive player Player Pool workingItems awaitingItems Features < Player Owner > Player uses gets player object manages list of