Moonshot

Version 9 (Adrian Georgescu, 05/13/2015 02:49 am)

1 3 Adrian Georgescu
h1. Project Moonshot (a.k.a. WebSylk)
2 1 Adrian Georgescu
3 9 Adrian Georgescu
Adding WebRTC and video capability to SylkServer. This will allow anyone with basic computer knowledge to setup a zero-configuration meeting point that can be used to join a multi-party conference using standards-based clients like SIP, XMPP, IRC and and Web-browsers. Also it will allow third-parties to develop their now front-ends based on a web based API.
4 1 Adrian Georgescu
5 1 Adrian Georgescu
(Items in this list are not necessarily in order)
6 1 Adrian Georgescu
7 1 Adrian Georgescu
h2. Add VP8 support to SIP SIMPLE Client SDK
8 1 Adrian Georgescu
9 1 Adrian Georgescu
WebRTC mandates implementing both VP8 and H264, but the H264 part is getting quite some resistance. The current state (as of 12th of May 2015) is: Chrome does not implement H264, and in Firefox it has to be manually enabled through the advanced configuration menu.
10 1 Adrian Georgescu
11 1 Adrian Georgescu
We need to add support for it to the SDK so we can transparently interoperate with WebRTC endpoints without the need for transcoding.
12 1 Adrian Georgescu
13 1 Adrian Georgescu
Apparently libvpx already has VP9 support, which is currently behind a flag in Chrome, it's probably a good idea to try to add it too.
14 1 Adrian Georgescu
15 6 Adrian Georgescu
h2. Extend SylkServer with a web framework
16 5 Adrian Georgescu
17 6 Adrian Georgescu
Using such framework any web based application can tap into. Different applications might need to serve web content: screensharing images, conference web page, WebRTC endpoint, etc. There should be a single HTTP(S) endpoint where applications tap into and serve content.
18 1 Adrian Georgescu
19 1 Adrian Georgescu
Example URLs:
20 1 Adrian Georgescu
21 1 Adrian Georgescu
https://conference.sip2sip.info/sylk/conference/screen-sharing/
22 1 Adrian Georgescu
https://conference.sip2sip.info/sylk/conference/
23 1 Adrian Georgescu
https://conference.sip2sip.info/sylk/webrtcgateway/
24 6 Adrian Georgescu
25 6 Adrian Georgescu
When staring a conference room, SylkServer will advertise the following entry points:
26 6 Adrian Georgescu
27 6 Adrian Georgescu
 * A SIP address (all media possible)
28 6 Adrian Georgescu
 * An optional phone number (audio only)
29 6 Adrian Georgescu
 * An  XMPP address (chat and optional audio/video)
30 6 Adrian Georgescu
 * A WEB URL (all media is possible)
31 6 Adrian Georgescu
 * IRC room (text only)
32 1 Adrian Georgescu
33 1 Adrian Georgescu
34 1 Adrian Georgescu
h2. Design SylkRTC
35 1 Adrian Georgescu
36 1 Adrian Georgescu
The WebSocket API for gatewaying WebRTC endpoints to the SIP world. It needs to cover:
37 1 Adrian Georgescu
38 1 Adrian Georgescu
h3. Phase 1
39 1 Adrian Georgescu
40 1 Adrian Georgescu
* Registration of multiple accounts
41 1 Adrian Georgescu
* Multiple sessions
42 1 Adrian Georgescu
* Audio / video sessions
43 1 Adrian Georgescu
44 1 Adrian Georgescu
h3. Phase 2
45 1 Adrian Georgescu
46 1 Adrian Georgescu
* Chat
47 1 Adrian Georgescu
* Presence
48 1 Adrian Georgescu
* Contacts management
49 1 Adrian Georgescu
50 1 Adrian Georgescu
h3. Phase 3
51 1 Adrian Georgescu
52 1 Adrian Georgescu
* File transfer
53 1 Adrian Georgescu
* Screen sharing
54 8 Adrian Georgescu
* WebODF documents shared editing
55 1 Adrian Georgescu
56 1 Adrian Georgescu
57 1 Adrian Georgescu
h2. Implement the gateway skeleton (first alpha release)
58 1 Adrian Georgescu
59 1 Adrian Georgescu
It needs to cover:
60 1 Adrian Georgescu
61 1 Adrian Georgescu
* Multiple accounts
62 1 Adrian Georgescu
* Single session per account
63 1 Adrian Georgescu
* Audio and video
64 1 Adrian Georgescu
65 1 Adrian Georgescu
66 1 Adrian Georgescu
h2. Gateway phase 2
67 1 Adrian Georgescu
68 1 Adrian Georgescu
* Chat
69 1 Adrian Georgescu
* Presence
70 1 Adrian Georgescu
* Contact management
71 1 Adrian Georgescu
72 1 Adrian Georgescu
73 1 Adrian Georgescu
h1. Other
74 1 Adrian Georgescu
75 8 Adrian Georgescu
Random notes, thoughts.
76 1 Adrian Georgescu
77 1 Adrian Georgescu
h2. Write our own Janus SIP plugin
78 1 Adrian Georgescu
79 1 Adrian Georgescu
Based on the existing one, but using PJSIP instead. It will become clearer once we are further in the project. We'd use just the SIP signaling part, not any media capability, that's taken care of.
80 1 Adrian Georgescu
81 1 Adrian Georgescu
The SylkRTC API would not change, but it should facilitate some features such as multiple sessions per account.
82 1 Adrian Georgescu
83 1 Adrian Georgescu
h2. Multi-party video
84 1 Adrian Georgescu
85 1 Adrian Georgescu
There is a Janus plugin for that, maybe we can leverage it. Adding support for this to our SDK is a no go, in it's current state.
86 1 Adrian Georgescu
87 1 Adrian Georgescu
Adding support for "transparent streams" (and sessions) might be required. Basically we'd need a Session which doesn't really handle media, but it takes some SDP that got passed to it and deals with it.
88 1 Adrian Georgescu
89 1 Adrian Georgescu
We'd use multiple Video streams in a single session, and some way to correlate them, probably piggibacking on what WebRTC already does with BUNDLE, for example.
90 1 Adrian Georgescu
91 1 Adrian Georgescu
I'm not sure if Janus supports simulcast. (sending one big picture and the rest as thumbnails)
92 1 Adrian Georgescu
93 1 Adrian Georgescu
94 1 Adrian Georgescu
h2. Streaming
95 1 Adrian Georgescu
96 1 Adrian Georgescu
This can probably be offloaded to Janus.