Latest 0.3.0
License MIT
Platforms ios 9.2

Build Status
CocoaPods Version
Carthage compatible
GitHub release
GitHub license

A media player for iOS written in Swift 3.0. Keith was based on the audio player implemented on


  • Generic audio and video player for iOS
  • Easier than setting up your own AVPlayer stack
  • No need to deal with key-value observing AVPlayer and AVPlayerItem properties yourself
  • Deals with audio session interruptions for you
  • Remote commands for Control Center

Keith does not include any UI elements. Only player logic.


Using CocoaPods:

pod 'Keith'

Using Carthage:

github "Movile/Keith"


  1. Drag Keith.xcodeproj to your project in the Project Navigator.
  2. Select your project and then your app target. Open the Build Phases panel.
  3. Expand the Target Dependencies group, and add Keith.framework.
  4. Click on the + button at the top left of the panel and select New Copy Files Phase. Set Destination to Frameworks, and add Keith.framework.
  5. import Keith whenever you want to use Keith.


  • iOS 9.2+
  • Swift 3.0


To get started, first create a playback source.

let url = URL(string: "")!
let type: PlaybackSource.`Type` = .video

let source = PlaybackSource(url: url, type: type)

Then, set up the playback controller, which is Keith’s working horse.

let playbackController = PlaybackController()
playbackController.prepareToPlay(source, playWhenReady: true, startTime: 0.0)

You can optionally use the playback controller’s shared property to obtain a singleton instance. This may be useful when you need to retain the controller in your whole app’s lifetime — audio player app’s are a common use case.

let playbackController = PlaybackController.shared

The playback controller supports standard operations (play, pause, toggle play/pause, skip forward/backward, seek) and has a status property to check for playback states.

It’s possible to get the underlying AVPlayer from the playback controller and use it to include in an AVPlayerViewController, for example.

import AVKit

let playerViewController = AVPlayerViewController()
playerViewController.player = playbackController.player

Observe the following notifications to monitor changes in the playback state.

  • didBeginPlayback
  • didPausePlayback
  • didResumePlayback
  • didStopPlayback
  • willChangePositionTime
  • didChangePositionTime
  • didUpdateElapsedTime
  • didUpdateDuration
  • didUpdateStatus
  • didPlayToEnd
  • willChangePlaybackSource
  • didChangePlaybackSource


Keith’s name is a homage to Keith Richards, one of the greatest guitar players that ever existed and the embodiment of rock ‘n roll itself.

If you’ve gotta think about being cool, you ain’ cool

Keith Richards

Latest podspec

    "name": "Keith",
    "module_name": "Keith",
    "version": "0.3.0",
    "license": {
        "type": "MIT",
        "file": "LICENSE"
    "summary": "A media player for iOS written in Swift.",
    "homepage": "",
    "authors": {
        "Rafael Alencar": "[email protected]"
    "source": {
        "git": "",
        "tag": "v0.3.0"
    "platforms": {
        "ios": "9.2"
    "source_files": "Keith/*.swift",
    "pushed_with_swift_version": "4.0"

Pin It on Pinterest

Share This