2010-03-25 2 views
1

Мне нужно сгенерировать звуковой поток многоадресной передачи G711 и наткнулся на образец AVTransmit2 как часть Java Media Framework.Java Media Framework всегда генерирует многоадресные пакеты с TTL = 1

Fundementally это работает, однако широковещательные пакеты все имеют TTL устанавливается равным 1.

Я нашел в документации, предложенной в SessionAddress может указать значение TTL, поэтому я попытался изменить что то destAddr = новый SessionAddress (ipAddr, порт, 255);

Я также нашел некоторые комментарии, что проблемы могут быть связаны с Java нарушившим на IPv6, поэтому я пытался заставить его ipv4, начав его так: Java -Djava.net.preferIPv4Stack = True -classpath " «. AVTransmit2 javasound: // 8000 239.1.10.65 20480

Однако, глядя в Wireshark, пакеты по-прежнему имеют TTL = 1

Я использую JMF2.1.1e

Любые предложения, как решить эту проблему?

ответ

1

Это примерно шесть месяцев поздно, но я нашел эту тему, глядя решить ту же проблему, вот что я нашел:

Я также попытался установить значение ТТЛ при создании своих объектов SessionAddress, но с использованием wirehark, пакеты все еще имели только ttl из 1. Однако я использовал разные адреса для инициализации и цели, но настройка ttl работала, когда я использовал один и тот же адрес. Так что если у вас есть два SessionAddress объекты, такие как

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); 

Тогда вы должны использовать адреса следующим образом:

ХОРОШИЙ

RTPManager rtpManager = RTPManager.newInstance(); 
rtpManager.initialize(multiAddress); 
rtpManager.addTarget(multiAddress); 

ХОРОШО

RTPManager rtpManager = RTPManager.newInstance(); 
rtpManager.initialize(multiAny); 
rtpManager.addTarget(multiAddress); 

BAD

RTPManager rtpManager = RTPManager.newInstance(); 
rtpManager.initialize(localAddress); 
rtpManager.addTarget(multiAddress); 

EDIT: кажется, что только SessionAddress, переданный для инициализации(), должен иметь набор ttl

Смежные вопросы