Antecedentes
(vocĂŞ pode pular imediatamente e ir para o prĂłximo item)
Ao aprender Java, imediatamente apĂłs eu dominar o Swing, ficou interessante: "Mas como reproduzir áudio ou vĂdeo?". Eu vasculhei o Google por um longo tempo, desenterrei várias bibliotecas lá que, em teoria, deveriam me dar exatamente o que eu quero. Mas, como a prática demonstrou, a maioria dessas bibliotecas lĂŞ um nĂşmero muito pequeno de formatos e nĂŁo Ă© muito conveniente de usar. Depois de vasculhar alguns dias, finalmente encontrei algo que, em teoria, deveria me ajudar com a solução do problema. A biblioteca VLCj pega codecs do VLC media player e reproduz arquivos com eles. Mais um dia de sofrimento com um tutorial no site oficial e finalmente consegui começar a reproduzir o arquivo de vĂdeo no JFrame.
Vamos ao que interessa:
1. Baixe a biblioteca em si (é melhor usar a versão mais recente, pois há problemas de compatibilidade)
2. Se você ainda não instalou o VLC media player, será necessário fazer o download e instalá-lo. Você pode baixá-lo no site oficial do VideoLan (é melhor usar a versão mais recente, ela contém mais codecs).
3. IDE, eu uso o Eclipse.
Primeiro, crie um novo projeto e denomine-o, por exemplo, “MediaPlayer”.
Agora abra a pasta MediaPlayer na área de trabalho do eclipse e descompacte o arquivo baixado com a biblioteca nessa pasta.
Além disso, no Eclipse, nas configurações do seu projeto, clique em "Incluir JARs Externos" e, na janela que é aberta, localize e selecione o arquivo vlcj-3.0.1.jar. Escolha ELE E ELE SOMENTE .
Portanto, a biblioteca foi conectada ao projeto. Em seguida, precisamos criar uma instância da classe. Por exemplo, crie Test.java (espero que esse processo não precise ser explicado a ninguém).
Temos uma classe vazia com aproximadamente o seguinte conteĂşdo:
public class Test { public static void main(String[] args) { } }
Em seguida, precisamos criar um JFrame no qual queremos exibir nosso vĂdeo. TambĂ©m criamos um JPanel e colocamos o Canvas nele, que usamos como superfĂcie para o nosso player de vĂdeo.
public class Test { public static void main(String[] args) { JFrame f=new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); f.setBounds(100,100,1000,600); Canvas c=new Canvas(); c.setBackground(Color.black); JPanel p=new JPanel(); p.setLayout(new BorderLayout()); p.add(c); f.add(p); } }
Então, a parte visual está pronta. Em seguida, voltamos diretamente para a biblioteca e o player VLC. E, na verdade, crie o próprio jogador em nosso quadro.
NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files\VideoLAN\VLC"); Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); MediaPlayerFactory mpf= new MediaPlayerFactory(); EmbeddedMediaPlayer emp= mpf.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(f)); emp.setVideoSurface(mpf.newVideoSurface(c)); emp.setEnableMouseInputHandling(false); emp.setEnableKeyInputHandling(false); String file="C:\\Users\Admin\eclipse-workspace\MediaPlayer/video.avi"; emp.prepareMedia(file); emp.play();
Aqui, indicamos o caminho para o VLC player (mais especificamente, os arquivos libvlc.dll, libvlccore.dll e a pasta plugins). Criamos um media player avançado (ele tem um conjunto maior de recursos do que apenas um "media player"), atribuĂmos a ele uma superfĂcie, indicamos o caminho para o arquivo de vĂdeo, preparamos o arquivo para reprodução e, na verdade, o reproduzimos.
Como resultado, seu código será mais ou menos assim:
import java.awt.BorderLayout; import java.awt.Canvas; import java.awt.Color; import javax.swing.JFrame; import javax.swing.JPanel; import com.sun.jna.Native; import com.sun.jna.NativeLibrary; import uk.co.caprica.vlcj.binding.LibVlc; import uk.co.caprica.vlcj.player.MediaPlayerFactory; import uk.co.caprica.vlcj.player.embedded.EmbeddedMediaPlayer; import uk.co.caprica.vlcj.player.embedded.windows.Win32FullScreenStrategy; import uk.co.caprica.vlcj.runtime.RuntimeUtil; public class Test { public static void main(String[] args) { JFrame f=new JFrame(); f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); f.setVisible(true); f.setBounds(100,100,1000,600); Canvas c=new Canvas(); c.setBackground(Color.black); JPanel p=new JPanel(); p.setLayout(new BorderLayout()); p.add(c); f.add(p); NativeLibrary.addSearchPath(RuntimeUtil.getLibVlcLibraryName(), "C:\\Program Files/VideoLAN/VLC"); Native.loadLibrary(RuntimeUtil.getLibVlcLibraryName(), LibVlc.class); MediaPlayerFactory mpf= new MediaPlayerFactory(); EmbeddedMediaPlayer emp= mpf.newEmbeddedMediaPlayer(new Win32FullScreenStrategy(f)); emp.setVideoSurface(mpf.newVideoSurface(c)); emp.setEnableMouseInputHandling(false); emp.setEnableKeyInputHandling(false); String file="C:\\Users\Admin\eclipse-workspace\MediaPlayer/video.avi"; emp.prepareMedia(file); emp.play(); } }
Lembre-se de que:
- Seu caminho para o VLC media player pode ser diferente.
- O caminho para o seu vĂdeo pode variar.
Por conveniência, você pode copiar os arquivos necessários do VLC media player para o seu projeto. Isso também elimina a necessidade de instalar o VLC nos computadores em que seu programa funcionará.
No começo, tive dificuldade em reproduzir arquivos com cirĂlico no nome ou no caminho. Se vocĂŞ encontrar as mesmas dificuldades, clique com o botĂŁo direito do mouse na instância da sua classe, acesse as configurações e altere a codificação para UTF-8