2014-04-16 22 views
5

qualcuno conosce un buon tutorial per uno script WebRTC/getUserMedia API che consente a due utenti di connettersi l'un l'altro con una webcam?Tutorial per WebRTC/getUserMedia API - più camme

Un esempio corretto dovrebbe essere Chatroulette, solo che non ha bisogno di essere così grande. E dovrebbe essere possibile crearlo sul localhost.

Spero che qualcuno possa aiutarmi!

risposta

4

Usa SimpleWebRTC con Signalling server per raggiungere il tuo obiettivo. Trova altro a main site

Avrai bisogno di nodejs per eseguire il server di segnalazione oppure puoi utilizzare simplewebrtc signalling server a scopo di test.

La condivisione schermo funziona solo su HTTPS.

Lavorare DEMO

<!DOCTYPE html> 
<html> 
    <head> 
     <title>SimpleWebRTC Demo</title> 
    </head> 
    <body> 
     <h1 id="title">Start a room</h1> 
     <style> 
      .videoContainer { 
       position: relative; 
       width: 200px; 
       height: 150px; 
      } 
      .videoContainer video { 
       position: absolute; 
       width: 100%; 
       height: 100%; 
      } 
      .volume_bar { 
       position: absolute; 
       width: 5px; 
       height: 0px; 
       right: 0px; 
       bottom: 0px; 
       background-color: #12acef; 
      } 
      #localScreenContainer { 
       display: none; 
      } 
     </style> 
     <button id="screenShareButton"></button> 
     <p id="subTitle">(https required for screensaring to work)</p> 
     <form id="createRoom"> 
      <input id="sessionInput"/> 
      <button type="submit">Create it!</button> 
     </form> 
     <div class="videoContainer"> 
      <video id="localVideo" style="height: 150px;" oncontextmenu="return false;"></video> 
      <div id="localVolume" class="volume_bar"></div> 
     </div> 
     <div id="localScreenContainer" class="videoContainer"> 
     </div> 
     <div id="remotes"></div> 
     <script src="//ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script> 
     <script src="latest.js"></script> 
     <script> 
      // grab the room from the URL 
      var room = location.search && location.search.split('?')[1]; 

      // create our webrtc connection 
      var webrtc = new SimpleWebRTC({ 
       // the id/element dom element that will hold "our" video 
       localVideoEl: 'localVideo', 
       // the id/element dom element that will hold remote videos 
       remoteVideosEl: '', 
       // immediately ask for camera access 
       autoRequestMedia: true, 
       debug: false, 
       detectSpeakingEvents: true, 
       autoAdjustMic: false 
      }); 

      // when it's ready, join if we got a room from the URL 
      webrtc.on('readyToCall', function() { 
       // you can name it anything 
       if (room) webrtc.joinRoom(room); 
      }); 

      function showVolume(el, volume) { 
       if (!el) return; 
       if (volume < -45) { // vary between -45 and -20 
        el.style.height = '0px'; 
       } else if (volume > -20) { 
        el.style.height = '100%'; 
       } else { 
        el.style.height = '' + Math.floor((volume + 100) * 100/25 - 220) + '%'; 
       } 
      } 
      webrtc.on('channelMessage', function (peer, label, data) { 
       if (data.type == 'volume') { 
        showVolume(document.getElementById('volume_' + peer.id), data.volume); 
       } 
      }); 
      webrtc.on('localScreenAdded', function (video) { 
       console.log('localScreenAdded', video); 
       video.onclick = function() { 
        video.style.width = video.videoWidth + 'px'; 
        video.style.height = video.videoHeight + 'px'; 
       }; 
       document.getElementById('localScreenContainer').appendChild(video); 
       $('#localScreenContainer').show(); 
      }); 
      webrtc.on('localScreenRemoved', function (video) { 
       console.log('localScreenRemoved', video); 
       document.getElementById('localScreenContainer').removeChild(video); 
       $('#localScreenContainer').hide(); 
      }); 
      webrtc.on('videoAdded', function (video, peer) { 
       console.log('video added', peer); 
       var remotes = document.getElementById('remotes'); 
       if (remotes) { 
        var d = document.createElement('div'); 
        d.className = 'videoContainer'; 
        d.id = 'container_' + webrtc.getDomId(peer); 
        d.appendChild(video); 
        var vol = document.createElement('div'); 
        vol.id = 'volume_' + peer.id; 
        vol.className = 'volume_bar'; 
        video.onclick = function() { 
         video.style.width = video.videoWidth + 'px'; 
         video.style.height = video.videoHeight + 'px'; 
        }; 
        d.appendChild(vol); 
        remotes.appendChild(d); 
       } 
      }); 
      webrtc.on('videoRemoved', function (video, peer) { 
       console.log('video removed ', peer); 
       var remotes = document.getElementById('remotes'); 
       var el = document.getElementById('container_' + webrtc.getDomId(peer)); 
       if (remotes && el) { 
        remotes.removeChild(el); 
       } 
      }); 
      webrtc.on('volumeChange', function (volume, treshold) { 
       //console.log('own volume', volume); 
       showVolume(document.getElementById('localVolume'), volume); 
      }); 

      // Since we use this twice we put it here 
      function setRoom(name) { 
       $('form').remove(); 
       $('h1').text(name); 
       $('#subTitle').text('Link to join: ' + location.href); 
       $('body').addClass('active'); 
      } 

      if (room) { 
       setRoom(room); 
      } else { 
       $('form').submit(function() { 
        var val = $('#sessionInput').val().toLowerCase().replace(/\s/g, '-').replace(/[^A-Za-z0-9_\-]/g, ''); 
        webrtc.createRoom(val, function (err, name) { 
         console.log(' create room cb', arguments); 

         var newUrl = location.pathname + '?' + name; 
         if (!err) { 
          history.replaceState({foo: 'bar'}, null, newUrl); 
          setRoom(name); 
         } else { 
          console.log(err); 
         } 
        }); 
        return false;   
       }); 
      } 

      var button = $('#screenShareButton'), 
       setButton = function (bool) { 
        button.text(bool ? 'share screen' : 'stop sharing'); 
       }; 
      webrtc.on('localScreenRemoved', function() { 
       setButton(true); 
      }); 

      setButton(true); 

      button.click(function() { 
       if (webrtc.getLocalScreen()) { 
        webrtc.stopScreenShare(); 
        setButton(true); 
       } else { 
        webrtc.shareScreen(function (err) { 
         if (err) { 
          setButton(true); 
         } else { 
          setButton(false); 
         } 
        }); 

       } 
      }); 
     </script> 
    </body> 
</html> 
+0

+1 questa è una buona risposta e ha funzionato per me – Muath

2

ho scritto a longer WebRTC tutorial che guida l'utente attraverso tutti i passaggi neccessary per creare il vostro molto proprio, semplice Videoapplication, tra cui la segnalazione. Non essere scioccato dalla lunghezza, ho messo un sacco di esempi di codice in esso. Inoltre, il sito che @bwtrent ha già menzionato mi ha aiutato molto.