Próbuję zaimplementować WebRTC na stronie internetowej. Chcę wykorzystać do tego TURN Server, aby mieć pewność że zadziała u każdego bez względu na NAT. TURN Server został skonfigurowany tak jak pokazano poniżej. W js także są podane dane do serwera TURN i STUN. Strona nie jest gotowa, ponieważ utknąłem na problemie że nie do końca wiem jak połączyć ze sobą użytkowników. Z tego co udało mi się wywnioskować serwer STUN/TURN przyznaje osobie nadającej, port UDP do komunikacji, który jest następnie przekazywany odbiorcą i na tym porcie nadaje. Jednak wyjadę mi się że jest problem na komunikacji nadawca serwer, ponieważ w localDescription nie widnieje żaden port ani ip serwera, a jest jedyni localhost. Przesyłając te dane do odbiorcy nie mógł by żadnych danych odebrać. Moim pytaniem jest: gdzie jest problem. Czy to coś z konfiguracją czy raczej z kodem.
#**VPS server config (/etc/turnserver.conf)**
cli-password=12345678
listening-port=3478
#tls-listening-port=443
listening-ip=<my-server-ip>
relay-ip=<my-server-ip>
external-ip=<my-server-ip>
realm=<my-server-address>
server-name=<my-server-address>
lt-cred-mech
#userdb=/etc/turnuserdb.conf
user=<user:pass>
# use real-valid certificate/privatekey files
#cert=/etc/ssl/certificate.pem
#pkey=/etc/ssl/private.key
no-stdout-log
<!DOCTYPE html>
<html lang="en-US">
<head>
<meta charset="utf-8" />
<title></title>
</head>
<body>
<p>
This example shows you the contents of the selected part of your display.
Click the Start Capture button to begin.
</p>
<p><button id="start">Start Capture</button> <button id="stop">Stop Capture</button></p>
<video style="width: 960px; height: 540px;" id="video" autoplay></video>
<video style="width: 960px; height: 540px;" id="remote-video" autoplay></video>
<br>
<strong>Log:</strong>
<br>
<pre id="log"></pre>
</body>
</html>
const Sender = new RTCPeerConnection({
iceServers: [
{
urls: "stun:<ip-address>:3478"
},
{
urls: "turn:<ip-address>:3478",
username: "<user>",
credential: "<pass>"
}
]
});
var displayMediaOptions = {
audio: false,
video: {
cursor: "always"
}
};
navigator.mediaDevices.getDisplayMedia(displayMediaOptions)
.then(stream => {
document.getElementById("video").srcObject = stream;
for (let track of stream.getTracks()) {
Sender.addTrack(track);
}
return Sender.createOffer();
})
.then(offer => {
Sender.setLocalDescription(new RTCSessionDescription(offer));
console.log(Sender.localDescription);
})
//.then(() => Reciver.setRemoteDescription(Sender.localDescription))
//.then(() => Reciver.createAnswer())
//.then(answer => Reciver.setLocalDescription(new RTCSessionDescription(answer)))
// .then(() => Sender.setRemoteDescription(Reciver.localDescription));
A tutaj poniżej to co jest w Sender.localDescription
sdp: "v=0
↵o=- 409204313020118480 2 IN IP4 127.0.0.1
↵s=-
↵t=0 0
↵a=group:BUNDLE 0
↵a=msid-semantic: WMS
↵m=video 9 UDP/TLS/RTP/SAVPF 96 97 98 99 100 101 102 122 127 121 125 107 108 109 124 120 123 119 114 115 116
↵c=IN IP4 0.0.0.0
↵a=rtcp:9 IN IP4 0.0.0.0
↵a=ice-ufrag:j2gk
↵a=ice-pwd:y+bSuFIV7IeKCoFDVbB4Lvw5
↵a=ice-options:trickle
↵a=fingerprint:sha-256
1E:44:A1:31:E5:80:B1:3C:14:56:EA:7A:5F:9C:5B:58:75:DA:3C:ED:D1:EB:77:DD:58:B8:C5:96:68:CC:AF:7E
↵a=setup:actpass
(...)