Se ha denunciado esta presentación.
Se está descargando tu SlideShare. ×

Putting the 'web' into webRTC

Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Anuncio
Cargando en…3
×

Eche un vistazo a continuación

1 de 21 Anuncio

Más Contenido Relacionado

Similares a Putting the 'web' into webRTC (20)

Anuncio

Más reciente (20)

Putting the 'web' into webRTC

  1. 1. Tim Panton @steely_glint PUTTING THE WEB INTO WEBRTC
  2. 2.  Protocol Droid  Webrtc fan -  Standards pusher  Doing my own thing with IOT  Some consulting ABOUT: TIM PANTON @steely_glint - Westhawk Ltd
  3. 3. CHANGE IS COMING  1905  Newtonian Physics  All wrapped up  Almost…. ->  Photoelectric effect  Quantum view of universe  New possibilities  WebRTC is like that.  Changes communications baseline  Adding P2P security +context @steely_glint - Westhawk Ltd
  4. 4.  Pay per min for calls THE OLD WAY @steely_glint - Westhawk Ltd
  5. 5.  Twillio will do 1bn webrtc minutes this year  Most of them in apps like Uber and twiddla  It is still communication – but in context  Context first – call second NOT JUST ‘CALLS’ ANY MORE @steely_glint - Westhawk Ltd
  6. 6. Don’t underestimate Javascript Combine  Cookies/context  WebGL  WebAudio  WebRTC WEB TOOLS @steely_glint - Westhawk Ltd
  7. 7.  Setting up a call is about establishing a shared context  Who am I?  Who can call who?  Do you want to speak to me?  Login + cookies is one way – but there are others  Text ‘upgrade’ is defacto now. URLs: https://appear.in/steely_glint But that didn’t work for my video-call-my-parrot app. (YoPet) CONTEXT @steely_glint - Westhawk Ltd
  8. 8.  Video effects in high level language  Realtime  Built into browser Examples: http://seriouslyjs.org/ - real time green-screen in your browser! http://www.html5rocks.com/en/tutorials/webgl/jsartoolkit_we brtc/AR_mediaStream.html - magic AR Can also be applied to remote video streams. WEBGL @steely_glint - Westhawk Ltd
  9. 9.  Use video to  Exchange a token  Out of band  Save it  Proximity based pairing – like bluetooth but easier  Useful for ‘things’ without a usable keyboard  Filed a patent on Token choice (See IIT talk for details)  Untrusted (federated) middleman. YOPET DEMO @steely_glint - Westhawk Ltd
  10. 10.  Late 80’s synth in your browser (https://www.flickr.com/photos/gmacklin/) WEBAUDIO @steely_glint - Westhawk Ltd
  11. 11.  http://webaudiodemos.appspot.com/midi-synth/index.html  https://forestmist.org/share/web-audio-api-demo LITERALLY @steely_glint - Westhawk Ltd
  12. 12.  WebAudio + WebRTC  Chrome supports outbound webRTC streams from WebAudio  Firefox >=39 supports both directions  Process your audio before sending it (chrome)  Filter, delay, fft, convolve  Combine effects to pitch shift  Display spectrum  Arbitrary maths in webworker  In Firefox you can do the same on the inbound side too SO WHAT? @steely_glint - Westhawk Ltd
  13. 13.  No longer need to talk to yourself  Press a button to inject audio  No EC or ACG in the way  Test code only – not production w i n d o w . w i r e . a p p . r e p o s i t o r y . c a l l . i n j e c t _ a u d i o _ i n t o _ c a l l ( w i r e . a p p . r e p o s i t o r y . c o n v e r s a t i o n . a c t i v e _ c o n v e r s a t i o n ( ) . i d , ” a u d i o / r e a d y _ t o _ t a l k . m p 3 " ) EXAMPLE – INJECT TEST AUDIO @steely_glint - Westhawk Ltd
  14. 14. _wrap_local_stream: (stream) => wrap_stream = stream #should test for audio stream type here... @contex = new window.AudioContext() @localsource = @context.createMediaStreamSource stream @localdest = @audio_context.createMediaStreamDestination() @addeffects() wrap_stream = @local_audio_dest.stream return wrap_stream CODE @steely_glint - Westhawk Ltd
  15. 15. _suck_in_audio_file: => AUDIO_PATH = 'ext/audio/webapp-audio/' knock_url = "#{AUDIO_PATH}ready_to_talk.mp3" request = new XMLHttpRequest() request.open('GET', knock_url, true) request.responseType = 'arraybuffer' request.onload = => load = (buffer) => @knock_audio_buffer = buffer @logger.log "Loaded audio from #{knock_url}" fail = => @logger.log "Failed to load audio from #{knock_url}" @audio_context.decodeAudioData request.response, load , fail request.send(); CODE @steely_glint - Westhawk Ltd
  16. 16. send_audio_file: => # we unhook the mic , play our audio , then reconnect if @knock_audio_buffer isnt undefined knock_source = @audio_context.createBufferSource() knock_source.buffer = @knock_audio_buffer @local_audio_source.disconnect() knock_source.connect(@local_audio_dest) knock_source.onended = => @logger.log 'finished knock sound' knock_source.disconnect(@local_audio_dest) @_hookup_audio() @logger.log 'play knock sound' knock_source.start(); CODE @steely_glint - Westhawk Ltd
  17. 17. _wrap_remote_stream: (stream) => wrap_stream = stream if @context isnt undefined #only works in ffox >= 39 @remote_source = @context.createMediaStreamSource stream @remote_dest = @context.createMediaStreamDestination() @remote_audio_source.connect(@remote_audio_dest) @add_effects2() wrap_stream = @remote_audio_dest.stream @logger.log 'Wrapped remote audio stream' return wrap_stream CODE @steely_glint - Westhawk Ltd
  18. 18.  Firefox debug screen  Various plugboards  Volume meter IF YOU LIKE GRAPHICS @steely_glint - Westhawk Ltd
  19. 19.  Use WebAudio to Inject Audio  Acoustically couple to test device  Compare returning stream from DUT  Measure latency from differences  Tests Audio and network path  in Firefox nightly LATENCY MEASUREMENT @steely_glint - Westhawk Ltd
  20. 20.  Use WebAudio to do IVR  Do the automated part locally  Only connect when actually need agent  Higher quality audio  More network resilient  Much less dialplan? (use 1m web devs?) LONGER TERM @steely_glint - Westhawk Ltd
  21. 21.  Web Browser has rich APIs  Use them to delight your user  To make your life easier  Or both!  thp@westhawk.co.uk  @steely_glint  (thanks to wire.com for examples in this talk) SUMMARY @steely_glint - Westhawk Ltd

×