2017-12-05 6 views
1

Ich versuche mediasoup zu verwenden RTP weiterleiten Ströme mit room.createRtpStreamermediasoup - Miss Match zwischen PayloadTypes

mein Problem ist, dass die Nutzlast-Typ (für OPUS) I von producer.rtpParameters.codecs[i].payloadType erhalten, ist 111,
während die, die ich Holen Sie sich auf die tatsächlichen RTP-Pakete ist 100 (gesehen auf Wireshark)

Ich habe versucht, preferredPayloadType in meinem Server konfigurieren, aber es scheint keinen Unterschied zu machen.

Hinweis: wenn ich hart codieren 100 als Payload Type für den OPUS-Stream kann ich den Stream sehen/hören ffplay mit

Ich bin mit Chrome 55 (spätestens) und mediasoup 2.0.5 (spätestens)

jede Hilfe wird geschätzt.

Antwort

1

Sie sollten sich den SDP der Call Setup-Nachricht ansehen und prüfen, ob Sie 111 oder 100 für die OPUS-Payload erhalten. Von dort können Sie entscheiden, welcher Teil den Fehler hat (Chrome oder mediasoup). In der Anrufaufbau-Nachricht (Initiierung des Anrufs) überprüfen Sie die Payload des OPUS-Codes. Der angerufene Teilnehmer sollte mit der gleichen Nutzlastnummer antworten, wenn er OPUS akzeptiert und dann beide Teilnehmer die gleiche Nutzlastnummer in den RTP-Paketen verwenden sollten.

0

So fand ich, dass die Payload, die ich auf producer.rtpParameters.codecs[i].payloadType bekomme, die ursprüngliche Payload war und dass room.createRtpStreamer den Payload-Typ ändert.

die unten am Ende dabei das Problem durch den Client (Browser), so dass die PT von OPUS

// get the payload (type) from the room.rtpCapabilities.codecs.preferredPayloadType for the specific codec 
let payload = this.room.rtpCapabilities.codecs.find((c)=>{ 
    return c.name === producer.rtpParameters.codecs[i].name; 
}).preferredPayloadType; 
2

Die Producer hat den RTP-Parameter 111 (der von Chrome erzeugte Standardwert) entschieden zu lösen.

Aber einmal in mediasoup Server, die Consumers zu diesem Producer zugeordnet verwenden Sie die RTP-Parameter während der Raumerstellung gegeben. Wenn also die Codecs [1] ein preferredPayloadType Feld haben, wird dieses innerhalb der Consumers verwendet (ansonsten wird es zufällig vom Server gewählt).

Also, wenn Sie room.createRtpStreamer() nennen Ihnen ein Producer, und das erzeugte RtpStreamer [2] hat eine Consumer und PlainRtpTransport verbunden. Also sollten Sie die rtpStreamer.consumer.rtpParameters statt die producer 's lesen.

+0

Als ich nennen createRtpStreamer es ist zu spät in den Prozess, da es die RTP-Pakete zu senden beginnt. Was ich brauche, ist in der DESCRIBE-Phase, also möchte ich den createRtpStreamer nur aufrufen, wenn ich PLAY bekomme, es sei denn, es gibt eine Möglichkeit, einen Streamer im gestoppten Zustand zu erstellen und danach zu starten – asafrob