Как отправить потоковое видео и аудио данные на сервер?

Я пытаюсь создать веб-API для видеочата, используя html и javascript. До сих пор я нашел этот код, который получает доступ к микрофонам и веб-камере на клиентском устройстве и отображает видео и аудио на экране этого клиента. Вот этот код:

<html>
<head>

<script>

navigator.getUserMedia = navigator.getUserMedia ||
                         navigator.webkitGetUserMedia ||
                         navigator.mozGetUserMedia;

if (navigator.getUserMedia) {
   navigator.getUserMedia({ audio: true, video: { width: 1280, height: 720 } },
      function(stream) {
         var video = document.querySelector('video');
         video.src = window.URL.createObjectURL(stream);
         video.onloadedmetadata = function(e) {
           video.play();
         };
      },
      function(err) {
         console.log("The following error occurred: " + err.name);
      }
   );
} else {
   console.log("getUserMedia not supported");
}

</script>
</head>

<body>

<video></video>

</body>
</html>

Чтобы веб-приложение видеочата работало, видео- и аудиоданные должны быть отправлены обратно на сервер, где сервер может обработать эти данные и отправить их на другой клиентский компьютер, где оба человека могут иметь видеочат. Я провел некоторое исследование и считаю, что веб-сокеты могут быть моим лучшим выбором для отправки этих видео- и аудиоданных на сервер и для отправки сервером на другой клиентский компьютер. Я хочу иметь возможность сделать веб-сокет, используя javascript как на стороне сервера, так и на стороне клиента. когда я провел некоторое исследование, я нашел код, который объясняет, как создать соединение через веб-сокет, а затем как отправить серверу некоторые данные. вот код, который я нашел для этого:

  var ws = new WebSocket("ws://localhost:9998/echo");

           ws.onopen = function()
           {
              // Web Socket is connected, send data using send()
              ws.send("Message to send");
              alert("Message is sent...");
           };

Чего я не понимаю, так это того, как сервер может получать эти данные с помощью javascript на стороне сервера. Я также не понимаю, как javascript на стороне сервера должен отправлять эти данные в javascript на стороне клиента на другом клиентском компьютере через веб-сокет. Я был бы очень признателен за все идеи, исходный код и ссылки о том, как отправлять потоковые видео- и аудиоданные на сервер, затем сервер должен получать данные с помощью javascript на стороне сервера, а затем сервер отправлять эти данные. на другой клиентский компьютер. Точно так же я хотел бы знать, являются ли веб-сокеты хорошим способом выполнения этой задачи, и если нет, то какие способы вы могли бы предложить.

Спасибо за уделенное время!


person Isaac Singer    schedule 27.03.2016    source источник


Ответы (2)


Я думаю, вам было бы полезно использовать медиа-сервер, такой как Kurento. Вы можете ознакомиться с учебными пособиями с серверной реализацией nodejs здесь. Они используют веб-сокеты для связи между серверной частью и клиентами, и расширение любого из руководств будет для вас довольно простым.

Код javascript на стороне сервера — это то, что в мире медиа называется сигнальным сервером. Этот фрагмент кода отвечает за маршрутизацию вызовов, подключение и регистрацию пользователей, аутентификацию и так далее. Он также отвечает за контроль обмена медиа, но не за фактический обмен медиа. Медиа потоки между клиентами и сервером мультимедиа.

Отказ от ответственности: я являюсь частью команды Kurento.

person igracia    schedule 11.04.2016

Для этой проблемы нет хорошего решения. Браузер не может этого сделать без плагина (flash, java) только с помощью html5 и java-скрипта.

Единственный API, который я нашел, это WebRTC: https://webrtc.org/start/ http://web-engineering.info/node/57 они пытаются решить эту проблему и предоставить решение без дополнительного программного обеспечения , но пока это пока экспериментально, а не стандарт.

person Community    schedule 21.12.2016