Construindo um video a partir de um array de bytes!

1 resposta
A

e ae pessoal, estou fazendo uma aplicacao q captura o video do celular e envia via Datagrama para outro celular. O codigo que captura da camera eh esse:

mPlayer = Manager.createPlayer("capture://video");
      mPlayer.realize();
      
      mVideoControl = (VideoControl)mPlayer.getControl("VideoControl");

No lado do servidor que vai receber os bytes eu nao sei como fazer para ficar capturando esses bytes e colocando na tela. Eu fiz um codigo assim:

while (true) {
                Datagram dg = dc.newDatagram(100000);

                dc.receive(dg);

                ByteArrayInputStream byteArray = new ByteArrayInputStream(dg.getData());
                
                mPlayer = Manager.createPlayer(byteArray, "video/mpeg");
                mPlayer.realize();

                mVideoControl = (VideoControl)      mPlayer.getControl"VideoControl");

                //Coloca o video na tela...

            }

O problema eh que ele fica criando um Player para cada datagrama que o servidor recebe! eu gostaria de criar esse player no inicio e ficar so setando os bytes recebidos de cada datagrama! Para depois mostrar o video!

me ajudem ai!

flw

1 Resposta

Stryder

Você deve estar querendo fazer isso. Nesse exemplo ele está usando uma URL da internet pra buscar um vídeo, mas repare que nesse caso, ele espera que todo o vídeo seja lido pra depois ele

private InputStream urlToStream(String url) throws IOException
    {
        // Open connection to the http url...
        HttpConnection connection = (HttpConnection) Connector.open(url);
        DataInputStream dataIn = connection.openDataInputStream();
        byte[] buffer = new byte[1000];
        int read = -1;
        // Read the content from url.
        ByteArrayOutputStream byteout = new ByteArrayOutputStream();
        while ((read = dataIn.read(buffer)) >= 0)
        {
            byteout.write(buffer, 0, read);
        }
        dataIn.close();
        connection.close();
        // Fill InputStream to return with content read from the URL.
        ByteArrayInputStream byteIn = new ByteArrayInputStream(byteout
                .toByteArray());
        return byteIn;
    }

Veja que nessa parte do Código, onde ele efetivamente executa, chama o vídeo, ele recebe um InputStream que é o resultado da função acima. Ou seja, você está tentando fazer as duas coisas dentro do while(true) e isso não dará certo. Separe as coisas, primeiro carregue os dados pra sua variável, depois você simplesmente cria o Player Manager e executivo o menino.

void initPlayer()
    {
        try
        {
            initDone = false;
            if (videoFile == null)
            {
                midlet.alertError("No video file specified");
                return;
            }
            boolean fromHttp = videoFile.startsWith("http://");

            InputStream is = fromHttp ? urlToStream(videoFile) : getClass()
                    .getResourceAsStream(videoFile);
            player = Manager.createPlayer(is, "video/3gpp");
            player.addPlayerListener(this);
            player.prefetch();
            player.realize();

            // get the video control and attach it to our canvas
            VideoControl videoControl = (VideoControl) (player
                    .getControl("VideoControl"));
            if (videoControl == null)
            {
                midlet.alertError("VideoControl not supported");
            }
            else
            {
                videoControl.initDisplayMode(VideoControl.USE_DIRECT_VIDEO,
                        this);
                videoControl.setVisible(true);
            }
            
            initDone = true;
        }
        catch (IOException ioe)
        {
            discardPlayer();
            midlet.alertError("IOException: " + ioe.getMessage());
        }
        catch (MediaException me)
        {
            discardPlayer();
            midlet.alertError("MediaException: " + me.getMessage());
        }
        catch (SecurityException se)
        {
            discardPlayer();
            midlet.alertError("SecurityException: " + se.getMessage());
        }
        catch (Exception ex)
        {
            discardPlayer();
            midlet.alertError("Exception: " + ex.getMessage());
        }

    }

Esse exemplo eu peguei no site da Nokia.
www.forumnokia.com
Existem vários exemplos bem legais lá sobre qualquer coisa de J2ME, vale a Pena dar uma olhada.

Midia Guide
http://www.forum.nokia.com/info/sw.nokia.com/id/59c97da0-92fb-4d85-8b7c-3e1b241a6b65/MIDP_Mobile_Media_API_Developers_Guide_v1_0_en.pdf.html

Sample Video - J2ME
http://sw.nokia.com/id/bbe612a1-f988-4fd0-a7ca-fc67f734fc10/MIDP_Mobile_Media_API_Example_Media_Sampler_v1_0.zip

Abraço

Criado 23 de setembro de 2006
Ultima resposta 29 de set. de 2006
Respostas 1
Participantes 2