Hallo,
ich versuche gerade eine Software zu schreiben, die RTP Daten austauscht und mittels RTCP die Verbindungsqualität überwacht. Bisher funktioniert die Verbindungsaufbau, der RTP Datenaustausch und teilweise RTCP.
Jedoch beim RTCP werden nur SenderReports ausgetauscht und keine ReceiverReports. Die Übertragung übernimmt die folgende Methode, die ich anhand Beispielen implementiert habe. callParameter enthält IP, Port und Payloadtype, die mittels sip ausgehandelt wurden.
Hat jemand vielleicht eine Idee woran es liegen könnte, dass keine RR ausgetauscht werden ?
Gruß
Taner
ich versuche gerade eine Software zu schreiben, die RTP Daten austauscht und mittels RTCP die Verbindungsqualität überwacht. Bisher funktioniert die Verbindungsaufbau, der RTP Datenaustausch und teilweise RTCP.
Jedoch beim RTCP werden nur SenderReports ausgetauscht und keine ReceiverReports. Die Übertragung übernimmt die folgende Methode, die ich anhand Beispielen implementiert habe. callParameter enthält IP, Port und Payloadtype, die mittels sip ausgehandelt wurden.
Code:
public int transmitData(CallParameter callParameter) {
int value = 0;
try {
myProcessor = Manager.createProcessor(iDS);
myProcessor.configure();
while (myProcessor.getState() != Processor.Configured) {
try {
Thread.sleep(20);
} catch (InterruptedException ex) {
return -1;
}
}
myProcessor.setContentDescriptor(new ContentDescriptor(ContentDescriptor.RAW));
track = myProcessor.getTrackControls();
switch (callParameter.getPayloadType()) {
case 0:
af = new AudioFormat(AudioFormat.ULAW_RTP, 8000, 8, 1);
break;
case 3:
af = new AudioFormat(AudioFormat.GSM_RTP, 8000, 4, 1);
break;
case 8:
//TODO: aLaw
break;
}
AudioFormat f = (AudioFormat) track[0].getFormat();
if (!f.equals(af)) {
track[0].setFormat(af);
}
myProcessor.realize();
while (myProcessor.getState() != Processor.Realized) {
try {
Thread.sleep(20);
} catch (InterruptedException ex) {
}
}
oDs = myProcessor.getDataOutput();
// com.sun.media.rtp.RTPSessionMgr
myRTPSessionMgr = new RTPSessionMgr();
SessionAddress senderAddr = new SessionAddress();
myRTPSessionMgr.initSession(senderAddr, null, 0.5, 0.25);
myRTPSessionMgr.addSendStreamListener(this);
myRTPSessionMgr.addRemoteListener(this);
myRTPSessionMgr.addReceiveStreamListener(this);
myRTPSessionMgr.addSessionListener(this);
InetAddress destAddr = InetAddress.getByName(callParameter.getRemoteIP());
InetAddress srcAddr = InetAddress.getByName(callParameter.getLocalIP());
SessionAddress localAddr = new SessionAddress(srcAddr, callParameter.getLocalRTPPort(), srcAddr, callParameter.getLocalRTPPort() + 1);
SessionAddress remoteAddr = new SessionAddress(destAddr, callParameter.getRemotePort(), destAddr, callParameter.getRemotePort() + 1);
value = myRTPSessionMgr.startSession(localAddr, localAddr, remoteAddr, null);
ss = myRTPSessionMgr.createSendStream(oDs, 0);
ss.start();
myProcessor.start();
}...
}
Hat jemand vielleicht eine Idee woran es liegen könnte, dass keine RR ausgetauscht werden ?
Gruß
Taner