Mam kamerę internetową Logitech C920. Ma możliwość bezpośredniego kodowania wideo w H264.
Chcę odtworzyć to, co zostało zrobione za pomocą Beaglebone, ale używając Raspberry Pi: wyślij strumień H264 do sieci . Raspberry Pi jest wtedy tylko tutaj, aby spakować strumień w RTP, kompresja wideo jest wykonywana przez samą kamerę internetową. Tryb H264 jest wymuszany za pomocą video4linux.
Do tej pory, a jeśli używam wspólnego komputera z najnowszą wersją Ubuntu, działa on za pomocą VLC jako serwera lub GStreamera. Na przykład, jeśli uruchomię na Raspberry Pi serwer VLC za pomocą polecenia:
cvlc --sout=#rtp{sdp=rtsp://:8554/test} 'v4l2:///dev/video0:chroma=H264:width=800:height=600:fps=30'
... a potem, jeśli czytam strumień z VLC na innym komputerze, wszystko jest w porządku.
Jeśli jednak użyję Raspberry Pi do wysłania strumienia wideo, wynik jest dość słaby. Dużo śmieci na obrazie, gdy tylko coś się poruszy. Klucze obrazu są odbierane co 10 sekund, ale tymczasem nie jest wystarczająco dobry w porównaniu ze strumieniem ze zwykłego komputera.
Wypróbowałem również metodę opisaną dla beaglebone z dostarczonym narzędziem „capture” : ok, jeśli przesyłam strumieniowo z prawdziwego komputera, ten sam problem ze śmieciami, jeśli przesyłam strumieniowo z Raspberry Pi.
To nie jest problem z siecią: wykonałem kilka kontroli sieci z Wireshark i statystykami VLC, nie mam utraty pakietów. Próbowałem z Raspbian i Arch Linux dla Raspi (gstreamer 0.10 w raspbian, gstreamer 1.0 w Arch Linux).
Nie wiem, czy jest to istotne, czy nie, ale testowałem również z wersją Raspbian obsługującą soft float. Najpierw należy wykonać aktualizację, aby móc korzystać z jądra 3.2; ale ten sam problem, wideo ma trochę śmieci.
Masz pomysł, co mogę zrobić, aby poprawić jakość wideo?
źródło
Odpowiedzi:
Miałem ten sam problem, znalazłem ten wątek podczas wyszukiwania kodera sprzętowego, a nie problemów z C920.
Niemniej jednak, wykonaj aktualizację oprogramowania dla Raspberry Pi i śmieci powinny zniknąć
$> sudo rpi-update
Sam znalazłem rozwiązanie tutaj: http://wiki.matthiasbock.net/index.php/Logitech_C920,_streaming_H.264#Raspberry_Pi
źródło
Możesz spróbować użyć FFMPEG. Ale problemem nie jest używanie wersji repozytoriów, ponieważ jest przestarzała. Istnieje rozwidlona wersja, która działa naprawdę dobrze.
Będziesz musiał go skompilować, co zajmuje około 5 godzin lub pobrać skompilowany plik binarny.
Za pomocą tych ustawień możesz przesyłać dane ze sterownika V4L do FFMPEG. Tam gdzie
-i "fifo"
powinno być po prostu-i
przechwycenie potokowego strumienia i-f
będziesz musiał dwukrotnie sprawdzić, jak go wyprowadzić H264. FLV przepakowuje go do FLV, który można odtwarzać za pomocą odtwarzaczy HTML.lub przykład, który znalazłem, który celuje bezpośrednio w V4L, ale oyu musi mieć kamerę w
/dev/video*
miejscu, gdzie * jest1
lub więcej ...-f
oznacza format na wyjściu. To nie znaczy, że będzie to jak transkodowanie H264 do flv tylko dostaje zapakowane w formacie FLV. następnie zmień adres na odtwarzacz VLC swoich klientów. na przykład-f mpegts udp:192.168.1.19:1234
VLC nie działa zbyt dobrze na Pi. Odniosłem bardzo mały sukces wypychając moduł Pi cmaera na komputer przy użyciu UDP. Działało, ale nie było stabilne.
Możesz także spojrzeć na instalację nginx z modułem rtmp, który działa w leczeniu. Spójrz na ten przewodnik, ale będziesz musiał nieco poprawić ustawienia. Następnie podłącz swój odtwarzacz VLC do strumienia nginx-rtmp i będzie działał jak urok.
źródło
To wydaje się działać dla mnie @ przynajmniej ...
cvlc v4l2:// :v4l2-dev=/dev/video0 :v4l2-width=640 :v4l2-height=480 --sout="#transcode{vcodec=h264,vb=800,scale=1,acodec=mp4a,ab=128,channels=2,samplerate=44100}:rtp{sdp=rtsp://:8554/live.ts}" -I dummy
źródło
Wypróbuj większy bufor na kliencie wyświetlającym wideo. Dla mnie jest dramatyczna różnica między buforem 1000 ms a 200 ms. Bufor 5000 ms wygląda lepiej niż bufor 1000 ms.
: buforowanie sieci = 2000
źródło
Opublikowałem możliwe rozwiązanie na forum malinowym przy użyciu lekkiego serwera RTSP opartego na live555, który przechwytuje H264 ze sterownika V4L2. Jest dostępny z github h264_v4l2_rtspserver
Dokonano tego w przypadku kamery raspicamera, ale powinna ona działać z każdym urządzeniem V4L2, które zapewnia H264.
źródło
Jeśli dobrze zrozumiałem twoją sytuację, chcesz, aby Raspberry transkodował wideo do H264? Myślę, że właśnie dlatego masz niską wydajność, ponieważ VLC używa kodowania programowego, a Raspberry nie jest potężny do tego zadania.
Proponuję wypróbować Gstreamer i
gst-omx
wtyczki . Jest element do sprzętowego kodowania wideo, który byłby dobrym serwerem z twojego Raspberry.źródło