Esta se referindo ao vlcj ou ao MediaPlayer?
Ao mediaplayer, a biblioteca ja foi adicionada
Bom, estou certo que não é bug do MediaPlayer do JavaFX, e sim programação.
Todavia vou postar um codigo aqui pra voce ver como executar varios videos seguidos em VLCJ, basta você adaptar a Thread a sua real necessidade.
/**
*
* @author jorge
*
* download vlcj
* multiplos videos
*
*/
import java.awt.BorderLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.WindowAdapter;
import java.awt.event.WindowEvent;
import java.util.ArrayList;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JPanel;
import javax.swing.UIManager;
import uk.co.caprica.vlcj.media.MediaEventListener;
import uk.co.caprica.vlcj.player.base.MediaPlayer;
import uk.co.caprica.vlcj.player.base.MediaPlayerEventAdapter;
import uk.co.caprica.vlcj.player.base.MediaPlayerEventListener;
import uk.co.caprica.vlcj.player.component.EmbeddedMediaPlayerComponent;
public class Main3 extends JFrame implements Runnable {
private static final long serialVersionUID = 1L;
private static final String TITLE = "My First Media Player";
Thread thread = null;
ArrayList<String> lista = new ArrayList();
String video_padrao = "";
boolean end_video = false;
MediaPlayerEventListener mevent = null;
private final EmbeddedMediaPlayerComponent mediaPlayerComponent;
private JButton playButton;
public Main3(String title) {
super(title);
mediaPlayerComponent = new EmbeddedMediaPlayerComponent();
lista.add( "/home/jorge/Vídeos/legiao_urbana_giz.mp4" );
lista.add( "/home/jorge/Vídeos/Beyonce_and_Shakira_hd.mp4" );
//lista.add( "/home/jorge/Vídeos/Shakira_and_Wyclef.mp4" );
//lista.add( "/home/jorge/Vídeos/legiao_urbana_pais_e_filhos.mp4");
}
public void initialize() {
this.setBounds(100, 100, 600, 400);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.addWindowListener(new WindowAdapter() {
@Override
public void windowClosing(WindowEvent e) {
mediaPlayerComponent.release();
System.exit(0);
}
});
JPanel contentPane = new JPanel();
contentPane.setLayout(new BorderLayout());
contentPane.add(mediaPlayerComponent, BorderLayout.CENTER);
JPanel controlsPane = new JPanel();
playButton = new JButton("Play");
controlsPane.add(playButton);
contentPane.add(controlsPane, BorderLayout.SOUTH);
playButton.addActionListener(new ActionListener() {
public void actionPerformed(ActionEvent e) {
// mediaPlayerComponent.mediaPlayer().controls().play();
playButton.setEnabled(false);
thread.start();
}
});
this.setContentPane(contentPane);
this.setVisible(true);
thread = new Thread(this);
}
public void loadVideo(String path) {
mediaPlayerComponent.mediaPlayer().media().startPaused(path);
}
public void run() {
boolean run = true;
while( run == true ) {
try {
for(int x=0; x < lista.size(); x++) {
end_video = false;
if(mevent != null ) mediaPlayerComponent.mediaPlayer().events().removeMediaPlayerEventListener(mevent);
mevent = new MediaPlayerEventAdapter() {
@Override
public void finished(MediaPlayer mediaPlayer) {
end_video = true;
}
};
loadVideo(lista.get(x));
mediaPlayerComponent.mediaPlayer().events().addMediaPlayerEventListener(mevent);
mediaPlayerComponent.mediaPlayer().controls().play();
while(end_video == false) {
thread.sleep(1000L);
}
thread.sleep(2000L);
// proximo video
}
} catch (InterruptedException ex) {
ex.printStackTrace();
}
}
}
public static void main( String[] args ){
try {
UIManager.setLookAndFeel(
UIManager.getSystemLookAndFeelClassName());
}
catch (Exception e) {
System.out.println(e);
}
Main3 application = new Main3(TITLE);
application.initialize();
application.setVisible(true);
// application.loadVideo(VIDEO_PATH);
}
}
opa, blz? como assim adaptar a thread a minha real necessidade?
O metodo “run()” do exemplo.Você tem conhecimento de Thread?
olá, não consegui usar esses exemplos que você me passou
acha que consegue me ajudar então ???
se o erro é a lógica de programação deve ser na hora de pegar o video
eu crio um File que entra em uma pasta e procura um arquivo que chama o video, nao o video em si para nao ficar usando memoria atoa tipo apaga video, copia video, cola video, apaga video, ele só chama o nome do video exemplo: (principal, video1, video2) enfim…
se não tiver um arquivo chamando ele joga como principal o padrão, se tiver ele pega o nome do video e joga na variavel videoAtualString, e cria um
File mediaFile = new File("/painel/videos/" + videoAtualString + “.mp4”);
que puxa direto o video somente sendo alterado o “videoAtualString” conforme tiver algum arquivo naquela pasta que te falei
depois seta uma media que recebe :
media = new Media(mediaFile.toURI().toURL().toString());
String videoAtualString = “principal”;
Scene scene;
MediaPlayer mediaPlayer;
public void pegarNomeDoVideo() {
File nomeDoVideo = new File("/painel/vStart");
File[] files = new File[1];
files = nomeDoVideo.listFiles();
if (files.length == 0) {
videoAtualString = "principal";
} else {
File videoAtual = files[0];
videoAtualString = videoAtual.toString().substring(15);
videoAtual.delete();
}
}
public Scene createScene() throws MalformedURLException {
File mediaFile = new File("/painel/videos/" + videoAtualString + ".mp4");
Media media = null;
try {
if(mediaFile.isFile()){
media = new Media(mediaFile.toURI().toURL().toString());
} else {
mediaFile = new File("/painel/videos/principal.mp4");
media = new Media(mediaFile.toURI().toURL().toString());
}
} catch (MalformedURLException e) {
System.out.println("URL Malformed");
}
mediaPlayer = new MediaPlayer(media);
mediaPlayer.setMute(true);
mediaPlayer.setOnEndOfMedia(new Runnable() {
@Override
public void run() {
try {
juntandoInitfxEPegarNomeDoVideo();
} catch (MalformedURLException e) {
System.out.println("MALFORMED URL");
}
}
});
MediaView mediaview = new MediaView(mediaPlayer);
mediaview.setFitHeight(553);
if (videoAtualString != null) {
scene = new Scene(new Pane(mediaview));
}
mediaPlayer.play();
return scene;
}
private void initFX(JFXPanel panel) throws MalformedURLException {
scene = createScene();
panel.setScene(scene);
}
private void juntandoInitfxEPegarNomeDoVideo() throws MalformedURLException {
pegarNomeDoVideo();
initFX(fxPanel);
}
se realmente for algum erro de lógica eu criando uma lista por exemplo não sei… acho que daria certo
Realmente é problema de logica de programação. Veja tudo com calma, pedaço por pedaço do codigo usando debug e você vai encontrar o erro e corrigi-lo.
Tomara que seja de programação kkkkkk, sabe algum jeito de criar essa para o próximo vídeo sem travar?
O exemplo que postei roda vários videos e não trava.
Mas me diga, você é novato em programação ou novato em Java?
"Enganam-se aqueles que acham ou acreditam que programação seja fácil e trivial."
"Requer muito estudo, paciência e persistência."
É meu primeiro projeto mesmo, sem contar com os projetos de cursos
Mas esse em vlcj nao consegui fazer rodar infelizmente:(
Faça-o rodar, alias não gosto de postar teorias e achismos aqui no forum, sempre que posso posto um exemplo pratico e funcionando, esse que enviei foi testado e aprovado.
Se esta dando erro com você é preciso saber se as jars estão todas corretas, se o vlc esta instalado, enfim… essas coisinhas.
Esta instalado sim, porém ele abre o frame mas nao o video sabe?
Mas voce trocou os nomes dos videos internos?
Troquei
Entao tenta colocar no try catch um Exception pra ver se pega um erro geral