我想建立一个胎面安全JAVA应用其中:
- 播放* .MP4或其他格式的高清媒体文件(全屏模式1920×1080)
- 添加事件绑定到小程序(我将使用触摸屏显示器)
我试着搜索了很多,但只找到JMF(VLCJ等)的过时的例子。 所以,我要你从哪里开始构建这个小程序要求。 哪些图书馆我可以包括。
我发现了一个类似的项目在这里: 媒体洗牌 ,但我希望我的媒体文件必须位于一个文件夹中,并出现在应用程序作为启动所选的视频图标(VLC全屏或其他跨平台的媒体播放器)需要在第一触摸播放。 第二触摸必须停止播放器,然后转到主页。
请分享你的想法如何,我能做到这一点。 任何代码示例将是巨大的。
我会建议vlcj因为我相信它,你可以需要的所有格式或have.Its在所有易没有过时启动with.If要显示图形的视频我不认为你可以永远找不到像你这么简单的指令何况,但如果你组织,我将提到的所有步骤,并更深入地解释你将看到vlcj是处理媒体一样,最好的选择(因为它不用在我看来)。我也喜欢和推荐的,因为影响了JavaFx你可以用,但对我来说它太难设置和代码的东西做。
所以,让我们begin.Firstly,我想说,我已经实现在一个基于Swing的应用程序(在Windows)中的vlcj但不应该让你伤心,因为你提到,我们可以只让一个JDialog立即弹出播放器并把视频面在contentPane中。
脚步
1),所以应该做的第一件事就是下载VLC媒体播放器(我们需要在这两个32位或64位的计算机环境中扮演的32位版本)。我有一个可怕的一个月尝试配置为什么加载所需要的我的应用程序wasnt库并成功地发现了,当你运行它运行在32位JVM的一个jar文件exetutable(在日食是在64位JVM上运行,一切都ok.Thats为什么我们需要32位版本),而我有64位机库负载from.Anyways如果您下载并安装32位VLC媒体播放器作出某处的一个文件夹,包括您的项目(可以说“C:/ MyProject的”)内MyProject的创建另一个文件夹并将其命名为例如“被需要”(在这里我们将所有的地方对于vlcj为了所需要的库从C的含量正常工作)。现在:\程序文件(x86)\ VideoLAN的\ VLC复制插件目录和4倍的DLL(axvlc.dll,libvlc.dll,libvlccore.dll, npvlc.dll)并粘贴您的所需文件夹中
2)现在,如果你在Eclipse IDE工作或类似的,你需要做的文件夹中的项目(可以说“LIB”)和内创造另一个文件夹(命名为“罐子”)。在罐子文件夹放置以下罐: JNA-3.5.1.jar,平台3.5.1.jar,vlcj-2.2.0.jar.You可以找到vlcj谷歌project.And然后只包括他们到classpath这些罐子(或者选择他们并单击鼠标右键 - >添加到构建路径或转到项目属性 - > Java构建路径,并添加这些3罐).Thats所有设置,我们开始播放器设置的任何编码之前。
3)您有vlcj使用它。我只是用这个代码,以使前开始到现在加载可能(我会解释它不久不要担心)。
public void LoadLibrary(){
SwingWorker loadWorker;
loadWorker = new SwingWorker(){
@Override
protected Object doInBackground() throws Exception {
// TODO Auto-generated method stub
Thread.sleep(2000);
path = new File("").getAbsolutePath().toString();
path = path.replace(".", "");
path = path.replace("\\", "//");
path = path+"//Needed";
if(RuntimeUtil.isWindows()){
NativeLibrary.addSearchPath(
"libvlc",path
);
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
}
else if(RuntimeUtil.isNix()){
NativeLibrary.addSearchPath(
"libvlc",path
);
}
mediaPlayerFactory = new MediaPlayerFactory();
player = mediaPlayerFactory.newEmbeddedMediaPlayer();
CanvasVideoSurface videoSurface = mediaPlayerFactory.newVideoSurface(canvas);
player.setVideoSurface(videoSurface);
return null;
}
};
loadWorker.execute();
}
所以我要做的是让基于Swing的应用程序线程,因为你无法播放媒体,如果媒体的画布是不显示的,并在构造函数中的一切完全建成时,它的代码是done.That意味着,在玩家,我们首先应该之前创建一个延迟(我的是2秒)为我们的构造函数来结束他的工作,我们的JFrame(或的JWindow或JDialog的等)成为displayable.Next计算我的路走动态我运行的JAR的路径(注意:不是从内部工作区eclipse)并输入所需的文件夹,以实现所需的原生libraries.Inside if语句我告诉系统来寻找我计算的具体路径libvlc.dll,然后加载它,从而使一步向前播放媒体文件。外if-else语句其实我创造我的球员,并放置在画布的VideoSurface(画布是一个Canvas的java.awt对象我只在Windows中使用WindowsCanvas因为我的工作,你可以找到Linux或Mac相似的画布(不要担心THA 牛逼!))外旋工场(线程),我只是告诉线程执行作为呼叫功能的指令(重要)。
4)要播放的文件,我只是使用按钮的地方在我的应用程序每次按下,使我们如做它。我里面什么时间打电话给一个动作事件作出一个JFileChooser选择一个媒体文件from.You可以轻松地搜索它但这里是我的代码:
final JFileChooser chooser = new JFileChooser();
FileNameExtensionFilter filter0 = new FileNameExtensionFilter(".wav", "wav");
FileNameExtensionFilter filter1 = new FileNameExtensionFilter(".mp3","mp3");
FileNameExtensionFilter filter2 = new FileNameExtensionFilter(".mpg","mpg");
FileNameExtensionFilter filter3 = new FileNameExtensionFilter(".mp4","mp4");
FileNameExtensionFilter filter4 = new FileNameExtensionFilter(".avi","avi");
FileNameExtensionFilter filter5 = new FileNameExtensionFilter(".flv","flv");
FileNameExtensionFilter filter6 = new FileNameExtensionFilter(".wmv","wmv");
FileNameExtensionFilter filter7 = new FileNameExtensionFilter(".3gp", "3gp");
FileNameExtensionFilter filter8 = new FileNameExtensionFilter(".swf", "swf");
FileNameExtensionFilter filter9 = new FileNameExtensionFilter(".mkv", "mkv");
FileNameExtensionFilter filter10 = new FileNameExtensionFilter(".flac", "flac");
FileNameExtensionFilter filter11 = new FileNameExtensionFilter("Music & Videos","wav","mp3","mpg","mp4","avi","flv","wmv","3gp","swf","mkv","flac","VOB");
FileNameExtensionFilter filter12 = new FileNameExtensionFilter("Music","wav","mp3","flac");
FileNameExtensionFilter filter13 = new FileNameExtensionFilter(".VOB", "VOB");
FileNameExtensionFilter filter14 = new FileNameExtensionFilter("Videos","mpg","mp4","avi","flv","wmv","3gp","swf","mkv","VOB");
chooser.setFileFilter(filter14);
chooser.setFileFilter(filter2);
chooser.setFileFilter(filter3);
chooser.setFileFilter(filter4);
chooser.setFileFilter(filter5);
chooser.setFileFilter(filter6);
chooser.setFileFilter(filter13);
chooser.setFileFilter(filter7);
chooser.setFileFilter(filter8);
chooser.setFileFilter(filter9);
chooser.setFileFilter(filter12);
chooser.setFileFilter(filter0);
chooser.setFileFilter(filter1);
chooser.setFileFilter(filter10);
chooser.setFileFilter(filter11);
int returnVal = chooser.showOpenDialog(getParent());
if(returnVal == JFileChooser.APPROVE_OPTION) {
System.out.println("You chose to open this file: " +
chooser.getSelectedFile().getName());
File myfile1 = chooser.getSelectedFile();
myfilepath1 = chooser.getSelectedFile().getAbsolutePath();
}
player.startMedia("file:///"+myfilepath1);
player.pause();
这些文件过滤器是一些媒体文件类型vlcj可以u.What我要做的就是打开文件对话框,选择从一个文件,如果我选择一个文件,我抱着它的路径(有用的话说vlcj到哪里寻找它玩的)。
5)现在播放文件ü只需要键入下面的代码:
player.play();
也许里面另一个按钮的另一个动作事件。
6)如果你写完那些你所要做的就是将项目导出到一个可运行jar文件到第一个创建了MyProject的文件夹,然后双击它(而不是从控制台(否则将与64位拼命地跑运行(注意JVM和你不想说,因为你有32名当地人和vlcj不接受这些冲突)))
最后,我不得不说,这些步骤工作了我,我希望他们能帮助你更进一步在你的程式开发。
问候,PeGiannOS
首先,你必须
//创建一个播放器播放的URL指定的媒体
Player mediaPlayer = Manager.createRealizedPlayer( mediaURL );
现在
mediaPlayer.start(); // start playing the media clip
我希望它的工作!
VLCJ是没有过时,它的积极发展,极大灵活和强大在它所能实现的。 我用它在我的应用程序一次显示了许多在应用程序内的视频流,以及做的东西,如同时文字覆盖。 它有时棘手要做到这一点,但绝对有可能。
有一些基本的(最多最新的)例子让你开始VLCJ这里。