Z góry przepraszam za naruszenie jakiejkolwiek etykiety / zasad dotyczących publikowania w SuperUser. To jest mój pierwszy post.
Po pierwsze, jestem amatorem strumieniowego przesyłania wideo - rozwiązanie, które „brukowałem” razem, to po prostu wyszukiwanie w różnych witrynach.
Po drugie, nie jestem związany z żadną architekturą, którą wybrałem (z wyjątkiem Fedory będącej źródłem strumieniowym). VLC / windows mogą wyjść z okna, jeśli ludzie mają lepsze rozwiązania. Płatne rozwiązania są również mile widziane, ale preferowane jest oprogramowanie open source.
Mam 6 stacji testujących, gdzie ludzie biorą testy, i chciałbym je monitorować za pomocą dwóch kamer C920 Logitech. Testy są uruchamiane w Fedorze i byłoby miło wykorzystać te same komputery do przesyłania strumieniowego kamer internetowych. Wszystkie systemy działają w sieci 1 gigabitowej.
Aby skonfigurować gstreamer, zbadałem przykłady konfiguracji OZ9AEC na jego stronie internetowej:
http://www.oz9aec.net/index.php/gstreamer/487-using-the-logitech-c920-webcam-with-gstreamer-12
Poszedłem z podejściem v4l2src.
Uruchamianie strumieni
Aby przesyłać strumieniowo dwie kamery, uruchamiam następujące polecenia.
gst-launch-1.0 v4l2src device = / dev / video1! wideo / x-h264, szerokość = 1280, wysokość = 720, f ramerate = 30/1! h264parse! rtph264pay config-interval = 3! multiudpsink klienci = 192.168.2.57:2511,127.0.0.1:2511
gst-launch-1.0 v4l2src device = / dev / video2! wideo / x-h264, szerokość = 1280, wysokość = 720, f ramerate = 30/1! h264parse! rtph264pay config-interval = 3! multiudpsink klienci = 192.168.2.57:2512,127.0.0.1:2512
Zgodnie z moim ograniczonym zrozumieniem gstreamer, powinno to być przesyłane do dwóch klientów UDP - mojego komputera z systemem Windows i mojego lokalnego hosta
Uruchamianie lokalnego odbiornika
Aby sprawdzić, czy rzeczy są aktualnie nadawane, uruchomiłem dwóch lokalnych klientów gstreamer lokalnie na tym samym komputerze.
gst-launch-1.0 port udpsrc = 2511 caps = 'application / x-rtp, media = (string) wideo, cl ock-rate = (int) 90000, encoding-name = (string) H264 '! rtph264depay! avdec_h264! za utovideosink fps-update-interval = 1000 sync = false
gst-launch-1.0 port udpsrc = 2512 caps = 'application / x-rtp, media = (string) wideo, cl ock-rate = (int) 90000, encoding-name = (string) H264 '! rtph264depay! avdec_h264! za utovideosink fps-update-interval = 1000 sync = false
Uruchomiłem te polecenia i pojawiają się dwa ekrany wideo, które przesyłają strumieniowo wideo.
Uruchomienie mojej stacji monitorującej
Następnym krokiem jest użycie VLC do monitorowania moich 12 kamer internetowych.
Skonfigurowałem 12 plików SDD, z których każdy reprezentuje każdy z moich strumieni
https://stackoverflow.com/questions/13154983/gstreamer-rtp-stream-to-vlc
Wybieram VLC, ponieważ ma przyjemny przycisk do nagrywania strumienia w dowolnym momencie, więc nie możemy monitorować, ale także nagrywać, kiedy chcemy.
Oto dwa przykładowe pliki sdp:
192.168.124.1_2511.sdp
v = 0 c = IN IP4 192.168.124.1 s = ESP H264 + AAC STREAM m = wideo 2511 RTP / AVP 96 a = rtpmap: 96 H264 / 90000 a = fmtp: 96 media = wideo; częstotliwość taktowania = 90000; encoding-name = H264;
192.168.124.1_2512.sdp
v = 0 c = IN IP4 192.168.124.1 s = ESP H264 + AAC STREAM m = wideo 2512 RTP / AVP 96 a = rtpmap: 96 H264 / 90000 a = fmtp: 96 media = wideo; częstotliwość taktowania = 90000; encoding-name = H264;
Teraz wszystko staje się podejrzane
Jeśli uruchomię VLC i otworzę pliki sdp, tylko pierwszy otwarty otworzy połączenie i pokaże strumień.
Drugie okno VLC po prostu się zrezygnuje i upłynie czas.
Jeśli uruchomię najpierw 192.168.124.1_2511, wtedy 192.168.124.1_2512 nie powiedzie się.
Jeśli uruchomię najpierw 192.168.124.1_2512, wtedy 192.168.124.1_2511 nie powiedzie się.
Jednak w przypadku 6 stacji otrzymuję tylko 6 strumieni wideo, a nie 12.
Obecna praca polega na zakupie drugiego systemu monitorowania i po prostu przesyła strumień 192.168.124.1_2511 do jednego, a 192.168.124.1_2512 do drugiego, ale nie jest to dobrze skalowane, ponieważ mamy więcej niż jedną stację monitorującą, więc zamiast 3 komputery na 3 stacje monitorujące, potrzebujemy 6 komputerów. Każdy komputer jest wyposażony w wysokiej klasy karty graficzne, więc koszty szybko rosną.
Być może problemy dotyczą Gstreamera i przesyłam zbyt wiele danych w mojej sieci? Wszelkie porady dotyczące zmniejszenia obciążenia sieci są również mile widziane.
Jeszcze raz przepraszam, jeśli popełniłem błędy w moim poście lub naruszyłem etykietę wysyłkową.
Z góry wielkie dzięki i szczęśliwego Święta Dziękczynienia z USA,
DrDeveloper
źródło