2010-03-25 6 views
1

G711 멀티 캐스트 오디오 스트림을 생성해야하며 Java Media Framework의 일부로 AVTransmit2 샘플을 사용했습니다.Java Media Framework가 항상 TTL = 1로 멀티 캐스트 패킷을 생성합니다.

는 Fundementally이 그러나 멀티 캐스트 패킷을 모두 TTL이 나는 TTL 값을 지정할 수있는 SessionAddress을 제안 몇 가지 문서를 발견 1.

로 설정되어, 작동, 그래서 변화 시도했다 그 예 destAddr = 새로운 SessionAddress (ipAddr, 포트, 255);

또한 Java에 기본값으로 설정된 IPv6로 인한 문제 일 수 있으므로 다음과 같이 ipv4로 강제 실행하려고했습니다. java -Djava.net.preferIPv4Stack = true -classpath " . " AVTransmit2의 javasound : // 8000 239.1.10.65 20480

그러나 와이어 샤크에서 찾고, 패킷은 여전히 ​​TTL = 1

내가 JMF2.1.1e

어떤 제안을 사용하고 방법이 문제를 해결해야?

답변

1

이 늦게 약 6 개월,하지만 같은 문제를 해결하기 위해 찾고있는 동안이 스레드를 발견, 여기 내가 찾은 무엇 : 나는 또한 내 SessionAddress 객체를 생성하지만, 사용할 때 TTL 값을 설정하려고

wireshark, 패킷은 여전히 ​​1의 ttl을 가졌습니다. 그러나 초기화와 대상에 대해 다른 주소를 사용하고 있었지만 동일한 주소를 사용하면 ttl 설정이 작동했습니다.

좋은

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

좋은

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

BAD

을 : 당신이 그런
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); 

등이 SessionAddress 객체를, 그래서 만약 그런 다음 다음과 같이 주소를 사용해야합니다
RTPManager rtpManager = RTPManager.newInstance(); 
rtpManager.initialize(localAddress); 
rtpManager.addTarget(multiAddress); 

EDIT : 초기화()에 전달 된 SessionAddress 만 ttl을 설정해야합니다.