首页 > 解决方案 > 使用 FFMPEG 将 Socket 上的 RTP 音频数据重新采样为 PCM 数据

问题描述

我想接收一个 RTP 流并通过 TCP / UDP 套接字发送接收到的原始数据。为此,我正在尝试以下命令。

  1. 我正在使用以下命令发送 RTP 流。

    ffmpeg -re -i hello.wav -ar 8000 -f mulaw -f rtp rtp://127.0.0.1:1234

  2. 接收方通过 TCP/UDP 套接字重新传输流。

    ffmpeg -i rtp://127.0.0.1:1234 -f mulaw tcp://127.0.0.1:5555 -hide_banner

  3. 一个 Player 播放这个 Socket 流来验证。

    ffplay tcp://127.0.0.1:5555?listen

我的第二个命令显示它接收数据并通过 5555 端口将数据传输到 tcp。

Input #0, rtp, from 'rtp://127.0.0.1:1234':
  Duration: N/A, start: 0.000000, bitrate: 64 kb/s
    Stream #0:0: Audio: pcm_mulaw, 8000 Hz, mono, s16, 64 kb/s
Stream mapping:
  Stream #0:0 -> #0:0 (pcm_mulaw (native) -> pcm_mulaw (native))
Press [q] to stop, [?] for help
Output #0, mulaw, to 'tcp://127.0.0.1:5555':
  Metadata:
    encoder         : Lavf58.29.100
    Stream #0:0: Audio: pcm_mulaw, 8000 Hz, mono, s16, 64 kb/s
    Metadata:
      encoder         : Lavc58.54.100 pcm_mulaw

但是第三个命令没有收到任何内容,即使我尝试在命令三中使用 FFMPEG 将响应转储到文件中,但结果相同。

我在做什么错,请使用 FFMPEG 建议正确的命令。

标签: ffmpegstreamingrtp

解决方案


以下三个命令对我有用。

ffmpeg -re -i music.wav -ar 8000 -f mulaw -f rtp rtp://127.0.0.1:1236
ffmpeg -i rtp://127.0.0.1:1236 -f wav tcp://127.0.0.1:1256
ffplay tcp://127.0.0.1:1256?listen -ar 8000

我能够将文件作为 RTP 发送,将其转换为原始 wav 并通过套接字发送,然后从该套接字播放。


推荐阅读