Single App License $249.99

1 application Binary restricted distribution Commercial use allowed Can modify source 6 months support Read full license | More Info

Developer License $749.99

5 applications Binary restricted distribution Commercial use allowed Can modify source 6 months support Read full license | More Info

Distributor License $1,999.99

Unlimited projects Source and binary distribution Commercial use allowed Distribute modifications 1 year support Read full license | More Info

You need to log-in or create an account
  • Create an account
  • Log-in
  • Please use your real name.
  • Account activation link will be sent to this address.
  • Minimum 8 characters

Clicking this button confirms you read and agreed to the terms of use and privacy policy.

Starting from $ 249.99

View Pricing 14 days money-back guarantee
(41 ratings)

RadioTunes SDK for iOS

A radio streaming SDK for iOS with support for the http and mms protocols. RadioTunes SDK can play mp3, aac, aac+ and wma audio streams. Includes documented source code of a demo XCode project demonstrating usage.

Share and win up to $15k in prizes each month!Learn more

Share

Description

RadioTunes Codec Support

A Powerful Radio Streaming Framework for iOS Software Developers!

RadioTunes SDK is written for iOS developers who want to add radio streaming functionality to their app using a couple lines of code. Behind the scenes RadioTunes relies on the iOS AudioQueue framework and the open source LGPL licensed FFmpeg library.

If your app does not require mms/wma codec functionality you can also use the RadioTunes SDK without including the FFmpeg library. The code for mms streaming is completely separated from the code for http streaming so that you can choose which portions of code you want to include in your project.

Disclaimer: RadioTunes SDK can play all Window Media Audio version 9 streams but some streams based on version 10 could fail.

Make your App look like a Pro

Be sure to check out the Radiojive Template if you want a great looking design for your radio app. This template also includes a fully working radio app that uses RadioTunes SDK!

Download the FREE Trial now and see for yourself how simple it is to add radio playback functionality to your app!

Back to top

Features & Package

Features

  • NEW FEATURE IN VERSION 2.1!
    • ASX playlist support.
  • NEW FEATURES IN VERSION 2.0!
    • Realtime audio recording.
    • Improved audio session management.
    • Bandwidth usage statistics.
  • Support for the http and mms protocols.
  • Supports mp3, aac, aac+ and wma audio streams.
  • PLS, M3U, ASX, XSPF and direct URL support.
  • Parsing of Shoutcast/Icecast metadata.
  • Automatic handling of interruptions like incoming phone calls.
  • Background playback.
  • Robust error handling.
  • Auto reconnect feature.
  • Works on Edge/3G/WiFi.

Package

  • Complete source code of RadioTunes SDK.
  • Detailed documentation with integration instructions.
  • Demo Xcode project.
  • Fully automated FFmpeg build scripts that will build universal static libraries for the armv7 and i386 architectures.
  • Pre-built FFmpeg universal static libraries with support for the mms protocol and wma audio codec.
Back to top

Documentation

Code Documentation

All public classes of RadioTunes SDK are documented using appledoc. See the documentation for further information.

Requirements

The source code of RadioTunes SDK is developed on Xcode 4.5.1 with iOS Base SDK 6.0. RadioTunes SDK works on a deployment target of iOS 5 or greater on armv7 and armv7s and can be used in ARC and non-ARC projects.

Integration

RadioTunes SDK can be integrated in two ways into your app.

1. Add the binary RadioTunes.framework

  • Drag RadioTunes.framework into the "Frameworks" group of your Xcode project.
  • Add the required libraries as shown in the screenshot below. You can add the FFmpeg libraries (libavcodec.a, libavformat.a, libavutil.a and libswresample.a) by dragging them from the "External/ffmpeg/lib" directory into your "Frameworks" group.
  • Open the Build Settings tab and apply the following changes:
    • Other Linker Flags -> -all_load -ObjC -lxml2
    • Don't Create Position Independent Executables -> Yes
  • Add the "Required Background Modes" key to your project's plist file and set it's value to "App plays audio".
  • Add the following import statement everywhere you want to use RadioTunes SDK: #import <RadioTunes/RadioTunes.h> Binary

2. Add RadioTunes.xcodeproj as a dependency

  • Copy the whole RadioTunes folder into your project's root folder.
  • Drag RadioTunes.xcodeproj into the "Frameworks" group of your Xcode project.
  • Add RadioTunes as a target dependency.
  • Add the required libraries as shown in the screenshot below.
  • Open the Build Settings tab and apply the following changes:
    • Other Linker Flags -> -all_load -ObjC -lxml2
    • Don't Create Position Independent Executables -> Yes
    • Add the following paths to "Header Search Paths":
      • $(SRCROOT)/RadioTunes/External/ffmpeg/include"
      • $(SRCROOT)/RadioTunes/RadioTunes"
    • Add the following path to "Library Search Paths":
      • **$(SRCROOT)/RadioTunes/External/ffmpeg/lib"
  • If your project uses ARC, open the Compile Sources section in the Build Phases tab. Add the -fno-objc-arc compiler flag to all .m source files belonging to RadioTunes SDK!
  • Add the "Required Background Modes" key to your project's plist file and set it's value to "App plays audio".
  • Add the following import statement everywhere you want to use RadioTunes SDK: #import "RadioTunes.h" Source

Sample Usage

YLHTTPRadio *radio = [[YLHTTPRadio alloc] initWithURL:[NSURL URLWithString:@"http://someurl"]];
[radio play];

YLMMSRadio *radio = [[YLMMSRadio alloc] initWithURL:[NSURL URLWithString:@"mms://someurl"]];
[radio play];
[radio startRecordingWithDestination:filePath];    
Read all 339 comments »

Questions & Comments

Leave a comment

You must be logged-in to leave a comment.
Log-in now or register for a free account.
  • N. Persson said:

    1 day ago
    Hi,

    I have a few things I would like clarified:

    - Have you made your own custom streaming player using CoreAudio /w hardware decoding, or are you using AVFoundation or similar (maybe even libav) to provide decoding + playback functionality?

    - Are there any support for connection loss/network issues, feeding the audio stream to prevent iOS shutting down the background thread when multitasking?

    - You mention m3u support - how about the m3u8 playlist format?

    Thanks!
    • Kemal Taskin Author said:

      24 hours ago
      Hi,

      - RadioTunes SDK is using its own custom audio player based on AudioQueue to provide hardware decoding and playback functionality. MMS audio streams are software decoded by FFmpeg and use AudioQueue for playback.

      - RadioTunes handles audio interruptions and network issues. During network loss it tries to reconnect with a timeout of 60 seconds. There's also a mechanism that can detect the availability of WiFi and automatically switch from 3G to WiFi.

      - RadioTunes works in the background of course and also has ways to reconnect in the background during network loss.

      - M3U is supported but there's no support for m3u8.
    • N. Persson said:

      24 hours ago
      Thanks for answering!

      So how's it all connected - how would I go about creating my own m3u8 parser using your player? Do I simply extend some "base-playlist-parser"-class and provide the file URLs when I've finished parsing it, or?
    • Kemal Taskin Author said:

      24 hours ago
      Yes, you can create your own parser which must implement the YLPlaylistParserProtocol:
      http://yakamozlabs.com/static/radiotunes/Protocols/YLPlaylistParserProtocol.html

      So your parser should basically return an URL.
    • N. Persson said:

      24 hours ago
      But there can be multiple chunks//files in a single playlist - there's no support for that?
    • Kemal Taskin Author said:

      23 hours ago
      Right now only one URL is supported. So if you want to play a playlist with multiple URL items in it, you'll need to parse the playlist yourself and pass the URL's one by one to YLHTTPRadio or YLMMSRadio.
    • N. Persson said:

      23 hours ago
      Alright. Thanks again for answering this quick.

      Last question: I'm going to need the source code to make the changes needed. Would the $250 version be good enough for that, given that I'm only going to use this in a single app distributed on the AppStore?
    • Kemal Taskin Author said:

      23 hours ago
      Yes, all our licenses come with source code but have different terms regarding distribution and the number of apps you can use it with.
  • Dario Lessa said:

    3 days ago
    Hi, i´m interesting in RadioTunes, but my project it´s with storyboard. It´s possible add this player to my project?

    Regards.
    • Kemal Taskin Author said:

      3 days ago
      Hi Dario,

      RadioTunes SDK is not a UI component so it doesn't matter if your project uses a storyboard or not. If you have a tableview in your storyboard for example, you should use RadioTunes API to start/pause radio playback when a user taps on a tableview cell.
    • Dario Lessa said:

      3 days ago
      Thanks Kemal, so i´ll try to integrate the demo version in my project. The
  • bb License holder?Single App License said:

    1 week ago
    hey kemal why the recordings tableview get empty after quiting the application from background?
    • Kemal Taskin Author said:

      1 week ago
      Hi,

      The demo app doesn't have code to restore previously recorded items. The main purpose of the demo app is to showcase the main features of RadioTunes SDK. It's not meant to be a fully working radio app.
    • bb License holder?Single App License said:

      1 week ago
      can you give me a little idea?
    • Kemal Taskin Author said:

      1 week ago
      You can use NSFileManager to get a list of recordings on disk or serialize the NSMutableDictionary that keeps track of the recordings to a plist using NSKeyedArchiver.
    • bb License holder?Single App License said:

      4 days ago
      NSArray *paths = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask, YES);
      NSString *documentsPath = [paths objectAtIndex:0];
      NSString *filename = [NSString stringWithFormat:@"%@%d.%@", [_detailItem objectForKey:@"name"], _recordingCounter++, [_radio fileExtensionHint]];
      NSString *filepath = [documentsPath stringByAppendingPathComponent:[NSString stringWithFormat:@"recordings.Plist"]];
      NSMutableDictionary *dict = [NSMutableDictionary dictionaryWithContentsOfFile:filepath];
      [dict setObject:filename forKey:@"name"];
      [dict writeToFile:filepath atomically:YES];
      [_radio startRecordingWithDestination:filepath];
      }
      can you give me an idea what i am doing wrong?
    • Kemal Taskin Author said:

      4 days ago
      Hi,

      There are some glitches with your code. First let's assume that you'll be using a dictionary to keep track of recordings. Load the dictionary from plist only once when your view controller gets loaded. Once you've loaded the dictionary from plist you can keep it as a property and write it back to plist when you make changes to the dictionary.

      In the code above you're passing filepath as the recording destination while filepath is actually the path of the plist file! You should create a path with the filename variable you created and use this as the recording destination.
    • bb License holder?Single App License said:

      3 days ago
      can you help me out i am stuck on this for couple days still i cannot figure it out .Please ....
    • Kemal Taskin Author said:

      3 days ago
      Hi,

      I think it's better if we continue this conversation over email. You can reach me at "kemal dot taskin at gmail dot com".
You must be logged-in to vote. Log-in to your account or register now.
View all 33 reviews »

User Reviews

  • 1 of 1 people found this review helpful
    It is a really very nice sdk, help me a lot. :)
    - Cheng Tzu Hsiu, 4 weeks ago
    Flag review
    Was this helpful? Yes No
  • 2 of 2 people found this review helpful
    Great SDK, looks good, workes awesome !
    - Patrick Rørth, 5 months ago
    Flag review
    Was this helpful? Yes No
  • 1 of 1 people found this review helpful
    Works as advertised. No problems installing it.
    - gholias, 6 months ago
    Flag review
    Was this helpful? Yes No

Starting from $ 249.99

View Pricing 14 days money-back guarantee