【问题标题】:Need to play a mp3 audio over the internet without latency in iOS (Swift)需要在 iOS (Swift) 中无延迟地通过互联网播放 mp3 音频
【发布时间】:2020-05-27 05:20:27
【问题描述】:

我们正在尝试使用 AVPlayer 实现低延迟音频流(仅存在编码的音频数据,没有视频数据)。我们测试了 HTTP 和 HLS 等音频流协议,并观察到至少 3 秒的播放延迟。 AVPlayer 在开始播放之前是否需要设备上至少 3 秒的输入缓冲区?

延迟减少是否与音频播放质量相关?

我们可以减少这种延迟吗?如果有,有什么建议或推荐的做法吗?

【问题讨论】:

    标签: avfoundation avplayer core-audio hlsl avplayerlayer


    【解决方案1】:

    使用音频单元可以最大限度地减少延迟,因为音频单元可以请求配置非常短的音频缓冲区,通常为 20 毫秒到 5 毫秒,在某些 Apple 设备上甚至更短。具有 MTU 大小数据包的 UDP 可用于通过网络传输数据,其中您的网络缓冲和流量干扰可能是增加延迟的主要因素。您可能必须添加一些延迟(循环环形缓冲区填充级别)以解决更糟糕的情况下的网络定时抖动。然后,对于 mp3 压缩音频,添加最小 mp3 块大小以及您选择的 mp3 解码器需要多长时间。

    其他 API 和协议可能会增加大量开销和缓冲延迟。

    【讨论】:

    • 感谢您的回复,我有以下疑问。 HLS 的工作原理是“HLS 在内存中至少保留三个段,然后开始流式传输”。如果是这种情况,如果我的服务器将制作 1 秒的片段,那么 HLS 将占用 3 秒的缓冲区,然后开始流式传输。我们也可以解决这个缓冲区吗?如果是,您是否有任何示例 POC 可供参考?
    • 关于音频单元:“它连接到输入和输出音频硬件,让您可以低延迟访问各个传入和传出的音频样本值。”从苹果开发者文档复制的行:developer.apple.com/library/archive/documentation/MusicAudio/…这是否意味着一旦应用程序从服务器接收到流,处理和播放所需的时间可以减少?
    • 你谈到的解决方案甚至可以使用 HLS 流,我们可以将延迟减少到 5 毫秒吗?
    【解决方案2】:

    如果缓冲区(又名 loadedTimeRanges)足以满足您的延迟条件,您可以手动观察 playerItem.loadedTimeRanges 播放暂停 AVPlayer

    【讨论】:

      猜你喜欢
      • 2016-04-13
      • 1970-01-01
      • 2020-04-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-04-06
      相关资源
      最近更新 更多