Obecnie rozwijam streaming online z 3 kamer miniDV podłączonych przez FireWire, co jest dość podobne do twoich potrzeb.
Szybka wskazówka: vlc + flowplayer / jw player
Przede wszystkim istnieją dwa formaty wideo, których można użyć do strumieniowania online: FLV i h264. FLV jest łatwiejszy do transkodowania, h264 ma lepszy stosunek wielkości do jakości, ale transkodowanie zużywa znacznie więcej procesorów. Oba mogą być wyświetlane przez odtwarzacze flash na stronie internetowej.
Po drugie, infrastruktura przesyłania strumieniowego. Ponieważ twoje pasmo z laptopa jest ograniczone (kilka szczytów Mbps), musisz dostać strumień na serwer i tam ponownie przesłać go do klientów. Tak więc strumień będzie płynął 1 raz do serwera, a następnie N razy do klientów stamtąd. Nie opisałeś swojego połączenia internetowego dla swojego laptopa, więc scenariusz jest podzielony na dwie części:
Laptop jest połączony z publicznym adresem IP LUB możesz podłączyć port NAT do laptopa . Ten scenariusz jest znacznie łatwiejszy, ponieważ możesz łatwo i łatwo połączyć się z serwera na laptopa. Dużą wadą jest to, że jesteś związany z jedną lokalizacją (jednym adresem IP).
Laptop nie jest połączony z adresem I publicznym . Jest to trochę trudne, ale będzie działać z dowolnej sieci, która pozwoli ci na SSH na twój serwer i mieć wystarczającą ilość wysyłania (powinno to zrobić 1 Mbps).
Niezależnie od zastosowanego scenariusza, infrastruktury będzie wyglądać tak
CAMERA - (usb) - LAPTOP - (network, limited upload) - SERVER - (network) - Client 0
- Client 1
- Client 2
- Client N
Streaming z laptopa
Przechwytuj wideo z kamery internetowej . Nigdy nie przechwytywałem strumienia z lokalnie podłączonej kamery internetowej, ale istnieje wiele przykładów, jak to zrobić za pomocą V4L, np .:
Konfiguracja kamery internetowej . Jedyną częścią, którą powinieneś być zainteresowany, jest:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2"
Która jest pierwszą częścią polecenia VLC do połączenia z kamerą internetową. Aby uzyskać więcej informacji, postępuj zgodnie ze wspomnianym HOWTO. Zwłaszcza spójrz na część „grupa wideo” i popraw ścieżkę urządzenia do / dev / video i / dev / audio. Mogą być różne na twoim laptopie.
Transkoduj wideo do FLV . Ja osobiście używam FLV, ponieważ jest on mniej wymagający pod względem procesora. Ciąg transkodowania, którego używam, to:
--sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}'
Który transkoduje strumień wideo do formatu FLV z dźwiękiem MPGA (MP3 nie jest dostępny w moim Ubuntu). Próbkowanie jest w jakiś sposób obowiązkowe, bez niego nie będzie działać. Możesz jednak wybrać mniejszy, na przykład 22050. Spowoduje to transkodowanie strumienia wideo „tak jak jest”, więc skala wynosi 1: 1. Możesz dołączyć parametry szerokości i wysokości, a nawet parametr skali. Zajrzyj do dokumentacji VLC.
Przesyłaj strumieniowo z laptopa . Teraz musisz utworzyć strumień lokalny, do którego serwer się połączy:
:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}
Powiąże to strumień VLC z 0.0.0.0:8081/stream.flv. Całe polecenie będzie wyglądać następująco:
laptop$ vlc v4l:// :v4l-vdev="/dev/video0" :v4l-adev="/dev/audio2" --sout '#transcode{vcodec=FLV1,vb=512,acodec=mpga,ab=64,samplerate=44100}:std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8081/stream.flv}'
Ponowne uruchamianie na serwerze
Przechwyć strumień na serwerze i uruchom go ponownie . Ponownie używamy VLC do przechwytywania i przesyłania strumieniowego. Wykorzystanie oparte jest na scenariuszu infrastrukturalnym z początku tego postu. Jak pokazałem, VLC na laptopie przesyła wideo na jakimś porcie. Ten port musi być dostępny z serwera. Jeśli masz publiczny adres IP laptopa lub port NATed, możesz go przetestować za pomocą telnet:
server$ telnet public_ip_address 8081
Wszystko oprócz „limitu czasu połączenia” ujawni, że możesz połączyć się ze strumieniem laptopa. Jeśli nie masz publicznego adresu IP lub nie możesz portu NAT, musisz to zrobić na odwrót. Możesz SSH z laptopa na serwer i zdalnie przekierować port laptopa na serwer. Prawidłowe polecenie SSH to:
laptop$ ssh your_user@server_ip_address -R 8081:127.0.0.1:8081
To magiczne polecenie „powiąże” port 8081 laptopa z portem 8081 serwera. Oznacza to, że po podłączeniu serwera do 8081 po cichu połączysz się z portem 8081 laptopa przez tunel SSH. Fajnie, co? :) Więc wszystko, co musimy zrobić, to proste połączenie VLC i przesyłanie strumieniowe:
server$ vlc http://localhost:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
Lub w przypadku publicznego adresu IP lub portu NATed:
server$ vlc http://public_ip_address:8081/stream.flv --sout '#std{access=http{mime=video/x-flv},mux=ffmpeg{mux=flv},dst=0.0.0.0:8082/stream.flv}'
Podobnie jak w części dotyczącej laptopa, twoja VLC na serwerze jest powiązana z portem 8082. Dlaczego 8082, a nie 8081? 8081 jest już zajęty przez zdalny przekaźnik SSH. Dlaczego nie używamy transkodowania części jak w pierwszym przykładzie? Film jest już w odpowiednim formacie, więc wszystko, co musimy zrobić, to po prostu przesłać go strumieniowo w obecnej postaci.
Testowanie . W obu przykładach możesz przetestować funkcjonalność, przeglądając strumienie za pomocą VLC. Możesz przetestować swój lokalny strumień:
laptop$ vlc http://localhost:8081/stream.flv
I możesz przetestować strumień swojego serwera:
laptop$ vlc http://server_ip_address:8082/stream.flv
W obu przypadkach powinieneś zobaczyć wejście kamery internetowej.
Wyświetl strumień w sieci
Wyświetlanie strumienia w Internecie, który będzie działał w większości przypadków, odbywa się za pomocą Flash Playera. Wypróbowałem dwa produkty, które są bezpłatne do niekomercyjnego użytku: JW Player i Flowplayer . Zostałem przy Flowplayer, ale nie pamiętam powodu, może z powodu wtyczek (których nie używam :)) lub z powodu lepszej dokumentacji.
Jak wyświetlić strumień FLV z VLC na stronie internetowej jest omawiany tutaj: Stream VLC do strony internetowej za pomocą asf i Flash
Rozwiązywanie problemów
Bądź świadomy wielu problemów, które pojawią się. Po pierwsze, jak we wszystkim, czytaj . VLC jest bardzo rozmownym programem, więc powie ci, gdzie jest problem. Może to być problem z uprawnieniami dostępu do urządzenia wideo / audio, brakującymi kodekami, błędnie napisanymi parametrami out ... Naucz się używać, iftop
aby sprawdzić, czy dane naprawdę przepływają przez sieć itp.