FFMPEG kullanarak canlı ses akışı


14

ffmpegHarici USB mikrofon kullanarak canlı ses akışı sağlamaya çalışıyorum . Bu neredeyse öğreticiyi takip ettim

Bazı adımları uyarlamak zorunda kaldım ama sonunda, bu komutu kullanarak dizüstü bilgisayarımın akışını aldım:

ffmpeg -f oss -i /dev/dsp1 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://192.168.28.116:1234

CPU% 100'e yakın, iki saniye boyunca kötü bir sesim var ve hiçbir şeyden sonra ... Wireshark'ta kartın sürekli olarak çerçeve gönderdiğini görüyorum.

Birisi CPU kullanımını azaltmak için fikirleri var mı?


Hız aşırtmaya ve farklı bir bellek bölünmesine bakmak isteyebilirsiniz. Kodek seçiminiz varsa, geçiş yaparak bazı iyileştirmeler yapabilirsiniz. Akışın sıkıştırılmasını da incelemek isteyebilirsiniz - bu sıfır kazanç olsa da - transfer zamanında kazandığınız her şey sıkıştırmada kaybolabilir.
Steve Robillard

Önce yerel bir dosyaya yazmayı denediniz mi? Adım adım gitmeye çalışacağım: 1) bir dalga dosyasına gerçek zamanlı kayıt, 2) bir mp3 dosyasına gerçek zamanlı kayıt 3) ağ üzerinden akış akışı
pixelistik

şu anda değil. tam otomatik ffmpeg ;-) yerine tüm bu adımları elle yapmak karmaşık gibi görünüyor
hotips 6:12

Ne kaydediyorsun?
Alex Chamberlain

1
Bir ethernet bebek
telefonu

Yanıtlar:


7

Özel sorunuza cevap vermek için, arecord'u ffmpeg'e bağlayarak CPU'yu azaltabilirsiniz:

arecord -f cd -D plughw:1,0 | ffmpeg -i - -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://234.5.5.5:1234

Plughw: 1,0 kodunu kendi ses kartınızla değiştirmeniz gerekir. Bilgi için bakınız -l. Rasp Pi'mde ~% 95 CPU'dan ~% 35'e çıktı.


6

ALSA Girişi

Bir alternatif ALSA üzerinden geçmektir. Yukarıdakine benzer bir komut,

ffmpeg -ac 1 -f alsa -i hw:0,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp://localhost:1234

Bunun CPU kullanımını nasıl etkileyeceğinden emin değilim.


Denedim: ffmpeg -ac 1 -f alsa -i hw: 1,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp: //192.168.1.116: 1234 Ama ffmpeg birkaç saniye sonra çöküyor: [alsa @ 0x7a1510] ALSA tamponu xrun. Başka fikir var mı?
hotips

Ffmpeg -f oss -i / dev / dsp1 -ab 32k -ac 1 -re -f rtp rtp: //192.168.28.116: 1234'i test ettim ama ses çok kötü ... gecikme süresi yaklaşık 6 saniye. Daha iyi bir çözüm bulmak için herhangi bir fikrin var mı?
hotips

1
@ si2w Sanırım mp3 için 32k biraz şaka. Ya bu ya da farklı bir kodek deneyin. Belki telefonlar için tasarlanmış G2xx serilerinden biri
Alex Chamberlain

3

Bu, işlemci kullanımını azaltır ve azaltır:

ffmpeg -f alsa -i default:CARD=U0x46d0x819 -acodec mp2 -ac 1 -re -f rtp rtp://234.5.5.5:1234 2> /tmp/mylog.log &

Varsayılanı değiştirdiğinizden emin olun: CARD = U0x46d0x819, mikrofon kimliğinizle (arecord -l'den elde edilir) veya belirttiğinizde -i hw:0,0(veya hangi cihazsa ).

Ben benzer bir sorun vardı - mp3 kodlama% 90 + cpu gücü aldı ve sadece ses yetişemedi - bu yüzden mp2 kodlama değiştirdi. Bu, CPU'nun yaklaşık% 15-18'ini (vi olarak ölçülür top) kullandı ve LAN'ımdaki VLC'ye sorunsuz bir şekilde akıyor. Mükemmel bir bebek monitörü ya da her neyse. VLC ucunda tamponlama olan sadece bir saniye kadar gecikme var.

Not: IP adresi çok noktaya yayın adresidir ([224-239] .xyz). LAN'ınızdaki belirli bir ağ cihazına hedeflemenize gerek yoktur ve geniş bant yönlendiriciniz trafiği yerel tutar (varsayılan olarak).


2

Giriş cihazının ses örnek hızını azaltarak ( -ar 8000 önce -f alsa ) ve kodek ses bit hızını 128k ( -b:a 128k) olarak ayarlayarak CPU yükünü önemli ölçüde azaltabilirsiniz . Ayrıca ironik kanal sayısını ( -ac 1) azaltmak CPU yükünü artırmak gibi görünüyordu bu yüzden bu komut oldukça düşük CPU'da çalıştığını bulduk:

ffmpeg -ar 8000 -f alsa -i hw:0 -acodec mp2 -b:a 128k -f rtp rtp://other:4444

Birinin kullanmaya çalıştığı yakalama donanımının yeteneklerine ve ffmpeg / avconv sürümlerine bağlı olduğunu hatırlaması gerekse de.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.