【发布时间】:2020-10-06 08:56:39
【问题描述】:
我正在使用 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
和
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 中的哪一点?
感谢您的所有回复。
【问题讨论】: