الفريق العربي للبرمجةأرشيف المنتديات · 2000 – 2023
نسخة أرشيفية للقراءة فقط — التسجيل والمشاركة مغلقان، والمحتوى محفوظ كما كان.

مشكلة فى استخلاص معدل ال frame

بدأه mr.beshoy في 22 يونيو 2010 · 8 رد · 663 مشاهدة · في JavaSE
مشاركة: واتساب X فيسبوك تيليجرام
#1 صاحب الموضوع

سلام للجميع :

----------------------

هنا كتبت كود لإستخلاص ال 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 + ملف الفديو :

AviTestStego.rar

clock.rar

#2

حاولت لكن للالاسف لم يعمل الملف لدي

و الخطأ:

Unable to handle format: CRAM, 336x496, FrameRate=200.0, Length=209162 0 extra bytes Failed to realize: com.sun.media.PlaybackEngine@f18e8e Error: Unable to realize com.sun.media.PlaybackEngine@f18e8e Jun 22, 2010 2:47:13 PM AviTest$MyActionListener actionPerformed SEVERE: null javax.media.CannotRealizeException

#3

أصل المشكلة أن ال JMF بتشترط ملفات ذات codec خاص و صوت خاص

انا فى برنامج بعدل فيه فى ملف الفديو .

لكن جرب ده :

http://rapidshare.com/files/401645959/bailey2.rar.html

أنا حاولت أرفعه هنا لكن لم ينفع .

شكراً

#4

حاولت كثيرا لكن لم تظهر اي نتيجة

ولكن وجدت تعديل بسيط و صراحة اقنعني

                Control control = player.getControl("javax.media.control.FrameRateControl");
                if (control != null && control instanceof javax.media.control.FrameRateControl) {
                    FrameRateControl frameRateControl = (FrameRateControl) control;
                    System.out.println(frameRateControl.getFrameRate());
                } else {
                    System.out.println("No Framerate available");
                }

انا استخدم فيديو من نوع mpg

و عند الضغط على زر الخصائص --

post-111465-085080800 1277211360_thumb.p

يظهر التالي :

post-111465-057723500 1277211382_thumb.p

تحياتي

المرفقات
1.png2.png
#5

لكن فى جزئية الكود خاصتك انت مش محدد ملف الفديو الى هيتعامل معاه إذن على اى أساس سيخرج لك ال frame rate

؟

لو تلاحظ فى ال code ستجد الدالة playVedio() تللك الى ترجع ملف الفديو

تم تعديل هذه المشاركة بواسطة mr.beshoy في 22 يونيو 2010 في 16:04

#6

انت تستدعي playVideo() في كل نقرة زر

لكن انا استبدلتها فقط

حيث تستدعى عند النقر على Play

و player هو متغير عام حيث يمكن استخدامه بدالة FrameRate

لكي تتضمئن لا يوجد خطأ في اللذي تتكلم عنه

#7

السلام عليكم ورحمه الله وبركاته

اولا انا بس حاولت فى البرنامج انى افهمه بس بصراحه مش عرفت لانى لم اتعرض لمثل ذلك من قبل

لكن انا متابع معاكم

جربت الجزئيه بتاعت الاخ محمد

وجربتها على الفيديو بتاع الساعه لكن بصراحه مش اشتغل

لكن جربتها على فيديوهات تانيه كتير بردوا مفيش غير فيديو واحد اللى اشتغل

لا اعلم لماذا

المهم لم جربت الكود بتاع الاخ محمد ظهر ال frame rate

post-217802-076200800 1277223531_thumb.j

اردت عرض النتائج فقط

والاستفاده منكم

سلام عليكم

المرفقات
Untitled-1.jpg

Software Developer
Mahmoudkelany.com


 

#8

خلاص أخ محمد لفيت على المشلكة من ناحية تانية . لكن لنا رجعة فى هذا الأمر .

الموضوع كان أنى عاوز استخلص كل ال frames " الصور " من الفديو . و نفعت و لكن مع الفديوهات ذات المساحة الصغيرة جداً جدا ً .

--------------------------------------------------------------------------------------------------------------------------

بالنسبة لكلام الأخ محمد كيلانى :

----------------------------------------------

سبب عدم تشغيل الفديو خاصتك أن ال الفديو هذا ممكن يكون ال codec بتاعه مش مناسب مع ال JMF

أو معمول له Compression . و هذه حوارات أخرى .

لنا رجعة و لكن ليس الآن لضيق الوقت الشديد .

شكراً

#9
mr.beshoy كتب:

خلاص أخ محمد لفيت على المشلكة من ناحية تانية . لكن لنا رجعة فى هذا الأمر .

الموضوع كان أنى عاوز استخلص كل ال frames " الصور " من الفديو . و نفعت و لكن مع الفديوهات ذات المساحة الصغيرة جداً جدا ً .

--------------------------------------------------------------------------------------------------------------------------

بالنسبة لكلام الأخ محمد كيلانى :

----------------------------------------------

سبب عدم تشغيل الفديو خاصتك أن ال الفديو هذا ممكن يكون ال codec بتاعه مش مناسب مع ال JMF

أو معمول له Compression . و هذه حوارات أخرى .

لنا رجعة و لكن ليس الآن لضيق الوقت الشديد .

شكراً

اوك تمام

فهمتك بس كدا لو عاوز اعمل حاجه زى الميديا بلير برنامج يعنى يشغل اكتر من نوع من الملفات اعمل ايه ؟؟؟

منتظرينك اخى بيشوى اخوك محمود

سلام عليكم

Software Developer
Mahmoudkelany.com


 

مواضيع مشابهة