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
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 .
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:
czy wiesz, jaki rodzaj pliku/pliku wideo został wysłany osiągnął część "data = {}" przed wysłaniem na serwer? – JerryFox
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 –
ż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ć? :)
- 1. Alternatywa dla getUserMedia() do odczytu strumienia kamery na żywo w systemie iOS?
- 2. Jak wysłać film wideo z kamery iPhone'a na serwer w celu przesyłania strumieniowego na żywo?
- 3. Wysyłanie kamery wideo z przeglądarki do serwera
- 4. HTML5 kamera internetowa getUserMedia, zarówno audio, jak i wideo
- 5. Jak przechwycić wideo z kamery internetowej?
- 6. Nagrywaj wideo z kamery internetowej z jquery/flash bezpośrednio w przeglądarce?
- 7. OpenTok Api Rozsyłanie wideo na stronie internetowej
- 8. Nagrywanie wideo za pomocą kamery internetowej na stronie internetowej
- 9. Używanie Swift do nagrywania i odtwarzania wideo oraz wysyłania wideo na serwer
- 10. JS Pobierz obraz bezpośrednio ze strumienia wideo jako URL danych
- 11. Wyświetlanie wideo z kamery internetowej przy użyciu Qt
- 12. Konieczność przechwytywania strumienia wideo z kamery w aplikacji C#
- 13. Samouczek dla WebRTC/getUserMedia API - wiele kamer
- 14. Jak mogę przesyłać dźwięk z getUserMedia na serwer?
- 15. Kompresja bezpośrednio ze strumienia
- 16. Zrzut ekranu z kamery internetowej
- 17. Ramka do uchwycenia kakao z kamery internetowej
- 18. Który aparat otworzy API getUserMedia w urządzeniu mobilnym? Z przodu lub z tyłu?
- 19. Niewystarczające zasoby systemowe, przechwyć wideo z kamery internetowej Java
- 20. Czy można nagrywać dźwięk z klienta na serwer w aplikacji internetowej opartej na PHP lub JAVA?
- 21. Jak mogę uzyskać rozmiar obrazu z kamery internetowej za pomocą getUserMedia?
- 22. Nagrywanie wideo za pomocą kamery internetowej w csharp
- 23. Sposób odczytywania strumienia wejściowego http
- 24. czy możliwe jest sprawdzenie, czy gniazdo ruby znajduje się w stanie ESTABLISHED, czy CLOSE_WAIT, bez faktycznego wysyłania lub odczytywania danych?
- 25. Jak przesyłać strumieniowo wideo z mojej kamery internetowej USB do zdalnej strony HTML?
- 26. Konwersja strumienia wideo rtsp do strumienia http
- 27. Sterownik wirtualnej kamery internetowej
- 28. Uzyskaj maksymalną rozdzielczość wideo za pomocą getUserMedia
- 29. Czytanie kodów kreskowych z kamery internetowej w aplikacji internetowej PHP
- 30. Czy możliwe jest BitBlt bezpośrednio z mapy bitowej GDI +?
Dzięki za odpowiedź! Wiem, że WebRTC może bezpośrednio łączyć przeglądarki. Potrzebuję jednak serwera WWW do uwierzytelniania i autoryzacji. – paperstreet7
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
@ paperstreet7 - Minęło kilka lat, ale mam podobne wymagania, czy udało ci się znaleźć rozwiązanie? – po10cySA