MP4 не поддерживается в JavaFX?

Поэтому я недавно начал работать с JavaFX, чтобы попытаться вставить видео и аудио в мои Java-программы. Звук работал нормально, но по какой-то причине каждый раз, когда я пытаюсь воспроизвести видеофайл, он возвращает исключение MEDIA_UNSUPPORTED. Я прочитал и увидел, что видеофайл должен был быть MP4 (который он есть), поэтому я попытался преобразовать его в другой тип, а затем повторно преобразовать его в MP4 (H.264 и AAC) с несколькими различными конвертерами и ничего не меняется.

Вот код, с которым я работаю:

import java.net.URL;
import javax.swing.JFrame;
import javax.swing.SwingUtilities;
import javafx.application.Platform;
import javafx.beans.value.ChangeListener;
import javafx.beans.value.ObservableValue;
import javafx.embed.swing.JFXPanel;
import javafx.event.ActionEvent;
import javafx.event.EventHandler;
import javafx.scene.Scene;
import javafx.scene.control.Button;
import javafx.scene.layout.VBox;
import javafx.scene.media.Media;
import javafx.scene.media.MediaPlayer;
import javafx.scene.media.MediaView;
import javafx.util.Duration;


public class CallVideo extends JFrame{

public static final String VID_URL = "file:/C:/Users/Public/Videos/Videos/testCon.mp4"; //http://static.clipcanvas.com/sample/clipcanvas_14348_H264_320x180.mp4

private JFXPanel panel;

public CallVideo(String url)
{   
    panel = new JFXPanel();
    Platform.runLater(new Runnable()
    {
        public void run()
        {
            final Media clip = new Media(VID_URL);
            final MediaPlayer player = new MediaPlayer(clip);
            final MediaView viewer = new MediaView(player);
            viewer.setFitHeight(200);
            viewer.setFitWidth(200);
            final Button button = new Button("Bing Zzzzt!");
            button.setOnAction(new EventHandler<ActionEvent>() {
                @Override
                public void handle(ActionEvent event)
                {
                    viewer.getMediaPlayer().seek(Duration.ZERO);
                    viewer.getMediaPlayer().play();
                }
            });

        setMediaEventHandlers(viewer);
            VBox vid = new VBox();
            vid.getChildren().addAll(viewer, button);
            Scene aScene = new Scene(vid, 200, 200);
            panel.setScene(aScene);
        }
    });
    this.add(panel);
    this.setSize(500, 500);
    this.setLocationRelativeTo(null);
    this.setDefaultCloseOperation(EXIT_ON_CLOSE);
    this.setVisible(true);
}

private void setMediaEventHandlers(final MediaView view) {
    final MediaPlayer player = view.getMediaPlayer();

    System.out.println("Initial: " + player.getStatus());
    player.statusProperty().addListener(new ChangeListener<MediaPlayer.Status>() {
      @Override
      public void changed(ObservableValue<? extends MediaPlayer.Status> observable, MediaPlayer.Status oldStatus, MediaPlayer.Status curStatus) {
        System.out.println("Current: " + curStatus);
      }
    });

    if (player.getError() != null) {
      System.out.println("Initial Error: " + player.getError());
    }

    player.setOnError(new Runnable() {
      @Override public void run() {
        System.out.println("Current Error: " + player.getError());
      }
    });
  }

public static void main(String[] args)
{
    SwingUtilities.invokeLater(new Runnable()
    {
        public void run()
        {
            new CallVideo(VID_URL);
        }
    });
}

}

Ошибка возникает в строке, где инициализируется объект «Media» (начало конструктора). Я в полном недоумении, чтобы увидеть, в чем проблема. Я видел вопросы о воспроизведении звука, но видео не показывалось, но это даже не для меня ...

Если кому-то это нужно:

Затмение

JDK 7

JavaFX 2.0

Windows 7 Pro

РЕДАКТИРОВАТЬ:

Во-первых, я заметил, что на самом деле я использую JavaFX 2.0 ... Может ли это быть проблемой?

Я протестировал обе версии, представленные в ответе, и обе возвращают эту ошибку (вызванную statusListener) при использовании URL-адреса, предоставленного этим ответом:

Current Error: MediaException: MEDIA_UNSUPPORTED : com.sun.media.jfxmedia.MediaException: "Error enter code herelocator unsupported media format" : com.sun.media.jfxmedia.MediaException: "Error locator unsupported media format"

При использовании моего собственного файла программа возвращает эту ошибку сразу после вызова конструктора Media, как и раньше:

Exception in thread "AWT-EventQueue-0" MediaException: MEDIA_UNSUPPORTED : Unrecognized file signature!
at javafx.scene.media.Media.<init>(Media.java:382)
at CallVideo.<init>(CallVideo.java:27)
at CallVideo$5.run(CallVideo.java:90)
at java.awt.event.InvocationEvent.dispatch(Unknown Source)
at java.awt.EventQueue.dispatchEventImpl(Unknown Source)
at java.awt.EventQueue.access$000(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.awt.EventQueue$3.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$1.doIntersectionPrivilege(Unknown Source)
at java.awt.EventQueue.dispatchEvent(Unknown Source)
at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
at java.awt.EventDispatchThread.run(Unknown Source)

Я обновил код, который использую выше.

РЕШИТЬ! Причина в том, что я действительно использовал неподходящую JavaFX (и, возможно, JDK) для этой работы. На самом деле я не контролирую эти вещи, так как это школьные компьютеры, но это испортило мне что-то хорошее ... Спасибо за помощь! Я обновил его с моим окончательным кодом.

Ответы на вопрос(1)

Ваш ответ на вопрос