Pessoal, estou construindo uma aplicação para uso pessoal que consiste em um player de vídeo usando o framework JMF. A aplicação já está funcionando, naturalmente ainda tem bastante coisa pra melhorar. Meu objetivo é criar uma aplicação para marcação de legendas para filmes. Por isso é de suma importância que eu consiga exibir o tempo do vídeo e capturá-lo prontamente para gravar em um arquivo de texto.
Alguém poderia me ajudar como posso obter o tcr do vídeo exibido. Segue abaixo código da classe principal:
package videoplayer;
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.io.File;
import java.io.IOException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.ControllerErrorEvent;
import javax.media.ControllerEvent;
import javax.media.ControllerListener;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.media.RealizeCompleteEvent;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.UnsupportedLookAndFeelException;
import javax.swing.filechooser.FileNameExtensionFilter;
public class MediaPlayerFrame extends javax.swing.JFrame {
// Variables declaration - do not modify
private javax.swing.JButton jButton1;
private javax.swing.JButton jButton4;
private javax.swing.JButton jButton5;
private javax.swing.JDesktopPane jDesktopPane1;
private javax.swing.JFileChooser jFileChooser1;
private javax.swing.JLabel jLabel1;
private javax.swing.JMenu jMenu1;
private javax.swing.JMenu jMenu2;
private javax.swing.JMenuBar jMenuBar1;
private javax.swing.JMenuItem jMenuItem1;
private javax.swing.JMenuItem jMenuItem4;
private javax.swing.JMenuItem jMenuItem5;
private javax.swing.JPanel jPanel2;
private javax.swing.JPopupMenu.Separator jSeparator1;
private javax.swing.JToolBar.Separator jSeparator2;
private javax.swing.JToolBar jToolBar1;
// End of variables declaration
//Outras variáveis
public String caminhoarquivo = null;
private Player player = null;
private FileNameExtensionFilter mv4, gp, wmv, mov, mp3, mp4, au, aiff, aif, wav, todosArquivosVideos, todosArquivosAudio;
/////////////interface gráfica//////////////////////
@SuppressWarnings("unchecked")
// <editor-fold defaultstate="collapsed" desc="Generated Code">
private void initComponents() {
jFileChooser1 = new javax.swing.JFileChooser();
jToolBar1 = new javax.swing.JToolBar();
jButton1 = new javax.swing.JButton();
jButton4 = new javax.swing.JButton();
jButton5 = new javax.swing.JButton();
jSeparator2 = new javax.swing.JToolBar.Separator();
jPanel2 = new javax.swing.JPanel();
jLabel1 = new javax.swing.JLabel();
jDesktopPane1 = new javax.swing.JDesktopPane();
jMenuBar1 = new javax.swing.JMenuBar();
jMenu1 = new javax.swing.JMenu();
jMenuItem1 = new javax.swing.JMenuItem();
jSeparator1 = new javax.swing.JPopupMenu.Separator();
jMenuItem4 = new javax.swing.JMenuItem();
jMenu2 = new javax.swing.JMenu();
jMenuItem5 = new javax.swing.JMenuItem();
setDefaultCloseOperation(javax.swing.WindowConstants.EXIT_ON_CLOSE);
setTitle(" *VanPlayer*");
jToolBar1.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jToolBar1.setRollover(true);
jButton1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/folder.png"))); // NOI18N
jButton1.setText("Abrir");
jButton1.setFocusable(false);
jButton1.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jButton1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton1ActionPerformed(evt);
}
});
jToolBar1.add(jButton1);
jButton4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/information.png"))); // NOI18N
jButton4.setText("Sobre");
jButton4.setFocusable(false);
jButton4.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jButton4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton4ActionPerformed(evt);
}
});
jToolBar1.add(jButton4);
jButton5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/cancel.png"))); // NOI18N
jButton5.setText("Fechar");
jButton5.setFocusable(false);
jButton5.setVerticalTextPosition(javax.swing.SwingConstants.BOTTOM);
jButton5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jButton5ActionPerformed(evt);
}
});
jToolBar1.add(jButton5);
jToolBar1.add(jSeparator2);
jPanel2.setBorder(javax.swing.BorderFactory.createEtchedBorder());
jLabel1.setFont(new java.awt.Font("Tahoma", 0, 10));
jLabel1.setText("Parado");
javax.swing.GroupLayout jPanel2Layout = new javax.swing.GroupLayout(jPanel2);
jPanel2.setLayout(jPanel2Layout);
jPanel2Layout.setHorizontalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 431, Short.MAX_VALUE)
.addContainerGap())
);
jPanel2Layout.setVerticalGroup(
jPanel2Layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(jPanel2Layout.createSequentialGroup()
.addContainerGap()
.addComponent(jLabel1, javax.swing.GroupLayout.DEFAULT_SIZE, 14, Short.MAX_VALUE)
.addContainerGap())
);
jDesktopPane1.setLayout(new BorderLayout());
jDesktopPane1.setBackground(Color.black);
jMenu1.setText("Arquivo");
jMenu1.setFocusPainted(true);
/*
jMenu1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenu1ActionPerformed(evt);
}
});
*/
jMenuItem1.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F1, 0));
jMenuItem1.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/folder.png"))); // NOI18N
jMenuItem1.setText("Abrir");
jMenuItem1.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem1ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem1);
jMenu1.add(jSeparator1);
jMenuItem4.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F12, 0));
jMenuItem4.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/cancel.png"))); // NOI18N
jMenuItem4.setText("Sair");
jMenuItem4.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem4ActionPerformed(evt);
}
});
jMenu1.add(jMenuItem4);
jMenuBar1.add(jMenu1);
jMenu2.setText("Ajuda");
jMenuItem5.setAccelerator(javax.swing.KeyStroke.getKeyStroke(java.awt.event.KeyEvent.VK_F11, 0));
jMenuItem5.setIcon(new javax.swing.ImageIcon(getClass().getResource("/images/information.png"))); // NOI18N
jMenuItem5.setText("Sobre");
jMenuItem5.addActionListener(new java.awt.event.ActionListener() {
public void actionPerformed(java.awt.event.ActionEvent evt) {
jMenuItem5ActionPerformed(evt);
}
});
jMenu2.add(jMenuItem5);
jMenuBar1.add(jMenu2);
setJMenuBar(jMenuBar1);
javax.swing.GroupLayout layout = new javax.swing.GroupLayout(getContentPane());
getContentPane().setLayout(layout);
layout.setHorizontalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addComponent(jToolBar1, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, 455, Short.MAX_VALUE)
.addComponent(jPanel2, javax.swing.GroupLayout.Alignment.TRAILING, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, Short.MAX_VALUE)
.addComponent(jDesktopPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 455, Short.MAX_VALUE)
);
layout.setVerticalGroup(
layout.createParallelGroup(javax.swing.GroupLayout.Alignment.LEADING)
.addGroup(layout.createSequentialGroup()
.addComponent(jToolBar1, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jDesktopPane1, javax.swing.GroupLayout.DEFAULT_SIZE, 393, Short.MAX_VALUE)
.addPreferredGap(javax.swing.LayoutStyle.ComponentPlacement.RELATED)
.addComponent(jPanel2, javax.swing.GroupLayout.PREFERRED_SIZE, javax.swing.GroupLayout.DEFAULT_SIZE, javax.swing.GroupLayout.PREFERRED_SIZE))
);
pack();
}// </editor-fold>
/////////////Construtor do Player///////////////////
public MediaPlayerFrame1() throws ClassNotFoundException, InstantiationException, IllegalAccessException, UnsupportedLookAndFeelException {
initComponents();
setLocationRelativeTo(null);
}
// abre a janela de diálogo para escolha de arquivos
private void AbrirArquivo() throws IOException, NoPlayerException{
File arquivo = null;
jFileChooser1.setMultiSelectionEnabled(false);
AdicionarFiltrosArquivos();
int resultado = jFileChooser1.showOpenDialog(this);
if(resultado == JFileChooser.APPROVE_OPTION){
arquivo = jFileChooser1.getSelectedFile();
caminhoarquivo = jFileChooser1.getSelectedFile().getAbsolutePath();
PrepararVideo(arquivo);
RemoverFiltrosArquivos();
}else{
arquivo = null;
RemoverFiltrosArquivos();
}
}
//Cria o gerenciador do player e prepara o arquivo
private void PrepararVideo(File file) throws IOException, NoPlayerException{
FecharPlayer();
try{
player = Manager.createPlayer(file.toURI().toURL());
if (player != null){
player.addControllerListener((ControllerListener) new EventHandler());
player.prefetch();
player.start();
}
}catch (Exception e){
JOptionPane.showMessageDialog(null, "Formato não suportado");
}
}
private void FecharPlayer() {
if(player == null){
jLabel1.setText("Parado");
return;
}else{
player.stop();
player.close();
Component visual = player.getVisualComponent();
if(visual != null){
jDesktopPane1.remove(visual);
}
if (player.getControlPanelComponent() != null){
jDesktopPane1.remove(player.getControlPanelComponent());
}
jDesktopPane1.removeAll();
}
}
public void AdicionarFiltrosArquivos(){
wmv = new FileNameExtensionFilter("Windows Media Video (*.wmv)", "wmv");
mov = new FileNameExtensionFilter("QuickTime movie (*.mov)", "mov");
wav = new FileNameExtensionFilter("WAVEform audio format (*.wav)", "wav");
mp3 = new FileNameExtensionFilter("MPEG-1/2 Audio Layer 3 (*.mp3)", "mp3");
aiff = new FileNameExtensionFilter("Audio Interchange File Format(*.aiff)", "aiff");
au = new FileNameExtensionFilter("Unix Audio(*.au)", "au");
mp4 = new FileNameExtensionFilter("MPEG-4 Part 14(*.mp4)", "mp4");
gp = new FileNameExtensionFilter("3GPP file format(*.3gp, *.3g2)", "3gp", "3g2");
mv4 = new FileNameExtensionFilter("QuickTime movie (*.m4v)", "m4v");
todosArquivosAudio = new FileNameExtensionFilter("Arquivos Áudio (*.wav, *.mp3, *.aiff, *.aif, *.au)", "wav", "mp3", "aif", "aiff", "au");
todosArquivosVideos = new FileNameExtensionFilter("Arquivos Vídeos (*.mov, *.avi, *.mpeg, *.mp4, *.wmv, *.3gp, *.3g2, *.m4v)", "mov", "avi", "mpeg", "wmv", "mp4", "m4v", "3gp", "3g2");
jFileChooser1.addChoosableFileFilter(mov);
jFileChooser1.addChoosableFileFilter(wmv);
jFileChooser1.addChoosableFileFilter(mp4);
jFileChooser1.addChoosableFileFilter(mv4);
jFileChooser1.addChoosableFileFilter(gp);
jFileChooser1.addChoosableFileFilter(mp3);
jFileChooser1.addChoosableFileFilter(wav);
jFileChooser1.addChoosableFileFilter(aiff);
jFileChooser1.addChoosableFileFilter(au);
jFileChooser1.addChoosableFileFilter(todosArquivosAudio);
jFileChooser1.addChoosableFileFilter(todosArquivosVideos);
}
public void RemoverFiltrosArquivos(){
jFileChooser1.removeChoosableFileFilter(mov);
jFileChooser1.removeChoosableFileFilter(wmv);
jFileChooser1.removeChoosableFileFilter(mp4);
jFileChooser1.removeChoosableFileFilter(mv4);
jFileChooser1.removeChoosableFileFilter(gp);
jFileChooser1.removeChoosableFileFilter(wav);
jFileChooser1.removeChoosableFileFilter(mp3);
jFileChooser1.removeChoosableFileFilter(aiff);
jFileChooser1.removeChoosableFileFilter(au);
jFileChooser1.removeChoosableFileFilter(todosArquivosAudio);
jFileChooser1.removeChoosableFileFilter(todosArquivosVideos);
}
//////////////Eventos e chamadas da interface gráfica ///////////////////////
private void jButton1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
AbrirArquivo();
} catch (IOException ex) {
Logger.getLogger(MediaPlayerFrame1.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoPlayerException ex) {
Logger.getLogger(MediaPlayerFrame1.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void jMenuItem1ActionPerformed(java.awt.event.ActionEvent evt) {
try {
AbrirArquivo();
} catch (IOException ex) {
Logger.getLogger(MediaPlayerFrame1.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoPlayerException ex) {
Logger.getLogger(MediaPlayerFrame1.class.getName()).log(Level.SEVERE, null, ex);
}
}
private void jMenuItem4ActionPerformed(java.awt.event.ActionEvent evt) {
FecharPrograma();
}
private void jButton5ActionPerformed(java.awt.event.ActionEvent evt) {
FecharPrograma();
}
private void jMenu1ActionPerformed(java.awt.event.ActionEvent evt) {
}
private void jButton4ActionPerformed(java.awt.event.ActionEvent evt) {
ChamarFrmSobre();
}
private void jMenuItem5ActionPerformed(java.awt.event.ActionEvent evt) {
ChamarFrmSobre();
}
private void FecharPrograma(){
FecharPlayer();
System.exit(0);
}
private void ChamarFrmSobre(){
FrmSobre telasobre = new FrmSobre(this, true);
telasobre.setVisible(true);
}
private class EventHandler implements ControllerListener{
@Override
public void controllerUpdate(ControllerEvent EventoReproducao) {
if(EventoReproducao instanceof RealizeCompleteEvent){
Component visualComponent = player.getVisualComponent();
if(visualComponent != null){
jDesktopPane1.add(visualComponent, BorderLayout.CENTER);
}
Component controles = player.getControlPanelComponent();
if(controles != null){
jDesktopPane1.add(controles, BorderLayout.SOUTH);
}
jDesktopPane1.doLayout();
}
if(EventoReproducao instanceof ControllerErrorEvent){
if(player == null){
jLabel1.setText("Parado");
}else{
jLabel1.setText("Erro na reprodução do arquivo: "+caminhoarquivo);
try{
player.close();
Component visual = player.getVisualComponent();
if(visual != null){
jDesktopPane1.remove(visual);
}
if (player.getControlPanelComponent() != null){
jDesktopPane1.remove(player.getControlPanelComponent());
}
jDesktopPane1.removeAll();
}catch (Exception ex){
//
}
}
}
}
}
}