2013-07-26 9 views
5

Potrzebuję zbudować aplikację internetową, która używa WebRTC, aby uzyskać strumień wideo kamery internetowej i strumień mikrofonu audio i natychmiast przetłumaczyć go na serwer w celu dalszego nadawania do wielu klientów. Aplikacja musi to robić w czasie rzeczywistym w trybie pełnego dupleksu. Mam na myśli, że byłby to rodzaj czatu wideo na żywo. Byłaby to jakaś aplikacja edukacyjna. Pytanie brzmi: czy to możliwe? Jakie technologie powinienem zastosować? Czy powinienem używać WebRTC z WebSocket i Node.js na zapleczu? Czy mogę użyć php zamiast węzła? Czy mogę użyć do tego Socket.io? Czy istnieją inne sposoby, aby to osiągnąć? Może być flash?Czy jest teraz możliwe wykorzystanie API GetUserMedia do odczytywania strumienia wideo z kamery internetowej i wysyłania go bezpośrednio na serwer w celu dalszego nadawania?

Odpowiedz

4

Interfejs API PeerConnection w WebRTC nie wymaga serwera zaplecza do prowadzenia jednego lub więcej połączeń między równorzędnymi.

Jedyną rzeczą, do której potrzebny jest serwer zaplecza, jest służenie jako mediator przy pierwszym nawiązywaniu połączeń między urządzeniami równorzędnymi. W tym celu można użyć interfejsu API WebSocket, Ajax lub innych środków niezbędnych do osiągnięcia tego celu. Tak, możesz użyć PHP do napisania strony serwera dla WebSocket (lub jakiejkolwiek metody, której chcesz użyć do ustanowienia połączenia peer-to-peer). To naprawdę zależy od ciebie.

W tej chwili tylko Chrome i Firefox obsługują wystarczającą liczbę interfejsów API WebRTC, aby umożliwić czat wideo. Wkrótce jednak Opera prawdopodobnie dołączy do miksu, ale nikt nie jest pewien, czy WebRTC zostanie dodany do IE11, czy też nie, a Apple wydaje się nie mieć zamiaru dodawać WebRTC do Safari w najbliższym czasie (ponieważ mają one własną zastrzeżoną technologię dla to, brzmi znajomo ?!).

W każdym razie, WebRTC jest najlepszym wyborem. Dodałem, że nie można używać JS do wysyłania obrazu i dźwięku na serwer, a następnie do przekazywania tych danych serwerowi do innych uczestników. Zamiast tego należy użyć WebRTC do nawiązania połączeń peer-to-peer, a następnie przejść z tego miejsca.

Edit: W przypadku korzystania z serwera kolei można przekierować audio i danych wideo za pośrednictwem serwera, ale to faktycznie najmniej idealna sytuacja, i nadal można to zrobić tylko, że jeśli używasz WebRTC API .

+0

Dzięki za odpowiedź! Wiem, że WebRTC może bezpośrednio łączyć przeglądarki. Potrzebuję jednak serwera WWW do uwierzytelniania i autoryzacji. – paperstreet7

+0

To wszystko zależy od Ciebie. Możesz autoryzować i uwierzytelniać, co tylko chcesz, i zezwalać na połączenie WebRTC tylko wtedy, gdy wszystko jest w porządku. – HartleySan

+0

@ paperstreet7 - Minęło kilka lat, ale mam podobne wymagania, czy udało ci się znaleźć rozwiązanie? – po10cySA

2

To może ci pomóc.

MediaStreamRecorder to interfejs API WebRTC służący do nagrywania strumieni getUserMedia() (wciąż w trakcie realizacji). Umożliwia aplikacjom internetowym tworzenie pliku z sesji audio/wideo na żywo.

Oto przykładowa implementacja do wysyłania strumienia na serwer.

<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> 

można wysłać nagrany plik na serwerze.

Referencje:

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

+0

czy wiesz, jaki rodzaj pliku/pliku wideo został wysłany osiągnął część "data = {}" przed wysłaniem na serwer? – JerryFox

+2

Pojawia się błąd _Uncaught TypeError: Nie można odczytać właściwości 'record' undefined_ w linii 41 'streamRecorder = webcamstream.record();' w wersji Chrome 46.0.2490.86 m –

1

żywo duplex czat wideo z wieloma uczestnikami jest wideokonferencji, do tego trzeba komponent serwera, który miksuje audio i wideo uczestników i audycji im. Bardzo potrzebujesz do tego serwera multimediów. W przypadku WebRTC istnieje kilka dostępnych; spójrz na serwer telepresence Doubango: https://code.google.com/p/telepresence/

Mobicents ma dobry stos SIP dla tych samych ale multimedialnych możliwości dla webRTC są ograniczone.

W przeciwnym razie, dlaczego nie zacząć pisać? :)