PageRenderTime 49ms CodeModel.GetById 22ms RepoModel.GetById 0ms app.codeStats 0ms

/webrtc-developer-meetup-mantis/index.html

https://github.com/aullman/aullman.github.com
HTML | 285 lines | 226 code | 58 blank | 1 comment | 0 complexity | 32bd60b68b584d119e41df0e0ff6f5c8 MD5 | raw file
  1. <!doctype html>
  2. <html lang="en">
  3. <head>
  4. <meta charset="utf-8">
  5. <title>Mantis: Scaling WebRTC to Multiparty</title>
  6. <link rel="stylesheet" href="css/reveal.min.css">
  7. <link rel="stylesheet" href="css/theme/sky.css" id="theme">
  8. <!-- For syntax highlighting -->
  9. <link rel="stylesheet" href="lib/css/zenburn.css">
  10. <style type="text/css" media="screen">
  11. body {
  12. background: #76D4E4;
  13. background: -moz-radial-gradient(center, circle cover, #f7fbfc 0%, #76D4E4 100%);
  14. background: -webkit-gradient(radial, center center, 0px, center center, 100%, color-stop(0%, #f7fbfc), color-stop(100%, #76D4E4));
  15. background: -webkit-radial-gradient(center, circle cover, #f7fbfc 0%, #76D4E4 100%);
  16. background: -o-radial-gradient(center, circle cover, #f7fbfc 0%, #76D4E4 100%);
  17. background: -ms-radial-gradient(center, circle cover, #f7fbfc 0%, #76D4E4 100%);
  18. background: radial-gradient(center, circle cover, #f7fbfc 0%, #76D4E4 100%);
  19. background-color: #f7fbfc;
  20. }
  21. #logo {
  22. position: absolute;
  23. top: 10px;
  24. left: 10px;
  25. }
  26. </style>
  27. </head>
  28. <body>
  29. <img src="img/logo.png"/ id="logo">
  30. <div class="reveal">
  31. <div class="slides">
  32. <section data-markdown>
  33. Mantis
  34. =====
  35. Scaling WebRTC to Multiparty
  36. --------
  37. > Adam Ullman
  38. > Director API and Front-End Engineering @ [TokBox](tokbox.com)
  39. > [adam@tokbox.com](mailto:adam@tokbox.com)
  40. > [@aullman](http://twitter.com/aullman)
  41. > Slides - [aullman.github.io/webrtc-developer-meetup-mantis/](http://aullman.github.io/webrtc-developer-meetup-mantis/)
  42. </section>
  43. <section data-markdown>
  44. Overview
  45. -----
  46. * Current : What does Mantis currently solve?
  47. * Using Mantis : How to and Demo
  48. * Challenges : Lowest common denominator problem
  49. * Future : What's coming next in Mantis?
  50. </section>
  51. <section>
  52. <section data-markdown>
  53. Current : The Problem
  54. -------
  55. * WebRTC is P2P
  56. * Great for 1 to 1
  57. * OK for small group using mesh architecture
  58. * Not so great for large multi-party calls
  59. * Does not do broadcast
  60. </section>
  61. <section data-markdown>
  62. P2P Mesh Architecture
  63. -------
  64. ![P2p Diagram](img/p2p-diagram.png)
  65. </section>
  66. <section data-markdown>
  67. The Solution: Mantis
  68. ------
  69. * Acts as a peer and re-broadcasts your stream to other participants
  70. * Tested with up to 60 concurrent streams per call
  71. * 1 publisher to 60 subscribers
  72. * 2 publishers to 30 subscribers
  73. * More coming
  74. </section>
  75. <section data-markdown>
  76. Bridging with Mantis
  77. --------
  78. ![Mantis Diagram](img/Mantis-Diagram.png)
  79. </section>
  80. </section>
  81. <section>
  82. <section data-markdown>
  83. How to use Mantis
  84. -------
  85. * By default all OpenTok applications are Mantis enabled
  86. * No need to re-write an application to be P2P or client-server
  87. * P2P flag when you create a Session
  88. </section>
  89. <section data-markdown>
  90. How to write an OpenTok App
  91. -------
  92. * JavaScript QuickStart Guide - http://tokbox.com/opentok/quick-start/
  93. * [JavaScript HelloWorld](http://tokbox.com/opentok/tutorials/hello-world/js/iframe.html?sessionId=2_MX4xMTI3fn5TdW4gT2N0IDIwIDIwOjMzOjAzIFBEVCAyMDEzfjAuNjkzOTA1MjN-) - http://tokbox.com/opentok/tutorials/hello-world/js
  94. * iOS HelloWorld - http://tokbox.com/opentok/tutorials/hello-world/ios/
  95. * Android support in Labs - http://labs.opentok.com/android
  96. </section>
  97. <section data-markdown>
  98. Client-side JavaScript
  99. --------
  100. ```javascript
  101. var session = TB.initSession(sessionId);
  102. session.on({
  103. sessionConnected: function(event) {
  104. session.publish();
  105. },
  106. streamCreated: function(event) {
  107. session.subscribe(event.stream);
  108. }
  109. });
  110. session.connect(apiKey,token);
  111. ```
  112. </section>
  113. <section data-markdown>
  114. ![OpenTok Sequence Diagram](img/OpenTokSequenceDiagram.png)
  115. </section>
  116. <section data-markdown>
  117. ![OpenTok P2P Sequence Diagram](img/OpenTokP2PSequenceDiagram.png)
  118. </section>
  119. <section data-markdown>
  120. ![OpenTokMantisSequenceDiagram](img/OpenTokMantisSequenceDiagram.png)
  121. </section>
  122. </section>
  123. <section>
  124. <section data-markdown>
  125. Challenges : Lowest common denominator problem
  126. ------
  127. * In a large call someone will have a bad connection
  128. * Drags everyone else down
  129. </section>
  130. <section data-markdown>
  131. Possible Solutions
  132. -------
  133. * Simulcast
  134. * Broadcast at multiple bitrates at the same time
  135. * Scalable Encoding
  136. * Temporal Scaling - encode multiple framerates
  137. * Spacial Scaling - encoding multiple resolutions
  138. * Transcoding on the server
  139. </section>
  140. <section data-markdown>
  141. Temporal Scalability
  142. ------
  143. ![Temporal Scalability](img/temporal-scalability.jpg)
  144. * Slight increase in bitrate required for high framerate (25% more)
  145. </section>
  146. <section data-markdown>
  147. Temporal + Spatial Scalability
  148. --------
  149. ![Temporal+Spatial Scalability](img/temporal+spatial-scalability.jpg)
  150. * Significant increase in bitrate required for high-res stream
  151. </section>
  152. <section data-markdown>
  153. Temporal + Simulcast
  154. -------
  155. * Multiple streams are transferred to Mantis
  156. * Mantis transmits just the stream that is suited to the subscriber
  157. * Higher bitrate required between Publisher and Mantis
  158. * Slight increase in bitrate required between Mantis and Subscriber just for temporal scalability
  159. </section>
  160. <section data-markdown>
  161. Current State of Affairs
  162. -------
  163. * Browsers (Firefox and Chrome) don't support Simulcast or Scalable Encoding
  164. * Browsers are planning to add both Temporal Scalability and Simulcast ([IETF Draft](http://tools.ietf.org/html/draft-westerlund-avtcore-multistream-and-simulcast-00))
  165. * Temporal Scalability and Simulcast are available in the WebRTC codebase
  166. * We have turned it on in iOS (works great!)
  167. </section>
  168. <section data-markdown>
  169. In the meantime : fallback to audio-only
  170. -------
  171. * Bad quality peers are forced to audio-only
  172. * Not ideal
  173. * Hard to know when to recover
  174. * We're still experimenting
  175. </section>
  176. </section>
  177. <section>
  178. <section data-markdown>
  179. What's coming next in Mantis?
  180. ------
  181. * Archiving
  182. * PSTN phone in and phone out
  183. * Larger scale broadcasts (1000s)
  184. </section>
  185. <section data-markdown>
  186. Archiving
  187. -----
  188. * Beta release scheduled for November (shhhh)
  189. * Server-side RESTful API for starting, stopping and retrieving an archive
  190. * Output is a composited mp4 file for playback in a Video Element (h.264, mp3)
  191. * Supports Chrome Screen-Sharing API
  192. </section>
  193. <section data-markdown>
  194. PSTN phone in and phone out
  195. --------
  196. * Beta release scheduled for December (shhhh)
  197. * No idea what the API looks like yet
  198. </section>
  199. <section data-markdown>
  200. Larger Scale Broadcasts
  201. -------
  202. * We're going to start thinking about this Q1 next year
  203. * We've done it before with our Flash API (TokShow)
  204. </section>
  205. </section>
  206. <section data-markdown>
  207. References
  208. --------
  209. * Mantis: Next-generation Cloud Technology for WebRTC - http://www.tokbox.com/blog/mantis-next-generation-cloud-technology-for-webrtc
  210. * SVC Demystified: What is Temporal Scalability? - http://www.lifesize.com/videoconferencingspot.com/?p=1406
  211. * RTP Multiple Stream Sessions and Simulcast (IETF Draft) - http://tools.ietf.org/html/draft-westerlund-avtcore-multistream-and-simulcast-00
  212. </section>
  213. </div>
  214. </div>
  215. <script src="lib/js/head.min.js"></script>
  216. <script src="js/reveal.min.js"></script>
  217. <script>
  218. Reveal.initialize({
  219. dependencies: [
  220. { src: 'plugin/markdown/marked.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
  221. { src: 'plugin/markdown/markdown.js', condition: function() { return !!document.querySelector( '[data-markdown]' ); } },
  222. { src: 'plugin/highlight/highlight.js', async: true, callback: function() { hljs.initHighlightingOnLoad(); } }
  223. ]
  224. });
  225. </script>
  226. </body>
  227. </html>