Java Media Framework始终生成TTL = 1的多播数据包

时间:2010-03-25 08:10:06

标签: java multicast jmf ttl

我需要生成G711多播音频流,并且作为Java Media Framework的一部分遇到了AVTransmit2示例。

这很有用,但是多播数据包都将TTL设置为1。

我发现一些文档表明SessionAddress可以指定一个TTL值,所以我尝试改变它,即   destAddr = new SessionAddress(ipAddr,port,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 个答案:

答案 0 :(得分:1)

这已经晚了六个月了,但我在寻找解决同样问题时发现了这个问题,这就是我发现的:

我还尝试在创建SessionAddress对象时设置ttl值,但是使用wireshark,数据包仍然只有1的ttl。但是,我使用不同的地址进行初始化和目标,但是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);

编辑:似乎只有传递给initialize()的SessionAddress需要设置ttl