Twilio Video – Real-time WebRTC video infrastructure
twilio.com
twilio.com
I've done a lot of WebRTC work -- we currently use Google Hangouts everywhere at Stack Exchange for internal team communication, but the 15 person cap hurts some bigger all-hands calls or our weekly remote parties. I don't think the hardest part of WebRTC is transcoding or TURN servers (what Twilio seems to be offering), multiplexing is where all the complexity comes from.
It's very easy to set up a video chat interface via WebRTC small-scale, and good on Twilio for focusing on making it easier to integrate mobile clients too, but I can't wait until someone (most likely the Talky.io team seeing how their betas are going) makes it a bit easier to have large N connections (right now on Hangouts N is 15, on my own stack N is around 10).
Ideally, media servers with excellent IP connections, distributed around the world, and behind GeoDNS.
It also often means some interop capabilities (signaling and/or media interworking), since many large conference use cases include some users on traditional video (SIP or H.323), Lync/Skype For Business and/or PSTN.
Finally, session control becomes important if we get into enterprise and service provider conferencing markets.
Those reqs - especially media intensive ones - are interesting in that they are mostly not Twilio's core competency. Do they build it? Partner for it? Do they care enough about those use cases?
The answers to those questions are very interesting given Twilio's tremendous developer ecosystem.
We use it ourselves for our Agile process, doing ad-hoc meetings all day in various bullpens; Scrum each morning with 20+ participants; all-hands meetings once a week with a shared presentation. And all day I can see who is meeting with whom in my group. Its really pretty performant.
We're distributed across 5 states and 3 countries. Everybody has an equal footing in the meetings since we're all on-line. Even people in the same office (we have several small offices) attend using Sococo - I can see other attendees in the background of some people's videos :)
"Jitsi Videobridge does not mix the video channels into a composite video stream, but only relays the received video channels to all call participants."
There's also absolutely no usage of SDP Offer/Answer in Jitsi Videobridge
I'd love to see WebRTC done by a service provider in a highly scalable way, so I can stop relying on RTMP (and typically embedding a flash player to support it) to deliver live streaming audio/video on a large scale.
As someone who has only leveraged WebRTC through third party providers (e.g., OpenTOK, etc.), I have no idea the complexity of what I'm asking for. Perhaps it's boil the ocean difficult, but it sure would be nice to have!
Unfortunately, until IE and Safari support WebRTC, then RTMP is really still the best way to do low-latency streaming and video chat in the browser. Additionally, most RTMP server software will scale out to hundreds of clients out of the box.
Here was my basic approach:
An end user creates a PeerConnection with a Publisher node and starts sending a MediaStream using a string identifier.
Then another user can create a PeerConnection with a Subscriber node using the same identifier.
The Subscriber node then makes a request to the Publisher to make another PeerConnection to a Registry that exists on the same node as the Subscriber.
The replicated MediaStream can then be attached to the Subscriber.
Since the replicated MediaStream is in a Registry, any additional subscribers can attach the MediaStream on the same node as well.
The code is a huge mess but it is here (The scala server is in the media directory): https://github.com/jgrowl/livehq
There is a vagrant file that brings up the whole system at the root of the project (using docker). I have not tested it recently on anything other than ubuntu.
Transcoding is tough with unique views per client, but audio processing is tougher. :)
I came to the conclusion that on mobile phones, WebRTC video is not yet usable. Even with just audio on a cellular network, call quality started deteriorating after a few minutes on every platform that I tried. Video without a WiFi signal was hopeless.
I discussed this with an WebRTC expert, and the problems are partly with WebRTC, partly with how mobile operators shape their data traffic.
Also all platform implementations that were considered the best of the breed were bought by mobile chat companies (both SnapChat and OK Hello did acquisitions on this front)
I actually spent several days last summer evaluating and developing prototypes on top of platform APIs (e.g. TokBox, Sinch) and tested the call quality in several different situations (moving from WiFi to 3G, dropping and regaining signal during the call, call behavior while moving in public transport etc.)
I described my experience and conclusion, hoping to spark informed discussion of the topic. Your comment didn't add any information to it.
However, ORTC does seek to improve with simulcast/SVC, and attributes of ORTC will merge into WebRTC as well, ultimately providing more hooks, finer-grained control and better instrumentation/visibility to the upper layers.
All that said, you can do acceptable quality WebRTC voice and video over 4G LTE today. But you do need a rock solid signal and be prepared to with a fully charged battery if you are not plugged in.
Simulcast/SVC, for example, are irrelevant outside of multiway video. And you can already do simulcast with WebRTC.
The WebRTC protocol itself is defined in RTCWEB at the IETF and based on the existing RTP and RTCP transports, and SCTP transport layer. I don't think you'll be able to do better.
What I've been wondering is if Apple gets any QoS concessions from the carriers for Facetime, because it usually works pretty well on 4G. Not sure if Facetime's quality is due to robust error correction, or because they've been able to wrangle special QCI/bearer status for Facetime data.
> mobile phones, WebRTC video is not yet usable
Once VoLTE + Video becomes common (eg, Verizon Advanced Calling), then it'll be interesting to see the impact on video-call quality, and whether V/VoLTE sessions can be established with the other end of a SIP trunk, and hence (browser) WebRTC from there.
Have you had an opportunity to check out TaskRouter yet? We released it a few weeks ago - definitely my favorite recent product that works with Twilio Voice:
It of course makes sense for iOS and devices that can support hardware acceleration, but device mix can change during a call. So, what happens if two iOS users start, but then they add a VP8 only device? How Twilio handles that use case will be instructive for understanding what use cases we can support with this service.
It isn't likely they are transcoding since this intro suggests a P2P architecture without distributed media servers, and we know H.264/VP8 is very expensive video transcoding - e.g. many media server vendors don't get more than one transcode per core at full HD.
What would you want to use it for?
Peer to peer mesh topology? Anyone know of further reading on this?
edit: https://www.webrtc-experiment.com/one-to-many-video-broadcas...
This is only the first step.
IE will bring native WebRTC support in the next version of IE.
I was quite impressed with how easy it was to set up icecomm .. are twilio upping the ante here in any way that I should know about?
Currently using Hello for one-on-one conferencing, but need something that both scales and doesn't require a centralized server. Considering Skype had this ten years ago, it's obviously doable.
The main limitation is that upload bandwidth scales linearly with the number of people in the group chat. But that's often OK for up to 10 or so people.
The currently drafted ORTC API still allows all of the power to the Javascript apps to interoperate with "legacy stuff", but it also allows the JS to bypass most of it.
(I'm a member of both the WebRTC Working Group and the ORTC Community Group)
Is the difference that this is SaaS, and CliqMeet was an app?
http://en.wikipedia.org/wiki/List_of_streaming_media_systems
could you host this on digitalocean?