Próbuję przesyłać strumieniowo dźwięk na żywo za pomocą ffmpeg
zewnętrznego mikrofonu USB. Wykonałem ten prawie samouczek
Musiałem dostosować kilka kroków, ale w końcu udało mi się odebrać strumień mojego laptopa za pomocą tego polecenia:
ffmpeg -f oss -i /dev/dsp1 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://192.168.28.116:1234
Procesor jest prawie w 100%, mam zły dźwięk przez dwie sekundy i po niczym ... Wireshark widzę, że płyta wysyła ramki w sposób ciągły.
Czy ktoś ma pomysły na zmniejszenie zużycia procesora?
Odpowiedzi:
Aby odpowiedzieć na konkretne pytanie, możesz zmniejszyć procesor, przesyłając arecord do ffmpeg:
Musisz wymienić plughw: 1,0 na określoną kartę dźwiękową. Aby uzyskać informacje, patrz arecord -l. Na moim Raspie Pi spadło z ~ 95% procesora do ~ 35%.
źródło
Wejście ALSA
Jedną z możliwości jest przejście przez ALSA. Komenda podobna do powyższej byłaby
Nie jestem pewien, jak wpłynie to na użycie procesora.
źródło
Działa to i zmniejsza użycie procesora:
Pamiętaj, aby zastąpić wartość domyślną: CARD = U0x46d0x819 z identyfikatorem mikrofonu (uzyskanym z arecord -l) lub możesz określić
-i hw:0,0
(lub dowolne urządzenie).Miałem podobny problem - kodowanie mp3 pochłaniało ponad 90% mocy procesora i po prostu nie mogłem nadążyć za dźwiękiem - dlatego zmieniłem go na kodowanie MP2. Zużyło to około 15-18% CPU (zmierzone vi
top
) i płynnie przesyła do VLC w mojej sieci LAN. Stanowiłoby idealną nianie lub coś w tym rodzaju. Występuje tylko drugie opóźnienie, czyli buforowanie na końcu VLC.Uwaga: Adres IP to adres multiemisji ([224-239] .xyz). Nie musisz celować w określone urządzenie sieciowe w sieci LAN, a router szerokopasmowy utrzyma ruch lokalny (domyślnie).
źródło
Można znacznie zmniejszyć obciążenie procesora, zmniejszając częstotliwość próbkowania dźwięku urządzenia wejściowego (
-ar 8000
wcześniej-f alsa
) i ustawiając szybkość transmisji dźwięku kodeka na 128k (-b:a 128k
). Jak na ironię, zmniejszenie liczby kanałów (-ac 1
) wydawało się zwiększać obciążenie procesora, więc znalazłem, że to polecenie działa przy dość niskim CPU:Chociaż należy pamiętać, że zależy to również od możliwości sprzętu przechwytującego, którego próbujemy użyć, oraz wersji ffmpeg / avconv.
źródło