2015-05-17 4 views
2

В моем файле FXML у меня есть:Невозможно воспроизвести видео с помощью JavaFX MediaPlayer

<AnchorPane prefHeight="500.0" prefWidth="500.0" xmlns:fx="http://javafx.com/fxml/1" xmlns="http://javafx.com/javafx/8.0.40"> 
    <children> 
     <Button layoutX="14.0" layoutY="461.0" mnemonicParsing="false" text="Dummy Button" /> 
     <MediaView id="videoView" fitHeight="400.0" fitWidth="450.0" layoutX="14.0" layoutY="14.0" /> 
    </children> 
</AnchorPane> 

И вот мой код:

File f = new File("video.mp4"); 
Media media = new Media(f.toURI().toString()); 

MediaPlayer mediaPlayer = new MediaPlayer(media); 
mediaPlayer.setAutoPlay(true); 

MediaView mediaView = (MediaView) videoLayout.lookup("#videoView"); 
mediaView.setMediaPlayer(mediaPlayer); 

фиктивная кнопка появляется так раскладка загружена правильно. Исключений и ошибок нет, но ничего не происходит. Я не вижу видеокадров, ничего не воспроизводится. Я запускаю этот код в Windows 7. Что я делаю неправильно?

EDIT:

код нормально. Только не все мои тестовые материалы были поддержаны. Как было предложено ниже, это хорошо, чтобы проверить игрока состояние:

mediaPlayer.setOnError(()->System.out.println("media error" 
    + mediaPlayer.getError().toString())); 

Я встретил 3 проблемы до сих пор:

  1. Ошибка была напечатана «ERROR_MEDIA_CORRUPTED: ERROR_MEDIA_CORRUPTED»
  2. ошибка не была напечатана, но только аудио
  3. Исключение было выбрано «MediaException: MEDIA_UNSUPPORTED: непризнанная подпись файла!»

ответ

1

Убедитесь, что носитель поддерживается:

mediaPlayer.setOnError(()-> 
    System.out.println("media error"+mediaPlayer.getError().toString())); 

Если есть MediaException, как аудио формат не поддерживается, вы не будете видеть видео, но приложение запустится нормально.

Обратите внимание, что вы могли бы попробовать этот другой подход, встраивание всего кода в файле FXML:

<MediaView id="videoView" fitHeight="400.0" fitWidth="450.0" layoutX="14.0" layoutY="14.0"> 
    <mediaPlayer> 
     <MediaPlayer autoPlay="true"> 
      <media> 
       <Media source="@video.mp4" /> 
      </media> 
     </MediaPlayer> 
    </mediaPlayer>  
</MediaView> 
+0

Ошибка не печатается. И когда я это делаю: mediaPlayer.setOnReady (() -> System.out.println («media ready»)); Я вижу, что СМИ готовы. Внедрение в FXML также не сработало. – user1723095

+1

Я экспериментировал с некоторыми другими видеороликами, и я обнаружил, что один контент воспроизводит только звук (и никакой ошибки не возвращается из MediaPlayer). Другое не работает вообще (и не поддерживается носитель без печати). Третий также не работает, хотя исключение исключено, поэтому никакая ошибка не печатается. И, наконец, четвертый играет хорошо, поэтому я думаю, что мой код в порядке. В любом случае спасибо за ответ, это помогло мне найти проблему. – user1723095

0

Просто, чтобы помочь другим, написав ответ на этот вопрос. Это может помочь. При создании видеопроигрывателя вы не должны инициализировать mediaView. Если вы повторно инициализируете mediaView, тогда mediaView потеряет ссылку на исходный узел. Вам просто нужно установить mediaPlayer в медиаплеев и проверить нулевую ссылку mediaView. Если mediaView имеет значение NULL, создайте его.

Обратитесь к следующему URL-адресу и посмотрите на ответ, заданный itachi. javafx mediaview only the audio is playing

Если вы не используете загрузчик FXML для создания экземпляра mediaView, тогда может работать следующий код. Это работает для меня.

private void playVideo(String fileLocation) { 
     System.out.println("VideoProcesser Thread = " + Thread.currentThread().getName()); 
     media = new Media(new File(fileLocation).toURI().toString()); 
     mediaPlayer = new MediaPlayer(media); 
//  mediaPlayer.setAutoPlay(true); 
     if(mediaView == null) { 
      mediaView = new MediaView(mediaPlayer); 
     } 
     mediaView.setMediaPlayer(mediaPlayer); 
     mediaPlayer.play(); 
     mediaPlayer.setOnError(() -> System.out.println("Current error: "+mediaPlayer.getError())); 
     setVideoMediaStatus(PLAYING); 
     pane.getChildren().add(mediaView); 
    } 
1

В ubuntu 17.10 возникла некоторая проблема с libavcodec. javafx ищет libavcodec53, но ubuntu 17.10 поставляется с более поздней версией

вы можете исправить эту проблему, выполнив следующие действия:

  1. установить libavcodec57, дополнительные и устр

Sudo APT-получить установку libavcodec57;

sudo apt-get install libavcodec-extra;

Sudo APT-получить установку кодек-DEV

2.Create символической ссылки

кд/USR/Lib/x86_64-Linux-гну

Судо пер -s кодек. поэтому libavcodec.so.53

Когда javafx ищет libavcodec53, теперь мы указываем на libavcodec57.

Смежные вопросы