【问题标题】:How play m4a/aac audio file if piece is missing?如果缺少片段,如何播放 m4a/aac 音频文件?
【发布时间】:2017-11-22 16:42:44
【问题描述】:

我们有一个 m4a 音频文件,一个 AAC 编码音频的容器(容器流是 mpeg-4,音频流是 AAC)。

我们在 2 个系统之间分段传输此文件(只是在我们的大小限制下随机破坏并传输这些字节)。

如果一个片段永远不会被发送,那么我如何重新构建这些片段以便至少其中一些可以播放?

到目前为止,我发现如果我分解文件并发送它,如果我拥有所有片段(当然),我可以重新构建它,但如果我留下一个片段,没有音频工具可以识别它或可以玩。

这样做的正确方法是什么?如果我需要所有部分,m4a 如何成为可流式传输的格式?

编辑:澄清我们正在有限的物联网设备上录制音频,并将录音发送到云端供以后播放。我们的最大上传大小为 128kb。我们可以简单地将原始音频保存到许多小的 m4a 文件中,然后上传这些文件,但是每个文件中的所有元数据是否都存在一些浪费?就像我们想要 30 秒的音频,但将其保存到 10 个 3 秒的 m4a 文件中,而不是我们拆分的一个 30 秒的 m4a 文件?

【问题讨论】:

  • 您使用的是 UDP 吗?如果你使用 TCP,为什么会有丢失的部分?
  • 实际使用mqtt,但这不相关。 Internet 可能会出现故障,并且重试策略可能会失败。可以移动的 LTE 连接设备等。无论如何,可能会丢失一块,或者至少我想说明这一点。
  • 我也面临同样的问题。有什么线索吗?

标签: audio audio-streaming aac mpeg-4


【解决方案1】:

我会从 MPEG-4 (m4a) 容器中提取 AAC 流,并将 AAC 放入 ADTS(音频数据传输流)中。 ADTS 由小帧组成,每个帧都有一个标头,后跟 AAC 音频数据(类似于 MP3 流)。 ADTS 是自同步的,专为丢包而设计 - 例如用于空中传输。

【讨论】:

  • 好的,不确定我们是否可以在客户端执行此操作。我们有限制。但我可以调查。那么我最初关于用缺失的部分重构 m4a 的问题的答案是:“那是不可能的,使用不同的编码/容器格式或将每个块保存为一个完整的 m4a 文件”?
  • 将您的 AAC/M4A 转换为 ADTS - 您无需重新编码。
  • @Fraggle 你不做这个客户端,你做这个服务器端。没有 ADTS 之类的东西,你不能随意重组流。
  • 从 mp4/m4a 中丢失随机字节是很棘手的。您的文件可以是 (示例表后跟示例)或 (示例后跟示例表)。如果您从示例表中丢失任何字节 - 重建非常困难并且没有冗余。丢失已知数量的样本字节可能是可恢复的。我会尝试插入零。如果您的文件是 您可以播放截断的文件 - 大多数玩家都会这样做。
猜你喜欢
  • 2013-12-03
  • 1970-01-01
  • 2013-08-09
  • 1970-01-01
  • 1970-01-01
  • 2019-12-21
  • 2015-12-27
  • 2014-12-15
  • 1970-01-01
相关资源
最近更新 更多