- From: Johannes Hange <moooitic@mailbox.tu-berlin.de>
- Date: Sat, 06 Jul 2013 22:21:49 +0200
- To: public-webrtc@w3.org
- Message-ID: <51D87C5D.1090402@mailbox.tu-berlin.de>
Dear WebRTC, you are the future, and should be carefully build. The current proposal does not expose the capabilities gained very well. In general, the standard puts capabilities into a monolithic (pool) object (for the sake of performance and probably due to SIP influences). This may be due to a focus on video and audio in the initial development phase of the protocol, for which this setup is probably a good idea and common practice.It currently has the disadvantaged that the developer can't access and use the functionality separately, has to write complicated code for simple things and is restricted by predefined flows. - Objects should be independent from an API perspective: - Resources (streams) should be pooled under the hood and have nothing to do with the API - If necessary expose "pools" the developer can "add" to, not require them - Added protocols and gained features should be exposed to the developer (if there are use cases) - So he can invent what to do with them - Example below - Higher level objects are a good addition, but not a good base abstraction. - Once you have a monolith, breaking it up in a lib is ugly, the other way around is not (Look at the code that exists today to do this ...) This was written under the assumption that much of the existing infrastructure is used and little adapted. I suggest a dual approach where small exposed objects and the current big monolith co-exist (lets see who wins in 2.0 by analyzing usage ...). From a data channel / web developer perspective the API and requirements are overly complicated and lack the abilities to: 1 - Establish a connection to another user directly, based on the exchange of ip:port pairs (not large SPD) - [RTCPeerConnection.]connect(ip, port, [timeout], [number] ...) - punches holes until [timeout], [number] may be useful to regulate the number of punches - various security restrictions to address flooding / miss-use, but does not differ from current attack vectors - onconnect / callback - continue flow (exchange SDP) 2 - Find out the IP of the current system - getIPAddresses(['stun: ...', 'stun: ....'], ...) - Provide a call outside of the webrtc object 3 - Provide a simple WebRTCSocket alternative to send data - WebRTCSocket("to_ip:to_port", "my_ip:my_port" /*obtained via navigator.getIPAddress(stunServers)*/) - Which does the following (probably implemented more efficiently): - RTCPeerConnection.connect(to_ip, to_port); - createDataChannel - Expose events of the data channel - This can be done for audio/video too in order to break up the monolithic nature ... Towards ICE: - Build own Http flows and provide the ability to solve the problem without ICE: - {'iceServers': [{'url': 'https://example.org/myip'}]}; - For most clients this will provide me a valid address for later hole punching and it's easy to create - Return any answer format the developer chooses, client code knows what to do - I can start signaling logic at this point already (and close my server to the public) - Client must convert IP into a SPD format for exchange - createOffer(ip, function(description) {....}) Kind regards and thanks for reading Johannes H. PS: I am glad to answer anything unclear or address issues (participate in discussions)
Received on Monday, 8 July 2013 05:13:11 UTC