Основываясь на ответе @ Allan , я пытаюсь перенаправить вывод ffmpeg на сервер.
$ ffmpeg -f avfoundation -i ":1" -t 10 - | ssh user@host .... -
Но я получаю следующее сообщение об ошибке:
"Должен быть указан хотя бы один выходной файл"
Я также пытался использовать ffserver вместо SSH, но мне не повезло.
Можно ли передавать аудио таким образом?
Есть два решения, которые я могу визуализировать для этого сценария:
Это, пожалуй, самый простой способ. Дайте потоку закончить запись, а затем скопируйте его в заданное место в сети. Этот скрипт должен соответствовать всем требованиям:
#!/bin/bash
#
ffmpeg -f avfoundation -i ":1" -t 10 audiocapture.mp3
scp audiocapture.mp3 user@host:/foo/bar/audiocapture.mp3
exit 0
Скрипт не проверяет никаких ошибок, но записывает с микрофона, а когда закончит, скопирует его через SCP (защищенное копирование) на удаленный компьютер. Чтобы это работало, вам нужно настроить ключи SSH, чтобы облегчить неинтерактивный вход в систему .
Другой метод заключается в передаче звука через TCP через соединение «точка-точка». Используя тот же ввод из предыдущего ответа, мы просто меняем вывод на сетевой поток:
$ ffmpeg -f avfoundation -i ":1" -t 10 -f mpegts "tcp://remote_host_or_IP_:port"
Где....
-f
- транспортный формат; в данном случае mpegts (транспортный поток MPEG)tcp://remote_host_or_IP_:port
— это значение URI имени хоста/IP-адреса удаленного компьютера и номера порта, который он будет прослушивать.Использование ffplay
удаленного компьютера может быть настроено на получение потока (для этой части я использовал Windows 10, но будет работать и в macOS/Windows/BSD/Linux)
Введите команду
ffplay -i tcp://local_host_or_IP_addr:port?listen -hide_banner
Где....
-i
определяет входной потокlocal_host_or_IP_addr:port
— это IP-адрес или имя хоста и порт TCP прослушивающего компьютера (а не компьютера, с которого выполняется потоковая передача).?listen
требуется перевести его в «режим прослушивания», иначе время ожидания истечет, если потока нет.Ниже приведен пример, выполненный в Windows 10 и получающий поток с микрофона хоста macOS. IP-адрес компьютера с Windows 10 — 10.0.0.123, и я вещаю через порт 1234.
C:\Users\allan\Desktop\ffmpeg>ffplay -i tcp://10.0.0.123:1234?listen -hide_banner
nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Как только он начнет принимать трансляцию, указанные выше значения изменятся и откроется окно «визуализации» плеера.
Input #0, mpegts, from 'tcp://10.0.0.123:1234?listen':B f=0/0
384 kb/s nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Program 1 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Metadata: 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Service01 nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0 0B f=0/0
FFmpeg nan : 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0 sq= 0B f=0/0
Stream #0:0[0x100]: Audio: mp2 ([3][0][0][0] / 0x0003), 44100 Hz, stereo, fltp, 384 kb/s
11.35 M-A: 0.000 fd= 0 aq= 0KB vq= 0KB sq= 0B f=0/0
Он будет продолжать «слушать», пока процесс не будет убит.
без холма