سلام للجميع :
----------------------
هنا كتبت كود لإستخلاص ال frameRate من ملف فديو من نوع AVI
import java.awt.BorderLayout;
import java.awt.Color;
import java.awt.Component;
import java.awt.Dimension;
import java.awt.FlowLayout;
import java.awt.Toolkit;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.media.CannotRealizeException;
import javax.media.NoPlayerException;
import javax.media.Player;
import javax.swing.JFileChooser;
import javax.swing.JFrame;
import javax.media.Manager;
import javax.media.control.FrameRateControl;
import javax.swing.BorderFactory;
import javax.swing.JButton;
import javax.swing.JPanel;
import javax.swing.JTextArea;
public class AviTest extends JFrame {
private Player player;
private JFileChooser fileChooser;
private JButton[] buttons;
private JPanel buttonsPanel, mediaPanel, areaPanel, mainPanel;
private String[] buttonsNames = {"play", "hide", "extract", "get frame rate"};
private MyActionListener myActionListener;
private JTextArea area = new JTextArea(200, 10);
public AviTest() throws IOException, NoPlayerException, CannotRealizeException {
myActionListener = new MyActionListener();
setLayout(new BorderLayout());
fileChooser = new JFileChooser();
////////////////////////////////////////////////////
mainPanel = new JPanel(null);
buttonsPanel = new JPanel(new FlowLayout());
mediaPanel = new JPanel(new BorderLayout());
areaPanel = new JPanel();
areaPanel.setBounds(700, 70, 300, 100);
areaPanel.setBorder(BorderFactory.createLineBorder(Color.BLACK, 3));
areaPanel.add(area);
mainPanel.add(areaPanel);
////////////////////////////////////////////////////
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();
int width = (int) (dim.width / 2);
int height = (int) (dim.height / 2);
mediaPanel.setSize(new Dimension(width, height));
//////////////////////////////////////////
createButtons();
getContentPane().add(mainPanel);
}
public static void main(String[] args) throws IOException, NoPlayerException, CannotRealizeException {
AviTest aviTest = new AviTest();
aviTest.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
aviTest.setLocationRelativeTo(null);
aviTest.setSize(new Dimension(600, 300));
aviTest.setVisible(true);
aviTest.setExtendedState(MAXIMIZED_BOTH);
}
private Player playVedio() throws IOException, NoPlayerException, CannotRealizeException {
int result = fileChooser.showOpenDialog(AviTest.this);
mediaPanel.setBounds(10, 40, 500, 400);
mediaPanel.setBackground(Color.BLUE);
if (result == JFileChooser.APPROVE_OPTION) {
try {
URL mediaUrl = fileChooser.getSelectedFile().toURL();
player = Manager.createRealizedPlayer(mediaUrl);
////////////////////////////////////////////////////////
Component video = player.getVisualComponent();
Component controls = player.getControlPanelComponent();
/////////////////////////////////////////////////////////
if (video != null) {
mediaPanel.add(video, BorderLayout.CENTER); // add video component
}
if (controls != null) {
mediaPanel.add(controls, BorderLayout.SOUTH); // add controls
}
mainPanel.add(mediaPanel, BorderLayout.CENTER);
mainPanel.repaint();
mediaPanel.revalidate();
} catch (MalformedURLException ex) {
System.err.println("Could not create URL for the file");
}
}
return player;
}
private void createButtons() {
buttons = new JButton[buttonsNames.length];
buttonsPanel.setBounds(10, 10, 500, 50);
buttonsPanel.setBackground(Color.red);
for (int i = 0; i < buttonsNames.length; ++i) {
buttons = new JButton(buttonsNames);
buttons.addActionListener(myActionListener);
buttonsPanel.add(buttons);
mainPanel.add(buttonsPanel, BorderLayout.NORTH);
}
}
private class MyActionListener implements ActionListener {
public void actionPerformed(ActionEvent e) {
if (e.getSource() == buttons[0]) {
try {
playVedio();
} catch (IOException ex) {
Logger.getLogger(AviTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoPlayerException ex) {
Logger.getLogger(AviTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (CannotRealizeException ex) {
Logger.getLogger(AviTest.class.getName()).log(Level.SEVERE, null, ex);
}
} else if (e.getSource() == buttons[1]) {
} else if (e.getSource() == buttons[2]) {
} else if (e.getSource() == buttons[3]) {
try {
Player pl=playVedio();
FrameRateControl frameRateControl = (FrameRateControl) pl.getControl("javax.media.control. FrameRateControl");
if (frameRateControl != null) {
int fr = (int) frameRateControl.getFrameRate();
System.out.println("frame rate is:" + fr);
}
} catch (IOException ex) {
Logger.getLogger(AviTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (NoPlayerException ex) {
Logger.getLogger(AviTest.class.getName()).log(Level.SEVERE, null, ex);
} catch (CannotRealizeException ex) {
Logger.getLogger(AviTest.class.getName()).log(Level.SEVERE, null, ex);
}
}
}
}
}المشكلة عند الضغط على الزر get frame rate : اختار أولاً الفديو ثم يبدأ بالعمل و المفروض يعرض ال frame rate و لكنه لا يعرضه
ال code الخاص باسخلاص ال frame rate :
else if (e.getSource() == buttons[3]) {
try {
Player pl=playVedio();
FrameRateControl frameRateControl = (FrameRateControl) pl.getControl("javax.media.control. FrameRateControl");
if (frameRateControl != null) {
int fr = (int) frameRateControl.getFrameRate();
System.out.println("frame rate is:" + fr);
}
}شكراً مقدماً
مرفق الcode + ملف الفديو :
