I am working on a screensharing product which is to use Kurento Media Server. Everything seems to work fine, but i have one computer on which the media capture is unreliable. Most of the time it works, but sometimes it doesn't (it looks like the stream was captured but a connecting client can't see it), all difference i could see from the logs when it works vs when it's not is that instead of these lines in SDP
c=IN IP4 192.168.56.1
a=rtcp:9 IN IP4 0.0.0.0
a=candidate:2999745851 1 udp 2122260223 192.168.56.1 62931 typ host generation 0
a=candidate:3350409123 1 udp 2122194687 192.168.0.101 62932 typ host generation 0
a=candidate:2085243720 1 udp 2122129151 192.168.1.70 62933 typ host generation 0
there is just this
c=IN IP4 0.0.0.0
(there are dozens more lines before and after that, but apart from obviously random IDs and passwords which are generated new each time, they seem to be identical)
When i share a webcam, it always works.
When it works, it works (meaning: any number of clients can connect and watch the screenshare for as long as needed, connection is always successful and reliable). When it doesn't work, no client could ever connect. So it is a definitely a problem on the transmission/capture side, not a bug of the viewer.
Is there any 'official' sample code on how to do screensharing in Kurento? For example, 'kurento-one2many' example (https://github.com/Kurento/kurento-tutorial-java/tree/master/kurento-one2many-call) which does screensharing instead of webcam sharing would be great.
This problem reproduces on just one machine so far, others including those in the same local network are working great. So i think if i try to debug it i may spend months, as it is a very subtle issue. So i just need someone who 'knows' how to do it in officially 'correct' way.
I can provide any info to help resolving it, including sharing my codebase etc. If there is an official (paid) Kurento support i am willing to pay for sure.
Thanks!
Mikhail
Related
I am trying out the WebRTC examples of MuazKhan. It is working perfectly fine when the broadcaster is on AWS/Azure(or any other network) and the receiver is through my phones 4G network. But as soon as I switch to my broadband from 4G, the video stream is unable to connect and I the video player keeps on trying. Therefore I assumed that the problem is of the router NATting and will be resolved if I use a tried-n-tested TURN service such as Xirsys.
Sadly, even after using their TURN servers, I still am blocked with my broadband connection issue as mentioned above. Here are a few queries that I wanted to discuss:-
This issue seems to be due to NATting through my broadbands routers. Shouldn't using the TURN server solve it?
How can I verify if even the TURN servers are getting used and its not just the STUN servers.
Can this issue be due to the Signalling Server?
Do i need to enable some specific protocols in my router to make this work?
What else could be responsible for the issue that I should debug?
I want to make an app for smartphones that will send and receive UDP packets to and from a publicly accessible server (so not peer-to-peer, and no need for holepunching).
There's bunches of questions about this but they are all old and vague. I want to know if thing changed since.
Does anyone know a list of mobile networks that now allow UDP? And in a more general way, does most network allow UDP (in US, EU and Asia)?
I have a raspi 2 with a WiFi dongle and is setup to act as an access point/router. I also have 2 BeagleBone Blacks that also have WiFi dongles and they are connected to the raspi's network as well as a 9 axis sensor (accelerometer, gyro, etc). But I am unsure on how to send data from one board to another. And it has to be wirelessly.
If your RPi2 is configured as an access point, it must be running dhcpd on it. You will have to configure BBB to connect to RPi's wifi network and make use of some server client program (Could be in any language) to exchange the data. It should not be very difficult if you know what you're doing. I suggest you to break things in part and conquer, like
If you're able to ping Rpi from BBB and vice versa to check your both wifi configuration.
Once done, how about taking TCP server client code from web and test it to exchange simple strings.
and so on...
Hope it helps.
I have about 100 raspberries, each of them installed in place without ethernet connection, so they have to transmit data to a main server with a 3G modem dongle. When the 3G connects the ISP gives a dynamic IP.
I have a solution of SSH reverse tunneling (explained here http://www.thirdway.ch/En/projects/raspberry_pi_3g/index.php) but I can just connect to port 22, and in the main server I have 100 different ports for each tunneling ... a nightmare.
Also I can not connect to other ports if I need, just 22.
About dynamic IP I know the "dyndns" (or similar) solution.
Is there any nice solution to operate with all of them easily, and can connect to ANY port ?
I would like to do things like:
install munin (I need 4949)
connect to myraspberry45.mydomain.com to 80
... or 22 if I want
...
Any idea?
There could be other solutions which would be more complex. Though,In the beginning going with ethernet cables you might feel a little bit messy, you will eventually find them very reliable and simple. (obviously not in the physical sense.) Nevertheless, this should help. Raspberry Pi Cluster
For the past two week I have been unsuccessfully trying to implement udp hole punching, but I'm not sure why. I understand that the algorithm for hole punching is not guaranteed to work, but I believe it should work in my test case because I have noticed that once I bind my socket on my home-network, the port is the same to the outside world as it is locally, and stays that way for all connections made from this socket. Any help after reviewing my trials would be appreciated.
I have three computers, my osx desktop, my iPhone, and my amazon ec2 ami.
on the desktop I've built a cocoa app which uses the GCDAsyncUDPSocket library to bind a port and contact the ec2 server, where a java app using apache's mina library stores the sockets external ip/port and associates it with a username passed in the payload.
the iphone, which is on the AT&T network runs an app which uses the same GCDAsyncUDPSocket library to contact the ec2 server with the same username, which then the ec2 does a lookup for the username, finds the desktops info and informs the desktop of the iphones address and the iphone of the desktops address.
now the iphone & the desktop know about each other they start shooting off packets at each other in hopes to get a punched hole.
in theory this should work, but maybe I am missing something about mobile networks that would make this difficult? But then again running a simple udp echoer on a 4th external computer to manually msg the desktop did not work either, so maybe its my router, but I don't see how that could be as all my tests show that the port the desktop asks for is the same one assigned by the router.
I've been at this for nearly two weeks with little progress and any tips would be appreciated!
"once I bind my socket on my home-network, the port is the same to the outside world as it is locally"
I highly doubt that. To traverse NAT given peers A and B which have sent datagrams to a 3rd party: S you need to send datagrams from A to B and vice versa using their public IPs as seen by S and their port as seen by S (i.e. not the port A, B are bound to from their point of view).