2010-09-22 87 views
6

我想在java中运行一个名为VLC的程序并在运行时控制它,例如,如果用户点击了暂停或快进按钮,我会执行特定的适当操作。我用此代码运行VLC:如何通过java控制VLC

 try{ 
      Runtime rt = Runtime.getRuntime(); 
      Process p = rt.exec(VLCProgramAddFile + " udp://@:" + listeningPort); 

      OutputStream out = p.getOutputStream(); 
      InputStream in = p.getInputStream(); 

      p.waitFor(); 
      System.out.println("End of VLC"); 
     } 
     catch (Exception e){ 
      System.out.println("error in running VLC"); 
     } 

我听说过Java绑定,但我不知道它是如何工作的这项工作。

回答

5

您可能正在寻找VLCJ,这是一个用于VLC的java包装。它允许您将VLC媒体播放器嵌入到Java应用程序中,从而添加所有个人控件。

(请注意,为用户的应用,这是好的,但VLCJ库是不完美的,你可以 有几个问题弹出。)

编辑: 对于我的项目,我已经看到了内存泄漏以及长时间运行程序的问题(多个实例持续几个小时)。特别是多个实例不能与某些编译选项(默认情况下处于启用状态)结合使用。

+0

谢谢,我正在尝试学习如何使用VLCJ,但有没有什么办法通过我的程序中的输入/输出流来控制这个被调用的过程?使用VLCJ更好或调用.exe文件,就像我在我的程序中使用的那样。请注意,在运行时控制视频对我很重要。 – sajad 2010-09-22 11:27:30

+0

什么样的问题? – Grodriguez 2010-09-22 12:23:29

+1

@Sajad我只有使用VLCJ的经验,至少可以从应用程序启动/停止和暂停,但我认为所有的命令都可以工作。我没有使用正常的VLC GUI与你自己的应用程序结合使用的经验。我想如果你想把输出嵌入到你的应用程序中,你需要VLCJ。 – Thirler 2010-09-22 13:09:55

0

根据你想要最终完成什么,gstreamer Java bindings值得一看,这将给你一个非常好的播放控制。你可以做转换和一切。他们还有一个简约的视频播放器示例应用程序,让您开始使用。

+0

谢谢你的好意释义! – sajad 2010-09-26 10:01:29

+2

请勿使用Gstreamer。多年来,我终于做到了这一点,我意识到跨平台的困难。如果你在Linux的罚款。 – YumYumYum 2011-08-27 09:46:49

5

VLCj是你在追求的是 - 它本质上是一个直接的libvlc Java包装。如果你在进程中使用它(尤其是如果你在进程中使用多个播放器),你有时会看到虚拟机崩溃 - 这不是VLCJ的错,而是libvlc和它下面使用的本地库有一些微妙的线程错误,暴露了这些问题。

您可以使它在多个实例中可靠地工作,但要做到这一点,您需要将其用于进程外。请参阅here我最初的尝试。建立起来有点工作,但一旦进行,事情似乎很好地发挥作用。

+0

我一直在体验这些运行VLCj的零星JVM崩溃。当VLCj用完时,这些问题是否会消失?我即将尝试让VLCj不再用于流程,但如果最终结果也不可靠,则不想去努力。 – Felix 2013-04-16 03:05:24

+0

@nissemand如果在进程中运行一个VLCJ实例并且没问题,但多个实例偶尔会崩溃,那么是的 - 这应该会使这些问题消失。如果只有一个实例崩溃,那么问题可能在其他地方。 – berry120 2013-04-16 11:09:42

+1

我明白了。我一次只运行一个实例,但是依次运行很多实例。我会尝试将它们移出流程,看看会发生什么。感谢您的帮助berry120! – Felix 2013-04-16 22:10:26