Streaming audio langsung menggunakan FFMPEG

13

Saya mencoba streaming audio langsung menggunakan ffmpegdan mikrofon USB eksternal. Saya mengikuti hampir tutorial ini

Saya harus menyesuaikan beberapa langkah tetapi akhirnya, saya berhasil menerima aliran laptop saya menggunakan perintah ini:

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

CPU hampir 100%, saya memiliki suara yang buruk selama dua detik dan setelah tidak ada ... Saya melihat di Wireshark bahwa papan mengirim frame terus menerus.

Apakah ada yang punya ide untuk menurunkan penggunaan CPU?

hotips
sumber
Anda mungkin ingin melihat overclocking dan pemisahan memori yang berbeda. Jika Anda memiliki pilihan codec, Anda mungkin dapat mencapai beberapa peningkatan dengan beralih. Anda mungkin juga ingin menyelidiki kompresi aliran - meskipun ini mungkin nol untung - apa pun yang Anda peroleh dalam waktu transfer mungkin hilang dalam kompresi.
Steve Robillard
Apakah Anda mencoba menulis ke file lokal terlebih dahulu? Saya akan mencoba untuk melangkah langkah demi langkah: 1) rekaman realtime ke file gelombang, 2) rekaman realtime ke file mp3 3) streaming barang melalui jaringan
pixelistik
tidak saat ini. tampaknya rumit untuk melakukan semua langkah mereka secara manual alih-alih ffmpeg otomatis penuh ;-)
hotips
Apa yang kamu rekam?
Alex Chamberlain
1
Saya mencoba membuat babyphone ethernet
hotips

Jawaban:

7

Untuk menjawab pertanyaan spesifik Anda, Anda dapat mengurangi CPU dengan mem-pipkan arecord ke ffmpeg:

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

Anda harus mengganti plughw: 1,0 dengan kartu suara khusus Anda. Lihat arecord -l untuk info. Pada Rasp Pi saya, itu berubah dari ~ 95% CPU menjadi ~ 35%.

kumar303
sumber
6

Input ALSA

Salah satu alternatif adalah melalui ALSA. Perintah serupa di atas adalah

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

Saya tidak yakin bagaimana ini akan mempengaruhi penggunaan CPU.

Alex Chamberlain
sumber
Saya mencoba: ffmpeg -ac 1 -f alsa -i hw: 1,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp: //192.168.1.116: 1234 Tetapi ffmpeg crash setelah beberapa detik: [alsa @ 0x7a1510] ALSA buffer xrun. Ada ide lain?
hotips
Saya menguji ffmpeg -f oss -i / dev / dsp1 -ab 32k -ac 1 -re -f rtp rtp: //192.168.28.116: 1234 tetapi suaranya sangat buruk ... pada lag sekitar 6 detik. Adakah ide untuk memiliki solusi yang lebih baik?
hotips
1
@ si2w Saya pikir 32k untuk mp3 adalah sedikit lelucon. Entah itu, atau coba codec yang berbeda. Mungkin salah satu seri G2xx yang dirancang untuk telepon
Alex Chamberlain
3

Ini berfungsi dan mengurangi penggunaan cpu:

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

Pastikan untuk mengganti default: CARD = U0x46d0x819 dengan ID mikrofon Anda, (diperoleh dari arecord -l) atau Anda cad menentukan -i hw:0,0(atau perangkat apa pun itu).

Saya memiliki masalah yang sama - pengkodean mp3 memakan 90% + daya cpu dan tidak bisa mengikuti audionya - jadi saya mengubahnya ke pengkodean mp2. Ini menggunakan sekitar 15-18% CPU (diukur vi top) dan streaming dengan lancar ke VLC di LAN saya. Itu akan membuat monitor bayi yang sempurna, atau apa pun. Hanya ada satu atau dua penundaan, yang merupakan buffering pada akhir VLC.

Catatan: Alamat ip adalah alamat multicast ([224-239] .xyz). Anda tidak perlu mengarahkannya ke perangkat jaringan tertentu di LAN Anda, dan router broadband Anda akan menjaga lalu lintas lokal (secara default).

tim
sumber
2

Anda dapat secara signifikan mengurangi beban CPU dengan mengurangi laju sampel audio perangkat input ( -ar 8000 sebelum -f alsa ), dan mengatur laju bit audio codec ke 128k ( -b:a 128k). Juga ironisnya mengurangi jumlah saluran ( -ac 1) tampaknya meningkatkan beban CPU jadi saya telah menemukan perintah ini berjalan di CPU yang sangat rendah:

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

Meskipun kita harus ingat bahwa itu juga tergantung pada kemampuan perangkat keras yang sedang digunakan, dan versi ffmpeg / avconv.

Pierz
sumber