1

我需要生成一个 G711 多播音频流,并且遇到了作为 Java 媒体框架的一部分的 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

任何建议如何解决这个问题?

4

1 回答 1

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

然后你必须使用如下地址:

好的

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

好的

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

坏的

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

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

于 2010-12-02T20:50:14.073 回答