VLC media player for Mac OS X 2.2.0

Today, we will also a major new version of VLC for Mac OS X. For cross-platform changes, please have a look at the release notes and our press release.

What’s new in VLC for Mac?

  • Support for OS X Yosemite
  • Completely re-written web plugin for Chrome, Safari and Firefox is back!
    Improved fullscreen behavior
  • Continue playback where you left off
  • Improved playlist adding a file size column and an option to increase the font size
  • In addition to iTunes, Spotify can be paused on playback start
  • New encryption and decryption modules for SSL based on OS X’s SecureTransport library for FTP and HTTP connections. This greatly improves speed and security.
  • A lot of improvements in VLCKit for use in third party applications, notably
    • Switched the code base to ARC and added support for Swift projects
    • Support for HLS and HTTPS playback on iOS
    • Improved thumbnailing
    • Various new APIs for playlist handling, the equalizer, thumbnailing and meta data handling

We are excited about this major update of VLC for Mac and hope that you’ll like it as much as we do.

MobileVLCKit and VLCKit, part 2

This is a follow-up article covering VLC’s Objective-C framework to include its functionality in third party applications. If you missed the first part, click here.

Today, we will discuss meta data processing.

In VLCKit, every item you play is a VLCMedia object. For typical use cases, it can be created with an NSURL or an NSString containing a path.

We differentiate between two types of meta data: technical information describing the media such as codec, bitrate, video size and user-visible/-provided information such as artist, publisher name, album title.

Let’s start with the technical information, which can be retrieved from any media object with a single API call:

@property (NS_NONATOMIC_IOSONLY, readonly, copy) NSArray *tracksInformation;

This gives you an array containing as many dictionaries as the media contains tracks, be it video, audio or subpictures (subtitles, teletext). The track type is defined by the VLCMediaTracksInformationType key. All tracks will include information about the respective codec, bitrate and encoding details. Depending on track type, keys for video dimensions, audio channel numbers or text encoding will be set as well as an optional key for language.
Retrieving this property can potentially be very expensive, especially if your media is stored remotely as VLCKit will synchronously parse the source to provide this information. Therefore, we recommend you to cache this data, as it will probably not change during the lifetime of the VLCMedia object.
Note: for codec information, you’ll receive an integer which is a raw FOURCC representation of the codec name. Releases following VLCKit 2.2 will include a convenience method to translate it to an end-user readable string.

On mobile devices, you might run into the question if a given device is powerful enough to decode a given video file. For this purpose, VLCMedia includes the isMediaSizeSuitableForDevice property which will provide a reasonable guess. Note that this property will always be true on OS X.

Now, what about non-technical information about the media contents? To retrieve them, VLCKit needs to parse the source. This can be done both synchronous and asynchronous depending on the needs of your application. We generally recommend you to use the asynchronous way so you don’t block the execution of any threads. VLCMedia includes an optional delegate protocol, which allows you to follow meta data processing by receiving notifications every time further information becomes available as well as once parsing finished.
VLCKit can provide up to 17 different meta data keys with more to come in subsequent releases. While it allows to fetch them one by one, we recommend you to fetch the full dictionary using:

@property (nonatomic, readonly, copy) NSDictionary * metaDictionary;

If you have write access to your media source, you can also set values for the respective keys and save them to disk.

Thanks for reading!

If you have questions, don’t hesitate to use the comment section or to shoot a mail. The next part of this series will be about thumbnail creation.

MobileVLCKit and VLCKit, part 1

This article is a general overview and the start of a small series of articles covering the library, published at an irregular rate.

VLCKit is a generic library for any audio or video playback needs on both Apple platforms and also supports streaming and media to file conversations on the Mac. It is open-source software licensed under the LGPLv2.1 or later, available in source code and binary form from the VideoLAN website. You can also integrate MobileVLCKit easily via CocoaPods.

The foundation of this framework was laid in 2007 by Pierre d’Herbemont as part of a Google Summer of Code student project, in fact kind of mentored by me. Since then, it played major roles in developing the Lunettes prototype in 2008/2009, MobileVLC in 2010/2011 as well as take-two of VLC for iOS in 2013 until present.

When do you need VLCKit? Frankly always when you need to play media not supported by QuickTime / AVFoundation or if you require more flexibility. You want to play something else besides H264/AAC files or HLS streams? You need subtitles beyond QuickTime’s basic support for Closed Captions? Your media source is not your mobile device and not a basic HTTP server either, but perhaps a live stream hailing from some weird media server or even a raw DVB signal broadcasted on a local network? Then, VLCKit is for you.

But this is open-source software right? What does this mean for me and the end-user? And wasn’t MobileVLC removed from the App Store in 2011 for some crazy licensing reason?

First of all, open-source means for you, that you get access to the whole stack. There is no blackbox, all the sources are there at your fingertips. No reverse-engineering needed, no private APIs.

Then again, this must not be the case for your software. The LGPLv2.1 allows our software to be included in proprietary apps, as long as you follow the license. As a start, make sure to publish any potential changes you do to our software, make sure that the end-user is aware that VLCKit is embedded within your greater work and that s/he is aware of the gained rights. S/he is granted access to our code as well as to your additions to our work. For further details, please read the license and consult your lawyer with any questions you might have.

Regarding the removal of MobileVLC, the world moved on a bit. libvlc and VLCKit are no longer under the GPLv2 but were relicensed to the LGPLv2.1. While this looks like a play on characters, it is of major importance regarding distribution on the Mac or iOS App Store. As of now, the Terms of Service of either store are still incompatible with the GPLv2 (despite major changes and improvements), while distribution under the LGPLv2.1 is absolutely permitted.

Let’s get going with a technical overview and start with a layer model:

Layer model

Any layer can only communicate with the layer above and the layer below. Therefore, decoders are four abstraction layers away from the client app developer. Why is that a good thing? By having a decent amount of abstraction, it is no longer necessary for you to know which library is taking care of the decoding, rendering or parsing. You are wondering whether you need to decode your certain video in a multi-threaded or single-threaded way, think that decoding might be accelerated through the hardware in the iPhone 5S and above, but pondering what to do with older releases? libvlc will do the correct thing for you.
However, we allow flexibility. You know that you want to use a certain option on libavcodec because it’s cool (and for some reason, we decided against it?)? that’s a one-liner for you.

Okay, so how do you get going? Have a look at the SimplePlayback sample code available for download here. Ignoring the boilerplate code present in any empty iOS app project, this basic app shows you how to play a video in 8 lines of code and to allow the user to play or pause playback:

@interface RandomViewController ()
{
    VLCMediaPlayer *_mediaplayer;
}
@end
@implementation RandomViewController
- (void)viewDidLoad {
    [super viewDidLoad];
    /* setup the media player instance, give it a delegate and
     * something to draw into */
    _mediaplayer = [[VLCMediaPlayer alloc] init];
    /* assign a random UIView or NSView to the player to
     * draw the video */
    _mediaplayer.drawable = self.movieView;
    /* create a media object and give it to the player */
    _mediaplayer.media = [VLCMedia mediaWithURL:
     [NSURL URLWithString:@“http://yourserver.com/folder/file.mkv“]];
}
- (IBAction)playandPause:(id)sender {
    if (_mediaplayer.isPlaying)
        [_mediaplayer pause];
    [_mediaplayer play];
}
@end

Give it a spin!

Then again, chances are that you are on iOS and you want to have a slightly more advanced user experience. Need a seek slider and a time display or would you like to crop the video a bit? Your media includes more than one audio or subtitles track and the user should be able to switch? The code is there for you. We wrote a self contained class and distribute it under the BSD 2-clause license. If you are interested, checkout the Dropin-Player project available here.

That’s it for the first part of this article. The second part will cover more advanced use-cases of VLCKit and will follow shortly.

If you have questions, don’t hesitate to use the comment section or to shoot a mail.

One last word regarding VLC for iOS and taking code from that project. A contrario to VLCKit or the provided sample code, it is protected by different licenses and different obligations. It is dual licensed under the GPLv2 as well as the MPLv2. Most importantly, it is absolutely not permitted to take any bits of code it unless your product is distributed under a compatible license. We have a good DMCA track record and we are monitoring both the Mac and the iOS App Stores constantly.

VLC media player for Mac OS X, versions 2.1.4 and 2.0.10

HEVC sample

Today, we released 2 versions of VLC media player for Mac OS X targeting different client systems.

Version 2.1.4

This is a small bug fix release, which improves an important regression regarding DVD playback and improves compatibility with HUffYUV contents by upgrading the respective decoder library. Additionally, a rare issue with some specifically crafted wmv files was fixed and a misleading error message no longer appears during video playback on OS X Mavericks.
Grab a copy here or trigger the internal updater if it doesn’t prompt you right away.

Screen Shot

Version 2.0.10

More than 3 months after the last update to VLC’s 2.0 release series, this minor update includes security updates for third party libraries, stability improvements and increased battery life when using a Mac with more than one graphics card.
While we generally recommend anyone using a Mac with OS X 10.6 or later on a 64bit-capable device to deploy version 2.1.4 linked above, VLC 2.0.10 is a great thing to enjoy your media if you decided to stay on OS X 10.5 or if you are using a PowerPC or 32bit Intel-based Mac.
Fetch the PowerPC binary here or grab the Intel variant there. The update is also appearing in VLC’s internal updater.

Screen Shot

VLC 2.1

Today, we published VLC media player 2.1.1 for all major desktop operating systems. If you used VLC for Android or for iOS in the last couple of months, you already got in touch with VLC’s 2.1 code base.

VLC media player 2.1 was initially published on September 26. However, we didn’t enable VLC’s internal updater since then. Why? We spent extra time on polishing the release, added support for the upcoming major video codec HEVC aka H.265 in MKV and MP4 containers as well as raw files, and lastly improved compatibility with both OS X 10.6 and 10.9.

Image

2.1 is a major release for us, something we worked on since September 2011. We took the time to entirely re-write VLC’s audio output structure resolving architectural issues, improving lip synchronization, enhanced efficiency and improved device management. On the Mac, this upgrade also adds full support for external audio output devices and 6.1 / 7.1 / 8.1 / 10.2 multi-channel layouts.

Image

On OS X, we finally added support for hardware-accelerated H.264 video decoding with further improvements including support for MPEG 2 and H263 scheduled for this winter season. Furthermore, video capturing using AVFoundation is supported on OS X 10.7 and later as well as recording the current screen contents, a feature previously supported on 10.5 and 10.6 only.

Image

VLC 2.1 completes the transition to our re-written Mac interface introduced in version 2.0 with various major improvements, further customization options including additional playlist columns, support for cloned and split video output windows, as well as customizable presets for video filters, audio filters, and the equalizer. A new “Subtitles” menu embraces VLC advanced compatibility with any textual or bitmapped format and allows the user to customize text styles and size on-the-fly during playback. An all-new “Convert/Stream” panel simplifies media to file conversations as well as setup of streams on the local network or the internet. The media library and playlist view gains full Podcast support known from our ports to Windows and Linux.

"Clone" video filter

Those major improvements have a drawback though: VLC 2.1 no longer supports any 32bit Intel-based Macs and any PowerPC-based Macs. It requires OS X 10.6 or later. For the older  Macs, we published another bug fix release last week, 2.0.9, fixing various annoyances and resolving all known security issues. Macs compatible with VLC 2.1 will be offered the update automatically while the others will remain on 2.0.9 with the potential option for a future 2.0.10 release, should it be needed.

We have great news for developers: VLC’s underlying work-horse, libVLC, as well as most of its modules were relicensed to LGPLv2.1+. This allows any interested party to deploy our proven code their own apps and solutions. As showcase apps, we developed VLC for Android and VLC for iOS demonstrating libVLC’s features. While libVLC is a C library, an all-Objective-C framework named VLCKit is available for Apple platforms. Native Java bindings are available for Android, too.

We hope you enjoy VLC 2.1 as much as we do and we are looking forward to further releases in our pipeline on track for release this winter.

VLC 2.0.6

Today, we published VLC 2.0.6. This is an important update to VLC’s 2.0 series, which improves the overall stability, fixes minor annoyances and solves certain security implications.

It will be available through the internal updater on Mac OS X later today and is already live on for manual downloads on our main website. The in-app announcement on Windows will be enabled as soon as the load on our servers allows. This release is the first to use our new mirror server distribution system. We finally moved away from SourceForge to our own trusted set of download partners.

Notable changes include:

  • Improved playback for Apple-lossless audio, MKV files including support for Matroska v4, paletted codecs within AVI and FLAC
  • Overall improvements through updated codecs and third libraries, including but not limited to DVD playback
  • Improved Vimeo playlist parsing and HTML SRT subtitle rendering
  • Solved connectivity issue with certain https servers

This update includes the following security content:

  • Fixed crash triggered by specifically crafted ASF files (SA-1302, Credit: Debasish Mandal)
  • Fixed use-after-free crash with Ogg file playback (Credit: Tomi Juntunen)

Additionally, we improved various aspects of the OS X port:

  • Improved fullscreen controller time slider with larger click target
  • Improved lookup of human readable device names in AUHAL plugin (OS X)
  • Fixed subtitle rendering resolution when using OS X’s native fullscreen mode
  • Fixed listing of the lua interfaces (web, telnet and console) in the advanced preferences panel
  • Fixed spatializer audio filter panel
  • Fixed crash within the video output code
  • Fixed BDMV folder selection issue on OS X Mountain Lion, which treats such folders as a AVCHD file as soon as they include an item named INDEX.BDM
  • Fixed bug which caused a hidden fullscreen panel
  • Fixed various minor UI drawing issues (main window, fullscreen controller, lua extensions, …)
  • Allowed VLC to be associated with .dvdmedia packages

Windows-specific improvements:

  • Fixed GPU decoding on Intel HD 2000/3000 cards
  • Fixed uninstallation from different locations than C:

GNU/Linux-specific improvements:

  • Numerous D-Bus and MPRIS2 improvements
  • Reject broken versions of PulseAudio

New translations to Gujarati and Aragonese.

Updated translations for Brazilian Portuguese, Traditional Chinese, Thai, Portuguese, Japanese, Italian, Hebrew, Estonian, Spanish, Czech, Catalan, Bosnian, Asturian, French, Romanian, Serbian, Russian, Hindi, German, Slovenian, Norwegian Bokmål, Khmer, Icelandic, Interlingua, Welsh, Ukrainian, Dutch and Danish.