使用FFMPEG实现音频流传输

3

我正在使用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中捕获它们?

谢谢你所有的回复。

1个回答

3

最后,我找到了解释。使用负载为10或11的RTP流式传输采用大端字节序。因此,使用小端编解码器进行流式传输是不可能的。 正确的流式传输方式是更改编解码器,命令行应该变为:

ffmpeg -re -i /home/dr_click/live.wav -acodec pcm_s16be -ar 44100 -ac 2 -payload_type 10 -f rtp rtp://127.0.0.1:1234

感谢阅读我的问题的人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接