Construindo um video a partir de um array de bytes!

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

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