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

SciComputing
źródło