使用Rails、WebRTC和HTML5构建视频会议

6

我需要为我的Ruby on Rails应用程序构建一个视频会议功能。我找到了一个关于HTML5的教程,它可以通过浏览器访问你的摄像头。一旦摄像头开启,你就可以看到实时视频流并拍照。以下是代码:

Javascrip代码:

  // Put event listeners into place
window.addEventListener("DOMContentLoaded", function() {
  // Grab elements, create settings, etc.
  var canvas = document.getElementById("canvas"),
    context = canvas.getContext("2d"),
    video = document.getElementById("video"),
    videoObj = { "video": true },
    errBack = function(error) {
      console.log("Video capture error: ", error.code); 
    };

  // Put video listeners into place
  if(navigator.getUserMedia) { // Standard
    navigator.getUserMedia(videoObj, function(stream) {
      video.src = stream;
      video.play();
    }, errBack);
  } else if(navigator.webkitGetUserMedia) { // WebKit-prefixed
    navigator.webkitGetUserMedia(videoObj, function(stream){
      video.src = window.webkitURL.createObjectURL(stream);
      video.play();
    }, errBack);
  }
  else if(navigator.mozGetUserMedia) { // Firefox-prefixed
    navigator.mozGetUserMedia(videoObj, function(stream){
      video.src = window.URL.createObjectURL(stream);
      video.play();
    }, errBack);

  }

// Trigger photo take
document.getElementById("snap").addEventListener("click", function(e) {
  context.drawImage(video, 0, 0, 640, 480);
});

}, false);

HTML代码:

<h1>New video</h1>

<!--<%= render 'form' %>-->
 <video id="video" width="640" height="480" autoplay></video>
   <button id="snap">Snap Photo</button>
   <canvas id="canvas" width="640" height="480"></canvas>
  <div class="actions">

我需要一种方法将我在服务器内看到的现场视频流传输给另一个用户。我该怎么做? WebSocket 能够实现这一点吗?如果可以,具体如何实现?
1个回答

16

你绝对可以做到。

首先,你需要了解WebRTC的工作原理以及它需要什么。你需要一个信令服务器(现有的或自己编写)。如果你决定编写自己的信令服务器,你需要任何类型的客户端-服务器-客户端体系结构和传输方法(其中之一是Websockets)。

通过Websockets(或任何其他传输方式),您需要交换会话描述(一个点对点提供,另一个点对点应答)来建立连接。实际上,信令服务器只是客户端和服务器两端的几个监听器,它们只是在两个点对点之间建立WebRTC连接之前向彼此传递信号(相对较小的文本数据块)。

正确的方法

我建议您研究此应用程序的主要代码 https://apprtc.appspot.com/(我在此处保存了主要代码 https://gist.github.com/igorpavlov/18af35999f8c7838cf21)。了解其工作原理对您非常有帮助。

简单的方法

您还可以使用库进行呼叫,例如https://simplewebrtc.com/(www.talky.io使用此库),但您仍需要信令服务器。

祝你好运!


1
这个答案对你有帮助吗? - igorpavlov
是的,它非常有帮助。感谢您提供这个答案和库。 - Tarun Garg
你的链接无法使用 https://apprtc.appspot.com/,你能否提供新链接或其他学习 rails 应用中 webrtc 的方法?错误:页面未找到 所请求的 URL 在该服务器上未被找到。 - Divyaraj Solanki

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接