Planet VideoLAN

Welcome on Planet VideoLAN. This page gathers the blogs and feeds of VideoLAN's developers and contributors. As such, it doesn't necessarly represent the opinion of all the developers, the VideoLAN project, ...

VLC for Android

September 21, 2016

Other uses of futex

Rémi Denis-Courmont

Revisiting the condition variable with futex and pondering thread synchronization primitives.

September 21, 2016 03:05 PM

September 02, 2016

Unveiling interesting numbers about VLC downloads

Ludovic Fauvet

Every year in September the VideoLAN community organize the Open Multimedia Conference also known as the VideoLAN Developers Days or for short VDD. This year it will take place in Berlin the 3rd and 4th of September. For this occasion I gathered some interesting data from the VideoLAN download servers.

First, let me start with a bit of context. VideoLAN is a (French) non-profit organization with 31 active members as of today. The non-profit acts as an umbrella for a lot of multimedia related projects like libVLC, x264, DVBlast, libbluray and more. But of course, the most known is also the one that eats up most our bandwidth: VLC media player.

On the infrastructure side we rely on amazingly nice peoples and organizations all over the world that donate some of their bandwidth for a good cause. We host the main replication server also known as the rsync master and all the mirrors use the rsync protocol to fetch updates multiple times a day.

When you’re heading up to the VideoLAN website to download VLC, a piece of software written in Go, called mirrorbits, will find in just a fraction of a second the closest mirror to you that is alive and serving the file you’re looking at. That way downloads are fast and reliable. Note: actually most of the numbers presented here were exported from the mirrobits database.

Currently we have 87 mirrors in 44 countries and the total size of our repository is 46 GB. During the past year we had no major incident and no downtime (thanks to the redundancy) so that’s pretty close to a 100% availability.

Just for the past month (August 2016), which is usually not the highest of the year in terms of traffic, 568 TB were downloaded from our mirrors. That’s an average of 1.7 Gbit/s for the month and we counted 23,794,472 downloads for the same period. These numbers do not include the mobile ports (Android, iOS, WinRT) or the Linux versions which are served by their respective platforms.

Let’s focus a bit on VLC. We only have (somewhat) accurate statistics for Windows (both 32 and 64-bit) and MacOS but it gives an interesting scale anyway: MacOS count approximately for 110 th of the total. The Windows 64-bit version is surprisingly low but that’s because the 32-bit one is the default choice (and works on both 32 and 64-bit architectures).

On this other chart you can compare the trend of the downloads for some of the recent versions of VLC1. The peak of a release usually includes the automatic updates that are started in the week that follows (to ensure there is no major regression). For example the 2.2.2 and 2.2.3 were quite short-lived releases which did not get pushed through auto-updates because of bugs.

Let’s finish with a fun fact. Few months ago I’ve setup a live downloads counter on the VideoLAN website (just below the big Download VLC button). It started as a fun experiment but stayed that way ever since. Behind the scene is a websocket that connects to our download server as soon as you load the page, and receives updates until you leave the page. Simple.

So that should give us an idea of how many users we have on our frontpage at any given time. After aggregating the results I got the improbable number of 985 simultaneously connected users on the frontpage. We’re a popular website but still, 985 is a lot and it grows month after months… weird. At best we should have around 300 connections tops. But since we don’t disconnect the websockets after a while it means you can basically stay connected forever! And some of these connections are up since weeks. So what are all these people doing here you may ask. Well, the reason is probably that a lot of these users went for a quick visit and didn’t close their tab since! Amazing.

That’s all for today folks! I hope you liked this article. Don’t forget to follow me on Twitter and if you’re around Berlin this weekend, come and say hi!

  1. For more accurate VLC downloads statistics by version and refreshed every day, you can head to [return]

September 02, 2016 03:40 PM

August 25, 2016

Last weeks in VideoLAN - 53

Jean-Baptiste Kempf

53rd VideoLAN report

During the core of the hot European summer, here is a weekly report about the last 2 weeks in the VLC and VideoLAN communities!

It was a bit calm, to be honest; and I'm a bit late to publish. Summer is the cause :)



The week started by a lot of code cleanup and renaming for the Mac OS interface. We also had improvements focus on the Sierra release.

On the decoding side, we've had some improvement for hardware decoding in Direct3D11, focused on HEVC decoding.

We also had fixes for the OSX VideoToolbox decoder, notably to be able to restart the decoder when required.

A module supporting the AV1 from the Alliance for Open Media was merged too. So far, it's only a decoder, and disabled by default.

On the streaming side, the MP4 muxer timestamps were fixed. It was also backported to the 2.2.x branch.

We now have ARM64 assembly for our deinterlacer, which will be very useful for iOS, Apple TV and Android TV.

Finally, we had fixes for RTSP passwords saving in the keystore, improvements for RTSP support and the H264 packetizer, and we added support for UTF8 filenames in FTP directory listings, and support for DiscNumber and DiscTotal metadata in MP4, and DNxHR!


On Android, we've mostly fixed crashes, updated translations and pushed 2.0.6 in production, on the play store.

The work is mostly done now on the new media library code, that will be merged later.


On UWP, the focus has been on the XBox 1, and mostly on how we can upload files on the box, since we don't have access to the filesystem.

The current solution is using an HTTP webserver to upload the files from your browser, and support for USB disks.

That's all for those weeks, see you next!

August 25, 2016 03:50 PM

August 20, 2016

A faster YAML loader

Rémi Duraffort

That's the second issue I had when playing with the LAVA log viewer.

In the new versions of LAVA, the logs are formatted in YAML:

- {"dt": "2016-08-18T14:24:01.096308", "lvl": "info", "msg": "start: 1 tftp-deploy (max 300s)"}
- {"dt": "2016-08-18T14:24:01.099413", "lvl": "debug", "msg": "start: 1.1 download_retry (max 300s)"}
- {"dt": "2016-08-18T14:24:01.100674", "lvl": "debug", "msg": "start: 1.1.1 file_download (max 300s)"}

That's really convenient, but when a job is generating a lot of logs, loading this YAML files is becoming longer and longer:

% time python -c "import yaml; y=yaml.load(open('output.yaml'));"
18,25s user 0,23s system 100% cpu 18,475 total
% wc -l output.yaml
36817 output.yaml

But 18s to load 36817 lines of text sounds unreasonable. I looked for some explanation and found that by default, the Python YAML parser, is using the Pure-Python loader instead of the (way) faster C implementation.

So, in order to use the faster C implementation, you should use:

% time python -c "import yaml; y=yaml.load(open('output.yaml'), Loader=yaml.CLoader);"
2,28s user 0,06s system 99% cpu 2,346 total

That's still really slow, but we can live with that for the moment.

August 20, 2016 06:16 AM

August 12, 2016

Playing with CSS rules

Rémi Duraffort

While working on improving the log viewer in LAVA I ran into an issue.

The issue is really simple: how to add display: block or display: none to a list of nodes while another JS script is adding more of theses nodes to the page.

The classical approach is to select the right nodes and apply the CSS rule. When the second script is adding nodes, you have to redo the selection. As you have many nodes (one per line of log) the update will be really slow.

Something like this would work:

// Update the page
// Update the css rule for the new blocks
$("my_selector").css('display', 'block');

Creating a Style Sheet

Instead of adding a CSS rule to every nodes, we can mark theses nodes with a class and change the CSS rules for this class whenever needed.

I discovered in the Mozilla documentation that it's possible (in JavaScript) to create a Style Sheet and to add or remove rules in it.

To create a new Style sheet, you just have to add a style section in the head with:

var sheet = (function() {
    var style = document.createElement("style");
    return style.sheet;

It's then possible to insert rules into the Style Sheet with insertRule:

// Insert at the top of the Style Sheet
sheet.insertRule(".mylabel { display: block }", 0);

// Or better, at the end
sheet.insertRule(".mylabel { display: none}", sheet.cssRules.length);

It's also possible to remove rules from the Style Sheet by using their indexes with deleteRule:

// Remove the first rule
// Remove the last one added
sheet.deleteRule(sheet.cssRules.length - 1);

With theses two function, you have everything you need to create a specific rule and update it whenever needed. You just have to keep track of his index.

August 12, 2016 01:30 PM

August 08, 2016

Last week in VideoLAN - 52

Jean-Baptiste Kempf

52nd VideoLAN report

Another summer week passes by and here is a new weekly report about the VLC and VideoLAN communities!



The week started with numerous additions to the Direct3D video accelerations and video outputs, to continue the support for 10bits decoding and HDR.

Related to those improvements, we added support for hardware decoding of HEVC decoding inside the TS format, by improving our HEVC packetizer.

We fixed (actually added) the support of QuickTime Videos inside MKV, aka MP4-inside-MKV; and also the support for QuickTime Audio inside MKV.

We improved again the ChromeCast support, by fixing small issues, notably when reloading and stopping the stream.

In the core, an important deadlock was killed, that was affecting Windows and Android platforms.

Finally, we also did a fix for hidden chapters in MKV, and improved the MIDI integration for Windows, and reworked a bit our contrib system.


On Android, we finally fixed the support for old x86 Phones like the ZenPhone that claimed to be ARM phones. Those phones lie about their CPU with CPU_ABI, CPU_ABI AND they expose a fake /proc/cpuinfo to the applications! Thanks to a contact at ASUS, we got a phone and coded a work-around.

We also added support for saving audio-delay when using your Bluetooth headphones, so that you have a different audio-delay when using those headphones than without headphones.

Finally, we fixed a few crashes and regressions that were reported against the last release.


On UWP, the biggest focus was on cleaning the code and on the Xbox 1 interface.

More to come soon, I hope!


We've had a lot of small fixes for libbluray, mostly on fixing issues and crashes reported by static analyzers, but also build issues, Windows issues, and crashes reported by the users.

That's all for this summer week! See you next!

August 08, 2016 04:54 PM

August 03, 2016

Last week in VideoLAN - 51

Jean-Baptiste Kempf

51st VideoLAN report

So, after a few crazy weeks, I'm coming back to a more regular schedule for my weekly reports about VLC and VideoLAN.



Decoder fallback

The major change, during last week, was the possibility to restart the audio decoders when the audio device changes.
This is very useful when you switch from normal decoders to SPDIF/HDMI pass-through for DTS, Dolby and related codecs.

In the past, VLC could only restart the filters, not the decoders, so our Dolby and DTS decoders were actually filters. This was finally changed and now decoders are decoders.

For those who don't understand what all this means, it means that it will help us support more formats for pass-through over HDMI, like DolbyDigital+ or DTS-HD.


We've fixed the green line that appears only on AMD GPUs on Windows. This is scheduled for the next Windows update.

I've implemented the support for browsing FTP remote directories, so that it behaves similarly to SFTP or SMB.

On Windows, we've added the support for hardware decoding of 10bits HEVC , using DxVA and D3D11.

We also pushed improvements to the prefetcher module and to our TTML support; and we've fixed issues for DVD menus, SAT>IP protocol and HLS protocol.

Finally, please note that the license of the UPnP module was switched from GPL to LGPL.


On Android, we've fixed a few issues related to old devices, and we've improved the libVLC Java bindings to support statistics.


Last week on WinRT, we've removed all the code that was focusing on older versions of Windows.

The codebase now support only Windows 10 Universal with its Anniversary Edition version.

That's all for this week!

Thanks for the support and see you soon!

August 03, 2016 11:37 AM

July 28, 2016

Last weeks in VideoLAN - 50

Jean-Baptiste Kempf

50th VideoLAN report

So, after a few crazy weeks, I was taken a bit by RealLife©®, and we've had 3 weeks without report. And this one is late. :)

Therefore, here is a new report about the VLC and VideoLAN communities, covering the last 3 weeks!

The report will be a bit more summarized that usual, and more dense in information, for obvious reasons. :)



We've added support for codecs with colors in 12bit-depth, in YUV 4:2:0, 4:2:2 and 4:4:4. Of course, nothing can display that yet, but it can happen in some HEVC samples. It will be dithered down before displaying.

The Windows users will be happy, because we're reintroducing the MIDI support, using a new library called FluidLite, in order to replace FluidSynth.

A new protocol to control and distribute satellite signals on a LAN called SAT>IP was implemented in a new access module.

There was a lot of work and rework on our adaptive support, notably to change timings and drain, but also to start supporting HLS using mp4 fragments.

Some work on URL and URI was done to support more cases and improve test coverage. 2 new functions called vlc_uri_resolve() and vlc_uri_compose() were introduced.
At the same time, modifications on the HTTP redirections were merged.

On Windows, we merged the VP9 hardware decoding, using the DxVA APIs.
This code requires very recent video cards to be usable.

Finally, an important work was done to merge the access and stream-filter behavior and semantics. The 2 type of modules still exist, but a large part of the code is now common.
This allows now block-based stream filters.

To achieve this, we now have introduced the vlc_stream_Eof(), vlc_stream_ReadBlock() and vlc_stream_ReadPartial() functions.

Finally, we added support for MP4 chapters in Unicode, and we fixed some Qt sizing issues with Qt5, a DLL loading potential security issue for Win32, MP4 subtitles size, a WMV integer overflow, a crash in smem, the Qt right-click menu on the playlist, SFTP browsing, and the audio fingerprinter. We also improved the HTTP/2 stack, our TS demuxer when dealing with scrambled content, and a few other minor things I forgot.


On Android, we've pushed 2.0.3, 2.0.4 and 2.0.5 to fix the most important issues and regressions reported.

However, we also added a few features notably:

  • Support for HTTP proxies,
  • Support for HTTPS self-signed certificates,
  • Subtitles style modification in preferences,
  • Improvements for SMB browsing,
  • Support for more ARMv8 devices.

And we also added, in the main branch, some modifications about preferences, and adding new ones.


The iOS buildsystem was modified to support full cocoapod building, so you can compile just the application, without compiling VLC and libVLC.

This important change introduced quite a bit of cleaning of the code and of the project. :D


On WinRT, we've prepared a MediaCenter Mode for the Xbox 1.

We fixed numerous interface issues and crashes, that were reported in 2.0.1.

A few fixes where pushed also to address issues happening with specific themes or specific resolutions in responsive mode.

That's all for those weeks! There is probably a bit more I forgot about, but you should have the important parts.

See you soon!

July 28, 2016 01:22 PM

July 05, 2016

Last weeks in VideoLAN - 49

Jean-Baptiste Kempf

49th VideoLAN report

So, after two busy weeks, you can get a new weekly report about the VLC and VideoLAN communities!



10 days ago, we released VLC for Android 2.0.

After a long period of development, we're finally at a release that supports more features than the old 0.9.x versions and the 1.7.x versions.

Video List


And last week, we released the new VLC for Windows 10, numbered 2.0 too.

It is a continuation of the work we did for WinRT, the kickstarter, focused on Windows 8.1, Windows Phone 8.1 and Windows RT.

The new application should supersede the old one.




In the last 2 weeks, we improved the ChromeCast support, notably to work on transmitting the pause status and the title between the device and VLC, and we also changed the interface to scan for devices, since it was a bit confusing.

We added support for some uncompressed video format inside MKV, for the AlbumArtist meta-tag inside mp4 and we now support more MicroDVD subtitles styles.

Our new Kwallet module was transitioned from using libKwallet to DBus. This will be better to support both Qt4 and Qt5 applications with libVLC, because those versions are not ABI compatible.

The core gained a new stream FIFO API, with functions like vlc_stream_fifo_New, vlc_stream_fifo_Queue, vlc_stream_fifo_Write and vlc_stream_fifo_Close.
This change, in addition to the new chained_demux implementation in the core, removes the need for stream_Demux (now removed).

We also improved the security when loading of DLLs on Windows.

And for Android, AudioTrack DTS pass-through was implemented.

Finally, numerous fixes were pushed, notably for Direct3D11, our contribs, some in the core, youtube playback regressions, the Mac OS interface, crashes for MMDevice device, and for the MediaCodec decoders. And more that I forget...


As I said, we released 2.0, and we also pushed 2.0.1 and 2.0.2 to fix the most important crashes reported.


Same, we released 2.0, the first beta version of the UWP application. Fixup releases are coming soon!


On iOS, we pushed the promised update and we had a few refactoring, notably on the network login view.


The libbluray code was modified to support 8.3 filenames, like in AVCHD directories we see in camcorders. This is the first step for full AVCHD support in VLC :)

That's all for those weeks! Not too bad :)

See you soon!

July 05, 2016 02:14 PM

July 01, 2016

Hong Kong Open Source Conference 2016

Rémi Denis-Courmont

VLC developers will be tending a booth in cooperation with the VideoLAN foundation at the upcoming Hong Kong Open Source Conference on 24-25 June 2016. Follow the link to sign up. See you there.

July 01, 2016 02:21 PM

June 29, 2016

Condition variable with futex

Rémi Denis-Courmont

Reimplementing condition variable with futex on Linux and Windows.

June 29, 2016 12:51 PM

Announcing VLC for UWP 2.0 beta

Jean-Baptiste Kempf

VLC for Windows 10 beta

If you follow this blog, after a long development period (and a lot of issues), VideoLAN is finally releasing the beta of VLC for Windows 10, numbered 2.0.0.

This beta is the first version targeting Windows 10 and running on the Universal Windows Platform, aka UWP.


The Windows 10 application has all the features available on iOS and Android and a few more.

Like the classic VLC, it supports a very large number of formats, but it also has a medialibrary triaging audio and video media, a full player with subtitles, audio/video synchronisation, an audio mini-player and a network shares browser! We also support Cortana, Live Tiles, Pining and Continuum!

The only important missing feature is DVD/Bluray playback and TV tuners that are not yet possible through the UWP APIs.

And of course, it's completely open source, available under the GPLv2.0 license!

You should try it now!

Video Library

We have a medialibrary, with video management:


and a video player with subtitles, subtitles download, chapters, audio/video sync:


We even support a PiP mode to browse your library while playing a video:


Audio Library

We have, of course, audio management, sorted by albums,




and you can get detailed information about artists.

Artist Biography

Dark Mode

If you live in a cave, you might prefer our Dark Theme:


The accent color is, of course, modifiable and it will change the VLC cone color too!


We support DLNA/UPnP, Windows Shares, FTP(S), SFTP, NFS protocols to discover and browse your local servers or NAS.


Windows 10

We support some Windows 10 specific features, like Cortana (supported in English and French), Live Tiles, Artists and Album pining to the start menu, Drag & Drop, and Continuum, if you have a Lumia 950 or Lumia 950XL

Under the hood, we use some technologies exclusive to Windows 10, like some DirectX 11.1 features for video and low-latency audio. This should give you enhanced battery life and allow smooth 4K playback.

Platforms supported

This release works now on:

  • Windows 10 desktop and tablets,
  • Windows 10 mobile,

but also, when a few remaining issues are fixed:

  • Xbox one,
  • Surface Hub,
  • Hololens.

And, in a few weeks, we will update the application to also support:

  • Windows 8.1,
  • Windows RT 8.1,
  • Windows Phone 8.1.

Important remarks

NotaBene 0: This application is NOT replacing the desktop application.

NotaBene 1: This application is a new entry on the store compared to the 2 WinRT applications, because Microsoft could not offer a simple upgrade path.

NotaBene 2: Please report bugs!

NotaBene 3: the Xbox one version should be out this summer, when the store is open to 3rd party UWP applications; the Windows 8.1/Windows Phone 8.1 version should come during the next month, if all goes as expected.

Here is a photo of the application running on the Xbox 1:


And a gif on the Hololens:


You should try it now!

June 29, 2016 08:28 AM