Ola Developers,
 
Desenvolvi um aplicativo utilizando o JMF 2.1.1 onde um servidor controla os players de uma ou mais sess�es e � o respons�vel por controlar transmiss�es multi-unicast.
Esta tudo funcionando mas quando o servidor � instalado no ambiente de produ��o, em um linux caldera que est� atras de um firewall, n�o consigo fazer um bind de streams provenientes da Internet, ou seja; o servidor responde por 2 IPs (ip1 e ip2, por exemplo), onde o ip1 � da intranet e o ip2 da internet. O fato � que os datagrams packets provenientes de uma transmiss�o est�o chegando ao servidor corretamente ( verifiquei com um aplicativo teste usando DatagramSocket ) mas o servidor n�o consegue efetuar o bind. N�o ocorre erro mas tamb�m o stream n�o � capturado??!
A seguir um peda�o do c�digo utilizado para inicializar a sess�o e capturar os streams:
 
 
    Object dataSync = new Object();
     ...
    void StartServer() {
        SessionAddress localAddr;
        SessionAddress destAddr;
        ...
        ipAddr = InetAddress.getByName(objSessao.address); // objSessao.address � um endere�o IP
        localAddr= new SessionAddress(InetAddress.getLocalHost(), objSessao.port); // objSessao.port=20000
        destAddr = new SessionAddress(ipAddr,objSessao.port);
        objManager[i] = (RTPManager) RTPManager.newInstance();
        objManager[i].initialize(localAddr);
        BufferControl bc = (BufferControl)objManager[i].getControl("javax.media.control.BufferControl");
        if (bc != null) bc.setBufferLength(350);
        objManager[i].addTarget(destAddr);
        ...
       System.out.println("Etapa 1");
       try{
         synchronized (dataSync) {
         while (!dataReceived) {
          if (!dataReceived) System.out.print(".");
          dataSync.wait(1000);
         }
         }
      } catch (Exception e) {}
     System.out.println("Etapa 2");
      ....
    }
   
onde a variavel dataReceived ser� setada no "update" quando um "NewReceiveStreamEvent" ocorrer:
   
    public synchronized void update( ReceiveStreamEvent evt) {
    ...
        if (evt instanceof NewReceiveStreamEvent) {
          ....
          synchronized (dataSync) {
              dataReceived = true;
              dataSync.notifyAll();
          }
        }
    }
 
 
Quando envio um stream capturado de uma webcam para o ip1(intranet) o evento NewReceiveStreamEvent � disparado mas quando envio para o ip2(internet) n�o acontece nada e o programa fica parado no while (!dataReceived). Alguem sabe como resolver?
 
[]s
 
Ricardo A Harari
 
 

Responder a