Posts

Showing posts from 2014

Using Native WebRTC simulcast support in Chrome (or how to be as good as Hangouts) [WiP]

Some weeks ago Philipp Hancke presented an awesome analysis of how Google Hangouts uses WebRTC in Chrome.  In that blog post he explained that based on the SDP contents Google is using simulcast but didn't entered in the details of how to activate it.   So I had a lot of curiosity and thought that it could be great if people (beyond Google) could use this feature so I tried to replicate their behavior.

Step one: Add simulcast ssrcs and "SIM" group to the offer SDP

The first thing I tried is to implement some SDP mangling to make my SDP look like the Hangouts SDP.   That means adding 3 substreams grouped by simulcast semantics. This is the code of my quick and dirty implementation:

https://gist.github.com/ggarber/a19b4c33510028b9c657

Result: no simulcast :(

Step two?: Add a renegotiation

I saw a a renegotiation in the initial connection from Google Hangouts (when there are no other participants) and I thought this was needed to enable simulcast and implemented it but this…

What does the MSID attribute in the SDP mean?

There is a work in progress in the IETF [1] to define a new MSID attribute to be used in the SDP. This attribute has been defined in the context of WebRTC and it is already being sent by WebRTC endpoints (Firefox and Chrome). This is a typical SDP generated by Chrome:

v=0 o=- 658899108507703479 2 IN IP4 127.0.0.1 s=- t=0 0 a=group:BUNDLE audio video a=msid-semantic: WMS FmJZgkjbR2gBS25U0hP3qoUSjvfDddQl4UjJ m=audio 1 RTP/SAVPF 111 103 104 0 8 106 105 13 126 ... a=ssrc:1400694016 cname:Yk4LvPXyWNZKkW6S a=ssrc:1400694016 msid:FmJZgkjbR2gBS25U0hP3qoUSjvfDddQl4UjJ a228df45 a=ssrc:1400694016 mslabel:FmJZgkjbR2gBS25U0hP3qoUSjvfDddQl4UjJ a=ssrc:1400694016 label:a228df45-515e-49b6-be8f-0d044b65de64 m=video 1 RTP/SAVPF 100 116 117 ... a=ssrc:1484622160 cname:Yk4LvPXyWNZKkW6S a=ssrc:1484622160 msid:FmJZgkjbR2gBS25U0hP3qoUSjvfDddQl4UjJ 00f2f3d2 a=ssrc:1484622160 mslabel:FmJZgkjbR2gBS25U0hP3qoUSjvfDddQl4UjJ a=ssrc:1484622160 label:00f2f3d2-974e-48a6-b8dc-0f70194949d5 But what is it for and why…

My professional life in RTC stacks ...

I was wondering today what RTC stacks I've used in all these years and I though it would be interesting to remember them because somehow you can see the evolution of communications through them.   This is the approximate timeline (I'm sure I'm forgetting some):

2013 python-sip
2012 pjsip
2011 asmack
2008 sofia-sip
2006 NIST SIP Stack
2004 In house developed SIP Stack
2002 OpenH323
2000 NetMeeting ActiveX

 With a couple of exceptions I have always favored the usage of opensource stacks because they have always been very compelling and mostly because it is a lot of fun the possibility to hack them.

There are much more stacks that I've used for prototypes or Hello Worlds and were also great but this list only includes the ones used in commercial projects.