485 karma · joined April 30, 2011
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)
Simulcast/SVC, for example, are irrelevant outside of multiway video. And you can already do simulcast with WebRTC.
The WebRTC 1.0 API can be implemented on top of WebRTC 1.1. The wire-level protocols are the same, and so a WebRTC 1.1 client should be able to connect to a WebRTC 1.0 client (modulo all the normal interop issues that exist regardless of the API version). It's just a matter of which API the JS sees. It may be that by the time IE implements WebRTC 1.1, there will be JS libraries that implement 1.0 on top of 1.1, so that you could continue using the 1.0 API if you want, even in IE.
Snippets from the text:
"One big barrier remains: users can’t collaborate directly from their web browser without downloading cumbersome plugins" ... one of the major stumbling blocks in adoption of this technology is a common codec for real-time video ... Cisco ... providing ... a binary module that can be downloaded ... today’s latest release of Firefox, which will automatically download and use Cisco’s OpenH264 binary module ... The topic of a standardized codec will once again be addressed by the IETF in its November meeting. It is our hope that announcements like the one today will ... pave the way for a decision."
A decision that requires an open source web browser to download a binary module from a third party?
Another option would be to use the free and open source video codec that's already in every WebRTC-enabled browser, without any binary modules.
If all you want is the data channel, then you can ignore the audio/video part, and just use the data channel separately. It doesn't do you any harm.
Would you mind filing an issue at https://code.google.com/p/webrtc/issues/list to ask us to make a nicer build target? It won't be top priority, but we get around to it. Or better yet, if you get it working, send a patch. We'd probably include such a build target.
https://code.google.com/p/webrtc/source/browse/trunk/AUTHORS
http://tools.ietf.org/html/draft-ietf-rtcweb-jsep-07#section...
https://github.com/GoogleChrome/webrtc/tree/master/samples/w...
1. A better headline would be "Ericsson open-sources another WebRTC implementation". WebRTC is a set of standards, and they are implementing them, which is one of the purposes of having standards: to have multiple implementations.
2. One of the purposes listed by Ericsson for having another implementation is to "transcend the pure browser environment and that native apps ... would become an important part of the WebRTC ecosystem". What I would like to point out is that the implementation of WebRTC found at webrtc.org (ie Chrome's implementation) already supports mobile and native apps. In fact, the documentation is linked to right from the front page:
http://www.webrtc.org/reference/native-apis
And there are lots of native/mobile apps that already use it.
By the way, someone else commented further down that Apple doesn't allow third party apps to use it for realtime (video chat). But I can't verify if that's true or not.
Edit: I mean usable by apps other than Apple-owned apps such as Facetime.
- You can't have a spec-compliant implementation of WebRTC by compiling and running Firefox yourself. You need to download extra binaries from Cisco.
- You can't have a spec-compliant implementation of WebRTC in your Linux distro, without including binaries from Cisco.
- You can't write an Android app that uses the library from webrtc.org to interop with WebRTC in the browsers without downloading binaries from Cisco (unless you pay the MPEG-LA).
- You can't write an iOS app to interop with WebRTC in the browsers, at all, because you can't download binaries from Cisco (unless you pay the MPEG-LA).
- You can't build open source projects that fully interop with WebRTC, without dancing around all the lingering patent issues.
In all these situations, having h264 as the MTI is worse than having no MTI at all.
The open source part of this is nearly useless, if not completely so, as evidenced by the fact that Firefox won't be using the source code. The "you don't have to pay the MPEG-LA" part only applies to the binary module. If you want to pick up this code and ship it in your own software, you'll still need to pay the MPEG-LA.
The reason they are doing this is to put more weight behind H264 in the political battle in the IETF over the MTI video codec for WebRTC. But if they succeed in making H264 the MTI, and you want to write a mobile app that interops with WebRTC for doing some form of realtime video, you'll won't be able to use their source code without paying the MPEG-LA. You'd have to use their binary module, downloaded from their servers, which, as they mention in the Q&A, is impossible on iOS.
The announcement seems to try hard to smudge this distinction and push it into the fine print, but there's still a patent "elephant in the room".
TL;DR: This doesn't solve the patent issues surrounding h264, and doesn't make it anymore suitable as an MTI for WebRTC.
As for if they have enough bandwidth for HD, there's only one way to find out :)
I'm not really sure what is optimal for chunk size, but I think the real target is about keeping the buffered amount low, but non-zero. Lower means less memory used, but zero means you missed out on bandwidth you could have used. Choosing a chunk size probably doesn't have a large impact on that, but you won't know for sure until you try different sizes. It would be interesting to see an article that experiments with different sizes and different buffered amounts and tests the results.
Also, I think it might be a good idea for readers to update the article with a few notes and fixes. For example:
- SCTP-based data channels don't require messages to be less than 1200 bytes. The RTP-based data channels do. In other words, SCTP-based data channels will break up your message in chunks for you, so you don't have to when using SCTP-based data channels.
- SCTP-based data channels support binary data, so you don't need that base64 encoding when using SCTP-based data channels.
- SCTP-based data channels always do congestion control, so any "flow control" in JS is really just controlling how much data gets buffered by the browser. It's a good idea not to make that grow too large, but it doesn't effect what is sent on the network, unless you let the buffer go empty.
- It is not correct to say "to optimize transfer speeds, unreliability is key". Doing reliability yourself on top of unreliabile mode in JS will not be any faster. In fact, it will probably be slower. What you may want is unordered data, meaning you can get the file chunks out of order. But that won't speed up getting the whole file; it will just speed up getting a particular chunk. If I were you, I would use reliable, but perhaps unordered mode, which SCTP-based data channels support.
- The bandwidth hack for sending more than 30kpbs with RTP-based data channels is probably a bug, and I wouldn't recommend relying on it.
- WebRTC always uses ICE, so it's not accurate to say "ICE or just STUN", it's more like "ICE with TURN or ICE without TURN". Either way, it's still using ICE.
By the way, what do you mean by "not to use C++"? Do you mean write it in it, or do you mean use libraries written in it? I can understand the former, but the latter seems a bit extreme. Go makes it pretty easy to link to C libraries. Why not use libjingle from Go? That sounds fun and a lot less work.