1

i'm try to create media player for clients using vlcj with out need to install VLC in their PCs, from VLC.

i take this code from official site of VLC it work fine until i add EmbeddedMediaPlayerComponent() it get error

when i use

new NativeDiscovery().discover();

it work fine because i installed VLC in my PC

but when i use

private static final String NATIVE_LIBRARY_SEARCH_PATH = "C:\\Program Files\\VideoLAN\\VLC";

NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(),NATIVE_LIBRARY_SEARCH_PATH);

Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);

this is error log

14:49:08.471 [main]                  INFO                                                   uk.co.caprica.vlcj.Info - vlcj: 3.10.1
14:49:08.482 [main]                  INFO                                                   uk.co.caprica.vlcj.Info - java: 1.8.0_131 Oracle Corporation
14:49:08.482 [main]                  INFO                                                   uk.co.caprica.vlcj.Info - java home: C:\Program Files\Java\jre1.8.0_131
14:49:08.483 [main]                  INFO                                                   uk.co.caprica.vlcj.Info - os: Windows 10 10.0 amd64


 V: 2.2.6 Umbrella
14:49:08.831 [AWT-EventQueue-0]      DEBUG                uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent - args=[--video-title=vlcj video output, --no-snapshot-preview, --quiet-synchro, --sub-filter=logo:marq, --intf=dummy]
14:49:08.841 [AWT-EventQueue-0]      DEBUG                             uk.co.caprica.vlcj.player.MediaPlayerFactory - initX=null
14:49:08.853 [AWT-EventQueue-0]      INFO                                  uk.co.caprica.vlcj.binding.LibVlcFactory - vlc: 2.2.6 Umbrella, changeset 2.2.6-0-g1aae789
14:49:08.854 [AWT-EventQueue-0]      INFO                                  uk.co.caprica.vlcj.binding.LibVlcFactory - libvlc: C:\Program Files\VideoLAN\VLC\libvlc.dll
14:49:08.854 [AWT-EventQueue-0]      DEBUG                             uk.co.caprica.vlcj.player.MediaPlayerFactory - MediaPlayerFactory(libvlc=Proxy interface to Native Library <C:\Program Files\VideoLAN\VLC\libvlc.dll@1723334656>,libvlcArgs=[--video-title=vlcj video output, --no-snapshot-preview, --quiet-synchro, --sub-filter=logo:marq, --intf=dummy])
14:49:08.855 [AWT-EventQueue-0]      DEBUG                             uk.co.caprica.vlcj.player.MediaPlayerFactory - jna.library.path=null
14:49:08.856 [AWT-EventQueue-0]      DEBUG                             uk.co.caprica.vlcj.player.MediaPlayerFactory - VLC_PLUGIN_PATH=null
[00000000007ecfc0] core libvlc error: No plugins found! Check your VLC installation.
14:49:08.887 [AWT-EventQueue-0]      DEBUG                             uk.co.caprica.vlcj.player.MediaPlayerFactory - instance=null
14:49:08.888 [AWT-EventQueue-0]      ERROR                             uk.co.caprica.vlcj.player.MediaPlayerFactory - Failed to initialise libvlc
Exception in thread "AWT-EventQueue-0" java.lang.RuntimeException: Failed to initialise libvlc.

This is most often caused either by an invalid vlc option being passed when creating a MediaPlayerFactory or by libvlc being unable to locate the required plugins.

If libvlc is unable to locate the required plugins the instructions below may help:

In the text below <libvlc-path> represents the name of the directory containing "libvlc.dll" and "libvlccore.dll" and <plugins-path> represents the name of the directory containing the vlc plugins...

For libvlc to function correctly the vlc plugins must be available, there are a number of different ways to achieve this:
 1. Make sure the plugins are installed in the "<libvlc-path>/plugins" directory, this should be the case with a normal vlc installation.
 2. Set the VLC_PLUGIN_PATH operating system environment variable to point to "<plugins-path>".

More information may be available in the log.

at uk.co.caprica.vlcj.player.MediaPlayerFactory.<init>(MediaPlayerFactory.java:300)
    at uk.co.caprica.vlcj.player.MediaPlayerFactory.<init>(MediaPlayerFactory.java:259)
    at uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent.onGetMediaPlayerFactory(EmbeddedMediaPlayerComponent.java:349)
    at uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent.<init>(EmbeddedMediaPlayerComponent.java:217)
    at tutorial.Tutorial.<init>(Tutorial.java:68)
    at tutorial.Tutorial$1.run(Tutorial.java:49)
    at java.awt.event.InvocationEvent.dispatch(Unknown Source)
    at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
    at java.awt.EventQueue.access$500(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.awt.EventQueue$3.run(Unknown Source)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(Unknown Source)
    at java.awt.EventQueue.dispatchEvent(Unknown Source)
    at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
    at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
    at java.awt.EventDispatchThread.run(Unknown Source)

can you help me to bundle up VLC to my project

Ahmed
  • 112
  • 2
  • 12

3 Answers3

1

The best solution for me was to write my own discovery strategy and bundle the VLC libraries with the application. This way, an installation of VLC is not required. Everything comes with the app.

Here's an example of a discovery strategy:

https://github.com/johndeverall/BehaviourCoder/blob/master/src/main/java/de/bochumuniruhr/psy/bio/behaviourcoder/BundledVLCLibsDiscoveryStrategy.java

You can probably use the linked class above unedited.

Here's a usage example:

final boolean found = new NativeDiscovery(new BundledVLCLibsDiscoveryStrategy()).discover();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Main(found);
            }
        }); 

In addition to this, you'll need to include the relevant VLC libraries on the classpath in the same way that they're included in the resources folder of the linked project.

https://github.com/johndeverall/BehaviourCoder/tree/embedded_video_libraries/src/main/resources/lib

Currently I've only got this working on windows, but if you can get it working for mac and / or linux I'd appreciate a PR!

John Deverall
  • 5,954
  • 3
  • 27
  • 37
1

I observed this issue with VLCJ - 3.10.1, JNA 4.1 combination. I solved it by adding JNA 4.2 in my pom.xml file.

<dependency>
    <groupId>uk.co.caprica</groupId>
    <artifactId>vlcj</artifactId>
    <version>3.10.1</version>
</dependency>
<dependency>
    <groupId>net.java.dev.jna</groupId>
    <artifactId>jna</artifactId>
    <version>4.2.0</version>
</dependency>

Then added VLC 2.2.6 library using below code.

NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), System.getProperty("user.dir")+"/lib");
System.setProperty("VLC_PLUGIN_PATH",  System.getProperty("user.dir")+"/lib/plugins");

You can find code example here

0

Since I don't have comment privileges... Is it possible you have more then 1 VLC installation installed? The reason for asking is that a 64bit jdk/jre is not able to use a 32bit VLC installation and vice versa. Just guessing if it could be that VLCJ finds a incorrect version of vlc and then throws an error..just guessing here though.

Payerl
  • 1,042
  • 2
  • 16
  • 33
  • i used 64bit VLC and 64 bit JDK – Ahmed Aug 31 '17 at 11:47
  • @Ahmed When looking at your error log I see these lines: `initX=null vlc: 2.2.6 Umbrella, changeset 2.2.6-0-g1aae789 libvlc: C:\Program Files\VideoLAN\VLC\libvlc.dll jna.library.path=null VLC_PLUGIN_PATH=null` For me it seems like libVLC 2.2.6 is found but the library path to the jna is not? Also seems like VLC_PLUGIN_PATH enviroment variable might not be set? – Payerl Sep 04 '17 at 08:39