Video live stream

Czy ktoś może mi polecić jakieś źródła które pomogą mi stworzyć aplikacje z live streamingiem video bez stosowania zewnętrznego api. Będę wdzięczny za każdą informacje.

P.S.
Tak najpierw szukałem w Google ale nie znalazłem nic o tym jak dobrze wysyłać video na serwer by potem był do niego dostęp

widziałem ten temat niestety tu jest tylko mowa o wiadomościach tekstowych a nie o video

Zdefiniuj co to jest “aplikacja z live streamingiem video”. Chcesz tylko wyświetlić video w web-playerze (strumień/serwer masz dostępny od kogoś innego), czy interesuje Cię wszystko od samego początku (łącznie co potrzebne jest do stworzenie nagrania - mam tu na myśli sprzęt typu kamera, mixer, mikrofony itp.).

chciałbym by na tym etapie aplikacja używała kamerek w laptopach czy tabletach tak by to było mobilne. Dltego myślałem by zarówno wysyłanie jak i samo oglądanie było przez przeglądarkę.

Hmm to Ty bardziej chcesz robić video konferencje (coś takiego jak googlowy hangout lub skype - wiele do wielu) niż live streaming (jeden do wielu). Dobrze myślę?

Niestety wiele chyba nie pomogę - ja robiłem tylko livestreamingi gdzie ja byłem źródłem audio/video a użytkownicy mogli tylko oglądać wydarzenie bez wchodzenia w interakcje. Tak robię livestreamingi z WRUG oraz kilku innych Warszawskich meetup-ów:

Jeden do wielu np gościu z laptopem w firmie pokazujący np inwestorom jak wygląda firma by nie musieli na żywo być tylko właśnie przez stronę.

Nie wiem jak odebrać obraz z wbudowanej kamery, więc tutaj niestety nic nie podpowiem (jak napisać do tego soft), ale…

Zobacz sobie soft, który nazywa się wirecast:
http://www.telestream.net/wirecast/overview.htm

Wirecast jest to soft przy pomocy, którego możesz zebrać obraz i dźwięk z wielu źródeł, zrobić prostą obróbkę (np. slajdy i prezentera rzucić na jeden ekran), a następnie zakodować (np. do rtmp) i wysłać to do serwera streamingowego. Jest darmowy odpowiednik (Adobe Media Live Encoder), ale przy jego pomocy nie będziesz mógł miksować (mówiąc prościej tylko jedno źródło bez edycji).

Dalej mamy serwer streamingowy. Możesz korzystać z gotowych usług w chmurze (jak youtube) lub możesz mieć swój serwer streamingowy. Wirecast wspiera oba rozwiązania. Jeśli chcesz mieć swój serwer streamingowy to masz do wyboru wowza lub flash media server. Ja korzystam z wowzy.

Gdy masz już serwer streamingowy to zostaje Ci podłączyć do tego serwera Twoich użytkowników. W sieci masz wiele gotowych playerów:

  • flow player
  • jw player
  • video.js
  • itp.

Player musi łączyć się z serwerem streamingowym przy pomocy jednego z protokołów. Do wyboru/poczytania jak działa:

  • rtmp
  • http live streaming
  • http dynamic streaming
  • silverlight (teraz się odchodzi od siliverlight)

To tyle w takim ogromnym uproszczeniu.

Megiteam na swoim blogu opisuje w jaki sposób skonfigurować streaming video.
http://www.megiteam.pl/blog/case-study/streaming-operacji-serca/

Ja korzystałem również z red5 - https://github.com/Red5/red5-server oraz http://www.rtmpd.com, przy czym pisalem do nich wlasnego prostego ‘klienta’ RTMP (we flashu).

z Red5 mialem problemy, C++ RTMP Server dzialal ‘od razu’ (i zuzywal BARDZO malo zasobow na serwerze) - przy czym testowalem je głownie na rozmowach głosowych bez wideo.

Oddaję głos naszemu firmowemu mastah od streamingu, który nie ma tutaj konta, ale chciał się podzielić doświadczeniem ;):

W związku z tym, że byłem (w ramach Ideamotiv) zaangażowany w projekt realizacji złożonego rozwiązania dla IPTV chciałbym podzielić się moim doświadczeniem.
Odniosę się do tego co napisał @y3ti, ale postaram się to trochę usystematyzować.

Dobrym podejściem jest jednoznaczne podzielenie systemu na odrębne części,
tak aby niezależne moduły mogły powstawać asynchronicznie.

I. Webcam Streaming

Aplikacja kliencka, mająca na celu przechwycenie obrazu z kamery i re-streamingu do media servera.

II. Madia/Streaming server

Aplikacja/serwis serwerowa:

  1. Umożliwiająca publikowanie/zapis strumieni video (pochodzących z Webcam Streaming)
  2. Udostępniająca strumienie video w różnych formatach poprzez rożne protokoły.

Między punktem 1 i 2 ukryta jest skomplikowana część tego typu systemu.
Zaawansowane Media Servers (Flussonic / Wowza) dają kompleksowe rozwiazanie umożliwiające odbieranie i publikowanie video w większości formatach i protokołach, dbając o:

Dlaczego to jest wazne? Aktualna sytuacja odnośnie standaryzacji video w kontekście różnych urządzeń/platform/aplikacji jest w ogóle nieustandaryzowana (teraz się to zmienia).
Znaczy to tyle, że nie jesteś w stanie stworzyć rozwiązania opierając się o mały zbiór formatow/protokołów, które zagwarantują Ci poprawne działanie u Twoich końcowych użytkowników.

Dla przykładu, porównanie supportowanych formatow w przeglądarkach:

HTML5 video tag support

Flash player (jwPlayer) video support

Ważne fakty:

  • transcoding jest kosztowny jeżeli chodzi o zasoby (hardware)
  • streaming jest kosztowny w kontekście łącza internetowago (+ powinno sie rozważyć łącze alternatywne od innego providera)

III. Video player

Aplikacja kliencka grająca video. Kompleksowe rozwiazania mają wbudowaną logikę detekcji supportowanych formatów i wybierają rozwiazanie pasujące do platformy np.:

  • Flash player
  • HTML5 video player
  • VLC webplugin
  • Silverlight

##PROPONOWANE ROZWIĄZANIE

Ad I.

Musisz odpowiedzieć sobie na pytanie, czy w wymaganiach niefunkcjonalnych jest uwzględniony support do streamingu z urzadzen mobilnych (iOS/Android).

  1. Rozwiazanie oparte tylko o Flash (bez supportu dla większości urządzeń mobilnych)

Potrzebujesz Flash build, ktory przechwyci video z webcam i wyśle strumień na zadany atrybutem zasób (na Twoim Streaming Server) po RTMP.

Tutaj (https://github.com/AF83/webcam-streaming) masz przykładowe (nie jedyne) rozwiazanie, które da Ci dobry pogląd jak to powinno być zrealizowane.

  1. Rozwiązanie wykorzystujące HTML5 (support dla urządzeń mobilnych)

Nie korzystałem z tego, więc zostawiam tylko link do dobrego źrodła: http://www.html5rocks.com/en/tutorials/getusermedia/intro/

Osobiscie wybrałbym stworzenie dedykowanej aplikacji mobilnej dla tego celu, niż adaptywną wersje mobilną webaplikacji, ale to pewnie wynika z braku doświadczenia

Ad II.

Tutaj pojawia się podobne pytanie jak w I. - jakie urządzenia/platformy u końcowych użytkowników mają być supportowane. Pytanie jest o tyle ważne, że determinuje zlożoność rozwiązania dla streaming server.

Zaproponuję 2 rozwiązania:

###Darmowe i calkowicie oparte o Open Source (z wyjatkiem wybranych zamkniętych codeców, ktore są częścią ffmpeg:-)

Twój streaming server bedzie skladal się z:

  • nginx
  • nginx-rtmp-module
  • ffmpeg / avconv
  • nginx-secure-link (aby limitować dostęp do zasobów)
  • Http Lua Module (opcjonalnie, aby zachować czytelność logiki w configach)

Na wiki nginx-rtmp-module sa juz gotowe configi pod takie rozwiazanie: https://github.com/arut/nginx-rtmp-module

Jeżeli ograniczysz rozwiazanie Video Player do rozwiazania opartego o Flash, nie musisz kombinowac z transcodinem/segmentacją i konfiguracja serwera jest prosta. Jeśli natomiast zechcesz zapewnić support np. dla iOS to będziesz zmuszony do dodania zasobu udostepniającego video po HLS (też możesz znaleźć rozwiązanie na wiki projektu) .

  • sa tez darmowe alternatywy media serverów, z ktorymi nie miałem doświadczenia: Icecast/2, ffserver

###Kupujesz licencję na jedną instancję komercyjnego media servera.

Slyszalem dobre opinie o Wowza, lecz sam mam dlugie i dobre doświadczenie z napisanym w Erlangu: Flussonic Media Server.

W rozwiazaniu, ktore stworzyłem Flussonic nie jest końcowym nodem dla streamingu i wokół niego stworzyliśmy mini CDN (dfs/nfs + serwery nginx jako reverse proxies). Aktualnie system utrzymuje 30k aktywnych ogladających, przy strumieniowaniu kilku kanalow HD lub zbliżonej.

Główną zaletą użycia zaawansowanego media servera w kontekscie Twojego projektu bylyby:

  • video, które publikujesz do servera, mozesz udostępniać w dowolnych formatach i protokołach (bez jakiejkolwiek konfiguracji)
  • jeżeli zdecydujesz się na archiwizację video, wszystko sprowadza sie do zaznaczenia odpowiedniej opcji (i Twoje streamy beda zapisywane i indeksowane po timestampach)
  • zapewnia wysoką wydajność, stabilność i mozliwości optymalizacji pod konkretne rozwiazanie (poprzez mnóstwo mniej lub bardziej zaawansowanych opcji)

AD III.

Jedynym sensownym wyjściem jest imho skorzystanie z gotowego rozwiazania:

Projekktor i Clappr sa darmowe. Sam mam doświadczenie z Clappr (i polecam!), ciekawe jest to, ze ma wbudowany p2p streaming po webRTC, co w przypadku live streamingu może sporo odciażyc Twoje łącze.

Zabawa z dostarczaniem ciężkiego contentu zaczyna sie w momencie, gdy pojawia sie traffic. Wtedy pojawiają się problemy takiego typu jak:

  • optymalizacja cache

  • stworzenie i optymalizacja swojego CDN

  • strategia failover

  • optymalizacja ustawien kernela na pojedynczych maszynach (np.: http://erlyvideo.org/doc/performance)

  • optymalizacja kodeków lub serwerów dla transcodingu

5 Likes

Dzięki wszystkim za informacje. Przyznam się, że jestem mile zaskoczony ilością i jakością odpowiedz :smile: