Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //
- // ViewController.swift
- // radioButton
- //
- // Created by Евгений on 17.04.15.
- // Copyright (c) 2015 LimanskyDev. All rights reserved.
- //
- import UIKit
- import MediaPlayer
- import AVFoundation
- import Social
- class ViewController: UIViewController {
- var savedTitle: String = ""
- let screenWidth = UIScreen.mainScreen().bounds.width
- let screenHeight = UIScreen.mainScreen().bounds.height
- let playImage = UIImage(named: "play.png") as UIImage!
- let pauseImage = UIImage(named: "stop.png") as UIImage!
- let maxVolume = UIImage(named: "maxVolumeSlider.png") as UIImage!
- let minVolume = UIImage(named: "minVolumeSlider.png") as UIImage!
- let volumePin = UIImage(named: "volumePin.png") as UIImage!
- let selectedRing = UIImage(named: "active.png") as UIImage!
- var player: AVPlayer!
- var playerItem: AVPlayerItem!
- var wrapperView = UIView(frame: CGRectMake(0, 0, 800, 30))
- @IBOutlet weak var lowQualityButton: UIButton!
- @IBOutlet weak var highVol: UIImageView!
- @IBOutlet weak var highQualityButton: UIButton!
- @IBOutlet weak var lowVol: UIImageView!
- @IBOutlet weak var playerInfo: UILabel!
- var connected: Bool = false
- private var reachability:Reachability!
- private var server:String = "server-ip"
- //http://streaming.radionomy.com/Elium-ClubDance
- private var lowMount:String = "/s64kbps"
- private var highMount:String = "/s128kbps"
- private var currentMount:String = "/s128kbps"
- override func viewDidLoad() {
- super.viewDidLoad()
- lowVol.frame = CGRectMake(10, 27, 15, 15)
- highVol.frame = CGRectMake(screenWidth - 30, 25, 20, 20)
- IJProgressView.shared.showProgressView(view)
- setSessionPlayer()
- wrapperView = UIView(frame: CGRectMake(0, 25, screenWidth, 30))
- playerItem = AVPlayerItem(URL: NSURL(string: (self.server + self.currentMount) ))
- playerItem.addObserver(self, forKeyPath: "timedMetadata", options: nil, context: nil)
- playerItem.addObserver(self, forKeyPath:"loadedTimeRanges", options: nil, context: nil)
- UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
- player = AVPlayer(playerItem: playerItem)
- player.addObserver(self, forKeyPath: "status", options: nil, context: nil)
- player.volume = AVAudioSession.sharedInstance().outputVolume
- player.allowsExternalPlayback = true
- self.view.backgroundColor = UIColor.whiteColor()
- var volumeView = MPVolumeView(frame: wrapperView.bounds)
- volumeView.setMaximumVolumeSliderImage(maxVolume, forState: .Normal)
- volumeView.setMinimumVolumeSliderImage(minVolume, forState: .Normal)
- volumeView.setVolumeThumbImage(volumePin, forState: .Normal)
- volumeView.showsRouteButton = false
- wrapperView.addSubview(volumeView)
- highBitPressed(highQualityButton)
- highQualityButton.setTitleColor(UIColor.whiteColor(), forState: .Selected)
- lowQualityButton.setTitleColor(UIColor.whiteColor(), forState: .Selected)
- self.view.insertSubview(wrapperView, atIndex:2)
- NSNotificationCenter.defaultCenter().addObserver(self, selector: "audioSessionInterrupted:", name: AVAudioSessionInterruptionNotification, object: AVAudioSession.sharedInstance())
- reachability = Reachability.reachabilityForInternetConnection()
- NSNotificationCenter.defaultCenter().addObserver(self, selector: "reachabilityChanged:", name: ReachabilityChangedNotification, object: reachability)
- reachability.startNotifier()
- }
- override func viewDidAppear(animated: Bool) {
- UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
- if ((savedTitle as NSString).containsString("-"))
- {
- var tittleArr = split(savedTitle) {$0 == "-"}
- MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : tittleArr[0], MPMediaItemPropertyTitle : tittleArr[1]]
- }
- IJProgressView.shared.showProgressView(view)
- if (playerItem.loadedTimeRanges != nil)
- {
- var timeRangeArray: NSArray = playerItem.loadedTimeRanges
- if (timeRangeArray.count > 0)
- {
- var timerange: CMTimeRange = timeRangeArray.objectAtIndex(0).CMTimeRangeValue
- var smartValue: Float64 = CMTimeGetSeconds(timerange.start);
- var duration: Float64 = CMTimeGetSeconds(timerange.duration);
- if( duration - smartValue > 5 || smartValue == duration) {
- IJProgressView.shared.hideProgressView()
- } else
- {
- IJProgressView.shared.showProgressView(view)
- }
- }
- }
- }
- func reachabilityChanged(note: NSNotification) {
- IJProgressView.shared.showProgressView(view)
- let reachability = note.object as! Reachability
- if (reachability.isReachable())
- {
- if (reachability.isReachableViaWiFi())
- {
- if(connected)
- {
- updatePlayer()
- }
- } else {
- if(connected)
- {
- updatePlayer()
- }
- }
- }
- else {
- IJProgressView.shared.showProgressView(view)
- }
- }
- func updatePlayer()
- {
- playerItem.removeObserver(self, forKeyPath: "timedMetadata")
- player.removeObserver(self, forKeyPath: "status")
- playerItem.removeObserver(self, forKeyPath: "loadedTimeRanges")
- playerItem = AVPlayerItem(URL: NSURL(string: (self.server + self.currentMount)))
- playerItem.addObserver(self, forKeyPath:"loadedTimeRanges", options: nil, context: nil)
- playerItem.addObserver(self, forKeyPath: "timedMetadata", options: nil, context: nil)
- player = AVPlayer(playerItem: playerItem)
- setSessionPlayer()
- if (connected)
- {
- player.play()
- }
- player.addObserver(self, forKeyPath: "status", options: nil, context: nil)
- player.allowsExternalPlayback = true;
- UIApplication.sharedApplication().beginReceivingRemoteControlEvents()
- if ((savedTitle as NSString).containsString("-"))
- {
- var tittleArr = split(savedTitle) {$0 == "-"}
- MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : tittleArr[0], MPMediaItemPropertyTitle : tittleArr[1]]
- }
- }
- func setSessionPlayer()
- {
- var audioSessionError: NSError?
- let audioSession = AVAudioSession.sharedInstance()
- audioSession.setActive(true, error: nil)
- audioSession.setCategory(AVAudioSessionCategoryPlayback, error: &audioSessionError)
- audioSession.setActive(true, error: nil)
- }
- func audioSessionInterrupted(notification:NSNotification)
- {
- if notification.name == AVAudioSessionInterruptionNotification
- && notification.userInfo != nil {
- var info = notification.userInfo!
- var intValue: UInt = 0
- (info[AVAudioSessionInterruptionTypeKey] as! NSValue).getValue(&intValue)
- if let type = AVAudioSessionInterruptionType(rawValue: intValue) {
- switch type {
- case .Began:
- playButton.selected = false
- playerInfo.text = "press play"
- case .Ended:
- // interruption ended
- if let option: AnyObject = notification.userInfo?[AVAudioSessionInterruptionOptionKey] {
- if let option = option as? UInt {
- let options = AVAudioSessionInterruptionOptions(option)
- if options == AVAudioSessionInterruptionOptions.OptionShouldResume {
- play()
- }
- }
- }
- }
- }
- }
- }
- func play()
- {
- player.play()
- playerInfo.text = savedTitle
- playButton.selected = true
- if ((savedTitle as NSString).containsString("-"))
- {
- var tittleArr = split(savedTitle) {$0 == "-"}
- MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : tittleArr[0], MPMediaItemPropertyTitle : tittleArr[1]]
- }
- }
- @IBAction func onConnectPressed(sender: UIButton) {
- if ( !connected )
- {
- sender.selected = true
- play()
- }
- else
- {
- sender.selected = false
- playerInfo.text = "press play"
- player.pause()
- IJProgressView.shared.hideProgressView()
- }
- connected = !connected
- }
- override func observeValueForKeyPath(keyPath: String, ofObject object: AnyObject, change: [NSObject : AnyObject], context: UnsafeMutablePointer<Void>) -> Void
- {
- if (AVAudioSession.sharedInstance().otherAudioPlaying)
- {
- playButton.selected = false
- playerInfo.text = "press play"
- player.pause()
- IJProgressView.shared.hideProgressView()
- return
- }
- if ("loadedTimeRanges" == keyPath)
- {
- var timeRangeArray: NSArray = playerItem.loadedTimeRanges
- var timerange: CMTimeRange = timeRangeArray.objectAtIndex(0).CMTimeRangeValue
- var smartValue: Float64 = CMTimeGetSeconds(player.currentTime());
- var duration: Float64 = CMTimeGetSeconds(CMTimeAdd(timerange.start, timerange.duration));
- if( duration - smartValue > 5 || smartValue == duration) {
- IJProgressView.shared.hideProgressView()
- } else
- {
- IJProgressView.shared.showProgressView(view)
- }
- return
- }
- if (object as! NSObject == player && keyPath == "status") {
- if (player.status == AVPlayerStatus.ReadyToPlay) {
- } else if (player.status == AVPlayerStatus.Failed) {
- IJProgressView.shared.showProgressView(view)
- updatePlayer()
- }
- return
- }
- if (keyPath == "timedMetadata")
- {
- if var data: AVPlayerItem = object as? AVPlayerItem
- {
- if var meta: [AVMetadataItem] = data.timedMetadata as? [AVMetadataItem]
- {
- for item in meta{
- playerInfo.text = "\(item.value)"
- savedTitle = "\(item.value)"
- }
- if ((savedTitle as NSString).containsString("-"))
- { var tittleArr = split(savedTitle) {$0 == "-"}
- MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : tittleArr[0], MPMediaItemPropertyTitle : tittleArr[1]]
- }
- IJProgressView.shared.hideProgressView()
- }
- else
- {
- playerInfo.text = savedTitle
- }
- }
- return
- }
- if (player.status == AVPlayerStatus.ReadyToPlay)
- {
- var timeRangeArray: NSArray = player.currentItem.loadedTimeRanges
- var timerange: CMTimeRange = timeRangeArray.objectAtIndex(0).CMTimeRangeValue
- var smartValue: Float64 = CMTimeGetSeconds(timerange.start);
- var duration: Float64 = CMTimeGetSeconds(timerange.duration);
- if( duration - smartValue > 5 ) {
- IJProgressView.shared.hideProgressView()
- } else
- {
- IJProgressView.shared.showProgressView(view)
- }
- }
- }
- @IBAction func lowBitPressed(sender: AnyObject) {
- lowQualityButton.selected = true;
- highQualityButton.selected = false;
- lowQualityButton.bounds = CGRectMake(lowQualityButton.bounds.minX, lowQualityButton.bounds.minY, 40, 40)
- highQualityButton.bounds = CGRectMake(highQualityButton.bounds.minX, highQualityButton.bounds.minY, 100, 40)
- playerItem.preferredPeakBitRate = 64
- currentMount = lowMount
- updatePlayer()
- }
- @IBAction func highBitPressed(sender: AnyObject) {
- lowQualityButton.selected = false;
- highQualityButton.selected = true;
- playerItem.preferredPeakBitRate = 128
- lowQualityButton.bounds = CGRectMake(lowQualityButton.bounds.minX, lowQualityButton.bounds.minY, 100, 40)
- highQualityButton.bounds = CGRectMake(highQualityButton.bounds.minX, highQualityButton.bounds.minY, 40, 40)
- currentMount = highMount
- updatePlayer()
- }
- @IBOutlet weak var playButton: UIButton!
- @IBAction func sharePressed(sender: UIButton) {
- let textToShare = "I love this radio and I think you'll love it, too!"
- if let myWebsite = NSURL(string: "http://www.fastcast4u.com")
- {
- let objectsToShare = [textToShare, myWebsite]
- var activityVC = UIActivityViewController(activityItems: objectsToShare, applicationActivities: nil)
- //New Excluded Activities Code
- activityVC.excludedActivityTypes = [UIActivityTypeAirDrop, UIActivityTypeAddToReadingList]
- //
- if UIDevice.currentDevice().userInterfaceIdiom == .Pad {
- activityVC.popoverPresentationController!.sourceView = self.view;
- }
- self.presentViewController(activityVC, animated: true, completion: nil)
- }
- }
- func DoNothin()
- {
- }
- override func remoteControlReceivedWithEvent(receivedEvent:UIEvent) {
- if (receivedEvent.type == .RemoteControl) {
- switch receivedEvent.subtype {
- case .RemoteControlTogglePlayPause:
- onConnectPressed(playButton)
- case .RemoteControlPlay:
- onConnectPressed(playButton)
- case .RemoteControlPause:
- onConnectPressed(playButton)
- default:
- DoNothin()
- }
- }
- }}
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement