2015-12-02 2 views
2

Мне нужно создать видеопроигрыватель с использованием Java для моего проекта. Я уже проверил множество примеров в Интернете. Некоторые из них запускаются, но не показывают никакого экрана, я могу слышать только звук видео. Пожалуйста, помогите мне решить эту проблему ...Создание видеопроигрывателя с использованием Java

Я использую ниже импорта

import javax.media.*; 

EDIT: Ниже приведен код, который я использую:

import java.awt.*; 
import java.awt.event.*; 
import java.io.*; 
import javax.swing.*; 
import javax.media.*; 

public class MediaPlayerDemo extends JFrame 
{ 
    private Player player; 
    private File file; 

    public MediaPlayerDemo() 
    { 
     super("Demonstrating the Java Media Player"); 

     JButton openFile = new JButton("Open file to play"); 
     openFile.addActionListener(new ActionListener() 
     { 
      public void actionPerformed(ActionEvent e) 
      { 
       openFile(); 
       createPlayer(); 
      } 
     }); 
     getContentPane().add(openFile, BorderLayout.NORTH); 

     setSize(300, 300); 
     show(); 
    } 

    private void openFile() 
    { 
     JFileChooser fileChooser = new JFileChooser(); 

     fileChooser.setFileSelectionMode(JFileChooser.FILES_ONLY); 
     int result = fileChooser.showOpenDialog(this); 

     // user clicked Cancel button on dialog 
     if (result == JFileChooser.CANCEL_OPTION) 
      file = null; 
     else 
      file = fileChooser.getSelectedFile(); 
    } 

    private void createPlayer() 
    { 
     if (file == null) 
      return; 

     removePreviousPlayer(); 

     try 
     { 
      // create a new player and add listener 
      player = Manager.createPlayer(file.toURL()); 
      player.addControllerListener(new EventHandler()); 
      player.start(); // start player 
     } 
     catch (Exception e) 
     { 
      JOptionPane.showMessageDialog(this, "Invalid file or location", "Error loading file", 
      JOptionPane.ERROR_MESSAGE); 
     } 
    } 

    private void removePreviousPlayer() 
    { 
     if (player == null) 
      return; 

     player.close(); 

     Component visual = player.getVisualComponent(); 
     Component control = player.getControlPanelComponent(); 

     Container c = getContentPane(); 

     if (visual != null) 
      c.remove(visual); 

     if (control != null) 
      c.remove(control); 
    } 

    public static void main(String args[]) 
    { 
     MediaPlayerDemo app = new MediaPlayerDemo(); 

     app.addWindowListener(new WindowAdapter() 
     { 
      public void windowClosing(WindowEvent e) 
      { 
       System.exit(0); 
      } 
     }); 
    } 

    // inner class to handler events from media player 
    private class EventHandler implements ControllerListener 
    { 
     public void controllerUpdate(ControllerEvent e) 
     { 
      if (e instanceof RealizeCompleteEvent) 
      { 
       Container c = getContentPane(); 

       // load Visual and Control components if they exist 
       Component visualComponent = player.getVisualComponent(); 

       if (visualComponent != null) 
        c.add(visualComponent, BorderLayout.CENTER); 

       Component controlsComponent = player.getControlPanelComponent(); 

       if (controlsComponent != null) 
        c.add(controlsComponent, BorderLayout.SOUTH); 

       c.doLayout(); 
      } 
     } 
    } 
} 
+1

Просьба поделиться кодом, который вы пробовали. –

+0

Можете ли вы уточнить, где именно вы получаете ошибку в коде? –

+0

Я могу запустить код, но я не знаю, почему я только слышу звук видео, которое я выбираю, но оно не отображает экран. – Anna

ответ

5

Я использовал vlcj, и она работала гладко , Это привязка к Java для vlcj-плеера и хорошая вещь, которую вам не нужно предоставлять никаким дискам, поскольку vlcj уже включает все их в двоичный дистрибутив.

Отдайте это, вы найдете example of already working player!

+0

Предполагается, что я хочу распространять свой плеер, как я могу это сделать если пользователи имеют библиотеку vlc, установленную в месте, где это не место по умолчанию? – mautrok

1

Попробуйте JavaFX медиаплеера:

Полезная Кодеки:

  • Аудио: MP3; AIFF, содержащий несжатый PCM; WAV, содержащий несжатый PCM; Мультимедийный контейнер MPEG-4 с аудиосигналом Advanced Audio Coding (AAC)
  • Видео: FLV, содержащий видео и аудио в формате VP6; MPEG-4 мультимедиа контейнер с H.264/AVC (расширенное кодирование видео) сжатия видео.

Вот пример из Oracle:

import javafx.application.Application; 
import javafx.collections.ListChangeListener; 
import javafx.collections.MapChangeListener; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.media.Media; 
import javafx.scene.media.MediaView; 
import javafx.scene.media.Track; 
import javafx.stage.Stage; 

/** 
* A sample media player which loops indefinitely over the same video 
*/ 
public class MediaPlayer extends Application { 
private static final String MEDIA_URL = "http://someserver/somedir/somefile.mp4"; 

private static String arg1; 

    @Override public void start(Stage stage) { 
     stage.setTitle("Media Player"); 

// Create media player 
     Media media = new Media((arg1 != null) ? arg1 : MEDIA_URL); 
     javafx.scene.media.MediaPlayer mediaPlayer = new javafx.scene.media.MediaPlayer(media); 
     mediaPlayer.setAutoPlay(true); 
     mediaPlayer.setCycleCount(javafx.scene.media.MediaPlayer.INDEFINITE); 

// Print track and metadata information 
     media.getTracks().addListener(new ListChangeListener<Track>() { 
public void onChanged(Change<? extends Track> change) { 
       System.out.println("Track> "+change.getList()); 
      } 
     }); 
     media.getMetadata().addListener(new MapChangeListener<String,Object>() { 
public void onChanged(MapChangeListener.Change<? extends String, ? extends Object> change) { 
       System.out.println("Metadata> "+change.getKey()+" -> "+change.getValueAdded()); 
      } 
     }); 

// Add media display node to the scene graph 
     MediaView mediaView = new MediaView(mediaPlayer); 
     Group root = new Group(); 
     Scene scene = new Scene(root,800,600); 
     root.getChildren().add(mediaView); 
     stage.setScene(scene); 
     stage.show(); 
    } 

public static void main(String[] args) { 
if (args.length > 0) { 
      arg1 = args[0]; 
     } 
     Application.launch(args); 
    } 
} 

https://blogs.oracle.com/javafx/entry/mpeg_4_multimedia_support_in

0

Java Media Framework может быть использован для создания мультимедийных приложений, таких как видео и аудио плееров.

0

Вот рабочий код.

package New; 

import java.net.URL; 
import javafx.application.Application; 
import javafx.event.ActionEvent; 
import javafx.event.EventHandler; 
import javafx.geometry.HPos; 
import javafx.geometry.Insets; 
import javafx.scene.Group; 
import javafx.scene.Scene; 
import javafx.scene.control.Button; 
import javafx.scene.effect.DropShadow; 
import javafx.scene.layout.GridPane; 
import javafx.scene.layout.HBox; 
import javafx.scene.layout.VBox; 
import javafx.scene.media.Media; 
import javafx.scene.media.MediaPlayer; 
import javafx.scene.media.MediaPlayer.Status; 
import javafx.scene.media.MediaView; 
import javafx.scene.paint.Color; 
import javafx.scene.shape.Rectangle; 
import javafx.stage.Stage; 

public class FxMediaExample2 extends Application { 
    public static void main(String[] args) { 
     Application.launch(args); 
    } 

    @Override 
    public void start(Stage stage) { 
     // Locate the media content in the CLASSPATH 
     URL mediaUrl = getClass().getResource("Test.mp4"); 
     String mediaStringUrl = mediaUrl.toExternalForm(); 

     // Create a Media 
     Media media = new Media(mediaStringUrl); 

     // Create a Media Player 
     final MediaPlayer player = new MediaPlayer(media); 
     // Automatically begin the playback 
     player.setAutoPlay(true); 

     // Create a 400X300 MediaView 
     MediaView mediaView = new MediaView(player); 

     mediaView.setFitWidth(400); 
     mediaView.setFitHeight(300); 
     mediaView.setSmooth(true); 
     mediaView.setLayoutX(200); 
     mediaView.setLayoutY(200); 
     // Create the DropShadow effect 
     DropShadow dropshadow = new DropShadow(); 
     dropshadow.setOffsetY(5.0); 
     dropshadow.setOffsetX(5.0); 
     dropshadow.setColor(Color.RED); 

     mediaView.setEffect(dropshadow); 

     Rectangle rect4 = new Rectangle(35, 55, 95, 25); 
     rect4.setFill(Color.RED); 
     rect4.setStroke(Color.BLACK); 
     rect4.setStrokeWidth(1); 

     // Create the HBox 
     // HBox controlBox = new HBox(5, null, null); 

     // Create the VBox 
     VBox root = new VBox(1, mediaView); 

     GridPane gridpane = new GridPane(); 
     gridpane.setPadding(new Insets(95)); 
     gridpane.setHgap(1); 
     gridpane.setVgap(10); 

     GridPane.setHalignment(rect4, HPos.CENTER); 

     Group grp = new Group(); 
     gridpane.add(root, 1, 1); 

     grp.getChildren().add(gridpane); 

     // Create the Scene 
     Scene scene = new Scene(grp); 

     // Add the scene to the Stage 
     stage.setScene(scene); 
     // Set the title of the Stage 
     stage.setTitle("A simple Media Example"); 
     // Display the Stage 
     stage.show(); 
    } 
} 
Смежные вопросы