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