【问题标题】:Streaming raw sound with FFMPEG使用 FFMPEG 流式传输原始声音
【发布时间】: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 中的哪一点?

感谢您的所有回复。

【问题讨论】:

    标签: java audio ffmpeg stream


    【解决方案1】:

    终于找到了解释。负载为 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
    

    感谢阅读我问题的人。

    【讨论】:

      猜你喜欢
      • 2011-09-16
      • 2013-01-11
      • 1970-01-01
      • 2020-06-15
      • 1970-01-01
      • 2020-01-03
      • 2020-05-29
      • 1970-01-01
      • 2021-04-12
      相关资源
      最近更新 更多