Живий аудіопотік за допомогою FFMPEG


14

Я намагаюся передавати аудіо в реальному часі за допомогою ffmpegта зовнішнього мікрофона USB. Я дотримувався цього майже підручника

Мені довелося адаптувати кілька кроків, але, нарешті, я досяг цього потоку свого ноутбука за допомогою цієї команди:

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

Процесор майже 100%, у мене поганий звук протягом двох секунд і після нічого ... Я бачу в Wireshark, що плата постійно надсилає кадри.

Хтось має ідеї знизити використання процесора?


Можливо, ви захочете розібратися в розгоні та іншому розділенні пам'яті. Якщо у вас є вибір кодека, ви, можливо, зможете досягти певного поліпшення шляхом перемикання. Ви також можете вивчити стиснення потоку - хоча це може бути і нульовим коефіцієнтом посилення - все, що ви отримаєте за час передачі, може бути втрачено при стисненні.
Стів Робіллард

Ви спробували спочатку записатись у локальний файл? Я б спробував перейти крок за кроком: 1) запис у реальному часі до хвильового файлу, 2) запис у реальному часі до mp3-файлу 3) потокове передавання матеріалів по мережі
pixelistik

не зараз. здається, складним є робити всі кроки вручну замість повного автоматичного ffmpeg ;-)
hotips

Що ти записуєш?
Алекс Чемберлен

1
Я намагаюсь зробити ефірний
мобільний телефон

Відповіді:


7

Щоб відповісти на ваше конкретне запитання, ви можете зменшити процесор, проклавши arecord у 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

Вам потрібно буде замінити plughw: 1,0 на вашу конкретну звукову карту. Для отримання інформації див. Arecord -l. У моєму Rasp Pi він перейшов від ~ 95% CPU до ~ 35%.


6

ALSA Input

Однією з альтернатив є поїздка через ALSA. Аналогічна команда вище

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

Я не впевнений, як це вплине на використання процесора.


Я спробував: ffmpeg -ac 1 -f alsa -i hw: 1,0 -acodec libmp3lame -ab 32k -ac 1 -re -f rtp rtp: //192.168.1.116: 1234 Але ffmpeg виходить з ладу через кілька секунд: [alsa @ 0x7a1510] Буфер ALSA xrun. Будь-які інші ідеї?
hotips

Я перевірив ffmpeg -f oss -i / dev / dsp1 -ab 32k -ac 1 -re -f rtp rtp: //192.168.28.116: 1234, але звук дуже поганий ... на відставання близько 6 секунд. Будь-яка ідея мати краще рішення?
hotips

1
@ si2w Я думаю, що 32k для mp3 - це трохи жарт. Або до цього, або спробуйте інший кодек. Можливо, одна з серій G2xx, призначена для телефонів
Алекс Чемберлен

3

Це працює і зменшує використання процесора:

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

Не забудьте замінити за замовчуванням: CARD = U0x46d0x819 на свій ідентифікатор мікрофона (отриманий з arecord -l) або ви вказали cad -i hw:0,0(або залежно від того, який це пристрій).

У мене була подібна проблема - кодування mp3 займало 90% + процесорної потужності і просто не могло йти в ногу зі звуком - тому я змінив його на кодування mp2. Для цього було використано близько 15-18% процесора (вимірюється vi top) і плавно передається VLC в моїй локальній мережі. Це зробило б ідеальний монітор для дитини, чи що завгодно. Існує лише секунда або близько того затримки, яка є буферизацією на кінці VLC.

Примітка: ip-адреса - це адреса багатоадресної передачі ([224-239] .xyz). Вам не потрібно орієнтуватися на певний мережевий пристрій вашої локальної мережі, і ваш широкосмуговий маршрутизатор буде зберігати трафік локальним (за замовчуванням).


2

Ви можете значно знизити завантаження процесора, зменшивши швидкість вибірки аудіо вхідного пристрою ( -ar 8000 раніше -f alsa ) і встановивши швидкість передачі біта кодека до 128 к ( -b:a 128k). Також іронічно зменшення кількості каналів ( -ac 1), здавалося, збільшує завантаження процесора, тому я виявив, що ця команда працює на досить низькому процесорі:

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

Хоча потрібно пам’ятати, що це також залежить від можливостей обладнання для захоплення, яке намагається використовувати, та версій ffmpeg / avconv.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.