Więc jestem inżynierem oprogramowania, który próbuje zrozumieć pewne drobiazgowe szczegóły na temat działania mediów strumieniowych. Lwia część dnia poświęciła na zrozumienie różnych kodeków, formatów kontenerów i protokołów transmisji strumieniowych związanych z moją aplikacją. Jak dotąd rozumiem, jak to działa, co bardzo dobrze można wprowadzić w błąd:
- Strumieniowe przesyłanie multimediów sprowadza się do formatu kontenera i protokołu przesyłania strumieniowego :
- Wszystkie dane audio są kodowane (przez kodek audio) do strumienia bitów audio
- Wszystkie dane wideo są kodowane (ponownie przez kodek) do strumienia bitów wideo
- Dwa strumienie są łączone ( multipleksowane? ) Razem w kontenerze, który ostatecznie staje się plikiem (takim jak MP4 itp.)
- Specjalny serwer multimediów następnie podaje ten kontener (plik MP4 lub inny format) klientowi (być może odtwarzaczowi wideo HTML5 działającemu w przeglądarce) za pośrednictwem standardowego protokołu przesyłania strumieniowego, takiego jak RTSP
- W przypadku klienta przeglądarki zakładam, że sama przeglądarka ma klienta RTSP, który następnie przedstawia użytkownikom HTML5 Video Player
- I mógłby obsługiwać pliku MP4 z internetowego serwera, takich jak nginx lub httpd, ale ponieważ serwery te nie są serwerami RTSP, będzie tylko w stanie leczyć wniosków o MP4 jako wnioski do pobrania , a tym samym nie będzie w stanie przesyłać strumieniowo pliki medialne
- Podobnie, jeśli miałbym użyć
curl
do pobrania plików z serwera nginx, ponieważcurl
ani nginx nie mówią RTSP, byłoby to traktowane jako pobieranie pliku
- Podobnie, jeśli miałbym użyć
- Ale kiedy hostuję plik MP4 z serwera multimediów strumieniowych (VideoLAN, Red5, Wowza itp.) I używam klienta RTSP (lub dowolnego obsługiwanego klienta multimediów strumieniowych) do żądania strumienia z tego serwera, to wtedy i tylko wtedy nie każdy rzeczywisty strumieniowe wystąpić
- Dlatego nawet pomimo tego, że „filmy” YouTube lub Vimeo są hostowane na stronach HTML obsługiwanych przez HTTP (S) przez serwery HTTP, zakładam, że osadzone odtwarzacze wideo na tych stronach (z których faktycznie odtwarzane są filmy) faktycznie zaczynają sekundę , kolejne połączenie z serwerem przesyłania strumieniowego, a przesyłanie strumieniowe odbywa się przez RTSP lub inny protokół inny niż HTTP
Tak rozumiem i sądzę, że najpierw zapytam, czy jeśli coś, co powiedziałem powyżej, jest nieprawidłowe, zacznij od poprawienia mnie! Zakładając, że mam mniej więcej rację:
W jaki sposób odtwarzacze multimediów strumieniowych, działające na stronach HTML i obsługiwane przez serwery HTML, ustanawiają połączenia strumieniowe (RTSP itp.) Z serwerami multimediów strumieniowych (obsługującymi żądania RTSP)?
Odpowiedzi:
Typowe zastosowania
Wydaje się, że RTSP jest obecnie częściej używany w aplikacjach / interfejsach urządzeń, które bezpośrednio transmitują na żywo (np. Kamera IP) lub ponownie streamują (jak silnik), niż do przesyłania strumieniowego zapisanych plików multimedialnych z fizycznej lokalizacji za pośrednictwem interfejsu odtwarzania internetowego HTTP z wbudowany odtwarzacz.
Wygląda na to, że RTSP jest protokołem stanowym i używa przesyłania strumieniowego w większym stopniu niż TCP, a także jako urządzenia serwerowego (takiego jak kamera IP), który jest podłączony do sieci TCP / IP i wysyła strumienie przez UDP itp. Następnie łączysz się z tymi kanałami (serwerem) jako klient w tej samej sieci i możesz wysyłać żądania RTSP, aby odpowiednio je wykorzystać.
Przepływ logiczny
Sposób, w jaki rozumiem przepływ mediów strumieniowych w tej formie, to:
Ogólne porównanie HTTP i RTSP znajduje się w sekcji Technologie przesyłania strumieniowego poniżej.
Ponadto
W poniższej sekcji 10 powodów, dla których nigdy nie powinieneś hostować własnych filmów , zacytowałem części, które prowadzą do tego, aby pomóc Ci odpowiedzieć „ogólnie” bez pytania.
Zasadniczo mówi, że strona internetowa, która ma wbudowane sterowanie odtwarzaczem multimediów, będzie:
źródło
Poniżej zajmę się głównie twoim pytaniem, co się dzieje, gdy wideo jest wyświetlane w przeglądarce. Temat jest obszerny, więc będę dotyczył tylko odpowiednich elementów.
HTML5 wprowadziło
<VIDEO>
tag, który rozwiązał problem integracji wyświetlanego wideo z przeglądarką podczas korzystania z JavaScript i CSS. Poprzedni<OBJECT>
tag wymagał zewnętrznego oprogramowania i był źle zintegrowany ze stroną. Nowy tag w efekcie wymagał, aby przeglądarka stała się również odtwarzaczem wideo, chociaż nie narzucono żadnych standardów. Rezultatem było całkowite rozdrobnienie standardów, do którego jedynym rozwiązaniem jest to, że serwer wideo udostępni kilka formatów wideo i że wszystkie te alternatywne źródła zostaną określone w<VIDEO>
tagu, z którego przeglądarka wybierze ten, który obsługuje.Przykład tagu z wieloma źródłami:
Sam
<VIDEO>
tag jest niezależny od protokołu, więc może używać dowolnego protokołu obsługiwanego przez przeglądarkę, w tym RTSP. Obsługa protokołu MPEG-DASH (dynamiczne adaptacyjne przesyłanie strumieniowe przez HTTP) stała się ostatnio bardzo obszerna, więc będzie można go odtwarzać na większości urządzeń i przeglądarek natywnych lub przy użyciu HTML5, co oznacza, że nie są wymagane żadne dodatkowe wtyczki. Zobacz tabelę zgodności urządzeń i przeglądarek . Zobacz także ten artykuł Mozilli dotyczący przygotowania serwera do obsługi MPEG-DASH. DASH działa przez HTTP, więc będzie działać tak długo, jak długo twój serwer HTTP obsługuje żądania zakresu bajtów i jest skonfigurowany do obsługi plików .mpdmimetype="application/dash+xml"
.Normalna interakcja między klientem a serwerem wygląda podobnie do poniższej. W przypadku HTML5 VIDEO przeglądarka jest również odtwarzaczem, chociaż może otworzyć nowe połączenie do odtwarzania.
Początkowe połączenie dostarcza metadane, których klient używa do wyświetlania wideo. Jeśli do uzyskania tych metadanych użyto protokołu RTSP, połączenie RTP zostanie później utworzone w celu przesłania danych wideo + audio. Protokół RTCP służy do przesyłania dodatkowych poleceń na serwer.
RTP, RTCP i RTSP działają na różnych portach. Zwykle gdy RTP jest na porcie N, RTCP jest na porcie N + 1. Sesja RTP może zawierać wiele strumieni do połączenia na końcu odbiornika; na przykład audio i wideo mogą być na osobnych kanałach.
Aby nikt nie został zablokowany przez twoje treści, powinieneś udostępnić zarówno kodeki wolne od tantiem, webM lub Theora, jak i wideo H.264, a także audio Vorbis i MP3. (Łatwo powiedziane, trudne do zrobienia.)
Oto, co dzieje się szczegółowo dla RTSP:
Klient nawiązuje połączenie TCP z serwerami, zwykle na porcie TCP 554, dobrze znanym porcie RTSP.
Następnie klient rozpocznie wydawanie serii poleceń nagłówka RTSP, które mają format podobny do HTTP, z których każde jest potwierdzane przez serwer. W ramach tych komend RTSP klient opisuje serwerowi szczegóły wymagań dotyczących sesji, takie jak obsługiwana wersja RTSP, transport używany do przepływu danych oraz wszelkie powiązane informacje o porcie UDP lub TCP. Informacje te są przekazywane za pomocą nagłówków DESCRIBE i SETUP i są uzupełniane w odpowiedzi serwera o identyfikator sesji, którego klient i dowolne przejściowe urządzenia proxy mogą wykorzystać do identyfikacji strumienia podczas dalszej wymiany.
Po zakończeniu negocjacji parametrów transportu klient wyda polecenie PLAY, aby polecić serwerowi rozpoczęcie dostarczania strumienia danych RTP.
Gdy klient zdecyduje się zamknąć strumień, wydawane jest polecenie TEARDOWN wraz z identyfikatorem sesji instruujące serwer, aby zaprzestał dostarczania RTP związanego z tym identyfikatorem.
Dalsza lektura:
źródło
Oto szybka i brudna odpowiedź
Istnieje różnica między odtwarzaniem wideo w Internecie a jego przesyłaniem strumieniowym w czasie rzeczywistym.
Odtwarzanie odbywa się za pomocą odtwarzacza, który znajduje się na stronie internetowej (może to być Flash, JS lub obiekt wideo HTML5). Klient (przeglądarka) pobiera ten odtwarzacz i uruchamia go. Z kolei odtwarzacz pobiera wideo z prostego adresu URL pobierania. W rzeczywistości, nawet w Youtube, istnieją programy, które umożliwiają bezpośredni dostęp do hostowanych plików wideo i pobieranie ich tak, jak każdego innego pliku. Ponieważ system używa zwykłego starego łącza pobierania, nie ma potrzeby stosowania złożonych protokołów przesyłania strumieniowego, takich jak RTSP
Streaming w czasie rzeczywistym (powiedzmy z kamery internetowej) jest ... cóż, trudniejszy. Flash ma tę funkcję wbudowaną, ale nie należy jej już używać. Wideo HTML5 nie obsługuje przesyłania strumieniowego w czasie rzeczywistym, ale ludzie mogli go „oszukać”, zmuszając serwer hostingowy plików do ciągłej zmiany oferowanego pliku wideo.
źródło