Estrutura de mídia Java sempre gerando pacotes multicast com TTL = 1
Pergunta
Preciso gerar um fluxo de áudio multicast G711 e me deparei com a amostra AvTransmit2 como parte da estrutura de mídia Java.
Fundamentalmente, isso funciona, no entanto, todos os pacotes multicast têm TTL definido como 1.
Encontrei alguma documentação que sugeriu que o SessionAddress pudesse especificar um valor TTL, então tentei mudar esse IE Destaddr = new SessionAddress (iPaddr, Port, 255);
Também encontrei alguns comentários de que os problemas podem ser devido à inadimplência de Java para o IPv6, então tentei forçá -lo a IPv4 iniciando assim: java -djava.net.preferipv4stack = true -classpath "." AVTRANSMIT2 JAVASOUND: // 8000 239.1.10.65 20480
No entanto, olhando no Wireshark, os pacotes ainda têm ttl = 1
Estou usando o JMF2.1.1e
Alguma sugestão de como resolver isso?
Solução
Isso acontece cerca de seis meses atrasado, mas encontrei esse tópico enquanto procuro resolver o mesmo problema, eis o que eu encontrei:
Também tentei definir o valor TTL ao criar meus objetos de sessionAddress, mas, usando o Wireshark, os pacotes ainda tinham apenas TTL de 1. No entanto, eu estava usando endereços diferentes para inicialização e destino, mas a configuração TTL funcionou quando usei o mesmo endereço. Então, se você tem dois objetos de sessionAddress, como
String addr = "239.192.1.1";
int port = 22224;
int ttl = 32;
SessionAddress multiAddress =
new SessionAddress(InetAddress.getByName(addr), port, ttl);
SessionAddress localAddress =
new SessionAddress(InetAddress.getLocalHost(), SessionAddress.ANY_PORT, ttl);
SessionAddress multiAny =
new SessionAddress(InetAddress.getByName(addr), port, ttl);
Então você deve usar os endereços da seguinte maneira:
BOA
RTPManager rtpManager = RTPManager.newInstance();
rtpManager.initialize(multiAddress);
rtpManager.addTarget(multiAddress);
BOA
RTPManager rtpManager = RTPManager.newInstance();
rtpManager.initialize(multiAny);
rtpManager.addTarget(multiAddress);
MAU
RTPManager rtpManager = RTPManager.newInstance();
rtpManager.initialize(localAddress);
rtpManager.addTarget(multiAddress);
EDIT: Parece que apenas o SessionAddress passou para Initialize () precisa ter TTL Set