Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/calm/PersistentStreamPlayer
Stream audio over http, and persist the data to a local file while buffering
https://github.com/calm/PersistentStreamPlayer
audio ios objective-c persistence player streaming swift video
Last synced: about 19 hours ago
JSON representation
Stream audio over http, and persist the data to a local file while buffering
- Host: GitHub
- URL: https://github.com/calm/PersistentStreamPlayer
- Owner: calm
- License: mit
- Created: 2016-10-07T20:58:08.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2020-07-12T09:27:27.000Z (over 4 years ago)
- Last Synced: 2024-09-18T07:42:13.164Z (5 months ago)
- Topics: audio, ios, objective-c, persistence, player, streaming, swift, video
- Language: Objective-C
- Size: 12.7 KB
- Stars: 133
- Watchers: 36
- Forks: 29
- Open Issues: 6
-
Metadata Files:
- Readme: README.md
- License: LICENSE
Awesome Lists containing this project
README
## PersistentStreamPlayer
Handles the playing of an audio file while streaming, **and** saves the data to a local URL as soon as the stream completes. Battle-tested in the production version of [Calm](https://www.calm.com/ios)
### Installation
Add this to your [Podfile](https://cocoapods.org/)
```
pod 'PersistentStreamPlayer'
```### Usage
```
PersistentStreamPlayer *remoteAudioPlayer = [[PersistentStreamPlayer alloc] initWithRemoteURL:myHTTPURL
localURL:myFileURL];
remoteAudioPlayer.delegate = self;
[remoteAudioPlayer play];
```### Features
* streaming of audio file, starting playback as soon as first data is available
* **also** saves streamed data to a file URL as soon as the buffer completes
* simple `play`, `pause` and `destroy` methods (`destroy` clears all memory resources)
* ability to seamlessly loop the audio file. call `player.looping = YES`
* exposes `timeBuffered`, helpful for displaying buffer progress bars in the UI
* handles re-starting the audio file after the buffer stream stalls (e.g. slow network)
* does not keep audio file data in memory, so that it supports large files that don't fit in RAMThe `PersistentStreamPlayerDelegate` protocol has some helpful event indicators, all optional:
```
/* called when the data is saved to localURL */
- (void)persistentStreamPlayerDidPersistAsset:(PersistentStreamPlayer *)player;/* called when the audio file completed */
- (void)persistentStreamPlayerDidFinishPlaying:(PersistentStreamPlayer *)player;/* called when the play head reaches the buffer head */
- (void)persistentStreamPlayerStreamingDidStall:(PersistentStreamPlayer *)player;/* called as soon as the asset loads with a duration, helpful for showing a duration clock */
- (void)persistentStreamPlayerDidLoadAsset:(PersistentStreamPlayer *)player;/* on failure to load asset */
- (void)persistentStreamPlayerDidFailToLoadAsset:(PersistentStreamPlayer *)player;
```