Tworzę aplikację internetową, która powinna odtwarzać strumień RTSP / RTP z serwera http://lscube.org/projects/feng .
Czy tag wideo / audio HTML5 obsługuje rtsp lub rtp? Jeśli nie, jakie byłoby najłatwiejsze rozwiązanie? Być może upuść do wtyczki VLC lub czegoś w tym stylu.
Odpowiedzi:
Technicznie „tak”
(ale nie naprawdę...)
<video>
Znacznik HTML 5 jest niezależny od protokołu - nie obchodzi go to. Umieszczasz protokół wsrc
atrybucie jako część adresu URL. Na przykład:albo może
To powiedziawszy, implementacja
<video>
tagu zależy od przeglądarki. Ponieważ jest to początek HTML 5, spodziewam się częstych zmian wsparcia (lub braku wsparcia).Ze specyfikacji HTML5 W3C ( element wideo ):
źródło
GET rtp://239.255.0.1:6970 net::ERR_UNKNOWN_URL_SCHEME
. Wygląda na to, że navideo
elementach dozwolone są tylko schematy HTTP [S] .Myślę, że duch pytania nie został naprawdę rozwiązany. Nie, od tej pory nie możesz używać tagu wideo do odtwarzania strumieni rtsp. Druga odpowiedź dotycząca linku do „nigdy” w Chromium jest trochę myląca, ponieważ wątek / odpowiedź, do której prowadzi link, nie odnosi się bezpośrednio do tego, że Chrome odtwarza rtsp za pośrednictwem tagu wideo. Przeczytaj cały wątek, do którego prowadzą linki, a zwłaszcza komentarze na samym dole i linki do innych wątków.
Prawdziwa odpowiedź brzmi: Nie, nie możesz po prostu umieścić tagu wideo na stronie HTML 5 i odtwarzać rtsp. Musisz użyć jakiejś biblioteki Javascript (chyba że chcesz grać w gry z odtwarzaczami Flash i Silverlight), aby odtwarzać strumieniowe wideo. {IMHO} Przy tempie, w jakim odbywa się dyskusja i wdrażanie wideo HTML 5, różni dostawcy zastrzeżonych standardów wideo nie są zainteresowani pomaganiem w tym postępie, więc nie licz na obiecaną łatwość użycia tagu wideo, chyba że twórcy przeglądarki weźmie na siebie rozwiązanie problemu ... znowu mało prawdopodobne. {/ IMHO}
źródło
To stara kwestia, ale ostatnio musiałem to zrobić samemu i osiągnąłem coś działającego, więc (poza odpowiedzią taką jak moja zaoszczędziłaby mi trochę czasu): Zasadniczo użyj ffmpeg do zmiany kontenera na HLS, większość strumienia IPCams h264 i trochę podstawowy typ PCM, więc użyj czegoś takiego:
Następnie użyj video.js z wtyczką HLS To ładnie odtworzy transmisję na żywo. Pod drugim linkiem znajduje się również przykład jsfiddle).
Uwaga: chociaż nie jest to natywna obsługa, nie wymaga niczego dodatkowego na interfejsie użytkownika.
źródło
ffmpeg -v info -rtsp_transport tcp -i rtsp://host:port/[sdp] -c:v copy -c:a copy -maxrate 400k -bufsize 1835k -pix_fmt yuv420p -flags -global_header -hls_time 10 -hls_list_size 6 -hls_wrap 10 -start_number 1 /var/www/html/test.m3u8
ffmpeg.exe -fflags nobuffer -rtsp_transport tcp -i rtsp://[SOURCE] -flags +cgop -g 30 -hls_flags delete_segments [DESTINATION]
Chrome nigdy nie zaimplementuje obsługi przesyłania strumieniowego RTSP.
Przynajmniej słowami programisty Chromium tutaj :
źródło
Istnieją trzy protokoły / technologie przesyłania strumieniowego w HTML5:
Transmisja na żywo, małe opóźnienia - WebRTC - Websocket
Transmisja na żywo i VOD, duże opóźnienia - HLS
1. WebRTC
W rzeczywistości WebRTC to SRTP (bezpieczny protokół RTP). Można więc powiedzieć, że tag wideo obsługuje RTP (SRTP) pośrednio przez WebRTC.
Dlatego, aby uzyskać strumień RTP w przeglądarce Chrome, Firefox lub innej przeglądarce HTML5, potrzebujesz serwera WebRTC, który dostarczy strumień SRTP do przeglądarki.
2. Websocket
Opiera się na protokole TCP, ale ma mniejsze opóźnienia niż HLS. Ponownie potrzebujesz serwera Websocket.
3. HLS
Najpopularniejszy protokół przesyłania strumieniowego o dużym opóźnieniu dla VOD (wstępnie nagrane wideo).
źródło
Dzięki VLC jestem w stanie transkodować strumień RTSP na żywo (mpeg4) na strumień HTTP w formacie OGG (Vorbis / Theora). Jakość jest słaba, ale wideo działa w Chrome 9. Testowałem również z trankodowaniem w WEBM (VP8), ale wydaje się, że nie działa (VLC ma taką opcję, ale nie wiem, czy na razie jest naprawdę zaimplementowana. .)
Pierwszy, który ma dokument na ten temat, powinien nas powiadomić;)
źródło
"C:\Program Files\VideoLAN\VLC\vlc.exe" -I dummy screen:// :screen-fps=16.000000 :screen-caching=100 :sout=#transcode{vcodec=theo,vb=800,scale=1,width=600,height=480,acodec=mp3}:http{mux=ogg,dst=127.0.0.1:8080/desktop.ogg} :no-sout-rtp-sap :no-sout-standard-sap :ttl=1 :sout-keep
- to jest polecenie VLC, które przesyła dane wejściowe (np. urządzenie do przechwytywania ekranu) do danego strumienia wyjściowego (np. 127.0.0.1:8080/desktop.ogg )<video id="video" src="http://localhost:8080/desktop.ogg" autoplay="autoplay">
.my_ip:port
adres niż kiedyś i HTML5<video>
tag tak:<video width="640"><source src="http://my_ip:port/test" type="video/ogg">HTML5 not supported</video>
.Moje obserwacje dotyczące znacznika wideo HTML 5 i strumieni rtsp (rtp) są takie, że działa on tylko z programem Konqueror (KDE 4.4.1, zaplecze Phonon ustawione na GStreamer). Mam tylko wideo (bez dźwięku) ze strumieniem H.264 / AAC RTSP (RTP).
Strumienie z http://media.esof2010.org/ nie działały z Konquerorem (KDE 4.4.1, zaplecze Phonon ustawione na GStreamer).
źródło
Chrome nie obsługuje przesyłania strumieniowego RTSP. Ważny projekt do sprawdzenia WebRTC.
„WebRTC to darmowy, otwarty projekt, który zapewnia przeglądarkom i aplikacjom mobilnym funkcje komunikacji w czasie rzeczywistym (RTC) za pośrednictwem prostych interfejsów API”
Obsługiwane przeglądarki:
Chrome, Firefox i Opera.
Obsługiwane platformy mobilne:
Android i IOS
http://www.webrtc.org/
źródło