Need help with ModernAVPlayer?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

noreasonprojects
171 Stars 27 Forks MIT License 575 Commits 11 Opened issues

Description

ModernAVPlayer is a persistence AVPlayer wrapper

Services available

!
?

Need anything else?

Contributors list

ModernAVPlayer

Swift 4.2 Build Status CocoaPods CocoaPods

ModernAVPlayer
is a persistence
AVPlayer
wrapper

++ Cool features ++

  • Get 9 nice and relevant player states (playing, buffering, loading, loaded...)
  • Persistence player to resume playback after bad network connection ~~even in background mode~~ (bug from version 1.5.1)
  • Manage headphone interactions, call & siri interruptions, now playing informations
  • Add your own plug-in to manage tracking, events...
  • RxSwift compatible
  • Loop mode
  • Log available by domain ***

Known issue

From version 1.5.1, resume playback from background mode failed. If you have any suggestion, please help.

Use of  mixWithOther AVAudiosession CategoryOptions is not a solution.

Menu

Requirements

  • iOS 10.0+
  • tvOS 10.0+

In order to support background mode, append the following to your

Info.plist
:
UIBackgroundModes

    audio

Installation

Swift Package Manager

Supported version:

swift-tools-version:5.0
// Package.swift

import PackageDescription

let package = Package( name: "Sample", dependencies: [ .package(url: "https://github.com/noreasonprojects/ModernAVPlayer", from: "X.X.X") ], targets: [ .target(name: "Sample", dependencies: ["ModernAVPlayer"]) ] )

CocoaPods

CocoaPods is a dependency manager for Cocoa projects. You can install it with the following command:

$ gem install cocoapods

CocoaPods 1.3+ is required to build ModernAVPlayer.

To integrate

ModernAVPlayer
into your Xcode project using CocoaPods, specify it in your
Podfile
:
source 'https://github.com/CocoaPods/Specs.git'
platform :ios, '10.0'
use_frameworks!

target '' do pod 'ModernAVPlayer' end

Then, run the following command:

$ pod install

Getting started

Create media from URL

swift
let media = ModernAVPlayerMedia(url: URL, type: MediaType)
Create media from AVPlayerItem
swift
let media = ModernAVPlayerMediaItem(item: AVPlayerItem, type: MediaType, metadata: PlayerMediaMetadata)

Instanciate the wrapper

swift
let player = ModernAVPlayer()
Load and play the media
swift
player.load(media: media, autostart: true)
Track on repeat
swift
player.loopMode = true

| ↓ State / Command → | loadMedia | play | pause | stop | seek | |:---------|:---------:|:--------:|:--------:|:--------:|:--------:| | Init | O | X | O | O | X | Loading | O | X | O | O | X | Loaded | O | O | O | O | O | Buffering | O | X | O | O | O | Playing | O | X | O | O | O | Paused | O | O | X | O | O | Stopped | O | O | O | X | O | WaitingNetwork | O | X | O | O | X | Failed | O | O | X | X | X

Advanced

Custom configuration

All player configuration are available from

PlayerConfiguration
protocol.
A default implementation
ModernAVPlayerConfiguration
is provided with documentation

Remote command

If using default configuration file (

swift useDefaultRemoteCommand = true
), ModernAVPlayer use automatically all commands created by
ModernAVPlayerRemoteCommandFactory
class Documention available in
ModernAVPlayerRemoteCommandFactory.swift
file

Custom command

Use your own

PlayerConfiguration
implementation with
swift
...
useDefaultRemoteCommand = false
...

Create an array of commands conforming to

ModernAVPlayerRemoteCommand
protocol.
swift
let player = ModernAVPlayer(config: YourConfigImplementation())
let commands: [ModernAVPlayerRemoteCommand] = YourRemoteCommandFactory.commands
player.remoteCommands = commands

You can use existing commands from public

ModernAVPlayerRemoteCommandFactory
class.

Plugin

Use

PlayerPlugin
protocol to create your own plugin system, like tracking Plugin.

RxSwift

Instead of using delegate pattern, you can use rx to bind player attributes.

Setup

Use

pod 'ModernAVPlayer/RxSwift'
in the Podfile

Usage

swift
let player = ModernAVPlayer()
let state: Observable = player.rx.state

Communication

  • If you found a bug, make a pull request using
    Simple Audio
    template in the example section to demonstrate.
  • If you have a feature request, open an issue.
  • If you want to contribute, submit a pull request.

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.