Connecting people: WebRTC and the Pexip collaboration platform TF-WebRTC : May 19, 2015
Who are Pexip? Founded in April 2012 Strong video heritage Manufacture Infjnity – a pure-software, virtualized, distributed, scalable collaboration platform
Who am I? John-Mark Bell Software engineer in Pexip's UK R&D team Been with Pexip since day one Responsible for Pexip's OS & product security Implemented Pexip's initial WebRTC stack
Collaboration technologies H.323 SIP
Some important trends Hardware -> Software Personalisation & BYoD User driven demand It's no longer about the technology
Where does WebRTC fjt? Browser-based clients are (becoming!) universal Can be used in isolation, or to augment traditional voice/video solutions – Screen/presentation sharing – Control functionality May enhance existing web collaboration tools Opens up novel solutions and use-cases
Pexip's philosophy Interoperability matters – People want to use whatever client/device they have – Collaboration with people using difgerent technologies needs to work (within and between organisations) Scale is inevitable – Ease of access to capable clients drives demand – Generational change – people expect to use this stufg
Pexip's philosophy Extensibility is vital – We provide a solid, feature-rich foundation – But we don't do everything or solve every use case – Therefore, we expose open, documented APIs which allow an ecosystem to build around us – This also allows customers to be proactive in addressing their specifjc needs by building on our foundations
Interoperability Skype RTV Desktops RDP Skype for SVC G.7xx H.323 Business Rooms H.264 Opus H.263 Lync2013 Siren WebRTC H.261 Silk VoIP Phones Lync2011 SIP VP8 Speex H.264HP* AAC Lync2010 Softphones H.265* VP9*
Pexip Distributed Architecture T ypical Deployment Conferencing 1 x Management Node Nodes Management Multiple Conferencing Nodes Node Resilience Resilient to temporary network splits Conferencing Nodes Leverages VMware and Hyper-V resilience mechanisms Conferencing Nodes Distributed Pexip Benefjts Management: Single point of Infjnity Deployment management & diagnostics for a global deployment Keeps bandwidth usage local Minimizes bandwidth usage between regions
Distributed Architecture – Conferencing T raditional Centralized Deployment Multiple HD streams One centralized data center Distributed Conferencing High defjnition video stream Only one HD stream in each direction Low resolution video stream Multiple low bandwidth PIP streams Resilient to network outages
Distributed Architecture - Gateway Centralized Deployment Headquarters Remote Offjce New York Singapore Lync Lync H.323 Room System SIP Desktop System Centralized deployment due to high custom hardware cost Distributed Deployment Excessive WAN bandwidth used due to hairpinning of media Long latency for some local calls Headquarters Remote Offjce Reduced user experience New York Singapore Lync No media hairpinning Lync No WAN bandwidth for local H.323 Room System SIP Desktop System calls Lowest possible latency Better user experience
Endpoint registration and call routing Registrar and Conferencing Nodes Management Node Registrar and Conferencing Nodes Policy Server Registrar and Conferencing Nodes SIP registration SIP registration Advanced call control through distributed policy server and distributed registrar
Pexip Infjnity APIs in a Nutshell Client Voice/Video Client Voice/Video Management Management Applications Mgmnt API Applications Applications Applications Client API Pexip Pexip Infjnity Infjnity Policy API Policy Servers Policy Servers
Management Applications Client Applications Management Applications Client Applications App (iOS) App (Android) App (Browser) App (iOS) App (Android) App (Browser) Management REST API can be used for Management REST API can be used for Automatic deployment Automatic deployment Pexip App Framework (Browser) Automatic provisioning Pexip App Framework (Browser) Automatic provisioning Custom web interfaces Custom web interfaces Pexip App Framework (Android) Pexip App Framework (Android) Custom conference control Custom conference control ...and more Pexip App Framework (iOS) ...and more Pexip App Framework (iOS) Confjguration Command Command EventSource Status API Status API API API API API Get active Get conference WebRTC Add/delete/edit Escalate to conferences info Dial participant Conference info VMR video RTMP Get Conf Node Get participant Mute (push) Deploy new Conf Start status info participant Node presentation ... ... ... ... Management API (REST) Client API (REST) Media ... Management API (REST) Client API (REST) ... Media Pexip Infjnity Pexip Infjnity External Policy API External Policy API Policy Server Policy Server Third party policy server Third party policy server
Client API
Client API overview REST, with JSON payloads We use it to build our: – web application – mobile applications for iOS/Android – installable client for Windows/Mac/Linux
Client API fmow Connect to conference (Regularly) refresh connection to conference (Optionally) register for event notifjcations (Optionally) activate media functionality Disconnect from conference The same fmow works with gateways, too
Connect to conference HTTP POST to C S | request_token | |-------------------------------------->| https://cn/api/client/v2/conferences/conference/request_token | {'display_name': 'Test'} | | | | response| |<--------------------------------------| | {'status': 'success', | import json | 'result': { | import requests | 'token' : '...', | import time | 'expires' : '120', | | 'participant_uuid': '...', | | 'version' : '...', | base_url = 'https://10.0.0.1/api/client/v2/conferences/test/' | 'role' : 'HOST', | | 'chat_enabled' : true, | response = requests.post(base_url + 'request_token', | 'service_type' : 'conference', | headers = { 'Content-Type' : 'application/json' }, | 'stun' : '...' | data = json.dumps({ 'display_name' : 'Test' })).json() | } | | } | token = response['result']['token'] | | expires = time.time() + int(response['result']['expires']) / 2 participant = response['result']['participant_uuid']
Refresh connection to conference HTTP POST to C S | refresh_token | |-------------------------------------->| https://cn/api/client/v2/conferences/conference/refresh_token | | | | | response| |<--------------------------------------| | {'status': 'success', | response = requests.post(base_url + 'refresh_token', | 'result': { | headers = { | 'token' : '...', | 'Content-Type' : 'application/json', | 'expires' : '120', | 'token' : token | 'participant_uuid': '...', | | 'version' : '...', | }).json() | 'role' : 'HOST', | | 'chat_enabled' : true, | token = response['result']['token'] | 'service_type' : 'conference', | expires = time.time() + int(response['result']['expires']) / 2 | 'stun' : '...' | | } | | } | | |
Register for event notifjcations HTTP GET to C S | events | |----------------------------------------------->| https://cn/api/client/v2/conferences/conference/events | | | | | response| |<-----------------------------------------------| | Event stream: | response = requests.get(base_url + 'events', | http://www.w3.org/TR/eventsource/ | headers = { 'token' : token }, | e.g.: | stream = True) | : hello | | | | event: conference_update | for event in parse_events(response): | id: MTAuNDQuOTkuMjE= | process_event(event) | data: {"guests_muted": false, “locked": false} | | | if time.time() > expires: | event: participant_sync_begin | refresh_token() | id: MTAuNDQuOTkuMjI= | | data: null |
Recommend
More recommend