1

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を使用しています

これを解決する方法について何か提案はありますか?

4

1 に答える 1

1

これは約6か月遅れていますが、同じ問題を解決しようとしているときにこのスレッドを見つけました。これが私が見つけたものです:

また、SessionAddress オブジェクトを作成するときに ttl 値を設定しようとしましたが、wireshark を使用すると、パケットの ttl はまだ 1 しかありませんでした。ただし、初期化とターゲットに異なるアドレスを使用していましたが、同じアドレスを使用すると ttl 設定が機能しました。したがって、次のような 2 つの 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 に答える