【问题标题】:Number of RTP packets in a single UDP datagram单个 UDP 数据报中的 RTP 数据包数
【发布时间】:2020-03-12 09:10:21
【问题描述】:

我正在致力于在嵌入式 MCU (STM32F4) 上实现 RTP,但在高效流式传输音频数据(8 kHz,u-law 编码)时遇到了问题。

对于分块音频数据(20 毫秒,160 字节),我应该:

  1. 通过单个 UDP 数据报发送单个 RTP 数据包(12 字节标头 + 160 字节音频),或
  2. 通过单个 UDP 数据报发送多个 RTP 数据包(因为我们可以在单个 UDP MTU 中容纳多个)

如果(2),那么在单个 UDP 数据报中每 160 字节的音频数据是否应该有一个 RTP 头。例如,5 个 RTP 数据包将是 800 字节的音频数据 - 我会发送:

  • RTP_Header->Audio_data(160字节)->RTP_Header->Audio_data(160字节)->RTP_Header->Audio_data(160字节)...
  • RTP_Header->Audio_data(800 字节)

使用 LinPhone 作为客户端进行测试时,我注意到多个超时数据包以及从我对着嵌入式设备说话到在 Linphone 上听到它的短暂延迟;我正在尝试追踪是否可以通过 UDP 更有效地流式传输数据来修复它。当我对着 LinPhone 讲话和从我的嵌入式设备上播放时,我没有同样的延迟,而事实证明,两者之间的延迟很难在嵌入式 MCU 上消除回声。

【问题讨论】:

  • 请澄清:实施 1 或 2 是否会出现超时数据包和音频延迟?我根本不希望实现 2 起作用。
  • 通过实施 1。语音延迟似乎通过切换到不同的网络堆栈(NetX 而不是 LwIP)来解决。仍然收到一些 Out of Time 数据包,但几乎没有。你是对的,实施 2 不起作用。

标签: c udp rtp


【解决方案1】:

鉴于 RTP 用于实时数据,并且每个 RTP 有效负载都针对特定时间,因此将多个 RTP 数据(来自不同时间)组合到同一个 UDP 数据包中是没有意义的。这意味着每个 RTP 负载都以 RTP 标头为前缀,然后立即通过 UDP 发送。

【讨论】:

    猜你喜欢
    • 2017-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多