Trying to audio/video conference over TCP will usually, if not always, result in a poor quality media experience. This is due to the nature of the TCP protocol itself, which both buffers packets on the sender (TCP window size) as well as delays packets during network congestion (TCP congestion control). Both of which result in immediate delays of the transmission of media packets and thus decoders on the receiving side will run out of packets to play back in real time. By the time packets arrived their playback window will have expired and the packets are immediately dropped and not played back (its completely useless to play back audio from 5 seconds ago during a real time conference).
While the window size can be reduced (disabling nagles algorithm) you have no control over the TCP congestion algorithms and you will always be subject to those delays. While TCP is suitable for non-real time media (playing back stored content and using buffers on the receiver), you should never expect to get a decent real time audio video conference by sending media packets over TCP. I'm not saying that its not possible, because on a private network that you are in 100% control of, you can design to guarantee no network congestion issues will ever occur. However, once you hit the Internet you're basically screwed.
So I can't fathom why anyone would attempt to so real time audio video conferencing using Websockets (which hijacks HTTP over TCP) over the Internet. While I understand this will solve some traversal issues when UDP is completely blocked, it's just going to end up resulting in a poor user experience.
However... If DCCP was used instead of TCP, which is unique in that it is a "connected" socket that sends datagram based messages and exposes congestion control up the user space...IMO this could really solve a lot of problems and present some new interesting possibilities, e.g. "Supplying your own congestion control algorithm to do automatic 'downsampling in real time without delays' without transcoding by using simulcasting (VP8) or H.264 SVC layers and packet forwarding algorithms".....
That being said, any plans to support DCCP in Webrtc? Curious if any discussion has occurred within the working groups regarding this. I think the big issue there is not really having a native DCCP stack on windows though :( but at least that has good Linux support. The other downside is that some firewalls/nats may not be familiar with this protocol yet and it's possible you could just be stuck with the same issues as UDP with all your attempts to "connect" and transmit media end up getting blocked :(
Sent from my iPhone