GithubHelp home page GithubHelp logo

vasanthv / talk Goto Github PK

View Code? Open in Web Editor NEW
3.9K 3.9K 585.0 2.82 MB

Group video call for the web. No signups. No downloads.

Home Page: https://vasanthv.github.io/talk

License: MIT License

JavaScript 48.29% HTML 28.87% CSS 22.84%

talk's Introduction

Hi there 👋🏽

My name is Vasanth, and I make web apps. I enjoy working where design meets code. I have an immense love for minimalistic designs and web technologies.

I have worked on multiple side projects from time to time, some of them got featured as top products in Hacker New & Product Hunt. Find some of some of my works pinned below. All my side projects are 100% free to use for everyone. No ads or sponsored contents.

If you are using my projects, consider supporting me here.

talk's People

Contributors

dependabot[bot] avatar harsh778 avatar jaideep25 avatar justdevnull avatar malisetti avatar miroslavpejic85 avatar mopamo avatar vasanthv avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

talk's Issues

Localhost access only

hello,

Talk is great !! I like it and i install it on a VM on my network. But I have a question?
I have access with "Locahost" with a ssh Tunnel .
But how can I use it with en IP of my local network ?
I tried with Haproxy with Frontend Ip of local network and Backend "localhost" , I tried with an IP of my local network....But nothing, I just have static page of talk nevertheless I can't use it (camera, microphone...)

Thanks

[SUGGESTION]

[SUGGESTION]

Make the instruction how to deploy this on web

Self hosting but cannot work and does not show a link

I can access this page in my local network and also from outside (my server is hooked at a public IP address).
However, in both case, I cannot see video and does not see a link as how it is like on the maintainer's website.

I browsed through the issues and did not find a similar one.
Could you please shed some light? Thanks!

Screenshot 2022-10-26 at 23 36 51

App only works between devices on the same local network

After testing both the provided talk server and one I had hosted while testing the docker-compose solution I found out that it doesn't show the other person webcam/voice if we are in separate networks.

After testing with two laptops from the same local network it seems to work.

Tested with Brave, Edge and Firefox. Also with a phone.

Maybe an issue with STUN/TUN?

Using your own stun/turn server

Hi there. Great work on this app, very elegant.

For privacy/security purposes I would like to use my own stun/turn server. What do I need to do to implement that?

It looks like there's a large list of servers in the ICE_SERVERS array at the top of script.js. Some of these contain a single url, some contain multiple urls, and some contain username/credentials data.

Assuming I've deployed my own stun/turn server which requires "username" as the username and "password" as the password, what would my ICE_SERVERS array need to look like?

Perhaps something like:

const ICE_SERVERS = [
  {
    urls: "stun:video.MYDOMAIN.com:3478",
    username: "username", 
    credential: "password",
  },
];

?

Unable to communicate between (ANY) networks?

Hello. I recently setup talk on a personal server, running it behind a reverse-proxy (NGINX) at my own domain name.

I have attempted to connect to the instance from the local network, and from the internet, but while the other user does show up on the instance, no audio or video communication happens.

The server I'm hosting this on is under no NAT or firewall, so no ports are being blocked.

Is there something I've missed?

Can't see video from devices outside my local network

Hi there,
Talk looks absolutely promising to me.
However, I'm facing issues setting it up.
I'm running a server on my local network that runs talk inside a docker container.
Talk itself is setup via reverse proxy to run at meet.mydomain.com.
The reverse proxy is setup in apache2:

# ...
ProxyPass / http://talk:3000/
ProxyPassReverse / http://talk:3000/
# ...

Here's my docker-compose.yml file:

version: "2.0"

services:
  talk:
    container_name: talk
    restart: always
    build: .
    ports:
      - "3110:3000"
    networks:
      - mynetwork

networks:
  mynetwork:
    external: true

I can access meet.mydomain.com perfectly fine both through my local network and through foreign networks.

However, I can't see any video from users connecting through a different network (i.e. mobile networks), Talk keeps showing up a white screen. Same the other way around: when connecting via a foreign network, I can see my own video but not the local network users'.

Here's the log:

talk    | 
talk    | > [email protected] start
talk    | > node server.js
talk    | 
talk    | Listening on port 3000
talk    | [9pb6NiRRZBQF7tb0AAAC] connection accepted
talk    | [PDMR5plp37T3XNmeAAAD] connection accepted
talk    | [PDMR5plp37T3XNmeAAAD] join  { channel: 'sr0kde', userdata: {} }
talk    | [MI2VrYyfnOPRsnEOAAAG] connection accepted
talk    | [XVDVRNv66i1bz59MAAAH] connection accepted
talk    | [XVDVRNv66i1bz59MAAAH] join  { channel: 'sr0kde', userdata: {} }
talk    | [XVDVRNv66i1bz59MAAAH] relay SessionDescription to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdp: 'v=0\r\n' +
talk    |     'o=- 1363208844026884119 2 IN IP4 127.0.0.1\r\n' +
talk    |     's=-\r\n' +
talk    |     't=0 0\r\n' +
talk    |     'a=group:BUNDLE 0 1 2\r\n' +
talk    |     'a=extmap-allow-mixed\r\n' +
talk    |     'a=msid-semantic: WMS vhKRZ7QQhBqyg5zMqURPsCQHuDXKa1dGZr5i\r\n' +
talk    |     'm=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\n' +
talk    |     'c=IN IP4 0.0.0.0\r\n' +
talk    |     'a=rtcp:9 IN IP4 0.0.0.0\r\n' +
talk    |     'a=ice-ufrag:VZrD\r\n' +
talk    |     'a=ice-pwd:rRHLS1+kvMvLPFmqTUICzHyf\r\n' +
talk    |     'a=ice-options:trickle\r\n' +
talk    |     'a=fingerprint:sha-256 38:98:E1:1C:2C:BF:80:81:F4:65:B6:94:27:F9:96:FE:28:66:4A:C6:63:01:DC:F9:D4:22:F3:AB:8A:00:E3:50\r\n' +
talk    |     'a=setup:actpass\r\n' +
talk    |     'a=mid:0\r\n' +
talk    |     'a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n' +
talk    |     'a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n' +
talk    |     'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
talk    |     'a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\n' +
talk    |     'a=sendrecv\r\n' +
talk    |     'a=msid:vhKRZ7QQhBqyg5zMqURPsCQHuDXKa1dGZr5i 4147ff4e-1a87-43f7-93b0-43164ef3a6f4\r\n' +
talk    |     'a=rtcp-mux\r\n' +
talk    |     'a=rtpmap:111 opus/48000/2\r\n' +
talk    |     'a=rtcp-fb:111 transport-cc\r\n' +
talk    |     'a=fmtp:111 minptime=10;useinbandfec=1\r\n' +
talk    |     'a=rtpmap:63 red/48000/2\r\n' +
talk    |     'a=fmtp:63 111/111\r\n' +
talk    |     'a=rtpmap:103 ISAC/16000\r\n' +
talk    |     'a=rtpmap:104 ISAC/32000\r\n' +
talk    |     'a=rtpmap:9 G722/8000\r\n' +
talk    |     'a=rtpmap:0 PCMU/8000\r\n' +
talk    |     'a=rtpmap:8 PCMA/8000\r\n' +
talk    |     'a=rtpmap:106 CN/32000\r\n' +
talk    |     'a=rtpmap:105 CN/16000\r\n' +
talk    |     'a=rtpmap:13 CN/8000\r\n' +
talk    |     'a=rtpmap:110 telephone-event/48000\r\n' +
talk    |     'a=rtpmap:112 telephone-event/32000\r\n' +
talk    |     'a=rtpmap:113 telephone-event/16000\r\n' +
talk    |     'a=rtpmap:126 telephone-event/8000\r\n' +
talk    |     'a=ssrc:3757238080 cname:YDeOexBl0yN2H1P0\r\n' +
talk    |     'a=ssrc:3757238080 msid:vhKRZ7QQhBqyg5zMqURPsCQHuDXKa1dGZr5i 4147ff4e-1a87-43f7-93b0-43164ef3a6f4\r\n' +
talk    |     'm=video 9 UDP/TLS/RTP/SAVPF 96 97 102 123 127 122 125 107 108 109 124 121 39 40 45 46 98 99 100 101 120 119 114\r\n' +
talk    |     'c=IN IP4 0.0.0.0\r\n' +
talk    |     'a=rtcp:9 IN IP4 0.0.0.0\r\n' +
talk    |     'a=ice-ufrag:VZrD\r\n' +
talk    |     'a=ice-pwd:rRHLS1+kvMvLPFmqTUICzHyf\r\n' +
talk    |     'a=ice-options:trickle\r\n' +
talk    |     'a=fingerprint:sha-256 38:98:E1:1C:2C:BF:80:81:F4:65:B6:94:27:F9:96:FE:28:66:4A:C6:63:01:DC:F9:D4:22:F3:AB:8A:00:E3:50\r\n' +
talk    |     'a=setup:actpass\r\n' +
talk    |     'a=mid:1\r\n' +
talk    |     'a=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\n' +
talk    |     'a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n' +
talk    |     'a=extmap:13 urn:3gpp:video-orientation\r\n' +
talk    |     'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
talk    |     'a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\n' +
talk    |     'a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\n' +
talk    |     'a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\n' +
talk    |     'a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\n' +
talk    |     'a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\n' +
talk    |     'a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\n' +
talk    |     'a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\n' +
talk    |     'a=sendrecv\r\n' +
talk    |     'a=msid:vhKRZ7QQhBqyg5zMqURPsCQHuDXKa1dGZr5i 502dade1-1d14-4013-816f-1dde64e2425e\r\n' +
talk    |     'a=rtcp-mux\r\n' +
talk    |     'a=rtcp-rsize\r\n' +
talk    |     'a=rtpmap:96 VP8/90000\r\n' +
talk    |     'a=rtcp-fb:96 goog-remb\r\n' +
talk    |     'a=rtcp-fb:96 transport-cc\r\n' +
talk    |     'a=rtcp-fb:96 ccm fir\r\n' +
talk    |     'a=rtcp-fb:96 nack\r\n' +
talk    |     'a=rtcp-fb:96 nack pli\r\n' +
talk    |     'a=rtpmap:97 rtx/90000\r\n' +
talk    |     'a=fmtp:97 apt=96\r\n' +
talk    |     'a=rtpmap:102 H264/90000\r\n' +
talk    |     'a=rtcp-fb:102 goog-remb\r\n' +
talk    |     'a=rtcp-fb:102 transport-cc\r\n' +
talk    |     'a=rtcp-fb:102 ccm fir\r\n' +
talk    |     'a=rtcp-fb:102 nack\r\n' +
talk    |     'a=rtcp-fb:102 nack pli\r\n' +
talk    |     'a=fmtp:102 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42001f\r\n' +
talk    |     'a=rtpmap:123 rtx/90000\r\n' +
talk    |     'a=fmtp:123 apt=102\r\n' +
talk    |     'a=rtpmap:127 H264/90000\r\n' +
talk    |     'a=rtcp-fb:127 goog-remb\r\n' +
talk    |     'a=rtcp-fb:127 transport-cc\r\n' +
talk    |     'a=rtcp-fb:127 ccm fir\r\n' +
talk    |     'a=rtcp-fb:127 nack\r\n' +
talk    |     'a=rtcp-fb:127 nack pli\r\n' +
talk    |     'a=fmtp:127 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42001f\r\n' +
talk    |     'a=rtpmap:122 rtx/90000\r\n' +
talk    |     'a=fmtp:122 apt=127\r\n' +
talk    |     'a=rtpmap:125 H264/90000\r\n' +
talk    |     'a=rtcp-fb:125 goog-remb\r\n' +
talk    |     'a=rtcp-fb:125 transport-cc\r\n' +
talk    |     'a=rtcp-fb:125 ccm fir\r\n' +
talk    |     'a=rtcp-fb:125 nack\r\n' +
talk    |     'a=rtcp-fb:125 nack pli\r\n' +
talk    |     'a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\n' +
talk    |     'a=rtpmap:107 rtx/90000\r\n' +
talk    |     'a=fmtp:107 apt=125\r\n' +
talk    |     'a=rtpmap:108 H264/90000\r\n' +
talk    |     'a=rtcp-fb:108 goog-remb\r\n' +
talk    |     'a=rtcp-fb:108 transport-cc\r\n' +
talk    |     'a=rtcp-fb:108 ccm fir\r\n' +
talk    |     'a=rtcp-fb:108 nack\r\n' +
talk    |     'a=rtcp-fb:108 nack pli\r\n' +
talk    |     'a=fmtp:108 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=42e01f\r\n' +
talk    |     'a=rtpmap:109 rtx/90000\r\n' +
talk    |     'a=fmtp:109 apt=108\r\n' +
talk    |     'a=rtpmap:124 H264/90000\r\n' +
talk    |     'a=rtcp-fb:124 goog-remb\r\n' +
talk    |     'a=rtcp-fb:124 transport-cc\r\n' +
talk    |     'a=rtcp-fb:124 ccm fir\r\n' +
talk    |     'a=rtcp-fb:124 nack\r\n' +
talk    |     'a=rtcp-fb:124 nack pli\r\n' +
talk    |     'a=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f\r\n' +
talk    |     'a=rtpmap:121 rtx/90000\r\n' +
talk    |     'a=fmtp:121 apt=124\r\n' +
talk    |     'a=rtpmap:39 H264/90000\r\n' +
talk    |     'a=rtcp-fb:39 goog-remb\r\n' +
talk    |     'a=rtcp-fb:39 transport-cc\r\n' +
talk    |     'a=rtcp-fb:39 ccm fir\r\n' +
talk    |     'a=rtcp-fb:39 nack\r\n' +
talk    |     'a=rtcp-fb:39 nack pli\r\n' +
talk    |     'a=fmtp:39 level-asymmetry-allowed=1;packetization-mode=0;profile-level-id=4d001f\r\n' +
talk    |     'a=rtpmap:40 rtx/90000\r\n' +
talk    |     'a=fmtp:40 apt=39\r\n' +
talk    |     'a=rtpmap:45 AV1/90000\r\n' +
talk    |     'a=rtcp-fb:45 goog-remb\r\n' +
talk    |     'a=rtcp-fb:45 transport-cc\r\n' +
talk    |     'a=rtcp-fb:45 ccm fir\r\n' +
talk    |     'a=rtcp-fb:45 nack\r\n' +
talk    |     'a=rtcp-fb:45 nack pli\r\n' +
talk    |     'a=rtpmap:46 rtx/90000\r\n' +
talk    |     'a=fmtp:46 apt=45\r\n' +
talk    |     'a=rtpmap:98 VP9/90000\r\n' +
talk    |     'a=rtcp-fb:98 goog-remb\r\n' +
talk    |     'a=rtcp-fb:98 transport-cc\r\n' +
talk    |     'a=rtcp-fb:98 ccm fir\r\n' +
talk    |     'a=rtcp-fb:98 nack\r\n' +
talk    |     'a=rtcp-fb:98 nack pli\r\n' +
talk    |     'a=fmtp:98 profile-id=0\r\n' +
talk    |     'a=rtpmap:99 rtx/90000\r\n' +
talk    |     'a=fmtp:99 apt=98\r\n' +
talk    |     'a=rtpmap:100 VP9/90000\r\n' +
talk    |     'a=rtcp-fb:100 goog-remb\r\n' +
talk    |     'a=rtcp-fb:100 transport-cc\r\n' +
talk    |     'a=rtcp-fb:100 ccm fir\r\n' +
talk    |     'a=rtcp-fb:100 nack\r\n' +
talk    |     'a=rtcp-fb:100 nack pli\r\n' +
talk    |     'a=fmtp:100 profile-id=2\r\n' +
talk    |     'a=rtpmap:101 rtx/90000\r\n' +
talk    |     'a=fmtp:101 apt=100\r\n' +
talk    |     'a=rtpmap:120 red/90000\r\n' +
talk    |     'a=rtpmap:119 rtx/90000\r\n' +
talk    |     'a=fmtp:119 apt=120\r\n' +
talk    |     'a=rtpmap:114 ulpfec/90000\r\n' +
talk    |     'a=ssrc-group:FID 1732459890 3056472878\r\n' +
talk    |     'a=ssrc:1732459890 cname:YDeOexBl0yN2H1P0\r\n' +
talk    |     'a=ssrc:1732459890 msid:vhKRZ7QQhBqyg5zMqURPsCQHuDXKa1dGZr5i 502dade1-1d14-4013-816f-1dde64e2425e\r\n' +
talk    |     'a=ssrc:3056472878 cname:YDeOexBl0yN2H1P0\r\n' +
talk    |     'a=ssrc:3056472878 msid:vhKRZ7QQhBqyg5zMqURPsCQHuDXKa1dGZr5i 502dade1-1d14-4013-816f-1dde64e2425e\r\n' +
talk    |     'm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\n' +
talk    |     'c=IN IP4 0.0.0.0\r\n' +
talk    |     'a=ice-ufrag:VZrD\r\n' +
talk    |     'a=ice-pwd:rRHLS1+kvMvLPFmqTUICzHyf\r\n' +
talk    |     'a=ice-options:trickle\r\n' +
talk    |     'a=fingerprint:sha-256 38:98:E1:1C:2C:BF:80:81:F4:65:B6:94:27:F9:96:FE:28:66:4A:C6:63:01:DC:F9:D4:22:F3:AB:8A:00:E3:50\r\n' +
talk    |     'a=setup:actpass\r\n' +
talk    |     'a=mid:2\r\n' +
talk    |     'a=sctp-port:5000\r\n' +
talk    |     'a=max-message-size:262144\r\n',
talk    |   type: 'offer'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 0,
talk    |   candidate: 'candidate:2624540037 1 udp 2122262783 s0m3:ip:v6:4ddr:3sss 52918 typ host generation 0 ufrag VZrD network-id 2'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 0,
talk    |   candidate: 'candidate:220119444 1 udp 2122194687 192.168.1.141 44365 typ host generation 0 ufrag VZrD network-id 1'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 1,
talk    |   candidate: 'candidate:2624540037 1 udp 2122262783 s0m3:ip:v6:4ddr:3sss 35338 typ host generation 0 ufrag VZrD network-id 2'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 1,
talk    |   candidate: 'candidate:220119444 1 udp 2122194687 192.168.1.141 36590 typ host generation 0 ufrag VZrD network-id 1'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 2,
talk    |   candidate: 'candidate:2624540037 1 udp 2122262783 s0m3:ip:v6:4ddr:3sss 54928 typ host generation 0 ufrag VZrD network-id 2'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 2,
talk    |   candidate: 'candidate:220119444 1 udp 2122194687 192.168.1.141 36340 typ host generation 0 ufrag VZrD network-id 1'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 1,
talk    |   candidate: 'candidate:2354497312 1 udp 1685987071 12.34.5.67 36590 typ srflx raddr 192.168.1.141 rport 36590 generation 0 ufrag VZrD network-id 1'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 0,
talk    |   candidate: 'candidate:2354497312 1 udp 1685987071 12.34.5.67 44365 typ srflx raddr 192.168.1.141 rport 44365 generation 0 ufrag VZrD network-id 1'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 2,
talk    |   candidate: 'candidate:2354497312 1 udp 1685987071 12.34.5.67 36340 typ srflx raddr 192.168.1.141 rport 36340 generation 0 ufrag VZrD network-id 1'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 0,
talk    |   candidate: 'candidate:3538727285 1 tcp 1518283007 s0m3:ip:v6:4ddr:3sss 9 typ host tcptype active generation 0 ufrag VZrD network-id 2'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 0,
talk    |   candidate: 'candidate:1134378340 1 tcp 1518214911 192.168.1.141 9 typ host tcptype active generation 0 ufrag VZrD network-id 1'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 1,
talk    |   candidate: 'candidate:3538727285 1 tcp 1518283007 s0m3:ip:v6:4ddr:3sss 9 typ host tcptype active generation 0 ufrag VZrD network-id 2'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 1,
talk    |   candidate: 'candidate:1134378340 1 tcp 1518214911 192.168.1.141 9 typ host tcptype active generation 0 ufrag VZrD network-id 1'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 2,
talk    |   candidate: 'candidate:3538727285 1 tcp 1518283007 s0m3:ip:v6:4ddr:3sss 9 typ host tcptype active generation 0 ufrag VZrD network-id 2'
talk    | }
talk    | [XVDVRNv66i1bz59MAAAH] relay ICE-candidate to [PDMR5plp37T3XNmeAAAD]  {
talk    |   sdpMLineIndex: 2,
talk    |   candidate: 'candidate:1134378340 1 tcp 1518214911 192.168.1.141 9 typ host tcptype active generation 0 ufrag VZrD network-id 1'
talk    | }
talk    | [PDMR5plp37T3XNmeAAAD] relay SessionDescription to [XVDVRNv66i1bz59MAAAH]  {
talk    |   sdp: 'v=0\r\n' +
talk    |     'o=- 6761066972811642662 2 IN IP4 127.0.0.1\r\n' +
talk    |     's=-\r\n' +
talk    |     't=0 0\r\n' +
talk    |     'a=group:BUNDLE 0 1 2\r\n' +
talk    |     'a=extmap-allow-mixed\r\n' +
talk    |     'a=msid-semantic: WMS Ezp82rfnGrKNOcDTF37V4gESQpFyoYv1hvfO\r\n' +
talk    |     'm=audio 9 UDP/TLS/RTP/SAVPF 111 63 103 104 9 0 8 106 105 13 110 112 113 126\r\n' +
talk    |     'c=IN IP4 0.0.0.0\r\n' +
talk    |     'a=rtcp:9 IN IP4 0.0.0.0\r\n' +
talk    |     'a=ice-ufrag:yzKP\r\n' +
talk    |     'a=ice-pwd:3dyBgBalqHYO+2zQvT8Mmp4C\r\n' +
talk    |     'a=ice-options:trickle\r\n' +
talk    |     'a=fingerprint:sha-256 4D:FF:F4:FD:51:64:54:90:6B:7E:67:97:FC:8C:A9:8E:82:C2:6C:2D:75:46:B9:FF:6E:EB:FE:00:34:48:80:B8\r\n' +
talk    |     'a=setup:active\r\n' +
talk    |     'a=mid:0\r\n' +
talk    |     'a=extmap:1 urn:ietf:params:rtp-hdrext:ssrc-audio-level\r\n' +
talk    |     'a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n' +
talk    |     'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
talk    |     'a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\n' +
talk    |     'a=sendrecv\r\n' +
talk    |     'a=msid:Ezp82rfnGrKNOcDTF37V4gESQpFyoYv1hvfO aa8ec5bc-547b-4f04-aa82-9d78c8beeeaf\r\n' +
talk    |     'a=rtcp-mux\r\n' +
talk    |     'a=rtpmap:111 opus/48000/2\r\n' +
talk    |     'a=rtcp-fb:111 transport-cc\r\n' +
talk    |     'a=fmtp:111 minptime=10;useinbandfec=1\r\n' +
talk    |     'a=rtpmap:63 red/48000/2\r\n' +
talk    |     'a=fmtp:63 111/111\r\n' +
talk    |     'a=rtpmap:103 ISAC/16000\r\n' +
talk    |     'a=rtpmap:104 ISAC/32000\r\n' +
talk    |     'a=rtpmap:9 G722/8000\r\n' +
talk    |     'a=rtpmap:0 PCMU/8000\r\n' +
talk    |     'a=rtpmap:8 PCMA/8000\r\n' +
talk    |     'a=rtpmap:106 CN/32000\r\n' +
talk    |     'a=rtpmap:105 CN/16000\r\n' +
talk    |     'a=rtpmap:13 CN/8000\r\n' +
talk    |     'a=rtpmap:110 telephone-event/48000\r\n' +
talk    |     'a=rtpmap:112 telephone-event/32000\r\n' +
talk    |     'a=rtpmap:113 telephone-event/16000\r\n' +
talk    |     'a=rtpmap:126 telephone-event/8000\r\n' +
talk    |     'a=ssrc:3952065710 cname:YHWHGCZzcnTVioen\r\n' +
talk    |     'm=video 9 UDP/TLS/RTP/SAVPF 96 97 125 107 124 121 98 99 120 119 114\r\n' +
talk    |     'c=IN IP4 0.0.0.0\r\n' +
talk    |     'a=rtcp:9 IN IP4 0.0.0.0\r\n' +
talk    |     'a=ice-ufrag:yzKP\r\n' +
talk    |     'a=ice-pwd:3dyBgBalqHYO+2zQvT8Mmp4C\r\n' +
talk    |     'a=ice-options:trickle\r\n' +
talk    |     'a=fingerprint:sha-256 4D:FF:F4:FD:51:64:54:90:6B:7E:67:97:FC:8C:A9:8E:82:C2:6C:2D:75:46:B9:FF:6E:EB:FE:00:34:48:80:B8\r\n' +
talk    |     'a=setup:active\r\n' +
talk    |     'a=mid:1\r\n' +
talk    |     'a=extmap:14 urn:ietf:params:rtp-hdrext:toffset\r\n' +
talk    |     'a=extmap:2 http://www.webrtc.org/experiments/rtp-hdrext/abs-send-time\r\n' +
talk    |     'a=extmap:13 urn:3gpp:video-orientation\r\n' +
talk    |     'a=extmap:3 http://www.ietf.org/id/draft-holmer-rmcat-transport-wide-cc-extensions-01\r\n' +
talk    |     'a=extmap:5 http://www.webrtc.org/experiments/rtp-hdrext/playout-delay\r\n' +
talk    |     'a=extmap:6 http://www.webrtc.org/experiments/rtp-hdrext/video-content-type\r\n' +
talk    |     'a=extmap:7 http://www.webrtc.org/experiments/rtp-hdrext/video-timing\r\n' +
talk    |     'a=extmap:8 http://www.webrtc.org/experiments/rtp-hdrext/color-space\r\n' +
talk    |     'a=extmap:4 urn:ietf:params:rtp-hdrext:sdes:mid\r\n' +
talk    |     'a=extmap:10 urn:ietf:params:rtp-hdrext:sdes:rtp-stream-id\r\n' +
talk    |     'a=extmap:11 urn:ietf:params:rtp-hdrext:sdes:repaired-rtp-stream-id\r\n' +
talk    |     'a=sendrecv\r\n' +
talk    |     'a=msid:Ezp82rfnGrKNOcDTF37V4gESQpFyoYv1hvfO 30d66fc6-4af7-4368-ad94-169d5d3f090c\r\n' +
talk    |     'a=rtcp-mux\r\n' +
talk    |     'a=rtcp-rsize\r\n' +
talk    |     'a=rtpmap:96 VP8/90000\r\n' +
talk    |     'a=rtcp-fb:96 goog-remb\r\n' +
talk    |     'a=rtcp-fb:96 transport-cc\r\n' +
talk    |     'a=rtcp-fb:96 ccm fir\r\n' +
talk    |     'a=rtcp-fb:96 nack\r\n' +
talk    |     'a=rtcp-fb:96 nack pli\r\n' +
talk    |     'a=rtpmap:97 rtx/90000\r\n' +
talk    |     'a=fmtp:97 apt=96\r\n' +
talk    |     'a=rtpmap:125 H264/90000\r\n' +
talk    |     'a=rtcp-fb:125 goog-remb\r\n' +
talk    |     'a=rtcp-fb:125 transport-cc\r\n' +
talk    |     'a=rtcp-fb:125 ccm fir\r\n' +
talk    |     'a=rtcp-fb:125 nack\r\n' +
talk    |     'a=rtcp-fb:125 nack pli\r\n' +
talk    |     'a=fmtp:125 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=42e01f\r\n' +
talk    |     'a=rtpmap:107 rtx/90000\r\n' +
talk    |     'a=fmtp:107 apt=125\r\n' +
talk    |     'a=rtpmap:124 H264/90000\r\n' +
talk    |     'a=rtcp-fb:124 goog-remb\r\n' +
talk    |     'a=rtcp-fb:124 transport-cc\r\n' +
talk    |     'a=rtcp-fb:124 ccm fir\r\n' +
talk    |     'a=rtcp-fb:124 nack\r\n' +
talk    |     'a=rtcp-fb:124 nack pli\r\n' +
talk    |     'a=fmtp:124 level-asymmetry-allowed=1;packetization-mode=1;profile-level-id=4d001f\r\n' +
talk    |     'a=rtpmap:121 rtx/90000\r\n' +
talk    |     'a=fmtp:121 apt=124\r\n' +
talk    |     'a=rtpmap:98 VP9/90000\r\n' +
talk    |     'a=rtcp-fb:98 goog-remb\r\n' +
talk    |     'a=rtcp-fb:98 transport-cc\r\n' +
talk    |     'a=rtcp-fb:98 ccm fir\r\n' +
talk    |     'a=rtcp-fb:98 nack\r\n' +
talk    |     'a=rtcp-fb:98 nack pli\r\n' +
talk    |     'a=fmtp:98 profile-id=0\r\n' +
talk    |     'a=rtpmap:99 rtx/90000\r\n' +
talk    |     'a=fmtp:99 apt=98\r\n' +
talk    |     'a=rtpmap:120 red/90000\r\n' +
talk    |     'a=rtpmap:119 rtx/90000\r\n' +
talk    |     'a=fmtp:119 apt=120\r\n' +
talk    |     'a=rtpmap:114 ulpfec/90000\r\n' +
talk    |     'a=ssrc-group:FID 2387096027 4186039440\r\n' +
talk    |     'a=ssrc:2387096027 cname:YHWHGCZzcnTVioen\r\n' +
talk    |     'a=ssrc:4186039440 cname:YHWHGCZzcnTVioen\r\n' +
talk    |     'm=application 9 UDP/DTLS/SCTP webrtc-datachannel\r\n' +
talk    |     'c=IN IP4 0.0.0.0\r\n' +
talk    |     'a=ice-ufrag:yzKP\r\n' +
talk    |     'a=ice-pwd:3dyBgBalqHYO+2zQvT8Mmp4C\r\n' +
talk    |     'a=ice-options:trickle\r\n' +
talk    |     'a=fingerprint:sha-256 4D:FF:F4:FD:51:64:54:90:6B:7E:67:97:FC:8C:A9:8E:82:C2:6C:2D:75:46:B9:FF:6E:EB:FE:00:34:48:80:B8\r\n' +
talk    |     'a=setup:active\r\n' +
talk    |     'a=mid:2\r\n' +
talk    |     'a=sctp-port:5000\r\n' +
talk    |     'a=max-message-size:262144\r\n',
talk    |   type: 'answer'
talk    | }
talk    | [PDMR5plp37T3XNmeAAAD] relay ICE-candidate to [XVDVRNv66i1bz59MAAAH]  {
talk    |   sdpMLineIndex: 0,
talk    |   candidate: 'candidate:1061354322 1 udp 2122260223 123.123.123.123 40723 typ host generation 0 ufrag yzKP network-id 1 network-cost 10'
talk    | }
talk    | [PDMR5plp37T3XNmeAAAD] relay ICE-candidate to [XVDVRNv66i1bz59MAAAH]  {
talk    |   sdpMLineIndex: 0,
talk    |   candidate: 'candidate:1908475810 1 tcp 1518280447 123.123.123.123 9 typ host tcptype active generation 0 ufrag yzKP network-id 1 network-cost 10'
talk    | }
talk    | [PDMR5plp37T3XNmeAAAD] relay ICE-candidate to [XVDVRNv66i1bz59MAAAH]  {
talk    |   sdpMLineIndex: 0,
talk    |   candidate: 'candidate:3188391398 1 udp 1686052607 123.123.123.123 7570 typ srflx raddr 123.123.123.123 rport 40723 generation 0 ufrag yzKP network-id 1 network-cost 10'
talk    | }
talk    | [PDMR5plp37T3XNmeAAAD] relay ICE-candidate to [XVDVRNv66i1bz59MAAAH]  {
talk    |   sdpMLineIndex: 0,
talk    |   candidate: 'candidate:3188391398 1 udp 1686052607 123.123.123.123 2622 typ srflx raddr 123.123.123.123 rport 40723 generation 0 ufrag yzKP network-id 1 network-cost 10'
talk    | }

I suppose for this I would have to setup a STUN/TURN server.
I'm running an ejabberd server on the same machine to communicate via XMPP. For that, I had to setup STUN/TURN as well. For XMPP communication, everything works just fine. Here's my domain configuration for STUN/TURN:

_Service._: stun
Procotol: udp
Priority: 5
Weight: 0
Port: 3478
Target: mydomain.com

_Service._: turn
Procotol: udp
Priority: 5
Weight: 0
Port: 3478
Target: mydomain.com

Now, here's my script.js configuration for ICE_SERVER:

const ICE_SERVERS = [
  { urls: "stun:mydomain.com:3478?transport=udp" },
  { urls: "turn:mydomain.com:3478?transport=udp" },
];

Here's the ejabberd.yml configuration for stun/turn:

 -
    port: 3478
    ip: 0.0.0.0
    transport: udp
    module: ejabberd_stun
    use_turn: true
    auth_realm: mydomain.com
    turn_min_port: 49152
    turn_max_port: 65535
  - 
    port: 5349
    transport: tcp
    ip: 0.0.0.0
    module: ejabberd_stun
    certfile: "/home/ejabberd/conf/server.pem"
    tls: true
    auth_realm: mydomain.com
    use_turn: true

# ...

  mod_stun_disco:
    credentials_lifetime: 12h
    services:
      - 
        host: 0.0.0.0
        port: 3478
        type: stun
        transport: udp
        restricted: false
      - 
        host: 0.0.0.0
        port: 3478
        type: turn
        transport: udp
        restricted: true
      - 
        host: mydomain.com
        port: 5349
        type: stuns
        transport: tcp
        restricted: false
      - 
        host: mydomain.com
        port: 5349
        type: turns
        transport: tcp
        restricted: true

Any help is greatly appreciated.

EDIT:
Chrome developer tools show me the following error when accessing the site:

WebSocket connection to wss://meet.mydomain.com/socket.io/?EIO=4&transport=websocket&sid=_a0QbGj2jn4-0ZuVAAAI failed: 
  doOpen @ websocket.js:54

EDIT 2:
I tried using a different STUN/TURN server that Trickle ICE said it works:

const ICE_SERVERS = [
    { urls: "stun:stun.stunprotocol.org:3478" },
    { urls: "turn:openrelay.metered.ca:443", username: "openrelayproject", credential: "openrelayproject" },
]

However, unfortunately with the same result.

Add features

Hello,

I like this repository.
Please add end meeting call button feature.

Add Dockerfile / docker-compose

A dockerfile + docker-compose would ease the deployment, ideally with an automated build either on docker hub or github container registry

can't see other device's video

hello
i was testing the app on two of my devices on https://usetalk.io but i cant see the video neither can i hear the audio. i can see the other device join but no video or audio can be heard. pls help me out

IPhone Full Screen Issue

Hi
i am so grateful for this amazing web app
i found an issue on iphone Safari browser,
the fullscreen button not works
you can try and test it online by using browserstack.com
Thank you

back camera preview mirrored

When you use the back camera on your phone, you see a mirrored Image, while everybody else in the call sees the unmirrored Version.
IMG_20210501_163141.jpg

video can't be shared between chrome sessions

cool project but I'm having problems getting it to work on Chrome (on MacOS). (though it works on Safari browser)

after a second session joined. A new video pane appears but it's empty. I tested both on local setup and also on talk.vasanthv.com both have the same problem.

image

Multiple cameras

I have multiple cameras. The app doesn't have a "camera chooser" and it appears to default to the first video device on the system. The first video device on my system isn't really a video device and the app doesn't appear to like it.

In 'talk':
Screenshot from 2020-09-05 20-03-32

Showing that it works in Google Meet:
Screenshot from 2020-09-05 20-04-16

Cannot close chat if opened automatically

If I receive a chat message while the toolbar is hidden, the message pops up and there seems to be no way to close it. If the toolbar is shown, I can click the chat icon to hide it, but I can't show the toolbar while there is a chat message open. This happens on my laptop and on my phone, exactly the same issue.

maximum connections

Let's assume i want to run a live webinar with presenter Cam and Mic ON only. How many users can connect to view and listen on a 2GB VPS ?
is there a formula to calculate this?
have you done any tests to calculate server requirements?

Unable to share screen

Connected via windows 10. Using Pixel 4a as webcam/mic with droidcam app. Audio/video seems to work with droidcam app, but when I try to share screen, I get popup "Unable to share screen", but at the bottom it does say "http://localhost:3000/ is sharing your screen".

Unsure if successfully sharing screen or not. Happy to test it with someone
unabletosharescreen

Suggestion

There is no leave button to leave the Call

Alter Stream Quality

Hello, first thank you! This is fantastic. We are using it and I will do a pull request for a new docker-compose that uses jwilder. So thanks!

Question: Currently the quality of the streams (video/audio) can't be changed or even seen via some status. Is it possible in webRTC to change the video and/or audio quality? It may not even be possible... just asking...

'Leave' or 'Hangup'-button missing?

Am I somehow overlooking the typical 'End Call' button?
If not, is there a back story to its absence?
Thanks for sharing this nice webrtc implementation! It seems to run on my little GCP server just fine. As another aside to this question, I only 'discovered' this through miroslavpejic85 having forked it. He has been extremely giving and helpful in this area as well.

Allow access without webcam

I really would like to use this project, but the need for a webcam for every user is not optimal, some of my mates don't have a webcam so it would be great if you could use the website without a camera.

[feature request] show only chat partner's webcam / screen

Hi,
as of now there's the possibility to show only your chat partner's webcam or screen, but only in full screen. It would be great to have the possibility to show (only) your partner's picture in the browser window, not just full screen.

[Feature Request] Remove usetalk.io Specific Links in a Build Phase

Hello!

I just came across this project and am in awe! You managed to create such a powerful tool with such simple code, it's really quite something :)

I would like to package this and self host it on my own server, but noticed a few instances in the www/index.html that reference usetalk.io directly, including an analytics script, and hard-coded STUN/TURN servers. Would you consider pulling these things conditionally based on some environment variables or a build script potentially? Or would you consider merging in a PR that would implement this?

Thanks for your hard work!

Is it possible in android client?

Hello dear friends
Im trying to do a group p2p call with webrtc in android but i have some problems.
At first join is ok but after leav a user my localmedia stream disposing.
Can you help me pls?

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.