首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >不能在java应用程序中包含vlc库。

不能在java应用程序中包含vlc库。
EN

Stack Overflow用户
提问于 2017-08-25 04:05:57
回答 3查看 2.2K关注 0票数 1

我试图为客户端创建媒体播放器,使用vlcj,而不需要在他们的PC机上安装VLC,从VLC。

我把这段代码从VLC的官方站点上取下来,它可以正常工作,直到我添加了EmbeddedMediaPlayerComponent() --它得到了错误

当我用

新NativeDiscovery().discover();

因为我在我的电脑上安装了VLC,所以它工作得很好。

但当我用

私有静态最终字符串NATIVE_LIBRARY_SEARCH_PATH = "C:\Program \VideoLAN\VLC“; ( NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(),NATIVE_LIBRARY_SEARCH_PATH); ( Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(),LibVlc.class);

这是错误日志

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
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)

你能帮我把VLC捆绑到我的项目上吗?

EN

回答 3

Stack Overflow用户

发布于 2017-10-04 03:26:20

对我来说最好的解决方案是编写自己的发现策略,并将VLC库与应用程序捆绑在一起。这样,不需要安装VLC。所有东西都随应用程序而来。

下面是一个发现策略的例子:

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

您可能可以使用上面未经编辑的链接类。

下面是一个用法示例:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
final boolean found = new NativeDiscovery(new BundledVLCLibsDiscoveryStrategy()).discover();
        SwingUtilities.invokeLater(new Runnable() {
            public void run() {
                new Main(found);
            }
        }); 

除此之外,您还需要在类路径中包含相关的VLC库,就像它们包含在链接项目的资源文件夹中一样。

图书馆/src/main/resources/lib

目前我只在windows上工作,但是如果你能让它在mac和/或linux上工作,我会很感激你的公关!

票数 1
EN

Stack Overflow用户

发布于 2017-11-09 10:43:39

我用VLCJ-3.10.1,JNA4.1组合观察到了这个问题。我通过在我的pom.xml文件中添加JNA4.2来解决这个问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
<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>

然后使用下面的代码添加VLC 2.2.6库。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), System.getProperty("user.dir")+"/lib");
System.setProperty("VLC_PLUGIN_PATH",  System.getProperty("user.dir")+"/lib/plugins");

您可以找到代码这里的例子

票数 1
EN

Stack Overflow用户

发布于 2017-08-31 01:35:06

既然我没有评论特权..。您是否可能安装了超过一个VLC?问这个问题的原因是,64位jdk/jre不能使用32位VLC安装,反之亦然。只需猜测VLCJ是否找到了不正确的vlc版本,然后在这里抛出一个error..just猜测。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45881054

复制
相关文章
protolator: Protobuf <==> json
github.com/hyperledger/fabric-config/protolator 是 Hyperledger Fabric 中的一个 Go 包,用于将 Protocol Buffers(ProtoBuf)消息和 JSON 格式之间进行转换。它提供了一种方便的方式来将 Fabric 配置文件(以 ProtoBuf 格式表示)与 JSON 配置文件之间进行相互转换。这对于 Fabric 的配置管理和部署非常有用,使得用户可以轻松地在不同的配置格式之间进行切换。
孟斯特
2023/10/16
2640
protolator: Protobuf <==> json
GraphQL 可代替 REST API ?
不知不觉地「歇」了好久。一个习惯的养成只需要21天,但习惯的坚持并没有想象中那么容易。
FoamValue
2022/08/22
6800
GraphQL 可代替 REST API ?
Excel公式练习50: 在公式中用特定构造代替常量数组
导语:继续研究来自于excelxor.com的案例。建议结合本文阅读原文,会了解更多的细节,会有更大的收获。
fanjy
2020/03/17
5410
我怎么在`Object-C`中用`Swift`
如果你想编译一个应用程序并且这个应用程序包含Swift文件,Swift支持的标准库已经添加到Bundle里面。你可以随时可以在终端运行otool -L查看一个产品包含的FrameWork。这个可以显示你的产品依赖的静态库和FrameWork
君赏
2018/08/31
8520
我怎么在`Object-C`中用`Swift`
ProtoBuf试用与JSON的比较
XML、JSON 也可以用来存储此类结构化数据,但是使用ProtoBuf表示的数据能更加高效,并且将数据压缩得更小。
Xiaolei123
2019/08/13
8.1K0
在 Spring Boot REST API中使用Json Web Token
在本文中,我将展示如何进行基于 Spring Boot 的 REST API进行鉴权。保护 REST API 以避免对公共 API 进行任何不必要的调用已成为一种趋势。我们将使用一些 Spring 引导功能来实现 Spring 安全,并使用 JSON WebTokens 进行授权。
用户4235284
2023/10/14
2370
在 Spring Boot REST API中使用Json Web Token
Protobuf中如何指定json tag
在 Protocol Buffers (protobuf) 中,可以使用特定的选项来指定生成的 JSON 标签。通过在消息定义中使用 [(json_name)] 选项,可以控制生成的 JSON 字段名称。这样可以确保 Protocol Buffers 和 JSON 之间的互操作性。
孟斯特
2023/10/16
9800
Protobuf中如何指定json tag
我在项目中用实际用到的22个Vue优化技巧
代码是写给人看的附带能在机器上运行,在开发中我们经常出于性能、可读性或者系统健壮程度优化代码
用户6256742
2022/07/06
8090
我在开发微信小程序中用到的几个不错的库
昨天文章中给大家提到过,在今天的文章中,给大家分享一下,我在开发过程中用到的不错的一些微信小程序的开源库。说道做到,今天就给大家分享。 图片裁剪工具 图片裁剪工具:we-cropper ,这个开源库真
非著名程序员
2018/02/07
1.3K0
我在开发微信小程序中用到的几个不错的库
Java中用Deque接口代替Stack接口完成栈功能
​ 但今天突然发现,Java Doc里建议用Deque替代Stack接口完成栈的功能,于是我稍微研究了一下。
用户7886150
2021/04/21
1.7K0
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
服务之间通信的最简单的解决方案是使用JSON over HTTP。尽管JSON具有许多明显的优点(比如它具有很好的可读性,易于理解,且通常性能良好),但它还是有一些问题的。在局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。 gRPC默认使用protobuf,它更快,因为它是二进制的且是类型安全的。我编写了一个演示项目,使用JSON over HTTP与使用gRPC API的方式进行了一次基准测试。 该库包含2个相同的API:基于Protobuf的gRP
李海彬
2018/03/28
3.1K0
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
服务之间通信的最简单的解决方案是使用JSON over HTTP。尽管JSON具有许多明显的优点(比如它具有很好的可读性,易于理解,且通常性能良好),但它还是有一些问题的。在局域网内的数据交互,Google的Protocal Buffer这种结构编码是比JSON更好的选择。
石瞳禅
2018/09/18
1.7K0
在Go中对gRPC+ProtoBuf与Http+Json进行基准测试
谈谈我项目中用到的RabbitMQ/RocketMQ
前两天看了看一下消息队列——RabbitMQ,从配置到使用,说说消息队列MQ的工作机制.
简单的程序员
2020/04/20
1.1K0
Rest API: Json参数格式错误时显示Json原文
一开始想寻找其他方式,当抛出异常的时候,就从HttpServletRequest读取body内容。但是做不到,因为在做Json读取的时候,InputStream已经被读取了,无法再次获取到body内容。所以只能通过自定义MessageConverter的方式。
十毛
2019/03/27
1.9K0
ProtoBuf 生成 Go 代码去掉 JSON tag omitempty
我们经常使用 PB(ProtoBuf)作为数据的交换协议,用于数据的序列化与反序列化。对于 PB 生成的 Go strutc,将其序列化为 JSON 时,比如对于数字类型,默认值为零,将不会出现在 JSON 串中。
恋喵大鲤鱼
2022/06/02
5.8K0
ProtoBuf 生成 Go 代码去掉 JSON tag omitempty
[Flutter]在Flutter中使用protobuf
不说废话,直接贴步骤 安装protoc brew install protobuf 安装dart brew tap dart-lang/dart brew install dart dart 安装好后,就有pub命令了。 安装protoc_plugin pub global activate protoc_plugin 将protoc-gen-dart添加到path 在用户根目录:.bash_profile添加 export "$PATH:$PWD/.pub-cache/bin" 安装好后,就有protoc
吴老师
2019/04/09
6.5K0
Protobuf在Cmake中的正确使用
Protobuf是google开发的一个序列化和反序列化的协议库,我们可以自己设计传递数据的格式,通过.proto文件定义我们的要传递的数据格式。例如,在深度学习中常用的ONNX交换模型就是使用.proto编写的。我们可以通过多种前端(MNN、NCNN、TVM的前端)去读取这个.onnx这个模型,但是首先你要安装protobuf。
老潘
2023/10/19
1.7K0
Protobuf在Cmake中的正确使用
同事看了我的代码惊呼:居然是这么在Unity中用单例的
首先要了解,单例模式是一种常用的软件设计模式,定义是单例对象的类只能允许一个实例存在,在许多时候整个系统只需要拥有一个全局对象,有利于协调系统整体的行为。
恬静的小魔龙
2022/08/07
8120
同事看了我的代码惊呼:居然是这么在Unity中用单例的
在Go中使用Protobuf
本教程使用proto3版本的protocol buffer语言,提供了一个基本的在Go程序中使用protocol buffer的介绍。通过创建一个简单的示例应用程序,向你展示如何
KevinYan
2019/10/13
1.4K0
点击加载更多

相似问题

对Protobuf的SpringBoot REST Json请求

120

在javascript中用json发布rest请求

21

Django REST框架在IntegerField中用'null‘代替0

20

在Corona中用JSON代替XML重命名网络请求

20

为什么我的连字符在我的javascript中用"“代替?

14
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文