所以今天我一直在做很多搜索,试图弄清楚如何在JFrame中播放视频。我想要这个的原因是因为,我正在制作一个游戏,并希望选择添加电影剪辑,就像大多数每个好游戏一样,如GW2,荣誉勋章等。
所以,在我的搜索中,我找到了JMF,但完全无法使用它。这有点令人沮丧,但无论如何。所以,我的问题是:有没有办法播放视频而不安装任何其他jar,exe等?例如,运行一个简单的代码,如new JFrame();
快速简单?或者这是不可能的,但有一种方法可以做到漫长而复杂吗?
我一直在寻找其他堆栈溢出的东西,并没有一个真正适合我想要的......如果最坏的情况发生,我会使用Xuggler,但我宁愿不这样做。
另外,基于这个答案,我计划将来制作一个游戏引擎,所以可以添加它,以获得额外的价值。
提前谢谢你:)
请注意:我不是在寻找对JMF或其他任何类似内容的引用。我正在寻找诸如内置方法/类来调用或长时间工作之类的东西,它们工作得非常好并且可以在许多环境中实现。
编辑:我正在考虑使用JEditorPane,并使用html嵌入视频,但是....这对我来说并不起作用......这就是我在那里尝试过的:
JEditorPane jep = new JEditorPane();
jep.setEditable(false);
// jep.setContentType("text/html");
jep.setText("<html><video id=\"sampleMovie\" src=\"C:\\users\\austin\\desktop\\test.mp4\" controls></video></html>");
JScrollPane scrollPane = new JScrollPane(jep);
JFrame f = new JFrame("Test HTML");
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
f.getContentPane().add(scrollPane);
f.setPreferredSize(new Dimension(800,600));
f.setVisible(true);
但这似乎不起作用......请帮助!
答案 0 :(得分:2)
JMF似乎已经在since 1997左右。难怪,正如你所说,大多数基于Java的玩家都依赖它。
所以我决定使用谷歌的搜索选项回到过去,并从2001年2月找到了一个结果:一个非常简单的GNU-licensed MPEG-1 player从头开始使用Java和C实现。那怎么样?以下捕获来自网站:
我知道你强调你需要一个尽可能少的外部代码的解决方案。在这种情况下,似乎不需要额外的库,但您必须进行一些编译。另外,你只限于MPEG-1。所以,不完全是你想要的,但也许值得一看。
希望它有所帮助!
答案 1 :(得分:-1)
如果您有File
名称“文件”:
import java.io.*;
import java.net.*;
import javax.swing.*;
//....
//....
//....
try{
mediaURL = file.toURI().toURL();
}
catch(Exception e){
}
if(mediaURL != null){
JFrame mediaTest = new JFrame();
MediaPanel m = new MediaPanel(mediaURL);
mediatTest.add(m);
mediaTest.setVisible(true);
}
编辑:
import javax.media.*;
import javax.swing.*;
import java.awt.*;
import java.io.*;
import java.net.*;
public class MediaPanel extend JPanel{
public MediaPanel( URL mediaURL){
setLayout(new BorderLayout());
try{
Player mp = Manager.createRealizedPlayer( mediaURL);
Component video = mp.getVisualComponent();
Component controls = mp.getControlPaneComponent();
if(video != null){
add(video, BorderLayout.CENTER);
}
if(controls != null){
add(controls, BorderLayout.SOUTH);
}
mediaPlayer.start();
}
catch(Exception e){
}
}
}