Java Media Framework всегда генерирует многоадресные пакеты с TTL = 1 - PullRequest
1 голос
/ 25 марта 2010

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

Обычно это работает, однако для всех многоадресных пакетов 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 Ответ

1 голос
/ 02 декабря 2010

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

Я также пытался установить значение ttl при создании объектов SessionAddress, но при использовании wireshark пакеты все еще имели 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);

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

GOOD

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

GOOD

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

BAD

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

РЕДАКТИРОВАТЬ: кажется, что только SessionAddress, переданный для initialize (), должен иметь значение ttl

...