Difference between revisions of "SoC 2017"

From VideoLAN Wiki
Jump to navigation Jump to search
 
(93 intermediate revisions by 4 users not shown)
Line 1: Line 1:
 
{{DISPLAYTITLE:Google Summer of Code 2017}}
 
{{DISPLAYTITLE:Google Summer of Code 2017}}
  
This page summarize the current list of ideas for VideoLAN project, for [https://summerofcode.withgoogle.com Google Summer Of Code 2017]. The list is not exhaustive, and is not limitative. Feel free to apply with your own idea!
+
<span style="float: right;">
 +
https://developers.google.com/open-source/gsoc/images/gsoc2016-sun-373x373.png
 +
</span>
 +
 
 +
This page summarize the current list of ideas for VideoLAN project, for [https://summerofcode.withgoogle.com Google Summer Of Code 2017].
 +
 
 +
The list is not exhaustive, and is not limitative. Feel free to apply with '''your own idea!'''
  
 
== Introduction &amp; Information  ==
 
== Introduction &amp; Information  ==
 +
[[File:Asterix VLC.svg|frameless|right]]
  
This wiki page covers the attempt by the [[VideoLAN]] project to act as a mentoring organization for [http://code.google.com/soc/ Google Summer of Code], in order to improve {{VLC}} and [[VLMC]].  
+
This wiki page covers the attempt by the [[VideoLAN]] project to act as a mentoring organization for [http://code.google.com/soc/ Google Summer of Code], in order to improve [[VLMC]] and [[VLC]] (or the [[libVLC]] engine).
  
[[VideoLAN]] was a mentoring organization in [[SoC 2007|2007]], [[SoC 2008|2008]], [[SoC 2009|2009]], [[SoC 2010|2010]], [[SoC 2011|2011]], [[SoC 2013|2013]] and [[SoC 2016|2016]].
+
=== Summer of Code ===
  
This page list the ideas for VLC and VLMC.
+
Google Summer of Code is a way for '''university students''' to have a paid '''internship''' by '''Google''' to work on open source projects and become top developers!
  
=== VLC media player ===
+
[[VideoLAN]] was a ''Google Summer of Code'' mentoring organization in [[SoC 2007|2007]], [[SoC 2008|2008]], [[SoC 2009|2009]], [[SoC 2010|2010]], [[SoC 2011|2011]], [[SoC 2013|2013]] and [[SoC 2016|2016]].
 +
 
 +
This page list some ideas for Summer of Code projects on VLMC, libVLC and {{VLC}}.
 +
 
 +
=== VLC & libVLC ===
  
 
{{VLC}} is a cross-platform multimedia player, encoder and streamer application. It is one of the most successful open-source projects without any professional structure underneath.  
 
{{VLC}} is a cross-platform multimedia player, encoder and streamer application. It is one of the most successful open-source projects without any professional structure underneath.  
  
{{VLC}} is downloaded at an approximate monthly rate of 40 millions from the main website and that's not including third-party distributions (Linux)!  
+
{{VLC}} is downloaded at an approximate monthly rate of 23 millions from the main website and that's not including third-party distributions (Linux)!  
  
 
You can find more information on [http://en.wikipedia.org/wiki/VLC_media_player VLC on Wikipedia] or on this [[Main Page|wiki]].
 
You can find more information on [http://en.wikipedia.org/wiki/VLC_media_player VLC on Wikipedia] or on this [[Main Page|wiki]].
 +
 +
The engine of VLC is '''libVLC''', and is used by '''VLMC'''.
  
 
=== VideoLAN Movie Creator ===
 
=== VideoLAN Movie Creator ===
[[VLMC]] is a cross-platform non-linear video editing software based on VLC technology. It was started as a final year student project at the French IT school [http://www.epitech.eu EPITECH].
+
[[VLMC]] is a cross-platform non-linear video editing software based on libVLC technology. It was started as a final year student project at the French IT school [http://www.epitech.eu EPITECH].
  
 
[[VLMC]] currently awaits a transition to the current libvlc API and it's actual 1.0 release!
 
[[VLMC]] currently awaits a transition to the current libvlc API and it's actual 1.0 release!
Line 26: Line 39:
 
=== Summer of Code  ===
 
=== Summer of Code  ===
  
If selected and developed, SoC projects for VLC and VLMC will be included in later releases.
+
If selected and developed, SoC projects for VLMC and VLC will be included in later releases.
  
 
All projects are covered by the GPL (v2+) or LGPL (v2.1+) licenses depending on the module.
 
All projects are covered by the GPL (v2+) or LGPL (v2.1+) licenses depending on the module.
  
=== Compile VLC or VLMC ===
+
== How to Start ==
 +
=== Find an idea ===
 +
First, you need to find an idea.
 +
 
 +
This current page gives you a list of ideas. Those ideas are '''NOT exhaustive''': you can bring your own idea! Some of the best ideas we've ever had were '''custom''' ideas!
 +
 
 +
=== Submit your idea ===
 +
You need to submit your idea on the ''Google Summer of Code'' platform.
 +
 
 +
You should do so, very quickly, even before having finished compilation and the next steps, so that we can give you early feedback.
 +
 
 +
=== Compile libVLC or VLMC ===
 
This may sound trivial, but it's harder than many expect. See https://wiki.videolan.org/Category:Building/ for more informations.
 
This may sound trivial, but it's harder than many expect. See https://wiki.videolan.org/Category:Building/ for more informations.
 +
 +
You should come on [[IRC]] to get help to compile.
  
 
=== Provide a small patch ===
 
=== Provide a small patch ===
Line 37: Line 63:
  
 
=== Let's get in touch ===
 
=== Let's get in touch ===
We have 3 major communication channels: Our [https://mailman.videolan.org/mailman/listinfo mailing-lists] to discuss patches and further development related topics. Furthermore, we have our [http://forum.videolan.org web forums] for VLC-related end-user support - a VLMC section will be created once the product is published. Finally, there is our IRC channel ''#videolan'' (for VLC) and ''#vlmc'' on the ''Freenode'' network. It's open to any kind of discussion. Usage issues, questions how to compile VLC/VLMC, getting to know the fellow developers, etc.
 
  
== Key ideas for VLC ==
+
If you have a doubt, are not sure about anything or want clarification, please get in touch with us.
 +
 
 +
We have 3 major communication channels: Our [https://mailman.videolan.org/mailman/listinfo mailing-lists] to discuss patches and further development related topics. Furthermore, we have our [http://forum.videolan.org web forums] for VLC-related end-user support - a VLMC section will be created once the product is published. Finally, there is our IRC channel ''#videolan'' (for libVLC) and ''#vlmc'' on the ''Freenode'' network. It's open to any kind of discussion. Usage issues, questions how to compile VLC/VLMC, getting to know the fellow developers, etc.
 +
 
 +
= Ideas for VLC & libVLC =
  
=== Fuzz VLC (and maybe LibVLC and VLC ports) with LibFuzzer ===
+
== Fuzz libVLC with LibFuzzer ==
  
 +
'''Project Description''':
 
libFuzzer ((http://llvm.org/docs/LibFuzzer.html).) is a library for coverage-guided fuzz testing.
 
libFuzzer ((http://llvm.org/docs/LibFuzzer.html).) is a library for coverage-guided fuzz testing.
  
* The first step of this GSoC project is to implement Fuzz Targets (http://llvm.org/docs/LibFuzzer.html#fuzz-target) to test various parts of the VLC project. The non exhaustive parts will be the following VLC modules API: "decoder", "packetizer", "demuxer". For each parts, the student will have to understand the module API in order to effectively implement the target.
+
'''Tasks to do''':
 +
* The first step of this GSoC project is to implement Fuzz Targets (http://llvm.org/docs/LibFuzzer.html#fuzz-target) to test various parts of the libVLC project. The non exhaustive parts will be the following libVLC modules API: "decoder", "encoder, "access", "packetizer", "demuxer". For each parts, the student will have to understand the module API in order to effectively implement the target.
  
 
* The second step is to find valid corpus (http://llvm.org/docs/LibFuzzer.html#corpus) for every module types and for every modules (mkv input for mkv demuxer, mp4 input for mp4 demuxer, h264 input for h264 decoder...).
 
* The second step is to find valid corpus (http://llvm.org/docs/LibFuzzer.html#corpus) for every module types and for every modules (mkv input for mkv demuxer, mp4 input for mp4 demuxer, h264 input for h264 decoder...).
Line 51: Line 82:
 
* The third step is to host and run the fuzzer. It's not decided yet if the fuzzer will be hosted by google (https://github.com/google/oss-fuzz) or by the VideoLan association.
 
* The third step is to host and run the fuzzer. It's not decided yet if the fuzzer will be hosted by google (https://github.com/google/oss-fuzz) or by the VideoLan association.
  
* If there is enough time, the fourth and final step is to fix the issues that has emerged during the previous steps
+
* If there is enough time, the fourth and final step is to fix the issues that has emerged during the previous steps.
 +
 
 +
'''Requirements''':
 +
This project requires '''C''' and '''C++''' knowledge.
  
 
''Proposed mentor: tguillem''
 
''Proposed mentor: tguillem''
  
=== Other ideas coming soon ===
+
== libVLC AirPlay support ==
 +
 
 +
'''Project Description''':
 +
libVLC is now able to send video to the ChromeCast devices. We want to be able to do the same using the Airplay protocol, for Apple devices.
 +
 
 +
We want to be able to cast from any device, including Android or Windows machines, on all support Airplay devices, like Apple TV, iOS devices and audio amplificators.
 +
 
 +
This will use the new renderer APIs added in libVLC 3.0. Those APIs will need to be extended to allow the renderer to kick in during the playback.
 +
 
 +
'''Tasks to do''':
 +
The work will consist of the following tasks:
 +
* documentation on the [https://nto.github.io/AirPlay.html AirPlay protocol],
 +
* documentation on the '''RAOP''' VLC module,
 +
* implementation of the detection/discovery of the supported devices,
 +
* implementation of the protocol to discuss with the device,
 +
* modify the device control in order to transcode on demand,
 +
* polish and release.
 +
 
 +
'''Advice'''
 +
Please have a look at the following files: {{file|modules/stream_out/chromecast/chromecast_ctrl.cpp|Chromecast}} {{file|include/vlc_renderer_discovery.h|renderer API}}
 +
A motivated and fast enough student could pair this task with the UPnP renderer!
 +
 
 +
'''Requirements''':
 +
This project requires '''C''' knowledge and access to some Airplay devices.
 +
 
 +
''Proposed mentor: steve''
 +
 
 +
=== Bonus: AirPlay target ===
 +
 
 +
See https://trac.videolan.org/vlc/ticket/5752
 +
 
 +
== libVLC UPnP renderer support ==
 +
 
 +
'''Project Description''':
 +
libVLC is now able to send video to the ChromeCast devices. We want to be able to do the same using the UPnP Renderer protocol, for all the connected TV devices that support this protocol.
 +
 
 +
We want to be able to do that from any device, including Android, iOS or Windows machines.
 +
 
 +
This will use the new renderer APIs added in libVLC 3.0. Those APIs will need to be extended to allow the renderer to kick in during the playback.
 +
 
 +
'''Tasks to do''':
 +
The work will consist of the following tasks:
 +
* documentation on the [http://upnp.org/resources/documents/UPnP_AV_tutorial_July2014.pdf UPnP renderer] protocol and on the libupnp APIs,
 +
* implementation of the detection/discovery of the supported devices,
 +
* implementation of the protocol to discuss with the device,
 +
* modify the control of the device in order to transcode on demand,
 +
* polish and release.
 +
 
 +
'''Advice''':
 +
Please have a look at the following files: {{file|modules/stream_out/chromecast/chromecast_ctrl.cpp|Chromecast}} {{file|include/vlc_renderer_discovery.h|renderer API}}
 +
A motivated and fast enough student could pair this task with the Airplay renderer!
 +
 
 +
'''Requirements''':
 +
This project requires '''C''' knowledge and access to some connected TV supporting this protocol.
 +
 
 +
''Proposed mentor: tguillem''
 +
 
 +
== Advanced Audio Filters ==
 +
 
 +
'''Project Description''':
 +
We are looking for a skilled audiophile that knows a lot about audio theory and practice to work on new audio filters for VLC.
 +
 
 +
'''Tasks to do''':
 +
* SRS WoW like or other 3D effects;
 +
* channels mixing, notably upmixing, like Prologic-II;
 +
* tracks mixing, and transitions;
 +
* scriptable new audio filters in lua and enable users to create whatever audio filtering function they want in a Lua script;
 +
* LADSPA or other libraries integration.
  
== Key ideas for VLMC ==
+
'''Requirements''':
 +
This project needs some good audio knowledge and good C experience.
 +
 
 +
'''Qualification task:'''
 +
Port any audio filter from MPlayer
 +
 
 +
''Proposed mentor: geal ''
 +
 
 +
== VLC web interface modern look ==
 +
 
 +
'''Project Description''':
 +
The [[Web Interface |Web interface]] of VLC is a very ugly player and we want to improve that quite a bit.
 +
 
 +
It is often used to control VLC as a remote, and rarely as a remote playback tool. We want to change that.
 +
 
 +
This can be done in React, RxJS or Vue.JS to achieve a modern look, with transparency and cross-platform support.
 +
 
 +
'''Tasks to do''':
 +
* Find the correct JS framework and buildsystem to integrate into VLC
 +
* Discuss designs and show proof of concept
 +
* Code the player part of the page,
 +
* Code the playlist and video effects controllers
 +
* Code the transcoding and streaming parts.
 +
 
 +
'''Requirements''':
 +
This project requires '''JavaScript''' knowledge and experience. The choice of the Framework can be discussed before starting the project, if needed.
 +
 
 +
''Proposed mentor: David Loiret''
 +
 
 +
== libVLC 3D video support ==
 +
'''Project Description''':
 +
libVLC is able to play most 2D and Side-By-Side videos, but the support of 3D is very limited.
 +
 
 +
Because of '''360''' and '''VR''' support, the attention about 3D is getting very popular those days. We need to support that in libVLC.
 +
 
 +
'''Tasks to do''':
 +
* understand of the usual 3D formats used by different medias
 +
* code the core control of the different viewer points (left-only, right-only, SxS, nVidia 3D, etc...),
 +
* implement those changes inside the OpenGL and Direct3D outputs,
 +
* code the interface to change those viewer points,
 +
* code the video filter corresponding to the OpenGL transformations,
 +
 
 +
'''Requirements''':
 +
This project requires '''C''' knowledge. OpenGL knowledge and access to a 3D TV are a plus.
 +
 
 +
''Proposed mentor: adrien''
 +
 
 +
== libVLC VR support ==
 +
'''Project Description''':
 +
libVLC is able to play most 2D and 360 videos, but the support of VR is very limited.
 +
 
 +
Because of 360 and VR support, the attention about '''VR''' is getting very popular those days. We need to support that in libVLC, with an Oculus, a Vive, or a similar headset.
 +
 
 +
'''Tasks to do''':
 +
* understand the different types of 360, 360-stereo, VR movie types and the different headsets types,
 +
* integrate a new headset view in a libvlccore module,
 +
* integrate a new headset control in a libvlccore module, to get rotation,
 +
* integrate the control UI with the headset,
 +
* optionaly code a VR theater mode inside the OpenGL or D3D module.
 +
 
 +
'''Requirements''':
 +
This project requires '''C''' knowledge and access to a VR headset.
 +
 
 +
''Proposed mentor: adrien''
 +
 
 +
== VLC Qt interface redesign ==
 +
'''Project Description''':
 +
The VLC interface is quite outdated on Linux and Windows. It has a lot of features, but some are not properly exposed.
 +
 
 +
This project for the summer is to rework heavily this interface to make it beautiful and useful again.
 +
 
 +
'''Scope of the tasks to do''':
 +
 
 +
The idea is to get closer to what the WinRT/UWP interface looks like ''(search on google image to get an idea)'', but other ideas are welcome.
 +
 
 +
The WinRT interface is simpler, more user friendly, and has a better "media center" feel into it.
 +
 
 +
It would require integration with the media library and with the current interface.
 +
 
 +
Qml is the preferred way of improving the current UI.
 +
 
 +
'''Requirements''':
 +
This project requires '''Qt/C++''' knowledge.
 +
 
 +
''Proposed mentor: J-B''
 +
 
 +
== VLC macOS interface  redesign ==
 +
'''Project Description''':
 +
The VLC interface is quite outdated on macOS.
 +
 
 +
This project for the summer is to rework heavily this interface to make it beautiful and useful again.
 +
 
 +
'''Scope of the tasks to do''':
 +
 
 +
The idea is to get closer to what the Apple TV/iOS interface looks like ''(search on google image to get an idea)'', but other ideas are welcome.
 +
 
 +
The iOS/AppleTV interface is simpler, more user friendly, and has a better "media center" feel into it.
 +
 
 +
It would require integration with the media library and with the current interface.
 +
 
 +
Starting from the current UI is a requirement.
 +
 
 +
'''Requirements''':
 +
This project requires '''Obj-C''' knowledge.
 +
 
 +
''Proposed mentor: David F''
 +
 
 +
== VLC cryptographic updates ==
 +
'''Project Description''':
 +
VLC is already using '''GPG signatures''' to achieve secure updates on the Windows platform.
 +
 
 +
But the updates are currently signed
 +
with a single master key which is pinned into the source code and VLCs in the wild aren't able to check for revocations of this key.
 +
 
 +
'''Tasks to do''':
 +
 
 +
Therefore we would like to improve this situation by:
 +
 
 +
* being able to sign developers' keys that can sign VLC binaries on behalf of this master key
 +
* support revocations of these developer's key
 +
* provide a master key upgrade path
 +
 
 +
'''Requirements''':
 +
This project requires solid notions of '''C and Crypto'''.
 +
 
 +
''Proposed mentor: geal''
 +
 
 +
== VLC crashes server ==
 +
'''Project Description''':
 +
VLC is now moving to [https://chromium.googlesource.com/breakpad/breakpad breakpad] to report the crashes.
 +
 
 +
But we need a fast server to process the reports, preferably written in Go.
 +
 
 +
'''Tasks to do''':
 +
* understand breakpad and minidumps
 +
* finish the breakpad integration for Windows
 +
* write a breakpad server similar to the one from libreoffice, in Go,
 +
* write a frontend for statistics and common reports,
 +
* test it for macOS and Windows crashes.
 +
 
 +
'''Requirements''':
 +
This project requires knowledge of '''Go and Debugging'''.
 +
 
 +
''Proposed mentor: etix''
 +
 
 +
== Cloud Storage integration ==
 +
'''Project Description''':
 +
VLC needs to be able to access dropbox, google drive and other 3rd party cloud services.
 +
 
 +
We have a library doing part of the work, but we need to integrate it.
 +
 
 +
'''Tasks to do''':
 +
* understand libcloudstorage
 +
* test libcloudstorage
 +
* integrate libcloudstorage in libVLC module
 +
* prepare the interface for this.
 +
 
 +
'''Requirements''':
 +
This project requires knowledge of '''C++ and Networking'''.
 +
 
 +
''Proposed mentor: hugo''
 +
 
 +
= Ideas for VLMC =
 +
 
 +
== Port to Android ==
 +
 
 +
'''Project Description''':
 +
VLMC is now working on the desktop. It would be nice to port it also to the mobile world, starting by Android.
 +
 
 +
This project would require to adapt to smaller screens, and simplify the UI to fit the Android workflow.
 +
 
 +
'''Tasks to do''':
 +
# Fix the VLMC build for Android. As libVLC works fine on Android, this is more focused on compiling the Qt part for Android.
 +
# Split more parts of the UI in components that are reusable on mobile.
 +
# Change the components to fit the small resolutions of the Android devices.
 +
# Rewrite some UI components in QML.
 +
# Write a simpler timeline widget for Mobile workflows.
 +
 
 +
'''Requirements''': This project requires '''C++/Qt/qml''' knowledge, and access to Android devices.
 +
 
 +
''Proposed mentors: Geoffrey/Hugo''
 +
 
 +
== Port to iOS ==
 +
 
 +
'''Project Description''':
 +
VLMC is now working on the desktop. It would be nice to port it also to the mobile world, also on iOS.
 +
 
 +
This project would require to adapt to smaller screens, and simplify the UI to fit the iOS workflow.
 +
 
 +
'''Tasks to do''':
 +
# Fix the VLMC build for iOS. As libVLC works fine on iOS, this is more focused on compiling the Qt part for iOS.
 +
# Split more parts of the UI in components that are reusable on mobile.
 +
# Change the components to fit the small resolutions of the iOS devices.
 +
# Rewrite some UI components in QML.
 +
# Write a simpler timeline widget for Mobile workflows.
 +
 
 +
'''Requirements''': This project requires '''C++/Qt/qml''' knowledge, and access to Android devices.
 +
 
 +
''Proposed mentors: Felix/Hugo''
 +
 
 +
== Media Workflow rework ==
 +
 
 +
'''Project Description''':
 +
VLMC is now working on the desktop, but the media workflow is quite slow and is missing some common use cases.
 +
 
 +
This should be fixed in [https://github.com/mltframework/mlt MLT] framework backend for libVLC and is the continuation from the work from the previous Summer of Code.
 +
 
 +
'''Tasks to do''':
 +
# Understand the MLT libVLC backend codebase,
 +
# Clean the backend and port it to a cleaner code state in C++,
 +
# Benchmark the code and make it more efficient,
 +
# Work to merge this backend upstream,
 +
# Implement all the missing features in libVLC.
 +
 
 +
'''Requirements''': This project requires '''C/C++''' knowledge, and understanding of multimedia concepts is a good positive point.
 +
 
 +
''Proposed mentors: Hugo''
 +
 
 +
== Workflow audio filters ==
 +
 
 +
'''Project Description''':
 +
VLMC is now working on the desktop, but we need to have a good setup of audio filters to make it usable for most people.
 +
 
 +
'''Tasks to do''':
 +
# Understand the VLMC and MLT codebase interactions,
 +
# Add audio filters on the MLT framework backend using the [https://en.wikipedia.org/wiki/LADSPA LADSPA]/[http://lv2plug.in/ LV2] library or a similar open source library,
 +
# Code the interface corresponding to those filters, and their options,
 +
# Prepare visualizations, and notably for soundwave filters,
 +
# Integrate those inside the timeline UI,
 +
# Optimize.
 +
 
 +
'''Requirements''': This project requires '''C++/Qt/qml''' knowledge, and enough understanding of audio.
 +
 
 +
''Proposed mentors: J-B''
 +
 
 +
== Workflow video filters ==
 +
 
 +
'''Project Description''':
 +
VLMC is now working on the desktop, but we need to have a good setup of video filters to make it usable for most people.
 +
 
 +
'''Tasks to do''':
 +
# Understand the VLMC and MLT codebase interactions,
 +
# Add video filters on the MLT framework backend using the [https://git.sesse.net/?p=movit;a=summary movit] library or a similar open source library,
 +
# Code the interface corresponding to those filters, and their options,
 +
# Add transitions between clips
 +
# Code the interface to manage those transitions,
 +
# Optimize the code.
 +
 
 +
'''Requirements''': This project requires '''C/C++''' knowledge.
 +
 
 +
''Proposed mentors: Felix''
 +
 
 +
== Improve multiplatform support ==
 +
VLMC is aiming at being fully cross platform, but drifted a bit from that goal. While most VLMC's code is cross platform, and can be easily built targeting platforms, some dependencies might prove more difficult to build or compose with VLMC.
 +
 
 +
'''Tasks to do''':
 +
# Fix MLT cross compilation for Windows (This will most likely require patching directly inside MLT, all contributions must be sent upstream).
 +
# Fix medialibrary code & build process on macOS (and potentially iOS). The medialibrary misses some platform specific code to be able to list all connected drives (hard drives & USB removable storage, mostly) along with filesystem browsing
 +
# Update the documentation along the way
 +
# Create jenkins build configuration to have nightly builds on jenkins.videolan.org & nightlies.videolan.org for all supported platforms
 +
 
 +
'''Requirements''': This project requires buildsystems/toolchains knowledge, basic system programming on macOS & Windows
 +
 
 +
''Proposed mentors: Hugo''
 +
 
 +
== Remote UI ==
 +
 
 +
We would like to have a way to use VLMC from a web browser. You can easily imagine having a nice, shiny & simple UI for minimal movie edition, which would go hand in hand with the cloud storage feature.
 +
 
 +
'''Tasks to do''':
 +
This task aims toward the uncoupling of the rendering backend & UI, as the renderer will run server side, while the UI runs on the client side.
 +
 
 +
The idea is to be able to have a UI interacting with the renderer without having to be in the same process, or even machine.
 +
 
 +
'''Requirements''': This project requires '''C++''' and '''JS''' knowledge.
 +
 
 +
''Proposed mentor'': jb, chouquette, fkuehne
 +
 
 +
= Other ideas for VLC & libVLC =
 +
 
 +
Those ideas are not detailed, but they are ideas that we could help to spring new ideas.
 +
 
 +
* Integrate Rust inside VLC, as a demuxer or a parser
 +
* Improve the PPAPI chrome plugin to add hardware decoding
 +
* Improve the SMB/Samba share library
 +
* Work on Vulkan output for VLC
 +
* VLC javascript work
 +
* Improve fast-seek in MP4 and WMV demuxers
 +
* Improve id3 tag parsing.
  
=== Other ideas coming soon ===
 
  
 
{{GSoC}}
 
{{GSoC}}
 +
 +
[[Category:SoC]]

Latest revision as of 07:01, 5 February 2019


gsoc2016-sun-373x373.png

This page summarize the current list of ideas for VideoLAN project, for Google Summer Of Code 2017.

The list is not exhaustive, and is not limitative. Feel free to apply with your own idea!

Introduction & Information

Asterix VLC.svg

This wiki page covers the attempt by the VideoLAN project to act as a mentoring organization for Google Summer of Code, in order to improve VLMC and VLC (or the libVLC engine).

Summer of Code

Google Summer of Code is a way for university students to have a paid internship by Google to work on open source projects and become top developers!

VideoLAN was a Google Summer of Code mentoring organization in 2007, 2008, 2009, 2010, 2011, 2013 and 2016.

This page list some ideas for Summer of Code projects on VLMC, libVLC and VLC media player.

VLC & libVLC

VLC media player is a cross-platform multimedia player, encoder and streamer application. It is one of the most successful open-source projects without any professional structure underneath.

VLC media player is downloaded at an approximate monthly rate of 23 millions from the main website and that's not including third-party distributions (Linux)!

You can find more information on VLC on Wikipedia or on this wiki.

The engine of VLC is libVLC, and is used by VLMC.

VideoLAN Movie Creator

VLMC is a cross-platform non-linear video editing software based on libVLC technology. It was started as a final year student project at the French IT school EPITECH.

VLMC currently awaits a transition to the current libvlc API and it's actual 1.0 release!

Summer of Code

If selected and developed, SoC projects for VLMC and VLC will be included in later releases.

All projects are covered by the GPL (v2+) or LGPL (v2.1+) licenses depending on the module.

How to Start

Find an idea

First, you need to find an idea.

This current page gives you a list of ideas. Those ideas are NOT exhaustive: you can bring your own idea! Some of the best ideas we've ever had were custom ideas!

Submit your idea

You need to submit your idea on the Google Summer of Code platform.

You should do so, very quickly, even before having finished compilation and the next steps, so that we can give you early feedback.

Compile libVLC or VLMC

This may sound trivial, but it's harder than many expect. See https://wiki.videolan.org/Category:Building/ for more informations.

You should come on IRC to get help to compile.

Provide a small patch

To demonstrate your skills, share a small patch with us. This will let you become familiar with Git, in case you don't know it already and our process on merging patches.

Let's get in touch

If you have a doubt, are not sure about anything or want clarification, please get in touch with us.

We have 3 major communication channels: Our mailing-lists to discuss patches and further development related topics. Furthermore, we have our web forums for VLC-related end-user support - a VLMC section will be created once the product is published. Finally, there is our IRC channel #videolan (for libVLC) and #vlmc on the Freenode network. It's open to any kind of discussion. Usage issues, questions how to compile VLC/VLMC, getting to know the fellow developers, etc.

Ideas for VLC & libVLC

Fuzz libVLC with LibFuzzer

Project Description: libFuzzer ((http://llvm.org/docs/LibFuzzer.html).) is a library for coverage-guided fuzz testing.

Tasks to do:

  • The first step of this GSoC project is to implement Fuzz Targets (http://llvm.org/docs/LibFuzzer.html#fuzz-target) to test various parts of the libVLC project. The non exhaustive parts will be the following libVLC modules API: "decoder", "encoder, "access", "packetizer", "demuxer". For each parts, the student will have to understand the module API in order to effectively implement the target.
  • The second step is to find valid corpus (http://llvm.org/docs/LibFuzzer.html#corpus) for every module types and for every modules (mkv input for mkv demuxer, mp4 input for mp4 demuxer, h264 input for h264 decoder...).
  • The third step is to host and run the fuzzer. It's not decided yet if the fuzzer will be hosted by google (https://github.com/google/oss-fuzz) or by the VideoLan association.
  • If there is enough time, the fourth and final step is to fix the issues that has emerged during the previous steps.

Requirements: This project requires C and C++ knowledge.

Proposed mentor: tguillem

libVLC AirPlay support

Project Description: libVLC is now able to send video to the ChromeCast devices. We want to be able to do the same using the Airplay protocol, for Apple devices.

We want to be able to cast from any device, including Android or Windows machines, on all support Airplay devices, like Apple TV, iOS devices and audio amplificators.

This will use the new renderer APIs added in libVLC 3.0. Those APIs will need to be extended to allow the renderer to kick in during the playback.

Tasks to do: The work will consist of the following tasks:

  • documentation on the AirPlay protocol,
  • documentation on the RAOP VLC module,
  • implementation of the detection/discovery of the supported devices,
  • implementation of the protocol to discuss with the device,
  • modify the device control in order to transcode on demand,
  • polish and release.

Advice Please have a look at the following files:

A motivated and fast enough student could pair this task with the UPnP renderer!

Requirements: This project requires C knowledge and access to some Airplay devices.

Proposed mentor: steve

Bonus: AirPlay target

See https://trac.videolan.org/vlc/ticket/5752

libVLC UPnP renderer support

Project Description: libVLC is now able to send video to the ChromeCast devices. We want to be able to do the same using the UPnP Renderer protocol, for all the connected TV devices that support this protocol.

We want to be able to do that from any device, including Android, iOS or Windows machines.

This will use the new renderer APIs added in libVLC 3.0. Those APIs will need to be extended to allow the renderer to kick in during the playback.

Tasks to do: The work will consist of the following tasks:

  • documentation on the UPnP renderer protocol and on the libupnp APIs,
  • implementation of the detection/discovery of the supported devices,
  • implementation of the protocol to discuss with the device,
  • modify the control of the device in order to transcode on demand,
  • polish and release.

Advice: Please have a look at the following files:

A motivated and fast enough student could pair this task with the Airplay renderer!

Requirements: This project requires C knowledge and access to some connected TV supporting this protocol.

Proposed mentor: tguillem

Advanced Audio Filters

Project Description: We are looking for a skilled audiophile that knows a lot about audio theory and practice to work on new audio filters for VLC.

Tasks to do:

  • SRS WoW like or other 3D effects;
  • channels mixing, notably upmixing, like Prologic-II;
  • tracks mixing, and transitions;
  • scriptable new audio filters in lua and enable users to create whatever audio filtering function they want in a Lua script;
  • LADSPA or other libraries integration.

Requirements: This project needs some good audio knowledge and good C experience.

Qualification task: Port any audio filter from MPlayer

Proposed mentor: geal

VLC web interface modern look

Project Description: The Web interface of VLC is a very ugly player and we want to improve that quite a bit.

It is often used to control VLC as a remote, and rarely as a remote playback tool. We want to change that.

This can be done in React, RxJS or Vue.JS to achieve a modern look, with transparency and cross-platform support.

Tasks to do:

  • Find the correct JS framework and buildsystem to integrate into VLC
  • Discuss designs and show proof of concept
  • Code the player part of the page,
  • Code the playlist and video effects controllers
  • Code the transcoding and streaming parts.

Requirements: This project requires JavaScript knowledge and experience. The choice of the Framework can be discussed before starting the project, if needed.

Proposed mentor: David Loiret

libVLC 3D video support

Project Description: libVLC is able to play most 2D and Side-By-Side videos, but the support of 3D is very limited.

Because of 360 and VR support, the attention about 3D is getting very popular those days. We need to support that in libVLC.

Tasks to do:

  • understand of the usual 3D formats used by different medias
  • code the core control of the different viewer points (left-only, right-only, SxS, nVidia 3D, etc...),
  • implement those changes inside the OpenGL and Direct3D outputs,
  • code the interface to change those viewer points,
  • code the video filter corresponding to the OpenGL transformations,

Requirements: This project requires C knowledge. OpenGL knowledge and access to a 3D TV are a plus.

Proposed mentor: adrien

libVLC VR support

Project Description: libVLC is able to play most 2D and 360 videos, but the support of VR is very limited.

Because of 360 and VR support, the attention about VR is getting very popular those days. We need to support that in libVLC, with an Oculus, a Vive, or a similar headset.

Tasks to do:

  • understand the different types of 360, 360-stereo, VR movie types and the different headsets types,
  • integrate a new headset view in a libvlccore module,
  • integrate a new headset control in a libvlccore module, to get rotation,
  • integrate the control UI with the headset,
  • optionaly code a VR theater mode inside the OpenGL or D3D module.

Requirements: This project requires C knowledge and access to a VR headset.

Proposed mentor: adrien

VLC Qt interface redesign

Project Description: The VLC interface is quite outdated on Linux and Windows. It has a lot of features, but some are not properly exposed.

This project for the summer is to rework heavily this interface to make it beautiful and useful again.

Scope of the tasks to do:

The idea is to get closer to what the WinRT/UWP interface looks like (search on google image to get an idea), but other ideas are welcome.

The WinRT interface is simpler, more user friendly, and has a better "media center" feel into it.

It would require integration with the media library and with the current interface.

Qml is the preferred way of improving the current UI.

Requirements: This project requires Qt/C++ knowledge.

Proposed mentor: J-B

VLC macOS interface redesign

Project Description: The VLC interface is quite outdated on macOS.

This project for the summer is to rework heavily this interface to make it beautiful and useful again.

Scope of the tasks to do:

The idea is to get closer to what the Apple TV/iOS interface looks like (search on google image to get an idea), but other ideas are welcome.

The iOS/AppleTV interface is simpler, more user friendly, and has a better "media center" feel into it.

It would require integration with the media library and with the current interface.

Starting from the current UI is a requirement.

Requirements: This project requires Obj-C knowledge.

Proposed mentor: David F

VLC cryptographic updates

Project Description: VLC is already using GPG signatures to achieve secure updates on the Windows platform.

But the updates are currently signed with a single master key which is pinned into the source code and VLCs in the wild aren't able to check for revocations of this key.

Tasks to do:

Therefore we would like to improve this situation by:

  • being able to sign developers' keys that can sign VLC binaries on behalf of this master key
  • support revocations of these developer's key
  • provide a master key upgrade path

Requirements: This project requires solid notions of C and Crypto.

Proposed mentor: geal

VLC crashes server

Project Description: VLC is now moving to breakpad to report the crashes.

But we need a fast server to process the reports, preferably written in Go.

Tasks to do:

  • understand breakpad and minidumps
  • finish the breakpad integration for Windows
  • write a breakpad server similar to the one from libreoffice, in Go,
  • write a frontend for statistics and common reports,
  • test it for macOS and Windows crashes.

Requirements: This project requires knowledge of Go and Debugging.

Proposed mentor: etix

Cloud Storage integration

Project Description: VLC needs to be able to access dropbox, google drive and other 3rd party cloud services.

We have a library doing part of the work, but we need to integrate it.

Tasks to do:

  • understand libcloudstorage
  • test libcloudstorage
  • integrate libcloudstorage in libVLC module
  • prepare the interface for this.

Requirements: This project requires knowledge of C++ and Networking.

Proposed mentor: hugo

Ideas for VLMC

Port to Android

Project Description: VLMC is now working on the desktop. It would be nice to port it also to the mobile world, starting by Android.

This project would require to adapt to smaller screens, and simplify the UI to fit the Android workflow.

Tasks to do:

  1. Fix the VLMC build for Android. As libVLC works fine on Android, this is more focused on compiling the Qt part for Android.
  2. Split more parts of the UI in components that are reusable on mobile.
  3. Change the components to fit the small resolutions of the Android devices.
  4. Rewrite some UI components in QML.
  5. Write a simpler timeline widget for Mobile workflows.

Requirements: This project requires C++/Qt/qml knowledge, and access to Android devices.

Proposed mentors: Geoffrey/Hugo

Port to iOS

Project Description: VLMC is now working on the desktop. It would be nice to port it also to the mobile world, also on iOS.

This project would require to adapt to smaller screens, and simplify the UI to fit the iOS workflow.

Tasks to do:

  1. Fix the VLMC build for iOS. As libVLC works fine on iOS, this is more focused on compiling the Qt part for iOS.
  2. Split more parts of the UI in components that are reusable on mobile.
  3. Change the components to fit the small resolutions of the iOS devices.
  4. Rewrite some UI components in QML.
  5. Write a simpler timeline widget for Mobile workflows.

Requirements: This project requires C++/Qt/qml knowledge, and access to Android devices.

Proposed mentors: Felix/Hugo

Media Workflow rework

Project Description: VLMC is now working on the desktop, but the media workflow is quite slow and is missing some common use cases.

This should be fixed in MLT framework backend for libVLC and is the continuation from the work from the previous Summer of Code.

Tasks to do:

  1. Understand the MLT libVLC backend codebase,
  2. Clean the backend and port it to a cleaner code state in C++,
  3. Benchmark the code and make it more efficient,
  4. Work to merge this backend upstream,
  5. Implement all the missing features in libVLC.

Requirements: This project requires C/C++ knowledge, and understanding of multimedia concepts is a good positive point.

Proposed mentors: Hugo

Workflow audio filters

Project Description: VLMC is now working on the desktop, but we need to have a good setup of audio filters to make it usable for most people.

Tasks to do:

  1. Understand the VLMC and MLT codebase interactions,
  2. Add audio filters on the MLT framework backend using the LADSPA/LV2 library or a similar open source library,
  3. Code the interface corresponding to those filters, and their options,
  4. Prepare visualizations, and notably for soundwave filters,
  5. Integrate those inside the timeline UI,
  6. Optimize.

Requirements: This project requires C++/Qt/qml knowledge, and enough understanding of audio.

Proposed mentors: J-B

Workflow video filters

Project Description: VLMC is now working on the desktop, but we need to have a good setup of video filters to make it usable for most people.

Tasks to do:

  1. Understand the VLMC and MLT codebase interactions,
  2. Add video filters on the MLT framework backend using the movit library or a similar open source library,
  3. Code the interface corresponding to those filters, and their options,
  4. Add transitions between clips
  5. Code the interface to manage those transitions,
  6. Optimize the code.

Requirements: This project requires C/C++ knowledge.

Proposed mentors: Felix

Improve multiplatform support

VLMC is aiming at being fully cross platform, but drifted a bit from that goal. While most VLMC's code is cross platform, and can be easily built targeting platforms, some dependencies might prove more difficult to build or compose with VLMC.

Tasks to do:

  1. Fix MLT cross compilation for Windows (This will most likely require patching directly inside MLT, all contributions must be sent upstream).
  2. Fix medialibrary code & build process on macOS (and potentially iOS). The medialibrary misses some platform specific code to be able to list all connected drives (hard drives & USB removable storage, mostly) along with filesystem browsing
  3. Update the documentation along the way
  4. Create jenkins build configuration to have nightly builds on jenkins.videolan.org & nightlies.videolan.org for all supported platforms

Requirements: This project requires buildsystems/toolchains knowledge, basic system programming on macOS & Windows

Proposed mentors: Hugo

Remote UI

We would like to have a way to use VLMC from a web browser. You can easily imagine having a nice, shiny & simple UI for minimal movie edition, which would go hand in hand with the cloud storage feature.

Tasks to do: This task aims toward the uncoupling of the rendering backend & UI, as the renderer will run server side, while the UI runs on the client side.

The idea is to be able to have a UI interacting with the renderer without having to be in the same process, or even machine.

Requirements: This project requires C++ and JS knowledge.

Proposed mentor: jb, chouquette, fkuehne

Other ideas for VLC & libVLC

Those ideas are not detailed, but they are ideas that we could help to spring new ideas.

  • Integrate Rust inside VLC, as a demuxer or a parser
  • Improve the PPAPI chrome plugin to add hardware decoding
  • Improve the SMB/Samba share library
  • Work on Vulkan output for VLC
  • VLC javascript work
  • Improve fast-seek in MP4 and WMV demuxers
  • Improve id3 tag parsing.


VideoLAN Google Summer of Code (GSoC/SoC) mentoring projects
20072008200920102011 (GCi 2011SOCIS x264 2011)20122013201620172018201920202021202220232024