{"id":2940,"date":"2016-02-03T05:00:00","date_gmt":"2016-02-03T05:00:00","guid":{"rendered":"http:\/\/jwplayer.com\/jw-player-mobile-sdks-now-featuring-avplayer-and-id3-timed-metadata\/"},"modified":"2023-02-06T14:28:22","modified_gmt":"2023-02-06T19:28:22","slug":"jw-player-mobile-sdks-now-featuring-avplayer-and-id3-timed-metadata","status":"publish","type":"post","link":"https:\/\/jwplayer.com\/blog\/jw-player-mobile-sdks-now-featuring-avplayer-and-id3-timed-metadata\/","title":{"rendered":"JW Player Mobile SDKs Now Featuring AVPlayer and ID3 Timed Metadata"},"content":{"rendered":"
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\u2019s 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\u2019s delivery of future HLS updates & iOS features.<\/p>\n
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.<\/p>\n
Read on for more details!<\/p>\n
<\/p>\n
In 2015 the JW Mobile team switched our Android SDK\u2019s native media playback engine to Google\u2019s open-source ExoPlayer<\/a>. We were able to keep all of JW Player\u2019s 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\u2019ve measured vast improvements in HLS speed<\/a>, performance, and feature support. A diagram and explanation of this approach can be found here<\/a>.<\/p>\n Based on the success of this architecture, the JW Mobile team decided to similarly redesign the JW Player SDK for iOS to use Apple\u2019s iOS AVFoundation AVPlayer<\/a> 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.<\/p>\n 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.<\/p>\n As part of this release, our mobile SDKs will support ID3<\/a> timed metadata in HLS streams.<\/p>\n 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<\/a> (HLS).<\/p>\n An excerpt from Eric Boyd\u2019s blog post<\/a> on ID3 support in the JW Player for Web:<\/p>\n The third bullet point regarding ad breaks in live video streams is where I will dive into further detail.<\/p>\n 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.<\/p>\n 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?<\/p>\n The solution is to add ID3 metadata containing details of your ad tag into the HLS stream (here\u2019s an example<\/a> 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\u2019s 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.<\/p>\n 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\u2019s playing your live broadcast.<\/p>\n If you are an existing JW Player SDK customer, you can sign in to your JW Player Dashboard<\/a> and download the latest SDK packages from your Account tab. Otherwise, if you\u2019d 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<\/a> page.<\/p>\nID3 Timed Metadata<\/h2>\n
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:<\/em><\/pre>\n
\n
Ads in HLS Live Streams using ID3 Timed Metadata<\/h2>\n
<\/p>\n
<\/p>\n
Other New Features in JW Player SDK 2.1<\/h2>\n
What’s new in JW Player SDK for iOS (release notes<\/a>)<\/h3>\n
\n
What’s new in JW Player SDK for Android (release notes<\/a>)<\/h3>\n
\n
Where do I download the latest JW Player SDKs?<\/h3>\n