2013-07-26 1 views
5

Мне нужно создать веб-приложение, которое использует WebRTC для получения видеопотока веб-камеры и потока аудио микрофона и немедленно перевести его на сервер для дальнейшего вещания для нескольких клиентов. Приложение должно делать это в режиме реального времени в полнодуплексном режиме. Я имею в виду, что это будет своего рода видео-чат. Это будет своего рода образовательное приложение. Итак, вопрос: возможно ли это сейчас? Какие технологии следует использовать? Должен ли я использовать WebRTC с WebSocket и Node.js на сервере? Или я могу использовать php вместо узла? Могу ли я использовать Socket.io для этого? Есть ли другие способы достичь этого? Может быть, вспышка?Возможно ли теперь использовать API GetUserMedia для чтения видеопотока с веб-камеры и отправить его прямо на сервер для дальнейшего вещания?

ответ

4

API-интерфейс PeerConnection в WebRTC не требует серверного сервера для проведения одного или нескольких соединений между одноранговыми узлами.

Единственное, что вам нужно для серверного сервера, это служить посредником для установления соединений между одноранговыми узлами. С этой целью вы можете использовать API WebSocket, Ajax или любые другие средства, необходимые для достижения этого. Кроме того, да, вы можете использовать PHP для написания серверной части для WebSocket (или любого другого метода, который вы хотите использовать для установления однорангового соединения). Это действительно зависит от вас.

На данный момент только Chrome и Firefox поддерживают достаточно API-интерфейсов WebRTC, чтобы сделать видеочат возможным. Скорее всего, Opera, скорее всего, присоединится к микшеру, но никто не уверен, будет ли WebRTC добавлен в IE11 или нет, и Apple, похоже, не собирается добавлять WebRTC в Safari в ближайшее время (потому что у них есть собственная собственная технология для это звучит знакомо ?!).

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

Edit: Если вы используете сервер TURN, вы можете перенаправить аудио и видео данных через сервер, но это на самом деле не менее идеальная ситуация, и вы все еще можете сделать это только если вы используете WebRTC API, ,

+0

Спасибо за ответ! Я знаю, что WebRTC способен напрямую подключать браузеры. Но для проверки подлинности и авторизации мне нужен веб-сервер. – paperstreet7

+0

И это полностью зависит от вас. Вы можете авторизовать и аутентифицировать все, что хотите, и разрешать только подключение WebRTC, если все в порядке. – HartleySan

+0

@ paperstreet7 - Прошло несколько лет, но я столкнулся с аналогичным требованием, вам удалось прийти к решению? – po10cySA

2

Это может вам помочь.

MediaStreamRecorder - это API WebRTC для записи потоков getUserMedia() (все еще выполняется). Это позволяет веб-приложениям создавать файл с живого сеанса аудио/видео.

Вот пример реализации для отправки потока на сервер.

<video autoplay></video> 

    <script language="javascript" type="text/javascript"> 
    function onVideoFail(e) { 
     console.log('webcam fail!', e); 
     }; 

    function hasGetUserMedia() { 
     // Note: Opera is unprefixed. 
     return !!(navigator.getUserMedia || navigator.webkitGetUserMedia || 
       navigator.mozGetUserMedia || navigator.msGetUserMedia); 
    } 

    if (hasGetUserMedia()) { 
     // Good to go! 
    } else { 
     alert('getUserMedia() is not supported in your browser'); 
    } 

    window.URL = window.URL || window.webkitURL; 
    navigator.getUserMedia = navigator.getUserMedia || 
          navigator.webkitGetUserMedia || 
           navigator.mozGetUserMedia || 
           navigator.msGetUserMedia; 

    var video = document.querySelector('video'); 
    var streamRecorder; 
    var webcamstream; 

    if (navigator.getUserMedia) { 
     navigator.getUserMedia({audio: true, video: true}, function(stream) { 
     video.src = window.URL.createObjectURL(stream); 
     webcamstream = stream; 
    // streamrecorder = webcamstream.record(); 
     }, onVideoFail); 
    } else { 
     alert ('failed'); 
    } 

    function startRecording() { 
     streamRecorder = webcamstream.record(); 
     setTimeout(stopRecording, 10000); 
    } 
    function stopRecording() { 
     streamRecorder.getRecordedData(postVideoToServer); 
    } 
    function postVideoToServer(videoblob) { 

     var data = {}; 
     data.video = videoblob; 
     data.metadata = 'test metadata'; 
     data.action = "upload_video"; 
     jQuery.post("http://www.kongraju.in/uploadvideo.php", data, onUploadSuccess); 
    } 
    function onUploadSuccess() { 
     alert ('video uploaded'); 
    } 

    </script> 

    <div id="webcamcontrols"> 
     <button class="recordbutton" onclick="startRecording();">RECORD</button> 
    </div> 

вы можете отправить записанный файл на сервер.

Ссылки:

http://www.w3.org/TR/mediastream-recording/

+0

Знаете ли вы, какой тип видеофайла/фрагмента прошел, он дошел до части «data = {}» перед отправкой на сервер? – JerryFox

+2

Я получаю сообщение об ошибке _Uncaught TypeError: Невозможно прочитать свойство 'record' undefined_ в строке 41 'streamRecorder = webcamstream.record();' в Chrome версии 46.0.2490.86 m –

1

Живой дуплексный видео чат с несколькими участниками является видеоконференцсвязь, для этого вам нужен серверный компонент, который смешивает аудио и видео участников и трансляции им. Для этого вам нужен медиасервер. Для WebRTC есть несколько доступных; посмотрите на сервер телеприсутствия Doubango: https://code.google.com/p/telepresence/

У Mobicents есть хороший SIP-стек для одних и тех же, но возможности мультимедиа для webRTC ограничены.

Иначе почему бы не начать писать? :)