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, ...

May 18, 2015

Jean-Baptiste Kempf

This week in VideoLAN - 2

This week in ...

Continuing what I started last week, here is a second post summing up what happened, this past week, in the VideoLAN community and VLC development teams.

Features and changes

VLC

Monday started with fixes for UPnP on VLC, especially on Windows, due to a bug that is inside libupnp, only on Windows. It should fix most of the infamous issues, of VLC and UPnP/DLNA.

The work on adaptive streaming and DASH done by François was continued. Notably, it should add support for TLS (HTTPS), improve the debug messages, split more the code, support subsegments in segmentBase and improve seeking to subsegments.

Some important networking code was changed and simplified, and a core API was added to help TLS connections: vlc_tls_Read, vlc_tls_Write and vlc_tls_GetLine.

In the Mac OS X interface, the about dialog, the add-ons manager dialog and the error panel were heavily reworked.

The core now uses MSG_NOSIGNAL in network calls to avoid SIGPIPE firing that could happen when using libVLC.

The poll() reimplementation for Windows was rewritten, and large changes in the threads implementation were merged, notably in the vlc_cond_broadcast and vlc_cond_signal functions.

Quite a bit of cleaning got into the Freetype module, configure and the buildsystem.

Android

As often, we tried to fix some of the issues we had with Mediacodec on some devices, and we fixed some issues on PPS/SPS changes.

On the interface side, the work on browsing was continued, this week, adding a new Material button, splitting correctly the preferences part, and adding an arrow to browse back.

Also, some useless animations on activity changes were removed, crashes and memory leaks were tracked and fixed.

Finally the version 1.4.0 of VLC for Android was released and pushed out to the beta channel! We're waiting for issues, before pushing it to everyone.

iOS

This week, a lot of work was merged, around 190 patches.

VLC for iOS now supports the Apple Watch! You can control your playback directly from the watch.

The media library and playlists were reworked to allow a mini-player like the Android and WinRT versions of VLC.

Numerous changes were merged to fix a lot of bugs reported in 2.5.0.

The OpenGLES2 video output also had a fix for a bug when the View and Superview had different sizes.

Finally, the version 2.6.0 beta of VLC for iOS was released and pushed to the beta channel!

New releases of VLCKit and MediaLibraryKit have been done too, to support those changes.

WinRT

This week got us the release of the version 1.4.0 of the WinRT port of VLC. It should bring subtitles and DLNA back to the x86 version. It should also add better local metadata support.

The release was made possible thanks to fixes in the internal way we open files.

The work is still in progress, and we'll probably do a new release, next week, that will work on ARM too, and on Windows Phone.

libbluray

We prepared a release of libbluray, named 0.8.1, to fix an important crash in bd_open().

It should also fix some non-checked allocation failures.

Web plugins

The web plugins compilation on OS X was fixed, by moving the platform target to X.6.

libvlcpp

The C++ bindings got support for 2 new added APIs this week: one for Equalizer and one for the imem/libvlc_media_new_callbacks; and an example application was added for this API.

Some improvements on the C++/CX Media constructor were also added.

See you, next week!

Of course, I have probably forgotten some minor things, but that should be most of it!

Have fun, and see you next week!

May 18, 2015 08:42 AM

May 10, 2015

Jean-Baptiste Kempf

This week in VideoLAN - 1

This week in ...

It's can be sometimes quite difficult to follow what's going on inside the VideoLAN community and VLC development, without reading numerous mailing lists. Therefore, I'm going to start to write a post every week doing a short summary of the interesting news.

The issue, of course, lies in the fact that some weeks will be more interesting than others. :)

Those kind of posts might also become a long list of unrelated things... If so, I'm sorry in advance, but I'll do my best to just speak about the most important :)

Features and changes

VLC

Last week-end, we merged the text shaping patch using the Harfbuzz library for our freetype module. This will solve the issues with some Arabic and South-East Asia languages, where the glyph were not merged correctly.

The first version of the TTML decoder was merged and was activated last week.

readdir was implemented in the FTP access, this will allow browsing of the FTP servers, that are announced in a service discovery.

$o is now usable to get the total number of tracks metadata, in the str_format_meta, to modify your VLC Window title.

libvpx was updated to 1.4.0 for the next releases.

The brightness/chroma adjustment filter was ported to support 9bits and 10bits chromas.

The default quality value for the PNG encoder was lowered to create faster snapshots (and backported to 2.2.2).

The height of the audio bar of the audiobargraph modules is now customizable.

Crashes were fixed in the TS, MP4, image and playlists demuxers.

And quite a few improvements were done in the MP4 and DASH modules.

Voice and Gestures control

I've also been coding some voice and gestures control for VLC, using RealSense SDK on Windows.

Try it!

Android

VLC for Android mostly had a bugfixing week.

The directory browser got improved a bit, in order to merge it with the folder preferences.

The AudioService has been moved from URI to MediaWrapper, which will allow to pass media options for playback (and should bring support for more format).

Some Samsung CPU are banned from Hardware decoding (Samsung Galaxy Core, Samsung Galaxy Ace 4), because they are too buggy.

The mini audio player was restored in most audio browsing activities. This was a regression due to the move to AppCompat 21.

A Play action was added to folders, and the Play as audio action was fixed.

And finally, we did a lot of code cleanup after running Coverity analysis.

iOS

Not much was done on VLC for iOS this week, beside bugfixes. The reason is that Felix, Caro and Tobias are all working on a branch, that should be merged soon. We'll speak about it when it's merged in the main line.

What I can say is that the next release of VLC for iOS should be named 2.6.0.

WinRT

A contrario, the WinRT port has been quite busy.

We're preparing a 1.4.0 release for WinRT (Metro) that should fix most of the important regressions we had (subtitles, DLNA) and should also fix the missing metadatas. For that, we've updated the libVLC core, patched taglib library, and reworked the whole media creation in the code.

The winrt access module now is way more clean and accepts both URLs and WinRT Tokens.

We still have one big bug to fix, so let's hope that we can release next week :)

libbluray, libdvd*

After numerous BD-J fixes last week, this week was a stabilization week for libbluray, so nothing exiting here.

libaacs, on the contrary, got quite a bit of cleanup, and notably the split of system-dependent code to different files. Quite a few potential crashes were fixed.

libbdplus got common code merged from libbluray and libaacs.

Web plugins

The rework with libvlcpp is coming to the end.

This week, a few bugs and regressions were fixed, especially on return types. And compilation with MSVC should be fixed.

Association

This week, we've been discussing updates on our development bounties list we have. We're discussing new ones, and increasing the prices of some other. We'll discuss that at our next meeting, at the end of the month.

We've been discussing also the possibility of moving our servers outside of France, because of the new spying laws.

We've also given commit access to Tobias, to the iOS port and libraries. May he fix all our remaining bugs.

And that's all for this week!

May 10, 2015 08:51 PM

May 03, 2015

Jean-Baptiste Kempf

Control VLC with your voice and gestures

RealSense

In VLC, we have hundreds of modules to do many crazy things, including karaoke or puzzle filter!

Today, I coded 2 nice features, using Intel® RealSense™ technology: one is a voice control plugin for VLC, and the other is a gestures control plugin for VLC.

With the voice control plugin, you can ask VLC to play, pause, stop, just with voice commands, like in 2001: a space Odyssey.

With the gestures one, you can move your hands before the 3D camera, a la minority report.

Builds

Binary

You can find the Windows binary for VLC 2.2.1 (should work in all 2.2.x versions) here:

You need to install them in the plugins/control folder in your VLC installation (usually in C:\Program Files (x86)\VideoLAN\VLC) and restart VLC.

You need to have RealSense runtime installed too, if you don't have it.

Finally, you need to activate them in the preferences. (advanced -> Interface -> Control Interfaces).

IntelRealSense.png

Source

Of course, I provide, the source of the plugin here, so you can hack on it, and recompile it.

To build it, you need the latest version of the RealSense SDK, with a version above 4, and you need to point to the right headers. Here is another patch to help you build it, if you need.

Documentation

Voice

The voice module should understand the following control:

Gestures

The gestures recognized should be:

Have fun!

May 03, 2015 05:23 PM

April 30, 2015

Ludovic Fauvet

Using DNS as a cheap failover and load-balancer

I’m currently testing the upcoming version of Mirrorbits with clustering support to be finally able to achieve high-availability for the VideoLAN downloads infrastructure.

We’re now running two servers for powering the downloads: get.dc2.videolan.org and get.dc3.videolan.org. And today I’ve been struggling finding a simple and cheap way to distribute the load on the two servers while having some kind of failover.

The two servers are located in two different datacenters under the same AS but without physical access or service allowing us to add a load-balancer. We have a third server running in a third datacenter running the main website and few other services like a redis-sentinel. An option would have been to add a software load-balancer like HAProxy or Nginx on this machine but I didn’t want to add latencies or create a single point of failure.

Our infrastructure is quite stable, we only have a couple of issues each year so we don’t need to over-engineer our production infrastructure. So after deep thinking into the DNS architecture I was able to come up with another solution that is a bit hackish but well suited for us because it’s cheap, simple and resilient since we don’t have any SPOF compared to other more commonly used systems. Still, this solution isn’t perfect either, in case of a server failure some users may experience a downtime of up to one minute which falls well within our acceptable range.

DNS Delegation + Round-robin

We have three servers involved:

NS0 is delegating the zone get.videolan.org to two other DNS servers, one running on each get instances (here dc2 and dc3). So we end up with one main DNS server and one for each server that you want to failover in a round-robin way.

; Assign name to the servers
get.dc3     IN  A       62.210.246.226
get.dc2     IN  A       195.154.236.203

; Delegate the get.v.o subdomain to each server
get         IN  NS      get.dc2
            IN  NS      get.dc3

On the two download servers we setup a DNS server as well and declare the zone get.videolan.org in their /etc/bind/named.conf.local.

zone "get.videolan.org" {
    type master;
    file "/etc/bind/zones/get.videolan.org.db";
};

The zone file is pretty simple, each server is returning its own IP address.

/etc/bind/zones/get.videolan.org.db on get.dc2.videolan.org:

$ORIGIN get.videolan.org.
$TTL 60
get.videolan.org.       IN      SOA     ns0.videolan.org. admin.videolan.org. (
        2015042902      ; serial
        3600            ; refresh
        3600            ; retry
        3600000         ; expire
        3600            ; minimum
)

get.videolan.org. IN NS get.dc2.videolan.org.
get.videolan.org. IN A 195.154.236.203

/etc/bind/zones/get.videolan.org.db on get.dc3.videolan.org:

$ORIGIN get.videolan.org.
$TTL 60
get.videolan.org.       IN      SOA     ns0.videolan.org. admin.videolan.org. (
        2015042902      ; serial
        3600            ; refresh
        3600            ; retry
        3600000         ; expire
        3600            ; minimum
)

get.videolan.org. IN NS get.dc3.videolan.org.
get.videolan.org. IN A 62.210.246.226

What it does achieve is that a DNS request to get.videolan.org will return two different servers (DC2 and DC3), your web browser will then send a request to each of those and wait for the first one to answer. If one of them is down, the other one will obviously answer first and handle all the incoming requests. And voilà! You’ll get a cheap and simple load-balancing and failover on your infrastructure without any external component, hardware or service except the DNS protocol.

There’s few drawbacks though. Some ISP hosted DNS caches rewrite the TTL returned by the server because they think 60sec is too low and increase it to something much higher (usually around 15 minutes) and these may end up trying to reach the server that is currently down.

An other issue is that even if name resolution occurs quite fast (it’s UDP after all) it still needs some time to resolve all the indirections: videolan.org ➝ get.videolan.org ➝ get.dc2.videolan.org and get.dc3.videolan.org especially when a round-trip is around few hundreds milliseconds. For this specific situation I’ve found a small workaround which consists of adding a <link> tag into the <head> of the website allowing the web-browser to prefetch the DNS before actually needing it.

<link rel="dns-prefetch" href="//get.videolan.org" />

For instance, this line is present on all pages of the videolan.org website because most of the visitors will eventually download one of the projects during their visit.

The last problem I’ve identified is that if your webserver is stopped or is unavailable for any reason the incoming requests will still be dispatched to this server until you manually stop the DNS server. But this could easily be resolved using a small script or a monitoring system.

DNSSEC

I’m no expert in DNSSEC so I don’t know if this setup will eventually break it or not. If anyone has enough knowledge, please share your opinion in comments.

Conclusion

I’ve never saw something similar used in production at such a scale so you should probably take this with a grain of salt. It’s only been a day since it went into production and even if I got no report of any problem so far, we’ll need a few more weeks before considering this solution as perfectly working. I will try to keep this post up-to-date if I ever decide to continue the experiment or on the other hand, switch to another, more conventional system.

April 30, 2015 12:19 PM

Jean-Baptiste Kempf

libbluray 0.8.0

libbluray 0.8.0

After releasing new DVD libraries, it's time we released new bluray libraries. :)

Libbluray 0.8.0 was released a few days ago, with quite a few new features:

And numerous fixes, of course.

This 0.8.0 release contains almost 200 commits, which makes it quite important, but on par with 0.7.0 and 0.6.0.

You can grab it on you can find on our FTP.

libaacs 0.8.1

At the same time, a release was done for libaacs 0.8.1, to fix a few crashes and build issues. It's also on our FTP.

Enjoy!

April 30, 2015 08:36 AM

April 29, 2015

Jean-Baptiste Kempf

New libDVD releases: streaming DVD ISOs

Past releases

Following my blogpost about the history of the free DVD stack, last August, and the announces of libdvdread and libdvdnav 5.0.0, with libdvdcss 1.3.0, I kept updating the projects.

libdvdnav 5.0.1/5.02

There were not many regressions in DVDnav, so I quickly released libdvdnav 5.0.1 and 5.0.2, to fix remaining crashes.

libdvdread 5.0.1

However, DVDread was in a less good shape, so I released, in January, libdvdread 5.0.1 with numerous fixes and 2 minor features: DragonFly BSD bswap and a new md5 implementation.

Streaming DVD

In January, the major feature I integrated in libdvdread and libdvdnav is the capability to open ISO and devices through the network, as virtual devices/files, using callbacks.

The allows to use the same architecture to play ISOs or virtual devices, from SMB shares, SFTP or HTTP, with decryption and menu navigation.

Streaming releases

This feature was integrated in libdvdcss 1.3.99, libdvdread 5.0.2 and libdvdnav 5.0.3, all released at the end of January.

libdvdread 5.0.3

We had just a small problem remaining with the streaming feature: during the read IFO phase, we had too many seeks and read of the files. That took way too much network resources, so we added a small cache in libdvdread 5.0.3, to work around this issue.

We just released libdvdread 5.0.3 that you can find on our FTP.

libdvdcss 1.3.99

Just a word on libdvdcss 1.3.99: it's a major cleanup release of the codebase, and there could be some regressions still lingering around.

So I'm waiting for regressions, and I will release 1.4.0 when the important issues are fixed!

April 29, 2015 12:17 PM

February 27, 2015

Ludovic Fauvet

VLC 2.2.0 WeatherWax

The VideoLAN community is proud to announce the immediate availability of VLC 2.2.0 codename WeatherWax and for the first time in history on all supported platforms simultaneously (see related press release).

In addition to the release of the desktop version of VLC media player 2.2.0, a new version of the mobile ports is also available on their respective stores:

This release, in addition to the usual improvements and bug fixes, includes fresh new features. The most notable ones being:

The often requested Chromecast support is not part of this release but will be added in the upcoming 3.0.0 that is expected later this year.

Mobile versions should be upgraded directly from their respective store, on desktop you’ll have to download the new version manually or wait for the automatic update that is expected to be rolling out starting next week.

More than ever, VLC plays everything… everywhere!

February 27, 2015 05:00 PM