Java 使用VLCJ创建MediaPlayer时,视频不可播放且为黑屏
我正在尝试使用VLCJ将MediaPlayer添加到JPanel。当我运行代码时,框架打开,但没有显示视频和声音。我没有得到任何编译运行时错误。我查看了可显示和可显示方法的输出,它说视频不可播放。但我尝试了所有可能的视频格式Java 使用VLCJ创建MediaPlayer时,视频不可播放且为黑屏,java,swing,video,media-player,vlcj,Java,Swing,Video,Media Player,Vlcj,我正在尝试使用VLCJ将MediaPlayer添加到JPanel。当我运行代码时,框架打开,但没有显示视频和声音。我没有得到任何编译运行时错误。我查看了可显示和可显示方法的输出,它说视频不可播放。但我尝试了所有可能的视频格式 import java.io.*; import java.net.*; import javax.media.CannotRealizeException; import javax.media.Manager; import javax.media.NoPlayerEx
import java.io.*;
import java.net.*;
import javax.media.CannotRealizeException;
import javax.media.Manager;
import javax.media.NoPlayerException;
import javax.media.Player;
import com.sun.jna.Native;
import com.sun.jna.NativeLibrary;
import uk.co.caprica.vlcj.binding.LibVlc;
import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer;
import uk.co.caprica.vlcj.runtime.RuntimeUtil;
import uk.co.caprica.vlcj.player.MediaPlayerFactory;
import java.awt.*;
import javax.swing.*;
import uk.co.caprica.vlcj.player.embedded.videosurface.CanvasVideoSurface;
public class VideoUpload extends JPanel
{
static String VLCLIBPATH = "C:\\Program Files\\VideoLAN\\VLC";
private MediaPlayerFactory mediaPlayerFactory;
private EmbeddedMediaPlayer mediaPlayer;
private Canvas c;
private JPanel p;
private JFrame frame;
static String url="C:/Users/M.C.Ş/Pictures/video/uwe.3gp";
public static void main( String[] args) {
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), VLCLIBPATH);
Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class);
JFrame frame = new JFrame();
VideoUpload video = new VideoUpload(url);
frame.add( video );
frame.setSize( 1300,750 );
frame.setVisible(true);
video.play();
}
public VideoUpload( String url ) {
url = this.url;
c = new Canvas();
c.setSize(500,500);
c.setBackground(Color.black);
setLayout(new BorderLayout());
add(c, BorderLayout.CENTER);
c.setVisible(true);
setVisible(true);
mediaPlayerFactory = new MediaPlayerFactory();
mediaPlayer = mediaPlayerFactory.newEmbeddedMediaPlayer();
mediaPlayer.setVideoSurface(mediaPlayerFactory.newVideoSurface(c));
System.out.println("is playable " + mediaPlayer.isPlayable() );
}
public void play()
{
mediaPlayer.playMedia(url);
System.out.println("is playing " + mediaPlayer.isPlaying() );
}
}
您不能在通过
playMedia()
传递的文件名中使用前斜杠
文件名直接传递给LibVLC中的本机API方法,正是该本机方法尝试完全按照您指定的方式打开文件名
使用前向斜杠是一种Java约定,它不适用于本机API调用(至少在Windows上不适用)