FRadioPlayer

FRadioPlayer is a wrapper around AVPlayer to handle internet radio playback.

Swift-Radio-Appv

Example

To run the example project, clone the repo, and run pod install from the Example directory first.

Swift-Radio-App2

Features

  • [x] Support internet radio URL playback
  • [x] Update and parse track metadata
  • [x] Update and show album artwork (via iTunes API)
  • [x] Automatic handling of interruptions
  • [x] Automatic handling of route changes
  • [x] Support bluetooth playback
  • [x] Swift 4.2
  • [x] Full documentation
  • [x] Network interruptions handling
  • [x] Support for Carthage
  • [x] Support for macOS
  • [ ] Support for Audio Taps
  • [ ] Support for Audio Recording

Requirements

  • macOS 10.12 +
  • iOS 10 +
  • Xcode 10
  • Swift 4.2

Installation

CocoaPods

FRadioPlayer is available through CocoaPods. To install
it, simply add the following line to your Podfile:

pod 'FRadioPlayer'

Carthage

FRadioPlayer is available through Carthage. To install it, simply add the following line to your Cartfile:

github "fethica/FRadioPlayer" ~> 0.1.10

Manual

Drag the Source folder into your project.

Usage

Basics

  1. Import FRadioPlayer (if you are using Cocoapods)
import FRadioPlayer
  1. Get the singleton FRadioPlayer instance
let player = FRadioPlayer.shared
  1. Set the delegate for the player
player.delegate = self
  1. Set the radio URL
player.radioURL = URL(string: "http://example.com/station.mp3")

Properties

  • isAutoPlay: Bool The player starts playing when the radioURL property gets set. (default == true)

  • enableArtwork: Bool Enable fetching albums artwork from the iTunes API. (default == true)

  • artworkSize: Int Artwork image size. (default == 100 | 100x100).

  • rate: Float? Read only property to get the current AVPlayer rate.

  • isPlaying: Bool Read only property to check if the player is playing.

  • state: FRadioPlayerState Player current state of type FRadioPlayerState.

  • playbackState: FRadioPlaybackState Playing state of type FRadioPlaybackState.

Playback controls

  • Play
player.play()
  • Pause
player.pause()
  • Stop
player.stop()
  • Toggle playing state
player.togglePlaying()

Delegate methods

Called when player changes state

func radioPlayer(_ player: FRadioPlayer, playerStateDidChange state: FRadioPlayerState)

Called when the playback changes state

func radioPlayer(_ player: FRadioPlayer, playbackStateDidChange state: FRadioPlaybackState)

Called when player changes the current player item

func radioPlayer(_ player: FRadioPlayer, itemDidChange url: URL?)

Called when player item changes the timed metadata value

func radioPlayer(_ player: FRadioPlayer, metadataDidChange artistName: String?, trackName: String?)

Called when player item changes the timed metadata value

func radioPlayer(_ player: FRadioPlayer, metadataDidChange rawValue: String?)

Called when the player gets the artwork for the playing song

func radioPlayer(_ player: FRadioPlayer, artworkDidChange artworkURL: URL?)

Swift Radio App

For more complete app features, check out Swift Radio App based on FRadioPlayer

Swift-Radio-App-1

Hacking

The Xcode project is generated automatically from project.yml using XcodeGen. It's only checked in because Carthage needs it, do not edit it manually.

$ mint run yonaskolb/xcodegen
?  Saved project to FRadioPlayer.xcodeproj

GitHub