JVLC + Ubuntu 8.4 não da certo

20 respostas
C

eu fiz uma aplicação aqui no ubuntu 9 pra rodar vídeos e deu certo, mas se eu tento no ubuntu 8.4 dá vaários erros :s

Alguem pode ajudar?
Vlw

20 Respostas

T

Não está encontrando a biblioteca nativa a qual sua aplicação invoca, ou seja, o arquivo .so que tem esses métodos que você está tentandco invocar.

C

Então na teoria seria só jogar esse .so na biblioteca?

M

Pelo que vi, você está usando o JNA (que chama o VLC) para reproduzir um vídeo.

O VLC está devidamente instalado?

Não seria mais interessante usar um código multiplataforma? O método Desktop.open(File) resolve isso em qualquer plataforma (chama o reprodutor padrão do sistema para executar o vídeo).

C

marcobiscaro2112:
Pelo que vi, você está usando o JNA (que chama o VLC) para reproduzir um vídeo.

O VLC está devidamente instalado?

Não seria mais interessante usar um código multiplataforma? O método Desktop.open(File) resolve isso em qualquer plataforma (chama o reprodutor padrão do sistema para executar o vídeo).

Então, nem rola pq a minha aplicação é em java e roda videos, imagens e texto em várias tvs de plasma. Tem que ser pelo java mesmo :frowning:

C

Depois que eu jogo la na /usr/lib esse so que ta faltando ele da erro na libc,so.6 , Alguem sabe oq pode ser?

M

Acho que o problema é incompatibilidade de versões (sempre que você usar JNI/JNA isso pode ocorrer). Você deve instalar o VLC via repositório no Ubuntu 8.04 e não levar uma biblioteca do 9.10 por causa da compatibilidade de versões.

M

Só para constar, o libc.so.6 é uma biblioteca presente no pacote libc6.

No Karmic (9.10), a versão é a 2.10.1-0ubuntu15, enquanto que no Hardy (8.04) é 2.7-10ubuntu3.

Como o libvlc.so depende diretamente de libc.so, você terá que instalar o pacote libvlc0-dev do repositório no Hardy.

C

No linux 8.04 eu instalo o vlc por apt-get , não to tentando levar a biblioteca do 9 para o 8, só to usando o programa.

M

Qual o erro (completo) que aparece?

C
Exception in thread “Thread-2” java.lang.UnsatisfiedLinkError: Error looking up function ‘libvlc_media_list_new’: /usr/lib/libvlc.so: undefined symbol: libvlc_media_list_new

at com.sun.jna.Function.(Function.java:179)

at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:345)

at com.sun.jna.NativeLibrary.getFunction(NativeLibrary.java:325)

at com.sun.jna.Library$Handler.invoke(Library.java:203)

at com.sun.jna.Native$4.invoke(Native.java:822)

at $Proxy0.libvlc_media_list_new(Unknown Source)

at org.videolan.jvlc.MediaList.(MediaList.java:54)

at org.videolan.jvlc.JVLC.init(JVLC.java:72)

at org.videolan.jvlc.JVLC.(JVLC.java:67)

at view.MostraAvisos.inicializarInformacoes(MostraAvisos.java:231)

at view.MostraAvisos.run(MostraAvisos.java:83)

at java.lang.Thread.run(Thread.java:619)
M

Bad news…

A implementação em Java do VLC 0.8 (o usado no Ubuntu 8.04) é totalmente diferente da atual (VLC 1.0.x). Antes era usado JNI, agora é JNA.

Sem contar que os métodos mudaram (vários e vários métodos).

Ou seja, você não conseguirá fazer que seu programa rode em diferentes versões.

Mas ainda não entendi muito bem: porque você não usa Desktop.open()?

C

Então, é pq a aplicação q eu criei gerencia anúncios em várias Tvs de plasma. Se eu usar o Desktop vai abrir com o programa padrão, mas não vai setar em fullscrean, que é a necessidade. Teria alguma outra idéia?
Vlw pelas respostas :slight_smile:

M

Você poderia postar seu método inicializarInformacoes() aqui?

C

não entendi cara

M

Coloque aqui no fórum o código do seu método inicializarInformacoes() da classe MostraAvisos para que possamos ver.

C
jvcanvas = new java.awt.Canvas();
                                                        jvcanvas.setSize(500, 500);
   

                                                        String[] arg = new String[4];
                                                        arg[0] = "--intf=dummy";
                                                        arg[1] = "--ignore-config";
                                                        arg[2] = "--no-plugins-cache";
                                                        arg[3] = "--plugin-path=plugins";

                                                        jvlc = new JVLC(arg);
                                                        MediaDescriptor mediaDescriptor = new MediaDescriptor(jvlc, file.getAbsolutePath());
                                                        MediaPlayer mediaPlayer = mediaDescriptor.getMediaPlayer();

                                                        mediaPlayer.play();

                                                        while (!(mediaPlayer.hasVideoOutput()))
                                                        {
                                                                try
                                                                {
                                                                        Thread.sleep(100L);
                                                                }
                                                                catch (InterruptedException ex)
                                                                {
                                                                        ex.printStackTrace();
                                                                }
                                                        }

                                                        Video video = new Video(jvlc);
                                                        System.out.print(video.getWidth(mediaPlayer));
                                                        System.out.print("x");
                                                        System.out.println(video.getHeight(mediaPlayer));
                                                        System.out.print("Fullscreen... ");
                                                        video.setFullscreen(mediaPlayer, true);
                                                        try
                                                        {
                                                                Thread.sleep(100L);
                                                        }
                                                        catch (InterruptedException ex)
                                                        {
                                                                ex.printStackTrace();
                                                        }

Tava pensando: e se atualizar o vlc do ubuntu 8 para o 9?

C

problema resolvido: copiei a sourcelist do ubuntu 9.10 para o 8.04, dei o apt-get update depois apt-get install vlc, depois voltei a sourcelist padrão. Não é recomendado, mas deu certo para mim. :roll:

M

Que bom que o problema foi resolvido, mas eu fiquei com uma dúvida agora… as TVs de plasma que rodarão o programa rodam VLC??

C

Então, vai ser um servidor(pc) para cada 3 Tvs, e nele que irá rodar o vlc.

M

Ahh… entendido. Bom trabalho então!

Criado 22 de dezembro de 2009
Ultima resposta 28 de dez. de 2009
Respostas 20
Participantes 3