JW Player Mobile SDKs Now Featuring AVPlayer and ID3 Timed Metadata

Blog 5 min read | Feb 3, 2016 | JW Player


The JW Mobile team is excited to bring you our latest update to the JW Player Mobile SDKs. Version 2.1 of the JW Player SDK for iOS now uses Apple’s AVPlayer as its native media playback engine. Not only does this give iOS developers some valuable features right out of the gate, but this will speed up the JW Mobile team’s delivery of future HLS updates & iOS features.

Both our iOS and Android SDKs now support ID3 timed metadata, a frequently requested feature that will provide developers more power and flexibility to build functionality on top of HLS live streams.

Read on for more details!


In 2015 the JW Mobile team switched our Android SDK’s native media playback engine to Google’s open-source ExoPlayer. We were able to keep all of JW Player’s rich features (e.g. UI customization, captions, and advertising) and still maintain a fully native Java API library for Android developers. Since switching to ExoPlayer, we’ve measured vast improvements in HLS speed, performance, and feature support. A diagram and explanation of this approach can be found here.

Based on the success of this architecture, the JW Mobile team decided to similarly redesign the JW Player SDK for iOS to use Apple’s iOS AVFoundation AVPlayer as its native media playback engine. Once again, by keeping our JW Player core features intact and switching to AVPlayer we are able to quickly introduce new features in version 2.1 such as DVR live streaming, HLS multiple track audio, picture-in-picture, and ID3 timed metadata. All the while, iOS developers still get our fully native Obj-C / Swift APIs and the media playback performance of AVPlayer.

Furthermore, as Apple releases updates to HLS and new features to iOS through AVPlayer, the JW Mobile team will be able to pass on these benefits to our customers more swiftly than before.

ID3 Timed Metadata

As part of this release, our mobile SDKs will support ID3 timed metadata in HLS streams.

Traditionally, ID3 has been used for MP3 music metadata such as title, artist, year, cover art, etc. But more recently, another valuable use case for ID3 has been for Timed Metadata for HTTP Live Streaming (HLS).

An excerpt from Eric Boyd’s blog post on ID3 support in the JW Player for Web:

ID3 tags are keyed to a specific moment in time within a video. When the JW Player plays that video frame, it will let the client-side know the metadata. This opens up the possibility to implement some really powerful applications. Here are a few that are top of mind:
  • Keeping presentation slides in sync with a video timeline.
  • Updating a news ticker in a live stream.
  • Letting the JW Player know that a live video stream is going into a commercial break.

The third bullet point regarding ad breaks in live video streams is where I will dive into further detail.

Ads in HLS Live Streams using ID3 Timed Metadata

In HLS live streams, the challenge for publishers is how to insert either client-side ads into the broadcast, or how to extract ad tracking data from server-side ads stitched directly into the broadcast.

In the case of client-side ads, during a live broadcast you may want to insert an ad. But since the stream is happening live, how do you indicate to your app when to switch from the live broadcast to the ad?

The solution is to add ID3 metadata containing details of your ad tag into the HLS stream (here’s an example of how to do this using Wowza). When the ID3 metadata containing your ad data is detected in the live broadcast, this effectively signals the desired ad break and the ad data is passed to your app from JW Player’s onMeta() event. Your app can then act on this ad break with the ad data contained in the ID3 container to cut from the live broadcast to your ad.

This approach can also work for server-side ads stitched into HLS live streams. In this case, the server-side ad will seamlessly play as if it was part of the live broadcast. But how will your app know the difference between your live broadcast and the ad to send ad tracking data (ie. how do you track when the ad starts and ends)? The solution is to use ID3 Timed Metadata in the HLS stream to help you track when JW Player is playing your server-side ad and when it’s playing your live broadcast.

Other New Features in JW Player SDK 2.1

What’s new in JW Player SDK for iOS (release notes)

  • ID3 Timed Meta Data
  • Live DVR
  • HLS Multiple Track Audio
  • Picture in Picture (iOS 9 iPad only)

What’s new in JW Player SDK for Android (release notes)

  • ID3 Timed Metadata
  • Media playback from local file storage

Where do I download the latest JW Player SDKs?

If you are an existing JW Player SDK customer, you can sign in to your JW Player Dashboard and download the latest SDK packages from your Account tab. Otherwise, if you’d like more information to purchase or get a free trial of our SDKs to build a native iOS or Android video player, please visit our Mobile SDK page.

Do you have a feature suggestion for our SDKs? Your feedback is welcome and encouraged as we continue to improve and enhance the JW Player SDKs for Android & iOS with regular feature and performance updates!


Henry Lee,

Product Manager, Mobile Devices