iOS VideoKit

iOS VideoKit

Released 4 years ago , Last update 3 years ago

VideoKit is a powerful video playing and streaming framework for iOS developers developed in Objective-C. It supports playing local & remote files (mkv, divx, xvid, ogg, vorbis and more) and streaming popular protocols & formats (mms, http, rtsp, rtmp, rtp, mjpeg).

iOS VideoKit

Apple's video player and streamer solutions are very limited, supporting only specific video file formats, HTTP streaming and the h264 video codec. The source code powering the player and streamer is proprietary and it renders the task of streaming a very difficult one.

iOS VideoKit is a custom video player that plays divx, mkv, flv, (and many more formats) and uses other popular streaming protocols such as MMS, RTSP, RTMP. This SDK is capable of playing video files and streams from an HTTP server while using different audio/video codecs or playing video files and streams from a server which utilize the apple API (MPMoviePlayerController or AVPlayerItem).

If you ever find yourself in need to modify the video player, the buffering duration, audio or video raw data or many other aspects then iOS VideoKit is for you.

This SDK was built using FFmpeg, OpenGL ES 2.0 & Apple's AudioUnit.



Binary App License

  • Perpetual license

  • 1 application

  • Can distribute binary products only

  • Commercial use


Source Multiple Apps License

  • Perpetual license

  • 7 applications

  • Can distribute binary products only

  • Commercial use

  • 6 months support


Developer License

  • Perpetual license

  • 50 projects

  • Can distribute code and binary products

  • Commercial use

  • 12 months support


Enterprise License (Unlocked)

  • Perpetual license

  • unlimited applications

  • Can distribute binary products only

  • Commercial use

  • 12 months support

Need custom services for this product? Get a quote


Adding VideoKit to your Xcode project

alt text

  1. Go to VideoKit folder, and move VideoKit folder to your Xcode project. (Please note that, VideoKit folder must be added to root not under any folder)

alt text

  1. Be sure that ‘Copy items into destination group’s folder’ is checked

  2. Be sure that ‘VideoKitSample’ target is checked

alt text

  1. Remove selected unnecessary folders (Documentation, FFmpeg-Scripts) and the file (VideoKit-Prefix.pch). When asking about remove process, select ‘Remove References’. After doing this, our VideoKit folder is seen like above (at right).

alt text

  1. Select your target, and go to the General tab.

a. Those libraries (located in rectangle labelled as “a” in above picture) are automatically added when you add VideoKit folder to your xcode project.

b. Also add these frameworks/libraries - 1. libz - 2. libiconv - 3. QuartzCore - 4. SystemConfiguration - 5. MediaPlayer - 6. OpenGLES - 7. AudioToolbox - 8. AVFoundation

alt text

  1. Select your target again, and go to Build Settings tab

Find “Header Search Paths”, set it as below “Header Search Paths” | ./VideoKit/3rd-party/ffmpeg/include

alt text

  1. Now, add the ‘Required Background Modes’ key to your plist file and set item 0’s value to “App plays audio”

How to Use

Using VideoKit is a very easy task, it’s similar to Apple's MPMoviePlayerViewController & MPMoviePlayerController API.

A. Using VKPlayerViewController (Full screen player like Apple’s MPMoviePlayerViewController)

  1. First of all, add include file (#import “VKPlayerViewController.h”) to your ViewController
  2. Then call VKPlayerViewController with a valid URL as below

sample code

VKPlayerViewController *playerVc = [[[VKPlayerViewController alloc] initWithURL:urlString decoderOptions:NULL] autorelease];
playerVc.barTitle = [channel name];
playerVc.statusBarHidden = YES;
[self.navigationController presentViewController:playerVc animated:YES completion:NULL];

B. Using VKPlayerController (Embedded player like Apple’s MPMoviePlayerController)

  1. First of all, add include file (#import “VKPlayerController.h”) to your ViewController

  2. Then call VKPlayerController, add as subview and play with a valid URL as below

sample code

self.player  = [[[VKPlayerController alloc] initWithURLString:urlString] autorelease];
_player.view.frame = CGRectMake(28.0, 38.0, 264.0, 167.0);
 [self.view addSubview:_player.view];
_player.decoderOptions = options;
[_player play];


  • Play most popular media files locally that Apple doesn’t support
  • Stream from popular protocols (http, mms, rtsp & rtmp)
  • Supports all popular audio & video codecs
  • Supports mjpeg streams - mostly for ipcams
  • Supports animated GIF files with full transparency
  • 720p HD streams are supported by iPad 1 and above.
  • Supports real time video effects with using pixel shaders
  • Successful Audio & video syncing
  • Very easy to use (very similar to Apple's MPMoviePlayerViewController API & MPMoviePlayerController)
  • Look & feel like Apple's MPMoviePlayerViewController & MPMoviePlayerController
  • Works with Wifi & 3G
  • Shows detailed information about stream (audio & video codecs,total streamed data in bytes, connection type)
  • Works on all iOS(3GS, iPhone 4/4S, iPhone 5 and all iPads) devices & supports all screen types and rotations
  • Supports pausing stream
  • Supports streaming in background
  • Robust error handling
  • Supports audio resampling
  • Supports seeking in local & remote files
  • Airplay
  • Showing files/streams both in fullscreen and embedded
  • Supports multiple players on same view
  • Player is now an NSObject instance, so can be used without UI
  • Supports transition from embedded/fullscreen to fullscreen/embedded
  • Supports fullscreen, embedded and non UI control modes
  • Supports initial playback time for files
  • Supports looping for files
  • Supports adjusting volume level for each player
  • Supports changing audio streams in realtime
  • Supports disabling audio stream in file/stream


  • Binary App License: Decoder Binary + UI&Controller source code.
  • All other licenses includes the full source code of the decoder.
  • Detailed documentation with integration instructions.
  • Technical API documentation
  • Demo Xcode project.
  • Fully automated FFmpeg build scripts that will build universal static libraries for the armv7, armv7s, i386 & arm64 architectures.
  • Pre-built FFmpeg universal static libraries

Download the FREE Trial and see how simple it is to add video streaming functionality to your app.


iOS 5.0 SDK or above is needed to compile VideoKit however, if you need under 5.0, VideoKit can be built for iOS 4.0 with small modifications.

The VideoKit SDK requires additionally the following Apple frameworks:

  • • SystemConfiguration (used in Reachability framework by Apple)
  • • MediaPlayer (needed by MPVolumeView)
  • • AudioToolbox (needed by AudioUnit)
  • • AVFoundation (needed by AVAudioSession)
  • • OpenGLES (using when rendering pictures to screen)
  • • QuartzCore (using to draw StreamInfo view)

and VideoKit also needs to these frameworks (for connecting to stream, decoding Audio&Video packets, etc...):

  • • libz
  • • libiconv
  • • libavcodec
  • • libavformat
  • • libavutil
  • • libswscale
  • • libswresample

Docs & API Reference

The extended documentation that includes "features, integration, protocol fine tuning, ARC , etc" is found in here

The API reference of VideoKit is found in here

5 licenses, starting from From » $699.99 View Licenses

Get A Quote

What do you need?
  • Custom development
  • Integration
  • Customization / Reskinning
  • Consultation
When do you need it?
  • Soon
  • Next week
  • Next month
  • Anytime

Thanks for getting in touch!

Your quote details have been received and we'll get back to you soon.

or Get a quote

for customization or integration services

Or enter your name and Email
  • I Igor 6 months ago
    Hi, Is it possible to reconnect after error? Our stream is not accessible first 10 seconds, and returns Error 404. I would like the player do not show and error message but try to connect again with an interval of 1 seconds and up to 25 attempts. How can I set it up? Thank ypou!
    • Tarum Nadus Publisher 6 months ago
      Hi Igor, There is no a built in API for this but, You can manually create a timer and count the failures and do whatever want with play & stop methods...
    • I Igor 6 months ago
      Hi Tarum, Thank you for answer. I did so and it works like a charm now! Also I start using embedded player so the error message does not appear anymore. For those who has the same issue - extend your view with VKPlayerControllerDelegate and add var attempts = 25 func player(_ player: VKPlayerControllerBase!, didChange state: VKDecoderState, errorCode errCode: VKError) { if errCode.rawValue == VKErrorOpenStream && attempts > 0 { attempts -= 1 DispatchQueue.main.asyncAfter(deadline: + Double(Int64( 1 * Double(NSEC_PER_SEC))) / Double(NSEC_PER_SEC), execute: { }) } }
    • Tarum Nadus Publisher 6 months ago
      Good to hear that, now are you ready to get the full version ?
    • I Igor 6 months ago
      Hi Tarum, yes we already got it. Thank you for a nice product!
  • AA Afifa Abdallah 2 years ago
    Hi, How to play a video when it is finish ? (restart it)
    • Tarum Nadus Publisher 2 years ago
      Hey Afifa, You can loop a video by setting the property loopPlayback of VKPlayerController object. If you set it 0, then the video loops for ever.
  • DD deepak kumar dash 2 years ago
    LiveStream buffering is slow in ipad2 and the IP camera that is used for streaming is produce 1080p.can you please tell why this slow streaming is their?