منتدى مصر التقني
هل تريد التفاعل مع هذه المساهمة؟ كل ما عليك هو إنشاء حساب جديد ببضع خطوات أو تسجيل الدخول للمتابعة.

تشغيل ملفات الفيديوا المختلفة فى تطبيقات الجافا باستخدام المكتبة VLCJ

اذهب الى الأسفل

تشغيل ملفات الفيديوا المختلفة فى تطبيقات الجافا باستخدام المكتبة VLCJ Empty تشغيل ملفات الفيديوا المختلفة فى تطبيقات الجافا باستخدام المكتبة VLCJ

مُساهمة من طرف NEXT الخميس فبراير 06, 2020 8:40 pm

VLC Media Player هو مشغل وسائط مفتوحة المصدر مشهور جدًا تم تطويره بواسطة مشروع VideoLAN . VLCJ هو مشروع يسمح لك بالعمل مع مثيل VLC في تطبيقات الجافا.


تشغيل ملفات الفيديوا المختلفة فى تطبيقات الجافا باستخدام المكتبة VLCJ Player_vclj_java

في هذا المقال التعليمي ، سنقوم بإنشاء مشغل فيديو باستخدام مكتبة VLCJ ومكتبات VLC مع Netbeans IDE ، وسيكون بإمكان مشغلنا فتح ملف فيديو (MP4 ، 3GP ، Dat ، webm) ، سيكون لديه عناصر التحكم الأساسية (PLAY ، PAUSE سيتم استخدام شريط التمرير ، STOP ، MUTE) لإظهار التقدم المحرز في تشغيل الفيديو وكذلك تعديل نقطة التشغيل عن طريق تحريك شريط التمرير ، وأخيراً يمكن التقاط مقاطع الفيديو في أي نقطة تشغيل.

قبل البدء نحن بحاجة تحميل المكتبات التالية :

مكتبة VLCJ-2.4.1.jar (تحميل)
مكتبة JNA-3.5.1.jar (تحميل)
Libvlc.dll ومكتبات libvlccore.dll


الخطوة 1: VLCJ / JNA


تتطلب مكتبة VLCJ مكتبة JNA (Java Native Access) ، تسمح لنا مكتبة JNA بالوصول إلى المكتبات المشتركة الأصلية لنظام التشغيل دون استخدام واجهة Java الأصلية. في هذا البرنامج التعليمي ، سوف نستخدم إصدار VLC 2.4.1 و JNA 3.5.1 ، كل إصدار من VLCJ يتطلب إصدارًا مختلفًا من JNA ، لتجنب المشكلات ، يوصى بمراجعة وثائق VLCJ .


قم بتنزيل هذه المكتبات وتثبيتها على Netbeans


الخطوة 2. ملفات DLL



نحتاج إلى المكتبات libvlc.dll و libvlccore.dll من VLC ، فهذه الإعدادات موجودة افتراضيًا في «C: \ Program Files \ VideoLAN \ VLC \» ، لذلك إذا لم يكن لديك المشغل ، فيجب عليك تنزيله وتثبيته على جهاز الكمبيوتر الخاص بك.[/l]


الخطوة 3. مشروع جافا



افتح netbeans وقم بإنشاء مشروع جديد يسمى " DemoVLCJ " واعطها البنية التالية ، أضف JFrame يسمى " Player " ، أضف مكتبات JNA و VLCJ






[rtl]تشغيل ملفات الفيديوا المختلفة فى تطبيقات الجافا باستخدام المكتبة VLCJ Vlcj_mp4[/rtl]








[rtl]الخطوة 4. افتح jframe " المشغل " في وضع التصميم وخذ وقتك في إنشاء الواجهة مثل الصورة التالية:[/rtl]











[rtl]تشغيل ملفات الفيديوا المختلفة فى تطبيقات الجافا باستخدام المكتبة VLCJ Player_vclj[/rtl]





هام: يجب كتابة أسماء كل عنصر تحكم كما في الصورة.


الخطوة 4. الترميز

افتح jframe في وضع الكود " المصدر ".يجب عليك إضافة الاستيراد التالي:

الكود:
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.MouseEvent;
import java.awt.event.MouseListener;
import java.io.File;
import javax.swing.AbstractButton;
import javax.swing.JFileChooser;
import javax.swing.JOptionPane;
import javax.swing.JSlider;
import javax.swing.event.ChangeEvent;
import javax.swing.event.ChangeListener;
import javax.swing.filechooser.FileNameExtensionFilter;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.component.EmbeddedMediaPlayerComponent;
import uk.co.caprica.vlcj.player.MediaPlayer;
import uk.co.caprica.vlcj.player.MediaPlayerEventAdapter;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;

يتم تعريف المتغيرات التالية قبل مُنشئ الفئة:

الكود:
 private EmbeddedMediaPlayerComponent player;
    private File file;
    static{
        NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\\VideoLAN\\VLC\");
        Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
    }
    //bandera para controlar la reproduccion de video y el cambio en el avance de video
    private boolean band = true;

يمكننا أن نرى أننا نشير إلى مسار ملفات DLL بحيث يتم تحميلها في المشروع ، إذا كان لديك VLC مثبتة في اتجاه آخر ، يجب عليك تعديل هذا المتغير.

لدينا حاليًا مُنشئ الفئة الفارغ ، وهو:

الكود:
public Reproductor() {
    initComponents();

    // سنقوم بكتابة الاكواد المطلوبة هنا

}

في هذا المنشئ سنكتب كل الكود الضروري لتشغيل المشغل

أولاً نعلن بعض خصائص المشروع ونضيف PLAYER إلى الحاوية

الكود:
setTitle("VLCJ Player");//nombre de reproductor
setLocationRelativeTo(null);//centrar en pantalla
player = new EmbeddedMediaPlayerComponent();
//se añade reproductor
jPanel2.add(player);
player.setSize(jPanel2.getSize());
player.setVisible(true);
//slider control de volumen
sldVolumen.setMinimum(0);
sldVolumen.setMaximum(100);
//slider control progreso
sldProgress.setMinimum(0);
sldProgress.setMaximum(100);
sldProgress.setValue(0);
sldProgress.setEnabled(false);

أخيرًا نضيف الأحداث لكل عنصر تحكم على النحو التالى :

الكود:


 //إنشاء مربع حوار لاختيار ملفات التشغيل
        btnOpenFile.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                JFileChooser fileChooser = new JFileChooser();
                FileNameExtensionFilter filter = new FileNameExtensionFilter("Videos", "mp4","flv","webm","3gp","dat");
                fileChooser.addChoosableFileFilter(filter);
                //fileChooser.setCurrentDirectory(new java.io.File("C:\\videos\\tmp\"));
                if ( fileChooser.showOpenDialog(null) == JFileChooser.APPROVE_OPTION ){            
                    file = fileChooser.getSelectedFile();                                    
                    btnPlay.doClick();
                }
            }            
        });

        //Control captura de ventana
        btnSnapshot.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e) {
                if(file!=null){
                    String absolutePath = file.getAbsolutePath();        
                    String newPath = absolutePath .substring(0, absolutePath .length()-4) + "_" + System.currentTimeMillis() + ".png";                
                    if( player.getMediaPlayer().saveSnapshot(new File(newPath)) )              
                       JOptionPane.showMessageDialog(null, "Snapshot: " + newPath );  
                }
            }            
        });

        //كود زر التشغيل
        btnPlay.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e)
            {
                if (file!=null){                    
                    player.getMediaPlayer().playMedia(file.getAbsolutePath());    
                    sldVolumen.setValue(  player.getMediaPlayer().getVolume() );
                    sldProgress.setEnabled(true);
                    setTitle( file.getName() + " - VLCJ Player");    
                }
            }
        });

        //كود زر الايقاف الموقت
        btnPause.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e)
            {
               player.getMediaPlayer().setPause( player.getMediaPlayer().isPlaying()?true:false );                                  
            }
        });

        //إيقاف التحكم في التشغيل
        btnStop.addActionListener(new ActionListener() {

            @Override
            public void actionPerformed(ActionEvent e)
            {
              player.getMediaPlayer().stop();  
              sldProgress.setValue(0);
              sldProgress.setEnabled(false);
              setTitle("VLCJ Player");
            }
        });

       //كتم الصوت
       btnMute.addActionListener(new ActionListener() {            
            @Override
            public void actionPerformed(ActionEvent actionEvent) {
                AbstractButton abstractButton = (AbstractButton) actionEvent.getSource();                
                player.getMediaPlayer().mute( abstractButton.getModel().isSelected() );                
            }
        });

        //التحكم فى شريط الصوت
       sldVolumen.addChangeListener(new ChangeListener(){

            @Override
            public void stateChanged(ChangeEvent e) {
                Object source = e.getSource();                                
                player.getMediaPlayer().setVolume( ((JSlider) source).getValue() );
            }            
        });

        //قائمة المشغل لإظهار التقدم في تشغيل الفيديو
        player.getMediaPlayer().addMediaPlayerEventListener(new MediaPlayerEventAdapter() {

            @Override
            public void positionChanged(MediaPlayer mp, float pos)
            {
                if(band){
                    int value = Math.min(100, Math.round(pos * 100.0f));            
                    sldProgress.setValue(value);                                                    
                }
            }

            @Override
            public void finished(MediaPlayer mediaPlayer){

            }

        });

        //Listener para el slider progress
        sldProgress.addMouseListener(new MouseListener(){

            @Override
            public void mouseClicked(MouseEvent e) {}

            @Override
            public void mousePressed(MouseEvent e) {
                band= false;
            }

            @Override
            public void mouseReleased(MouseEvent e) {
                band = true;
            }

            @Override
            public void mouseEntered(MouseEvent e) {}

            @Override
            public void mouseExited(MouseEvent e) {}

        });

        //// التحكم للتبديل إلى وضع التشغيل
        sldProgress.addChangeListener(new ChangeListener(){

            @Override
            public synchronized void stateChanged(ChangeEvent e) {
                if( !band ){
                    Object source = e.getSource();                                
                    float np = ((JSlider) source).getValue() / 100f;                    
                    player.getMediaPlayer().setPosition(np);    
                }

            }            
        });

إذا لم تقم بوضع علامة على أي خطأ ، فقم بتشغيل المشغل والاستمتاع بـ contrario ، وإلا تحقق من أن أسماء عناصر التحكم هي نفس أسماء هذا المشروع ، وتأكد أيضًا من أن مكتبات jar هي نفسها الموجودة في هذا المشروع

ـــــــــــــــــــ التوقيع ــــــــــــــــــــ
تشغيل ملفات الفيديوا المختلفة فى تطبيقات الجافا باستخدام المكتبة VLCJ Do.php?imgf=154090993464951
NEXT
NEXT
الادارة
الادارة

تاريخ التسجيل : 18/02/2011
المساهمات : 446
النقاط : 200660
التقيم : 28
الدولة : مصر
الجنس : ذكر

الرجوع الى أعلى الصفحة اذهب الى الأسفل

الرجوع الى أعلى الصفحة

ََ

مواضيع ذات صلة


 
صلاحيات هذا المنتدى:
لاتستطيع الرد على المواضيع في هذا المنتدى