我正在使用ffmpeg库在JAVA中解码/编码音频,并使用Process对象。目标是在我的JAVA代码中获取由ffmpeg解码的原始数据,然后将它们发送回ffmpeg以生成流或创建文件。
由于JAVA声音只支持wav音频数据,因此我首先尝试了以下命令行:
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] 没有SDP文件描述,无法接收RTP负载类型97
如果我尝试这个配对:
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
and
ffplay /home/dr_click/audio.sdp
我收到了以下错误信息:
- [rtp @ 0x7f7d00008040] 协议“rtp”不在白名单“file,crypto”上!
如果我最终尝试:
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中捕获它们?
谢谢你所有的回复。