Я использую библиотеку ffmpeg для декодирования / кодирования звука в JAVA, используя объекты Process. Цель состоит в том, чтобы получить необработанные данные, декодированные с помощью ffmpeg в моем коде JAVA, а затем отправить их обратно в ffmpeg для генерации потока или создания файла.
Как JAVA звуки разрешают только звук в формате wav datas, я сделал первую попытку с этой командной строкой:
ffmpeg -i http://199.180.75.118:80 -acodec pcm_s16le -ar 44100 -ac 2 "/home/dr_click/montest.wav"
Работает. Но моя цель - получать кадры на лету, а не файл. Я думал об использовании канала, но похоже, что он будет работать только с Linux, а не с Windows (и не знаю для MacOS). Итак, я бы предпочел локально транслировать wav-файл и ловить его с помощью JAVA в AudioInputStream.
Я написал эту команду:
ffmpeg -re -i http://199.180.75.118:80 -acodec pcm_s16le -ar 44100 -ac 2 -f rtp rtp://127.0.0.1:1234
Он должен работать на стороне сервера. Но когда я ввожу следующую командную строку на стороне сервера:
ffplay rtp://127.0.0.1:1234
Это вообще не работает. Я получил эту ошибку:
- [rtp @ 0x7f29c8000b80] Невозможно получить тип полезной нагрузки RTP 97 без файла SDP, описывающего его
Если я попробую пару:
ffmpeg -i http://199.180.75.118:80 -acodec pcm_s16le -ar 44100 -ac 2 -f rtp -sdp_file /home/dr_click/audio.sdp rtp://127.0.1.1:1234
и
ffplay /home/dr_click/audio.sdp
Я получил следующую ошибку:
- [rtp @ 0x7f7d00008040] Протокол 'rtp' отсутствует в файле белого списка, crypto '! if
И если я наконец попробую:
fmpeg -protocol_whitelist file,http,rtp,tcp -i http://199.180.75.118:80 -acodec pcm_s16le -ar 44100 -ac 2 -f rtp -sdp_file /home/dr_click/audio.sdp rtp://127.0.1.1:1234
, я все равно получаю ту же ошибку.
Какой момент мне не хватает для локальной потоковой передачи некоторых необработанных данных и поймать их обратно в AudioInputStream?
Спасибо за все ваши ответы.