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?

Foi útil?

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

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top